今回はPythonのライブラリであるpandasの使い方をご紹介します。
pandasは行列演算が得意なライブラリでデータサイエンティストの方々から熱い支持を受けている優れものです。
今後、Pythonを使ったデータ分析などを行う際には大活躍しますので、基本的な使い方だけでもここで覚えておきましょう。
コンテンツ
pandasの使い方
では実際にpandasを使いながら学習していきましょう。
pandasは2種類のデータ形式を持っています。一次元データのSeriesと、二次元データのDataFrameです。pandasはデータをまるでエクセルの様に扱う事ができると有名なライブラリなので、大抵の場合はDataFrameを使用するのではないでしょうか。
ライブラリのインポート
最初にpandasのインポート方法だけ説明します。といっても非常に簡単で、以下の様に書けばOKです。
■Pythonコード
1 |
import pandas as pd |
※as pd というのはメソッドを使用する時の別名です。pandasでもそんなに長い名前じゃないので良いのですが、みなさんpdと書くのが風習になっています。当然 as pdの文言が無くとも使用可能です
pandasの基本的な使い方
では簡単ではありますがサンプルと共にpandasの使い方を見ていきましょう。
Seriesの使い方
まずは基本操作としてSeriesを使ってみましょう。以下のコードを見てみて下さい
■Pythonコード
1 2 3 4 |
import pandas as pd s = pd.Series([1, 2, 3, 4, 5]) print(s) |
■実行結果
1 2 3 4 5 6 |
0 1 1 2 2 3 3 4 4 5 dtype: int64 |
左端はindexを表わしていて、右がデータになります。データの扱いは配列・リストと変わりません。
DataFrameの使い方
■Pythonコード
1 2 3 4 5 6 7 8 |
import pandas as pd df = pd.DataFrame({ 'J_NAME' : ["たろう", "じろう", "ぶん太", "ねこ太","いぬ太"], 'Today' : pd.Timestamp('20180101'), 'Num' : pd.Series([1, 2, 3, 4, 5]), 'E_Name' : pd.Series(["Taro", "Jiro", "Bunta", "Nekota", "Inuta"]), 'Other' : '固定値' }) print(df) |
■実行結果
1 2 3 4 5 6 |
E_Name J_NAME Num Other Today 0 Taro たろう 1 固定値 2018-01-01 1 Jiro じろう 2 固定値 2018-01-01 2 Bunta ぶん太 3 固定値 2018-01-01 3 Nekota ねこ太 4 固定値 2018-01-01 4 Inuta いぬ太 5 固定値 2018-01-01 |
DataFrameで作成した対象カラムのデータを取得
上記のDataFrameで使用したコードの一部(最後のprint)を以下の様に変更しましょう。
■Pythonコード(print文のみ)
1 |
print(df.J_NAME) |
■実行結果
1 2 3 4 5 6 |
0 たろう 1 じろう 2 ぶん太 3 ねこ太 4 いぬ太 Name: J_NAME, dtype: object |
カラムの情報だけを抜き出す事ができました。
データの内容を参照する
さて、もう少しpandasで遊んでみましょう。DataFrameの中から条件にマッチするものだけを表示してみます。
SQLなどの使用に慣れている方は、とりあえずデータを覗くために「先頭の10行だけ表示する」といったスクリプトを書く事があるのではないでしょうか。
そういったスクリプトと同じ事をやってみます。
まずは元になるデータを作成します。
■Pythonコード
1 2 3 4 5 |
import pandas as pd import random df = pd.DataFrame({ 'NUM' : pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),'Value' : pd.Series([100, 80, 30, 50, 55, 60, 20, 80, 10, 100]) }) print(df) |
■実行結果
1 2 3 4 5 6 7 8 9 10 11 |
NUM Value 0 1 100 1 2 80 2 3 30 3 4 50 4 5 55 5 6 60 6 7 20 7 8 80 8 9 10 9 10 100 |
ものすごく単純なデータです。
DataFrameの先頭○○行を表示する
基本構文:df.head()
表示対象を「df」ではなく、「df.head()」としてみましょう。※引数として行数を指定できます。デフォルトは5行です。
■Pythonコード(print文のみ)
1 |
print(df.head()) |
■実行結果
1 2 3 4 5 6 |
NUM Value 0 1 100 1 2 80 2 3 30 3 4 50 4 5 55 |
先頭5行だけ表示されていますね。
DataFrameの最後の○○行を表示する
基本構文:df.tail()
次は逆に最後の2行を表示しましょう。こちらは引数を実際に指定してみます。
■Pythonコード(print文のみ)
1 |
print(df.tail(2)) |
■実行結果
1 2 3 |
NUM Value 8 9 10 9 10 100 |
こちらも簡単ですね。
仮想通貨のOHLCデータをDataFrameに入れてみる
このサイトではシステムトレードや仮想通貨BOTに関する情報も載せています。ここでテクニカルチャートで使用する価格データ(OHLC)もDataFrameに入れてみましょう。
処理の簡単な流れは以下の通りです。
1)OHLCデータ(日足)をAPIで取得する
2)for文で一度ワークの配列に入れる。
3)その配列をDataFrameに設定する。
4)DataFrameの先頭10行を表示する。
では実際にプログラムを見てみましょう。
■Pythonコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import requests import pandas as pd from datetime import datetime def get_data(min): response = requests.get("https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc",params = {"periods":min,"after":1519862400}) data = response.json() return data r_min = 86400 out_data = get_data(r_min) Time_Data, Open_price, High_price, Low_price, Close_price = [],[],[],[],[] for ohlc in out_data["result"][str(r_min)]: Time_Data.append(datetime.fromtimestamp(ohlc[0])) Open_price.append(ohlc[1]) High_price.append(ohlc[2]) Low_price.append(ohlc[3]) Close_price.append(ohlc[4]) df = pd.DataFrame({'0_YYYY-MM-DD':Time_Data, '1_open':Open_price, '2_high':High_price, '3_low':Low_price, '4_close':Close_price}) print(df.head(10)) |
■実行結果
1 2 3 4 5 6 7 8 9 10 11 |
0_YYYY-MM-DD 1_open 2_high 3_low 4_close 0 2018-03-01 1140860 1188000 1098770 1104460 1 2018-03-02 1100740 1174593 1094020 1165220 2 2018-03-03 1165070 1186250 1144000 1160600 3 2018-03-04 1171490 1215727 1170790 1212529 4 2018-03-05 1210001 1213180 1170000 1208010 5 2018-03-06 1208010 1246120 1202316 1229800 6 2018-03-07 1229800 1229800 1116100 1137000 7 2018-03-08 1137000 1158090 1012700 1049900 8 2018-03-09 1056310 1076451 985000 999670 9 2018-03-10 999928 1010097 893903 996940 |
いかがでしょうか。OHLCデータについての知識がないと何のデータかよく分からないかもしれませんが、このデータがあればローソク足を描画する事も簡単にできてしまいます。
エクセルやSQLの操作にも似ているので、Pythonで同じ様な処理をしようと思ったら簡単に実現できます。
pandasのDataFrameは非常に便利なのです。
まとめ
さて、非常に簡単ではありますが、pandasの基本操作をやってみました。実際に実行してみるとエクセルやSQLなどと同じ様に扱えるイメージがついたのではないでしょうか。
pandasの機能は非常に多いのでここで多くは語りませんが、今後使う機会がたくさんあると思うので、なんとなくの動作だけでもイメージしておいて下さいね。