AI&数理最適化技術を用いたサプライチェーン最適化 - ログ・オプト -
研究者および技術者のプロフェッショナル集団です.
  • Home
  • Products
    • SCMOPT デモ&トライアル
    • サプライチェーン最適化システムSCMOPT
      • サプライ・チェイン基本分析
      • サプライ・チェインリスク分析
      • 需要予測
      • 需要予測+動的発注方策
      • 安全在庫最適化
      • 配送最適化
      • 幹線輸送ネットワーク最適化
      • ロジスティクス・ネットワーク最適化
      • 生産ロット最適化
      • 生産スケジューリング最適化システム
      • 人員配置(シフト)最適化
      • ダイナミックプライシング/収益最適化
    • 最適化ソルバー
      • 制約最適化ソルバーSCOP
      • スケジューリング最適化ソルバーOptSeq
      • 数理最適化ソルバーGurobi Optimizer
      • 数理最適化ソルバーCOPT
      • 配送最適化ソルバーMETRO
      • 集合被覆最適化ソルバーOptCover
  • Solutions
    • 分野別ソリューション
      • サプライ・チェイン
      • マーケティング
      • その他分野
    • コンサルティング
  • News/Blog
  • Resource
  • About us
    • 会社概要
    • プライバシーポリシー
    • 情報セキュリティポリシー
    • SCMOPTセキュリティー
    • 商品・サービス利用規約
  • Contact Us
    • お問い合わせ
    • 無料書籍申し込みフォーム
研究者および技術者のプロフェッショナル集団です
   

CHINESE ENGLISH

  • ENGLISH
  • CHINESE
pandas-logo
2019-03-04

時系列データのpandasでの処理方法

AI, Python, 最適化

pandasやscikit-learnのビデオ講義でこんなものがある。

Python Programming Tutorials
Python Programming tutorials from beginner to advanced on a mpythonprogramming.net

Udacityにパクられて怒っていたビデオがあって笑ったが、Jupyterでうちながらの解説はフランクで良い。(scikit-learnの解説ビデオをみていたら、R^2は0以上だと言っていた。プログラミングは上手そうだが、理論はわかっていないようなので、注意を要する。有償で教えていている日本の深層学習や統計のビデオも同様だが。。。)

ただし余り綺麗なコードではない。時系列データの解析はよくやるので、自分はこう書くよというのをOR学会誌で紹介したことがあるので、それにならって、pandasらしく高速に時系列データを可視化する方法を紹介する。(より詳しくし知りたい人はORのバックナンバーを探してみてください。)

例に使うのはアボガドの例題でKaggleから落としてくる必要がある。

Avocado Prices
Historical data on avocado prices and sales volume in multiplwww.kaggle.com

まずはデータを読み込み,Date列を日付型に変換し、インデックスにする。

import pandas as pd 
df = pd.read_csv("avocado.csv")  
df["Date"] = pd.to_datetime(df["Date"])
df.set_index("Date", inplace=True)

ここまでは同じだが、私の場合にはpivot_tableを使う。行を日付、分析したいregionを列にして、値は平均価格に設定する。生成したデータフレームを1日単位でリサンプルして合計し、NaNを0で置換すれば出来上がりだ。

pt = pd.pivot_table(df, index="Date", columns=["region"], values ="AveragePrice")
resamp = pt.resample("1d").sum().fillna(0)

このままプロットしても良いが、移動平均をとってから描画するとこんな感じになる。(最初の12日がNaNになるので、それをdropnaで消す。)

rolling = resamp.rolling(12).mean().dropna()
%matplotlib inline
rolling.plot.line(legend=False)

実際問題では、解析したい軸が複数ある場合があるが、それらは全て列に入れる。例えば、regionとtypeの2つを列にするとmulti-indexの列になる。

pt = pd.pivot_table(df, index="Date", columns=["region","type"], values ="AveragePrice")

これを切り出して使うのは、xsを使う。以下では、regiionが”Albany”のものを切り出してから、1週間でリサンプリングしてプロットしている。冒頭にあげたのがこの図だ。

pt.xs("Albany", level="region", axis=1).sum(axis=1)
TF-Agentsによる強化学習

Related Posts

News, Python, その他, 実務, 最適化

「書籍」Pythonによる実務で役立つ最適化問題100+

News, Python, その他

「書籍」Python言語によるプログラミングイントロダクション 第3版

AI, SCMOPT, サプライ・チェイン, 実務, 最適化

サプライチェーンリスク解析の最先端

カテゴリー

  • AI
  • News
  • Python
  • SCMOPT
  • サプライ・チェイン
  • その他
  • 可視化
  • 実務
  • 最適化
AI&数理最適化技術を用いたサプライチェーン最適化 - ログ・オプト -
Copyright © 2019 Log Opt Co., Ltd.