Pythonでデータ分析する方法を初心者向けに解説してみた
<<AIが学べるプログラミングスクール4選>>
・Tech Academy:PythonとAIが学べる最も有名なプログラミングスクール
・Aidemy Premium Plan:AI教育No1の実績。本気でAIを学びたいならココ!
・CodeCamp:お手頃価格でAIが学べるプログラミングスクール
・Tech Boost:教室で学べるAI x Webアプリ開発スクール

この記事は、
- 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からデータを取得できるチュートリアルも僕が以前作成したので、興味がある方はこちらをご覧ください!
- PythonによるWeb API入門(1) AKBの画像を5000件API経由でダウンロードする
- PythonによるWeb API入門(2)顔認識の機械学習APIを利用する
- PythonによるWeb API入門 (3) TwitterでフォロワーのプロフィールデータをCSVにエクスポートしてデータ分析する
- PythonによるWeb API(4) 指定したツイッターアカウントのツイートを全抽出する
Webスクレイピングとは
Web スクレイピングとは、Web上のHTMLのデータを自動収集して、そのデータを解析する方法です。
Web APIと同様に、以前スクレイピングの方法についてもチュートリアルで作成したので、参考にしてみてください!
- Pythonによるスクレイピング①入門編 ブログの記事をCSVにエクスポートする
- PythonによるWebスクレイピング②Google検索の結果から、アフィリエイトコードが入っている記事を抜き出す –
- Pythonによるスクレイピング③「次へ」があるサイトからデータを全件取得する
データの前処理
データを収集しても、そのまま利用できるわけではありません。分析の用途に沿った形で、データを加工してあげる必要があります。データの前処理には、以下のようなものがあります。
- 欠損値の取り扱い
- カテゴリカルデータを連続データに変換
欠損値の扱い
例えば、データセットの中で欠損値が存在する場合があります。こういう場合、データ分析を行う際に大きく全体の結果をゆがめる可能性があるので、
- 欠損値をそのまま削除する
- 平均、中央値、最頻値を代入する
- 重回帰分析を利用して、代入する
などの方法をとる場合があります。
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値等の用語がわからない場合は、統計学の基礎を勉強するのがおすすめです。統計学も、機械学習ではなく、純粋な高校数学レベルの統計学ですね。
- マンガでわかる統計学:なんとなく統計学の用語理解したい人向け
- 教科書だけでは足りない大学入試攻略確率分布と統計的な推測:統計学の基礎をちゃんと学びたい人向け
- Rによるやさしい統計学:Pythonではないけど、大数法則のシミュレーション等をプログラミングで学べたので非常によかったです。
カテゴリカルデータから連続データに変換
カテゴリカルデータ(文字列)を統計解析が可能なように連続データに変換します。
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を利用して、グラフ描画を行いたい!という方は、以下の書籍がおすすめです。
機械学習の場合、モデル化
データの前処理が終わり、機械学習やディープラーニングを利用できる状態になったら、最後にモデル化を行います。
前述のタイタニック号の分析の場合は、タイタニック号の生存に寄与した変数を、さまざまな統計モデルを利用して、精度を検証します。例えば、
- ロジスティック回帰分析
- サポートベクターマシン
- 決定木
個人的には、機械学習をビジネスにどう応用するかを学ぶ際には、以下の書籍が非常にわかりやすかったです。
あと機械学習で良かったのは、TJO先生(@TJO_datasci )の著書で、実際のビジネスユースケースをもとにRで機械学習を学べる『手を動かしながら学ぶビジネスに活かすデータマイニング』という書籍。こんなに削ぎ落としてエッセンスを説明してくれるスキル純粋にすごいと思った。https://t.co/txtWBPoHdY
— DAI (@never_be_a_pm) August 16, 2018
また、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に特化したスクールもあります。
・Tech Academy:PythonとAIが学べる最も有名なプログラミングスクール
・Aidemy Premium Plan:AI教育No1の実績。本気でAIを学びたいならココ!
・CodeCamp:お手頃価格でAIが学べるプログラミングスクール
・Tech Boost:教室で学べるAI x Webアプリ開発スクール
Pythonを無料で学ぼう! DAINOTE公式チュートリアルを公開しました
- Pythonで簡単なアプリを開発してみたい
- でもまずは無料で勉強してみたい
- ただの基礎ではなく、応用が聴くような技術を身に付けたい
という方向けに、DAINOTE編集部が作成した、Pythonのチュートリアルを用意しました。
まずは、簡単な技術で、プログラミングを楽しんでみませんか?
チュートリアルを見る(無料)