最近流行の機械学習/Deep Learningを試してみたいという人のために、Pythonを使った機械学習について主要なライブラリ/ツールの使い方を中心に解説する連載。今回は、データ分析の前処理などで便利に使えるオープンソースソフトウェア(OSS)のPythonライブラリ「pandas」を紹介します。
プログラミング言語「Python」は機械学習の分野で広く使われており、最近の機械学習/Deep Learningの流行により使う人が増えているかと思います。一方で、「機械学習に興味を持ったので自分でも試してみたいけど、どこから手を付けていいのか」という話もよく聞きます。本連載「Pythonで始める機械学習入門」では、そのような人をターゲットに、Pythonを使った機械学習について主要なライブラリ/ツールの使い方を中心に解説しています。
連載第1回の「Pythonで機械学習/Deep Learningを始めるなら知っておきたいライブラリ/ツール7選」では、ライブラリ/ツール群の概要を説明しました。前回は、その中でもJupyter Notebookの基本操作と設定について説明しました。
連載第3回から第1回で紹介した各種ライブラリを使う具体的なコードを例示していますが、Jupyter Notebook形式で書いています。
今回は、データ分析の前処理などで便利に使えるオープンソースソフトウェア(OSS)のPythonライブラリ「pandas」を紹介します。
pandasは習慣的に「pd」という名前でインポートされることが多く、また他のライブラリも含めて次のようにインポートされていることを前提に以下説明します(以下の説明では、連載第3回で紹介したNumPyも使うので、ついでにインポートします)。
なお本稿では、Pythonのバージョンは3.x系であるとします。
準備として米国Yahoo!のFinanceのページからダウ平均(米国の株価指標)のデータをcsvファイルとしてダウンロードしてきてください。
このリンクを開くと2017年のデータが表示されます。そこで右側の「Download Data」をクリックすると、「^DJI.csv」ファイルがダウンロードされます。
まず、よく使われるpandasの便利な機能としてはデータローダがあります。データローダによるcsvファイルの読み込み方を示します。
先ほどダウンロードしたcsvファイルをノートブックと同じフォルダに置き、ファイル名を「^DJI.csv」としておいた場合、次の命令でcsvファイルを読み込むことができます。
これだけだときちんと読み込まれているかどうか分からないので、データの中身を表示してみます。全てを表示すると長くなるので、「head」メソッドを使ってデータの冒頭の部分だけを表示するようにします。
この「dow」という変数に格納されているのは「DataFrame」型と呼ばれるデータ型です。pandasで標準的に使われます。縦横に表のような形式でデータが並んでおり、一番上の行には見出しが、一番左の列にはインデックスが格納されます。データ型を確認してみましょう。
上記表の一番上の行には「Date」「Open」「High」など見出し文字列が並んでいますが、これはcsvファイルの1行目の内容を読み取ったものです。また、一番左の列の「0」「1」「2」……という数字はインデックスです。csvファイル内には書かれていないものですが、ファイル読み込み時に自動的に連番が付与されます。
上記の例ではインデックスは自動的に数値で付与されましたが、データの特定の列をインデックスとして利用することもできます。このダウ平均のような時系列データは、日付をインデックスとして利用すると便利なことが多いです。
それでは、上記と同じcsvファイルを、一番左の列(日付)をインデックスとして読み込み直してみましょう。
ここでもDataFrame型として格納されていますが、先の表と違ってインデックスが日付になっています。
ここで「describe」メソッドを使うことで簡単な統計情報を見ることもできます。
それぞれの行は上から順に、データ数、平均、標準偏差、最小値、25%点、50%点(メジアン)、75%点、最大値をそれぞれ表します。
ここではダウ平均データを例にcsvファイルの読み込みを示しましたが、pandasではcsvに限らずさまざまなフォーマットのファイルを読み込むための関数が用意されていて簡単に使えます。扱うことのできるデータ形式とそれを読み込むための関数の一覧は、pandasの公式ドキュメント内に一覧表があるので参照してください。
データ分析の分野でよく使われるデータ形式については、かなりカバーされていることが分かると思います。
Copyright © ITmedia, Inc. All Rights Reserved.