連載
» 2013年06月25日 18時00分 公開

ITエンジニアのためのデータサイエンティスト養成講座(3):データを取り込む・格納するための方法を理解する (4/4)

[中林紀彦,日本アイ・ビー・エム]
前のページへ 1|2|3|4       

Excel形式のデータを読み込む方法

 Excel形式でデータが提供されるケースも少なくありません。次は総務省が公開している「インターネット普及率の推移」を読み込んでみましょう。ExcelFileクラスを使います。

 このクラスを使うには「xlrdモジュール」が必要ですので、あらかじめダウンロードしてインストールしておきます。ダウンロードしたファイルを展開し、展開してできたディレクトリでコマンドプロンプトから「python setup.py install」コマンドを実行するとインストールできます。

 実際にExcelファイルを読み込むには、ExcelFile関数を使います。この関数は、read_csv関数と違い、HTTPでインターネット上のデータを直接取得することができません。そこで、「urllib2」ライブラリを使います。

 具体的な処理手順は以下の通りです。

In [1]: import pandas as pd
In [2]: import urllib2
In [3]: link = 'http://www.soumu.go.jp/johotsusintokei/field/data/gt010102.xls'
In [4]: socket = urllib2.urlopen(link)
In [5]: xls = pd.ExcelFile(socket)
In [6]: df = xls.parse(xls.sheet_names[0], header=2, index_col=0, skip_footer=9)
In [7]: df.T
Out[7]:
          世帯    個人 企業(従業者100人以上) 事業所(従業者5人以上)
平成9年末    6.4   9.2          68.2         12.3
平成10年末    11  13.4          63.8         19.2
平成11年末  19.1  21.4          78.3         31.8
平成12年末    34  37.1          89.3         44.8
平成13年末  60.5  46.3          94.5           68
平成14年末  81.4  57.8          96.1         79.1
平成15年末  88.1  64.3          97.5         82.6
平成16年末  86.8    66          98.1         81.8
平成17年末    87  70.8          97.6         85.7
平成18年末  79.3  72.6          98.1         85.6
平成19年末  91.3    73          98.7            -
平成20年末  91.1  75.3            99            -
平成21年末  92.7    78          99.5            -
平成22年末  93.8  78.2          98.8            -
平成23年末    86  79.1          98.8            -

 xls.sheet_names[0]で1枚目のシートを指定し、2行目をヘッダーとし(header=2)、最後の9行は注釈なのでスキップします(skip_footer=9)。

RDBでデータを読み込む・書き込む方法

 一方、リレーショナルデータベースからデータを取り込んだり、分析結果を格納したりする場合にもpandasに付属する「pandas.io.sql」モジュールを使ってDataFrameのデータをまるごと入出力できます。このモジュールはPython DB-APIに準拠していて、MySQLやPostgreSQL、SQlite、Oracle、IBM DB2など、さまざまなデータベースに対応しています。今回はPythonに標準で付属しているSQliteを使います。具体的な処理手順は以下の通りです。

In [1]: import pandas as pd
In [2]: import sqlite3
In [3]: from pandas.io import sql
In [4]: 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 [5]: cnx = sqlite3.connect(':memory:')
In [6]: sql.write_frame(df, name='csv_table', con=cnx)
In [7]: df2 = sql.read_frame('select actual from csv_table', cnx)
In [8]: df2
Out[8]:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 3696 entries, 0 to 3695
Data columns (total 1 columns):
actual    3696  non-null values
dtypes: int64(1)

 まずは必要なライブラリをインポートし(In [1]、In [2]、In [3])、電力の使用状況データを取り込んだ後(In [4])、csv_tableという名前のテーブルにデータを格納します(In [5]、In [6])。格納したデータは、SQL文を使って取り出せます(In [7])。

 このほかにもXML/XHTML形式やJSON形式のデータなどを扱うケースもありますので、これらのフォーマットについては、次回説明するデータ変換の中で詳しく説明します。

今回のまとめ

 第3回では「データの収集と読み込み」をテーマに、どのようなデータを収集すべきかを解説しました。さらに、IPythonとpandasについて説明しながら、具体的なデータの読み込みや書き出しの方法を紹介しました。インターネット上にはいろいろなデータがさまざまな形式で公開されていますが、今回説明した方法を応用すれば多様なデータを読み込めます。ただし気を付けなければいけないのは、データがあるから分析するのではなく、あくまでも目的のためのデータである、ということです。

 次回は、「データを分析できる状態にする」というテーマで、Webサイトのログデータのように、構造化されていないデータを構造化する方法などについて、具体的な手順も含めて説明します。

本連載の流れ(予定)

【第1回】ITエンジニアがデータサイエンティストを目指すには

【第2回】分析環境の準備(Pythonライブラリなどの準備)

【第3回】データの取り込みや書き出し

【第4回】データを分析できる状態にする(データクレンジングの手法)

【第5回】データ分析の方法についての検討(視覚化と分析手法の検討)

【第6回】回帰分析

【第7回】クラスタリング

【第8回】時系列分析

【第9回】アソシエーション分析

【第10回】分析結果のプレゼンテーション(結果を表現する手法)

【第11回】ビッグデータ時代の“データサイエンティスト”(最終回)


前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。