ここからは、データの読み込みや書き出しのためのライブラリである「pandas(powerful Python data analysis toolkit)」を使って、実際にデータを読み込んだり書き出したりしてみましょう。
pandasはその名の通り、データ分析のためのライブラリで、特にDataFrame(データフレーム)と呼ばれる行列を扱うためのクラスライブラリが提供されています。
また、時系列(Time Series)データの取り扱いに優れた「Series」と呼ばれるクラスライブラリも提供されていて、時系列データを扱うときに課題となる時間間隔を合わせたり、足りないデータを補完するなど、便利な機能が提供されています。
さらにデータの読み書きに向けた使いやすい関数が用意されており、CSV形式やExcelデータ、リレーショナルデータベースに格納されたデータとの親和性も高くなっています。
このほかにもpandasにはさまざまな機能があり、500ページものリファレンスマニュアルが用意されていて使いこなすのが大変そうですが、チュートリアル「10 Minutes to Pandas」を一通り実行すると、どのような機能があるか概要がつかめるでしょう。
では実際にデータを読み込んでみましょう。まずは前回試した電力の使用状況データがCSV形式ですので、ここでもこのデータを使います。実際に実行するコマンドは以下の通りです。
In [1]: import pandas as pd
In [2]: df = pd.read_csv('http://www.tepco.co.jp/forecast/html/images/juyo-2013.csv', skiprows=3, names=['date', 'time', 'actual'], encoding='UTF-8')
In [3]: df.head(10)
Out[3]:
date time actual
0 2013/1/1 0:00 2873
1 2013/1/1 1:00 2716
2 2013/1/1 2:00 2592
3 2013/1/1 3:00 2482
4 2013/1/1 4:00 2412
5 2013/1/1 5:00 2405
6 2013/1/1 6:00 2499
7 2013/1/1 7:00 2646
8 2013/1/1 8:00 2778
9 2013/1/1 9:00 2773
In [4]: df.tail(10)
Out[4]:
date time actual
3686 2013/6/3 14:00 3417
3687 2013/6/3 15:00 3405
3688 2013/6/3 16:00 3415
3689 2013/6/3 17:00 3331
3690 2013/6/3 18:00 3335
3691 2013/6/3 19:00 3370
3692 2013/6/3 20:00 3227
3693 2013/6/3 21:00 3064
3694 2013/6/3 22:00 2994
3695 2013/6/3 23:00 2790
In [5]: df.to_csv("table1.csv", index=False)
In [6]: df.to_csv('table2.csv', index_label='id')
pandasライブラリをインポートし(In [1])、read_csv関数を使ってHTTP経由でCSVデータを取得します(In [2])。この電力の使用状況データでは、実際のデータは4行目から格納されているので、skiprowsオプションを指定して3行スキップし、namesオプションで列名を明示的に指定します。また文字コード(エンコーディング)はシフトJISなので、encodingオプションに「'UTF-8'」を指定します。
読み込んだデータはdfというDataFrameオブジェクトに格納され、headやtailメソッドを使って中身を確認できます(In [3]、In [4])。to_csvメソッドを使えば、CSV形式でデータをファイルに書き出せます(In [5]、In [6])。この例では2つのファイルにデータを保存していますので、違いを比べてみてください。
気象庁が提供している「過去の気象データ・ダウンロード」もCSV形式でダウンロードできるので、早速読み込んでみましょう。
data.csvというファイル名のデータを、さきほどと同様にread_csv関数を使って読み込みます。今回はデータの最初の行をヘッダとして使用するので、headerオプションで「1」を指定しています。
In [1]: import pandas as pd
In [2]: df = pd.read_csv('data.csv', skiprows=2, header=1, encoding='UTF-8')
In [3]: df.head(10)
Out[3]:
年月日 最高気温(℃) 最低気温(℃) 平均湿度(%)
0 1963/7/15 33.5 24.0 74
1 1964/7/15 32.3 21.7 71
2 1965/7/15 31.1 22.0 74
3 1966/7/15 28.3 22.3 74
4 1967/7/15 32.9 24.6 73
5 1968/7/15 24.3 21.6 76
6 1969/7/15 31.0 23.0 58
7 1970/7/15 29.9 22.4 77
8 1971/7/15 30.1 24.1 73
9 1972/7/15 24.3 19.6 90
Copyright © ITmedia, Inc. All Rights Reserved.