機械学習させるデータをExcelでまとめる方は多いです。Pythonを利用する上で、Excelデータを取り込む方法は何種類か存在しますが、機械学習で利用する場合はPandasで取り込むと非常に便利です。
https://pandas.pydata.org/
Pandasとは
Pandasでは、ExcelのほかCSVやMySQLなどのデータベースなど、いろいろなフォーマットのデータを取り込むことができます。また取り込んだデータを操作することもできます。Pandasに取り込んだデータは、解析するためNumPyへのデータ変換の機能も用意されています。またPandasのコアはNumPyと同様にC言語で実装されているため、処理速度は高速です。ここではExcelデータをPandasに取り込む方法、NumPyへのデータ変換方法を紹介します。
Pandasのインストール
Pandasはpipなどを利用してインストールすることができます。またExcelファイルを扱う場合は、内部でxlrdも利用していますので、一緒にインストールしましょう。下記はpip3を利用していますが、環境に合せてインストールを行って下さい。
pip3 install pandas, xlrd
ExcelデータをPandasに取り込む
今回サンプルとして利用するデータを用意します。どのようなデータでも結構ですが、文部科学省が公開している日本食品標準成分表です。下記はwgetによりデータをダウンロードしている例です。
wget http://www.mext.go.jp/component/a_menu/science/detail/__icsFiles/afieldfile/2016/01/15/1365344_1-0207r.xlsx
それではPandasを利用してみましょう。といっても取り込むだけですと非常に簡単です。excel.pyファイルを用意し、下記のコードを入力して下さい。
import pandas as pd
df = pd.read_excel('./1365344_1-0207r.xlsx')
print(df.head(10))
1行目でpandasを読み込んでいます。また一般的にpandasはpdと略されます。Excelファイルを読み込むには read_excel 関数を利用します(3行目)。ファイル名を指定するだけで大丈夫です。このファイルはデータ量が多いため、先頭から10行を取得するようにしています(4行目)。結果は次のように表示されます。
日本食品標準成分表2015年版(七訂) Unnamed: 1 Unnamed: 2 Unnamed: 3 Unnamed: 4 Unnamed: 5 ... Unnamed: 62 Unnamed: 63 Unnamed: 64 Unnamed: 65 Unnamed: 66 更新日:2016年1月15
日
0 本表 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN
1 07 果実類 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN
2 食品群 食品番号 索引番号 食品名 廃 棄 率 NaN ... NaN NaN NaN NaN NaN 備考
3 NaN NaN NaN NaN NaN エネルギー(kcal) ... ポリフェノール 酢酸 調理油 有機酸 重量変化率
NaN
4 NaN NaN NaN Tagnames REFUSE ENERC_\nKCAL ... POLYPHENT ACEAC - OA - NaN
5 NaN NaN NaN 単位 % kcal/100 g ... g/100 g g/100 g g/100 g g/100 g % NaN
6 07 07001 751 あけび 果肉 生 0 82 ... - - - - - 試料: みつばあけび\n全果に対する割合: 果肉 20
%、種子 7 %
7 07 07002 752 あけび 果皮 生 0 34 ... - - - - - 試料: みつばあけび\n全果に対する割合: 果皮 70
%、へた 3 %
8 07 07003 753 アセロラ 酸味種 生 25 36 ... - - - - - 試料: 冷凍品\n廃棄部位: 果柄
及び種子
9 07 07159 754 アセロラ 甘味種 生 25 36 ... - - - - - 試料: 冷凍品\n廃棄部位: 果柄
及び種子
[10 rows x 68 columns]
NumPyへの変換
Pandasで用意したデータを算術計算させるためにNumPyを利用したいケースは往々にしてあるでしょう。そのため、Pandasにはnumpy.ndarrayに変換する機能がよういされています。次のコードを記述しましょう。
import pandas as pd
df = pd.read_excel('./1365344_1-0207r.xlsx')
df1 = df.iloc[[6,7,8],[3,5]].values
print(df1)
print(type(df1))
このExcelファイルには多くのデータがあるため、4行目で一部の行、一部の列のみ取得するようにしました。またPandasからNumPyへの変換はvaluesプロパティを使用します。その結果を6行目で出力しています。また参考までにそのデータ形式を7行目で表示しています。結果は次のように表示されます。
[['あけび\u3000果肉\u3000生\u3000\u3000\u3000' 82]
['あけび\u3000果皮\u3000生\u3000\u3000\u3000' 34]
['アセロラ\u3000酸味種\u3000生\u3000\u3000\u3000' 36]]
<class 'numpy.ndarray'>
4行目にデータのタイプが numpy.ndarrayと表示されており、NumPyの形式に変換されたことがわかります。
まとめ
上記の例から、Pandasの利用が容易であることが判って頂けたものと思われます。Pandasには上記以外にも多数の機能が備わっています。機械学習するのであれば、ぜひ利用してみて下さい。