2012-03-04 4 views
6

これは私の初めてのパンダの試みです。私は合理的なユースケースがあると思うが、私はつまずく。タブ区切りのファイルをPandas Dataframeに読み込んで、それをSymbolでグループ化し、TimeStamp列でインデックスされたx.axisでプロットしたいと思います。パンダDataFrame - 目的のインデックスに重複する値があります

Symbol,Price,M1,M2,Volume,TimeStamp 
TBET,2.19,3,8.05,1124179,9:59:14 AM 
FUEL,3.949,9,1.15,109674,9:59:11 AM 
SUNH,4.37,6,0.09,24394,9:59:09 AM 
FUEL,3.9099,8,1.11,105265,9:59:09 AM 
TBET,2.18,2,8.03,1121629,9:59:05 AM 
ORBC,3.4,2,0.22,10509,9:59:02 AM 
FUEL,3.8599,7,1.07,102116,9:58:47 AM 
FUEL,3.8544,6,1.05,100116,9:58:40 AM 
GBR,3.83,4,0.46,64251,9:58:24 AM 
GBR,3.8,3,0.45,63211,9:58:20 AM 
XRA,3.6167,3,0.12,42310,9:58:08 AM 
GBR,3.75,2,0.34,47521,9:57:52 AM 
MPET,1.42,3,0.26,44600,9:57:52 AM 

タイムスタンプ列については、次の2つの点に注意してください。

  1. それが重複する値を有し、
  2. 間隔が不規則です。

私は

from pandas import * 
import pylab as plt 

df = read_csv('data.txt',index_col=5) 
df.sort(ascending=False) 

df.plot() 
plt.show() 

...私はこのような何かができると思った。しかしread_csv方法は、「インデックスとして試み列1-Xが、重複を発見した」例外が発生します。重複する値を持つインデックス列を指定できるオプションはありますか?

私は不規則なタイムスタンプ間隔を1秒の解像度に合わせることにも興味がありますが、複数のイベントを所定の秒間プロットしたいと思いますが、ユニークなインデックスを導入して価格を調整できますか?私は私が持っている素敵なことだと思ういくつかの機能/利便性に対処するために今、いくつかの問題を作成した

答えて

4

GH-856を、GH-857GH-858

我々は現在、時系列機能の刷新に取り組んでアライメントをやっています2度目の解決まで可能です(重複はありませんので、そのためにいくつかの関数を書く必要があります)。私はまた、より良い方法で重複タイムスタンプをサポートしたい。これはマルチインデックスを作成したこと

In [29]: df.pivot('Symbol', 'TimeStamp').stack() 
Out[29]: 
        M1 M2 Price Volume 
Symbol TimeStamp        
FUEL 9:58:40 AM 6 1.05 3.8544 100116 
     9:58:47 AM 7 1.07 3.8599 102116 
     9:59:09 AM 8 1.11 3.9099 105265 
     9:59:11 AM 9 1.15 3.9490 109674 
GBR 9:57:52 AM 2 0.34 3.7500 47521 
     9:58:20 AM 3 0.45 3.8000 63211 
     9:58:24 AM 4 0.46 3.8300 64251 
MPET 9:57:52 AM 3 0.26 1.4200 44600 
ORBC 9:59:02 AM 2 0.22 3.4000 10509 
SUNH 9:59:09 AM 6 0.09 4.3700 24394 
TBET 9:59:05 AM 2 8.03 2.1800 1121629 
     9:59:14 AM 3 8.05 2.1900 1124179 
XRA 9:58:08 AM 3 0.12 3.6167 42310 

注:ただし、これは本当にパネルである(3D)データは、あなたが物事を変えるかもしれない一つの方法は以下の通りです。私はこれを得ている可能性が別の方法:

In [32]: df.set_index(['Symbol', 'TimeStamp']) 
Out[32]: 
        Price M1 M2 Volume 
Symbol TimeStamp        
TBET 9:59:14 AM 2.1900 3 8.05 1124179 
FUEL 9:59:11 AM 3.9490 9 1.15 109674 
SUNH 9:59:09 AM 4.3700 6 0.09 24394 
FUEL 9:59:09 AM 3.9099 8 1.11 105265 
TBET 9:59:05 AM 2.1800 2 8.03 1121629 
ORBC 9:59:02 AM 3.4000 2 0.22 10509 
FUEL 9:58:47 AM 3.8599 7 1.07 102116 
     9:58:40 AM 3.8544 6 1.05 100116 
GBR 9:58:24 AM 3.8300 4 0.46 64251 
     9:58:20 AM 3.8000 3 0.45 63211 
XRA 9:58:08 AM 3.6167 3 0.12 42310 
GBR 9:57:52 AM 3.7500 2 0.34 47521 
MPET 9:57:52 AM 1.4200 3 0.26 44600 

In [33]: df.set_index(['Symbol', 'TimeStamp']).sortlevel(0) 
Out[33]: 
        Price M1 M2 Volume 
Symbol TimeStamp        
FUEL 9:58:40 AM 3.8544 6 1.05 100116 
     9:58:47 AM 3.8599 7 1.07 102116 
     9:59:09 AM 3.9099 8 1.11 105265 
     9:59:11 AM 3.9490 9 1.15 109674 
GBR 9:57:52 AM 3.7500 2 0.34 47521 
     9:58:20 AM 3.8000 3 0.45 63211 
     9:58:24 AM 3.8300 4 0.46 64251 
MPET 9:57:52 AM 1.4200 3 0.26 44600 
ORBC 9:59:02 AM 3.4000 2 0.22 10509 
SUNH 9:59:09 AM 4.3700 6 0.09 24394 
TBET 9:59:05 AM 2.1800 2 8.03 1121629 
     9:59:14 AM 2.1900 3 8.05 1124179 
XRA 9:58:08 AM 3.6167 3 0.12 42310 

あなたがそうのような真のパネル形式でこのデータを取得することができます:

In [35]: df.set_index(['TimeStamp', 'Symbol']).sortlevel(0).to_panel() 
Out[35]: 
<class 'pandas.core.panel.Panel'> 
Dimensions: 4 (items) x 11 (major) x 7 (minor) 
Items: Price to Volume 
Major axis: 9:57:52 AM to 9:59:14 AM 
Minor axis: FUEL to XRA 

In [36]: panel = df.set_index(['TimeStamp', 'Symbol']).sortlevel(0).to_panel() 

In [37]: panel['Price'] 
Out[37]: 
Symbol  FUEL GBR MPET ORBC SUNH TBET  XRA 
TimeStamp            
9:57:52 AM  NaN 3.75 1.42 NaN NaN NaN  NaN 
9:58:08 AM  NaN NaN NaN NaN NaN NaN 3.6167 
9:58:20 AM  NaN 3.80 NaN NaN NaN NaN  NaN 
9:58:24 AM  NaN 3.83 NaN NaN NaN NaN  NaN 
9:58:40 AM 3.8544 NaN NaN NaN NaN NaN  NaN 
9:58:47 AM 3.8599 NaN NaN NaN NaN NaN  NaN 
9:59:02 AM  NaN NaN NaN 3.4 NaN NaN  NaN 
9:59:05 AM  NaN NaN NaN NaN NaN 2.18  NaN 
9:59:09 AM 3.9099 NaN NaN NaN 4.37 NaN  NaN 
9:59:11 AM 3.9490 NaN NaN NaN NaN NaN  NaN 
9:59:14 AM  NaN NaN NaN NaN NaN 2.19  NaN 

あなたは、そのデータからいくつかのプロットを生成することができます。

ここで、タイムスタンプは文字列のままです - 私はそれらをPythonのdatetime.timeオブジェクトに変換できると思っています。私は生の時間対タイムスタンプ(日付+時間)のための多くのサポートを提供する多くの計画を持っていませんが、十分な人々がそれを必要とする場合、私は確信できると思います:)単一のシンボルの場合、上記のメソッドのいくつかは動作しません。しかし、私は今後のパンダのリリースでこれをより良くサポートしたいと考えています。あなたのユースケースを知っていることが私にとって有益です。メーリングリスト(pystatsmodels)への参加を考えてください。

+0

ありがとうございます。私はpystatsmodelsに参加します - もしあなたがユースケースを持つつまらないノブを探しているなら、私は肥沃な領域になる可能性があります。 – kavu

+0

生の時間で、おそらくサンプリングレートで整数だけを意味する場合、ここではupvoteです。科学記録の全世界は、その方向でTimeSeriesへの拡張のために絶望的です... – meteore

関連する問題