株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。
2019年6月14日のイベントでは「Pythonでデータ処理と機械学習を始めよう」を開催。データの前処理を効率的に行うためのライブラリ「Pandas」を使って、機械学習の最も初歩的なモデルが作られるようになるまでを、書籍『Pythonによるはじめての機械学習プログラミング』の著者でもある早川敦士さんが分かりやすく解説してくださいました。
・プログラミングの準備として、データの取り扱いが大切
・データ分析のライブラリ「Pandas」を使いこなそう
・Pythonは、データに触れることが上達への近道
【講師プロフィール】
早川 敦士さん
株式会社FORCAS、株式会社ホクソエムに所属。前職のリクルートコミュニケーションズではB2Cマーケティング、現職のFORCASではB2Bマーケティングプラットフォームのデータ分析及び開発を担当。大学在学中に『データサイエンティスト養成読本』(技術評論社刊)を共著にて執筆。その後も『機械学習のための特徴量エンジニアリング』(オライリー・ジャパン刊)や『Pythonによるはじめての機械学習プログラミング』(技術評論社刊)などで執筆活動を続けている。国内最大級のR言語コミュニティであるJapan.Rを主催。
機械学習プログラミングの準備。データの取り扱い方
機械学習とは、コンピューターにデータを読み込ませ、アルゴリズムに基づいて分析をさせる手法のことです。そのため、ソフトウェアに“学習させるため”のデータが大量に必要となります。
しかし、そのデータがきちんと整形されていなかったり、データに重複や抜け落ちがあったりすると、正しい学習効果を得られません。機械学習を行うプログラムそのものは、豊富なライブラリを使って組むこともできますが、学習データは独自に集めてきたものも多くなります。そうなると、データの取り扱い方こそが大切とも言えます。
今回のイベントでは、機械学習そのものについての解説もありましたが、「機械学習エンジニアへの第一歩は、データの読み込みと書き出しの方法を知ることが大切」と早川さんはお話しされ、ほかのイベントではあまりお目にかかることのないデータの取り扱いについても詳しく解説されました。そこでまずは、Pythonのデータ分析で利用するツールを簡単にご紹介いただきました。
機械学習用ライブラリで、機械学習のデファクトスタンダードとも呼ばれる。手法のカバー範囲も広く、統一されたインターフェイスが特長
データフレームを提供するためのツールで、おおざっぱに言えばExcelのようなもの。データの加工や集計に使う
Pythonを使われる方には馴染みの深い数値計算用ライブラリで、ベクトル計算や行列計算に便利な命令が多数用意されている
グラフ描画ライブラリ。きれいなグラフが描け、使い勝手の良さが支持されている
次に主要なデータ形式の特徴について学びました。機械学習分野で使われる主要なデータ形式として、Excel形式、JSON形式などがあるそうです。
小さなデータであれば一覧性が高いという特徴がある。大きなデータである場合には、データ文字列中にカンマが存在する可能性があるため、カンマよりタブで区切ることをお勧め
JavaScript Object Notation の略。WebサービスのAPIにより提供されるデータ形式は、ほとんどこの形式が使われている。ほか、MySQLやPostgresなどのデータベースの出力や、Webサイトのクローリング形式、ブログ記事などにも使われている
データを扱うためのライブラリ「Pandas」
次に、ライブラリ「Pandas」を使ってデータを読み込みました。サンプルではiris.data.csvというCSV形式のデータを読み込み、データフレームに格納しています。そして、最後に読み込んだデータの概要を表示します。
df = pd.read.csv('iris.data.csv', header=None)
dfinfo()
データの概要を表示したら、行数と列数は、しっかり確認しておくと良いそうです。
次に読み込んだデータの一部を表示してみます。データの上から10行分を表示する場合は、次の命令を記述します。
行数はnで指定します。データの終わりからn行を表示するにはtail()を使います。
ちなみに、このようなプログラムを1つ1つ試しながら結果を参照・実行できるものとして、早川さんが使われていた便利なツールが「Jupyter Notebook」です。「Pandas」と組み合わせて使用すると、簡単にデータ分析ができるそうです。

Pandasで要素を抽出
格納データの任意の部分を表示させる命令もいくつか学びました。
データ位置を数値で指定して表示させるには、ilocメソッドを使います。1行目の2列目を表示するには次のように指定しますが、行も列も0スタートなので1行目が0、2列目が1になる点は注意が必要です。
また、locメソッドを使うと、列名を指定してデータを取り出すこともできます。1行名から5行目までの列名1と列名2の列データを抜き出して表示するには次のように指定します。
Pandasの便利なメソッド
応用編として、アンケートでの回答の重複が無いかどうかを確認するという例も学びました。回答番号の欄がすべて異なっているかどうかを確認するため、uniqueメソッドでユニークな行がどれだけあるかを調べ、それをデータ全体の合計と比べるというものです。
また、アンケートのなかでユニークな回答が、全部で何種類あるかを求めるには、次のように記述します。
そのほかにも、合計はsum()メソッド、平均はmean()メソッド、最大値はmax()で求められることなど、基本的なメソッドを使って、データを集計したり、データの表示を工夫したりする方法を学びました。これだけでも十分に面白いと感じることができましたが、もちろん、イベントはそれだけでは終わりません。
繰り返し行うデータ集計にも便利なPython
より実践的な事例では、生のデータを整形しながら、機械学習プログラムに利用できる形式に変換する方法を、段階を踏まえながら学んでいきました。
事例では、サイト『Stack Overflow Annual Developer Survey』からダウンロードした、データ『survey_results_public.csv』を使いました。
df = pd.read.csv('~/Downloads/survey_results_public.csv',
low_memory = False)
df_info()
このデータを基に、データの型変換、カテゴリを追加する、複数回答を異なる列に展開、4種類ある回答を3種類にまとめるなどの具体的な処理を行っていきました。
また、データを文字列として扱うと、数値に比べて余計にメモリを消費してしまうため、これをコンパクトに格納するテクニックなども紹介してくださいました。
学んでいくにつれ、こうしてデータをさまざまな形にして出力できるのは楽しいと感じられる一方で、データにいろいろな操作を加え整形していくうちに「あれ?今、自分は何をしていたんだっけ?」と迷子になってしまうことも多いようです。
そのため、「常に確認しながらやっていくことが大切。だからJupyter Notebookを使うと良い」と早川さんは教えてくださいました。
こうしたデータの整形はExcelでもできますが、1度Pythonで書いておけば、次回も同じ処理をそのまま実行することができ、さらには機械学習のプログラムの前段に組み込むこともできます。日々の集計や週ごとの集計など、繰り返し行う作業であれば、Pythonで書いておくと良い、とのことでした。
また、Plotlyによるグラフ化についても、教えていただきました。

とにかくデータに触れることが上達への近道
この後、実際にscikit-learnを利用した機械学習プログラムの例もいくつか紹介してくださったのですが、このレポートでは割愛します。
これまで機械学習のプログラミングについてのイベントはいくつかありましたが、こうしたデータの前処理に関するものは深堀されていなく、とても参考になったとのお声を参加者から多くいただきました。
早川さんは、「興味のあるデータは探せば意外と見つかるので、練習のつもりで、データにたくさん触れてみることが大切です」と締めくくってくださいました。