久しぶりのpython記事です。
pandasのデータ処理により、グラフ描画を簡単にしようという試みを続けていますが、なかなか進んでいません。今回、データ間引きが簡単にできるという記事です。
■pandas:重要な機能■
●1.ダウンサンプリングはスライスにヒントあり
●2.スライスについて
●3.スライスの仕組み
●2.スライスについて
●3.スライスの仕組み
●1.ダウンサンプリングはスライスにヒントあり
pandasで使うデータフレームですが、ダウンサンプリングいわゆるデータ間引きについて調べても時系列のインデックスに対して行うことで、単純に「5個おきにデータを減らしたい」などという内容をみつけられませんでした。
ところが、ふとしたことでスライスに関する情報を見て、目から鱗が落ちました。簡単にデータ間引きができることがわかったのです。
IPythonで確認しました。↓
スライスによるデータ間引き
In [10]: a
Out[10]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
In [11]: a[::5]
Out[11]: [0, 5, 10, 15]
たったこれだけです。たとえば、a[::i] とすればiに数値を入力すればスキップ数を変更できます。pandasの解説書にも載っていないはずです。pythonの基本的機能に存在しているのですから・・・
あらためて、pythonが素晴らしいプログラム言語であることを再認識しました。惚れ直しました。
●2.スライスについて
せっかくですので、スライスについての情報メモを示したいと思います。
スライスはリストからデータを簡単切り出すことのできる優れものです。
以下はスライスの例です。
スライスの例
まずリストを準備します。
a=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]
① すべてのデータ
In [13]: a[:]
Out[13]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
In [14]: a[0:]
Out[14]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
In [15]: a[::1]
Out[15]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
② 1以上
In [16]: a[1:]
Out[16]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
③ 2以上5未満
In [17]: a[2:5]
Out[17]: [2, 3, 4]
④ 最後から二番目以降
In [19]: a[-2:]
Out[19]: [18, 19]
⑤ 2個おき
In [21]: a[::2]
Out[21]: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
⑥ 5個おき
In [22]: a[::5]
Out[22]: [0, 5, 10, 15]
⑦ 逆から5個おき
In [23]: a[::-5]
Out[23]: [19, 14, 9, 4]
⑧ 逆順
In [24]: a[::-1]
Out[24]: [19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
⑨ 5個目から逆順
In [25]: a[5::-1]
Out[25]: [5, 4, 3, 2, 1, 0]
⑩ 逆順のちがった表現
In [26]: a[-1::-1]
Out[26]: [19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
●3.スライスの仕組み
スライスの仕組みを紐解くと、実はオブジェクトということがわかりました。
slice
クラス
クラス
a[:] → a[slice(None,None,)]
とできるのです。
つまり start,stop,skip という順番で指定することができます。
a[1::2] 1個目から2つおきということを
a[slice(1,None,2)] で置き換えられます。
In [32]: a[slice(None,None,None)]
Out[32]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
引き数をすべてNoneにするとリスト全データということになります。
最初のNoneは0
次のNoneはLen(a)
最後のNoneは1
となります。
●スライスで間引き●
いかがだったでしょうか?もちろん、そんなこと基本だろ!とおしかりを受けそうな内容かもしれませんが、私はハマってしまい、ずいぶんと時間を費やしてしまいました。
a[::5] たったこれだけでリストの5個おきに間引きできるなんて・・・
pandasのデータフレームでも簡単です。また詳しく説明する記事を書きたいと思いますが、以下にてすぐに間引きできます。
fd=fd.ix[::mabiki]
※mabikiは変数です
いかがだったでしょうか?もちろん、そんなこと基本だろ!とおしかりを受けそうな内容かもしれませんが、私はハマってしまい、ずいぶんと時間を費やしてしまいました。
a[::5] たったこれだけでリストの5個おきに間引きできるなんて・・・
pandasのデータフレームでも簡単です。また詳しく説明する記事を書きたいと思いますが、以下にてすぐに間引きできます。
fd=fd.ix[::mabiki]
※mabikiは変数です
![チェック](https://emoji.ameba.jp/img/user/cy/cyber-systems/261729.gif)
![チェック](https://emoji.ameba.jp/img/user/cy/cyber-systems/261729.gif)
![チェック](https://emoji.ameba.jp/img/user/cy/cyber-systems/261729.gif)
![チェック](https://emoji.ameba.jp/img/user/cy/cyber-systems/261729.gif)
![チェック](https://emoji.ameba.jp/img/user/cy/cyber-systems/261729.gif)
![](https://blog.with2.net/img/banner/c/banner_1/br_c_1045_1.gif)
Python ブログランキングへ
クリックしてね
新しいブログをはじめました。pythonの初級者から中級者まで、役に立つ記事を掲載していますので、ご覧ください。
特にカスタム関数(ユーザー定義関数)は、便利に使えると思います。
ぜひぜひこのリンクをクリックしてください
→
Pythonを勉強して株で儲けるブログ
特にカスタム関数(ユーザー定義関数)は、便利に使えると思います。
ぜひぜひこのリンクをクリックしてください
→
Pythonを勉強して株で儲けるブログ