ここからは、データの読み込みや書き出しのためのライブラリである「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='Shift_JIS') 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オプションに「'Shift_JIS'」を指定します。
読み込んだデータは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='Shift_JIS') 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.