全取材あり! | エンジニアになれるプログラミングスクールおすすめ5社まとめ

注意)この記事には、アフィリエイトリンクが掲載されています。詳しくは、アフィリエイト・ポリシーをご覧ください。

この記事は、

  • Pythonでデータ分析をしてみたい
  • Pythonでデータ分析をする上で何を学べばいいか

という疑問を持っている人向けに、Pythonでデータ分析する方法をまとめます。

Pythonでデータ分析する流れ

データ分析の流れとして、

  • 答えを出したい問い、課題の設定
  • データの収集
  • データの前処理
  • データの可視化
  • 機械学習の場合、モデル化

となっています。これらの流れは、行ったりきたりします。データの可視化をした結果、データの前処理がさらに必要になったり、モデリングした結果、さらにデータの前処理が必要になる可能性があるからです。

答えの出したい問い、課題の設定

ある分析を行う際に、どういう結果が得られればいいのか定義します。例えば、

  • この二つの広告のうち、どちらがよりクリックされやすいか、商品申し込みまでつながりやすいか
  • もっとも商品申し込みに貢献しているWebページはどれなのか

などです。

個人的には、「答えを出すことによってビジネス成果が生まれるもの」を課題として設定するのがよいと思います。

例えば、以下のようなことを検証したとしても、次の行動に落とし込めません。

  • NG: 気温が上がると、アイスクリームの売上が伸びるのか →仮にそうだったとしても、気温を上げることができないので意味がない

一方で、最初に挙げた二つのような問に答えられると、次のアクションの根拠とすることができます。「これが分かったらこのアクションが取れる」という仮説をもとに、課題設定することが重要です。

  • OK: この二つの広告のうち、どちらがよりクリックされやすいか、商品申し込みまでつながりやすいか → よりビジネス効果の高い広告を利用することで、より多くの申込を得られる
  • OK: もっとも商品申し込みに貢献しているWebページはどれなのか→そのページに似たようなページを作成する、そのページに内部リンクを多く流す構造にすることでより多くの申込みを得られる

この辺のリサーチデザインに関して、参考になる書籍をいくつかまとめておきます。リサーチデザインについては、いろいろな事例に触れながら、どういうことができるのかを多く把握しておくことが重要です。

データの収集

次に、上記の課題を解決するために、データを収集します。データを収集する方法は、おおざっぱに分けると以下のようになっています。

  • オープンデータの統計を利用する
  • 社内DBのデータを抽出する
  • Webスクレイピング、Web APIを利用してデータを収集する

オープンデータの統計を利用する

一番簡単なのは、オープンソースは、公的統計を利用する方法です。オープンデータとは、公的機関などが二次分析のために公開しているデータセットとなります。

個人的に分析しがいがあるオープンデータをまとめておきます。

  • PISA: OECD加入諸国が実施している学習到達度調査のデータセットです。
  • e-stat:e-Statは、日本の統計が閲覧できる政府統計ポータルサイトです
  • Kaggle: データ分析のコンペサイトです。

オープンデータの分析の例としては、教育社会学者の舞田先生の分析が非常に面白いので、ぜひ参考にしてみてください。

また、Kaggleもオープンデータを分析するプラットフォームです。チュートリアルとなっているカーネルを参考にすると、面白いかと思います。英語が読める方はぜひ参考にしてみてください。

社内DBのデータを抽出する

DBのデータを取得する場合は、SQLや、PythonのSQLラッパーを利用してデータを収集することになります。

SQLの基礎は、Progateで学べるのでぜひ勉強してみてください。

Web API、スクレイピングでデータを収集する

外部Webサイト、ツールからデータを取得する場合、Web APIやWebスクレイピングを利用します。

Web APIとは

Web APIとは、アプリケーションが外部連携するためのデータの窓口のことです。Twitter, InstagramなどもAPIを提供しています。Web APIを提供しているサービスなのであれば、Web APIを経由してデータを収集するのがよいでしょう。

実際にWeb APIからデータを取得できるチュートリアルも僕が以前作成したので、興味がある方はこちらをご覧ください!

Webスクレイピングとは

Web スクレイピングとは、Web上のHTMLのデータを自動収集して、そのデータを解析する方法です。

Web APIと同様に、以前スクレイピングの方法についてもチュートリアルで作成したので、参考にしてみてください!

データの前処理

データを収集しても、そのまま利用できるわけではありません。分析の用途に沿った形で、データを加工してあげる必要があります。データの前処理には、以下のようなものがあります。

  • 欠損値の取り扱い
  • カテゴリカルデータを連続データに変換

欠損値の扱い

例えば、データセットの中で欠損値が存在する場合があります。こういう場合、データ分析を行う際に大きく全体の結果をゆがめる可能性があるので、

  • 欠損値をそのまま削除する
  • 平均、中央値、最頻値を代入する
  • 重回帰分析を利用して、代入する

などの方法をとる場合があります。
Kaggleのタイタニック号の死亡率予測コンペを例にします。乗員客船の搭乗港のカテゴリカルデータ(C, Q, Sの欠損値を、最頻値(mode)で置換しているコードです。ソースコードは下記チュートリアルから引用します。

freq_port = train_df.Embarked.dropna().mode()[0] # 欠損値を削除し、その中で搭乗港コードの最頻値を出力

≫'S'

for dataset in combine:
dataset['Embarked'] = dataset['Embarked'].fillna(freq_port) #欠損値に最頻値を代入

train_df[['Embarked', 'Survived']].groupby(['Embarked'], as_index=False).mean().sort_values(by='Survived', ascending=False)

欠損値、最頻値、中央値、平均、仮説検定、p値等の用語がわからない場合は、統計学の基礎を勉強するのがおすすめです。統計学も、機械学習ではなく、純粋な高校数学レベルの統計学ですね。

カテゴリカルデータから連続データに変換

カテゴリカルデータ(文字列)を統計解析が可能なように連続データに変換します。
Pythonを利用すると、搭乗港のコードを、定量的なデータに前処理することが簡単にできます。

for dataset in combine:
dataset['Embarked'] = dataset['Embarked'].map( {'S': 0, 'C': 1, 'Q': 2} ).astype(int)
train_df.head()

Pythonでデータの前処理をする際におすすめの勉強方法

Pythonでデータの前処理を学ぶ場合は、以下の書籍を参考にするとよいでしょう。

また、Kaggleのカーネルを写経しながら学ぶのもおすすめです。

Webサービスを利用して学ぶのであれば、PyQが非常におすすめです。

データの可視化

Pythonでデータの可視化を行う場合は、以下のモジュールを利用できるようになるとよいでしょう。

  • Matplotlib: Pythonで一番メジャーなグラフ描画ツール
  • Pandas: データの前処理モジュール。一部Matplotlibの機能が利用できる
  • Seaborn: Matplotlibのラッパーライブラリ

個人的にはPythonでグラフ描画をするのは、データの前処理を行う際に簡易的にデータを眺める程度で使うのがいいと思うのですが、レポーティングにはちょっと耐えられないかな…という印象です。ですので、Seabornを利用してきれいなグラフを作るなら、CSVにエクスポートしてBIツールに投げ込んだり、Excelのグラフなどでレポーティングしたほうがいいのではないかな?と思っています。

MatplotlibやSeabornを利用して、グラフ描画を行いたい!という方は、以下の書籍がおすすめです。

機械学習の場合、モデル化

データの前処理が終わり、機械学習やディープラーニングを利用できる状態になったら、最後にモデル化を行います。

前述のタイタニック号の分析の場合は、タイタニック号の生存に寄与した変数を、さまざまな統計モデルを利用して、精度を検証します。例えば、

  • ロジスティック回帰分析
  • サポートベクターマシン
  • 決定木

個人的には、機械学習をビジネスにどう応用するかを学ぶ際には、以下の書籍が非常にわかりやすかったです。

また、Webサイトで学ぶ場合は、以下のサービスがおすすめです。

Pythonでデータ分析するメリット

Pythonでデータ分析するメリットは以下の点となります。

  • データの収集→前処理→可視化→モデル化までに対応している
  • 大規模データ(csv1000行以上)のデータの前処理がしやすい
  • 初学者にも比較的書きやすい

エクセルだけで完結させようとすると、データの収集がかなりしんどいです。VBAでもできなくはないのですが、ちょっと重いかもしれません。また、前処理もエクセルだけで利用しようとすると、関数だらけになりめちゃくちゃ重くなります。また、かゆいところに手が届かないですね。

また、ほかのプログラミング言語(特にR)と比較すると、初学者でもかなり理解しやすいので、ちょっとビジネスでデータ分析してみたい!くらいのレベル感であれば、Pythonはおすすめできます。

Pythonでデータ分析するデメリット

Pythonでデータ分析するデメリットは、以下2点です。

  • Pythonを覚える学習コストが大きい
  • グラフのレポーティングがつらい

やはり、簡単なデータのグラフ化や、ピボットテーブルを利用して統計解析したいくらいのレベル感であれば、Google SpreadSheetやExcelを利用した方が早いです。コードを書かずにポチポチするだけで簡単にできるので、それくらいのことであればPythonをゼロから勉強する学習コストのほうが大きくなってしまいます。

また、最終的なレポーティングに利用するようなグラフは、Pythonだとちょっとしんどいかなっというのが印象です。CSV出力した後に、だいたいExcelでレポーティングしているのですが、レポーティングをPythonで凝ってつくるのは費用対効果がかなり悪いと個人的には思います。

CSV1000行未満で、データの収集もしないで、簡単なレポーティングをしたいぐらいの集計作業であれば、Pythonは向かないので、むしろExcelを使えるようになったほうがよいかと思っています。Excelで簡単なデータ分析を行う方法は、こちらの本がかなりわかりやすかったのでおすすめです。

Pythonでデータ分析すべきシチュエーション

メリット・デメリットから考えて、Pythonを利用したほうがよいケースとしては、

  • 1000行以上のcsvでデータの前処理をvlockupなどの関数を多用しないといけない。そうすると重すぎて作業できない
  • Web API、スクレイピングなどを通して、データの収集から分析までノンストップでやりたい場合

こんな場合はPythonがパワフルかと思っています。

一方で

  • データ行数が1000行以内
  • プログラミングの学習コストがでかい

などを考えると、ExcelやGoogle Spreadsheetで十分なのではないかと思います。

本格的にPythonでデータ分析を学んでみたい人へ

本格的にPythonでデータ分析を学んでみたい人は、AIに特化したスクールもあるので、ぜひみてみてください。

関連記事