2012-05-05 5 views
1

私は、時間値(浮動小数点数)でインデックス付けされた一連のデータを持っており、シリーズのチャンクを取り、それらを互いに重ね合わせてプロットしたいと思います。たとえば、株価が20週間におよそ10分ごとに取られ、20行の株価をプロットして、週次パターンを見たいとしましょう。だから私のX軸は1週間で、私は20行(その週の価格に相当)があります。パンダ:毎年のデータを上にプロットする方法

更新

インデックスは等間隔の値ではなく、それが浮動小数点です。それは次のようなものです:

t = np.arange(0,12e-9,12e-9/1000.0) 
noise = np.random.randn(1000)/1e12 
cn = noise.cumsum() 
t_noise = t+cn 
y = sin(2*math.pi*36e7*t_noise) + noise 
df = DataFrame(y,index=t_noise,columns=["A"]) 
df.plot(marker='.') 
plt.axis([0,0.2e-8,0,1]) 

したがって、インデックスは一様ではありません。私は、シミュレータから電圧と時間のデータを扱っています。私は時間の窓Tを作成し、dfをT longの塊に分割し、それらを互いに重ね合わせる方法を知りたいと思います。したがって、データが20 * Tの長さであれば、私は同じプロットに20本の線を持ちます。

ご迷惑をおかけして申し訳ありません。私はそれが役に立つかもしれないと考える株式の類推を使用した。

答えて

4

をプロットすることができ、あなたのグループでき datetime.date.isocalendar()とISO週番号とISO曜日によって 要素。 ISO年を無視する以下のステートメントは、毎日の最後のサンプルを集計します。

In [95]: daily = ts.groupby(lambda x: x.isocalendar()[1:]).agg(lambda s: s[-1]) 

In [96]: daily 
Out[96]: 
key_0 
(1, 1)  63 
(1, 2)  91 
(1, 3)  73 
... 
(20, 5) 82 
(20, 6) 53 
(20, 7) 63 
Length: 140 

は、次のステップを実行するためのクリーンな方法があるかもしれないが、目標はマルチインデックスオブジェクトへのタプルの配列からインデックスを変更することです。

In [97]: daily.index = pandas.MultiIndex.from_tuples(daily.index, names=['W', 'D']) 

In [98]: daily 
Out[98]: 
W D 
1 1 63 
    2 91 
    3 73 
    4 88 
    5 84 
    6 95 
    7 72 
... 
20 1 81 
    2 53 
    3 78 
    4 64 
    5 82 
    6 53 
    7 63 
Length: 140 

最後のステップは、各曜日の列を作成し、 マルチインデックスから平日の「アンスタック」と略語で曜日番号を交換し、読みやすさを向上させることです。列は週番号と行されているので、データフレームをトランスポーズ、各週のラインプロットを作成するには

In [102]: dofw = "Mon Tue Wed Thu Fri Sat Sun".split() 

In [103]: grid = daily.unstack('D').rename(columns=lambda x: dofw[x-1]) 

In [104]: grid 
Out[104]: 
    Mon Tue Wed Thu Fri Sat Sun 
W          
1 63 91 73 88 84 95 72 
2 66 77 96 72 56 80 66 
... 
19 56 69 89 69 96 73 80 
20 81 53 78 64 82 53 63 

は(平日あるこのステップは、前に、平日の代わりに、アンスタッキング週数によって回避することができます注意してくださいステップ)、plotを呼び出します。

grid.T.plot() 
+0

あなたの投稿に感謝します。あなたは私に多くのことを教えてくれました。私のために働かなかった部分はプロットしていました。 "ValueError:文字列を浮動小数点に変換できませんでした:Fri"というエラーが表示されます。私はplt.plot(grid.T)を使う基本的なプロットを得ましたが、軸ラベルは間違っていました。私は.groupbyコマンドを理解していません。私が持っている問題は、インデックスが不均等に配置された浮動小数点で構成されているということです。データセットを含めるように質問を更新します。 – dailyglen

+0

フロートのインデックスにも同じ概念が当てはまると思います。サンプルをグループ内のピリオド・グループとタイム・ステップにグループ化する独自のメソッドを作成するだけです。希望が助ける – Garrett

+0

@crewburn私はそれを試してみましょう。私が理解できない1つのことは、インデックス番号ではなく値でインデックスをインデックスする方法です。 xとyの間のインデックス値を持つすべての行を取得したいとします。 – dailyglen

0

私はこれに答えてみましょう。基本的に私は、パッドまたは完全な平日でインデックスを再作成して、ドロップが休日に起因するデータやサスペンション

>>> coke = DataReader('KO', 'yahoo', start=datetime(2012,1,1))

>>> startd=coke.index[0]-timedelta(coke.index[0].isoweekday()-1)

>>> rng = array(DateRange(str(startd), periods=90))

>>> chunk=[]

>>> for i in range(18):

が欠落しながら、5日ごとにサンプリングします

... chunk.append(coke[i*5:(i+1)*5].dropna())

...

その後ループチャンクは、出発点としてpandas.TimeSeriesオブジェクトを仮定すると、毎週のデータ

+0

回答ありがとうございます。私はプロットを得ることができませんでした。どのようにそれらを一緒にプロットしますか?また、私のインデックスは等間隔ではなく、float型です。データセットを含めるように質問を更新します。 – dailyglen

関連する問題