データ分析をしたくてPythonを勉強を始めてみたけど。。
悩み
結局Excelで処理した方が慣れているから、作業効率がいい。
周りにプログラミングができる人がいないと独学は無理と挫折。
データの整形や可視化なら、別のソフトウェア導入しているから必要ない。
という挫折をしている人は本当に多いと思います。
ぼくもプログラミングを勉強しては挫折を繰り返し、本当にデータ分析をPythonでやる必要があるのか悩んできました。
しかし、諦めず300時間以上の独学を続けた結果、
- Pythonによる一般的なデータ分析
- 機械学習・Deep Learningの導入
- E資格合格とKaggleでのデータ分析コンペへの参加
のようなPythonだからこそできる高度分野のコード実装ができ、データサイエンティストとしてキャリア形成するレベルに達しました。
この記事では、ぼくがデータ分析をするときに実施する「データ分析のテンプレート」を紹介します。
マスターすれば、Excelで依頼された分析業務の時間を5割以上削減できるレベルには到達します。
到達するレベル
Pythonで何をすべきで何をすべきでないか理解している。
Excel/CSVデータを自由に加工・分析できる。
分析データの統計値を瞬時に把握できる。
データサイエンティストを目指しPythonを活用していきたい!という人はぜひ最後まで読んでください。
最短距離でPythonビジネスデータ分析スキルを伝授します。
この記事を書いた人
Pythonでデータ分析をするメリット
これからPythonを使ってデータ分析をするにあたり、
プログラミングを使うことによって何が良くなるのかをまずはしっかりと理解しましょう!
Pythonは何が得意なのか?
Pythonが得意なことは「大規模データの処理」です。
特に次の処理を得意としています。
- 大規模データの処理(1万行以上)
- データを変えて繰り返す分析(定点観測)
- 機械学習などの高度な分析モデルの適用
Excelで実現するには、関数処理が重く分析できなかったり、
過去の分析を最新データでお願いと指示されたときにどうやったか思い出せないとなることがしばしばあります。
Pythonだと、これらの悩みから解放されるというわけです!
高度な分析モデルを簡単に実装可能
Pythonの最大の利点は「多くの人がデータ分析に利用し高度なパッケージが用意されていること」です。
世界中の優秀なデータサイエンティストの手によって進化を続けている言語なので、英知をだれでも利用可能です。
車を造るのは難しいですが、運転することは比較的簡単なのと似ています。
車の作り方を覚える必要はなく、Python学習も”使いこなす”に主眼を置きしましょう!
Python習得への最短距離です!
Pythonを使い始める前に心がけること
Pythonのデータ分析というと、すべてをプログラムで実装したいと思う方が多いです。
しかし、最初から全てをPythonで実装しようとする必要はありません。
ExcelでできることはExcelに任せながら、少しずつPythonに移していきましょう。
挫折しないためにも重要です。
STEP1:分析環境とデータの準備
STEP1では、Python実行する環境とデータの読み込みを行います。
また、エラーが出た時の基本的な対処を覚えておきましょう!
Pythonの分析環境を準備する
Pythonの実行環境がある人は、ここは飛ばして実践に移ってください。
Pythonで有名な開発環境は、Google Clabolatory / Anacondaです。
ビジネスで利用する場合、ネット上にデータのアップロードはできないのでAnacondaの利用をオススメします。
-
Anaconda Navigatorのインストールに関する究極のガイド
AnacondaでPython実行環境を準備したいからやり方教えてほしい 今回は、Pythonプログラムをビジネス目的で利用したい方向けにAnaconda Navigatorのインストール~プログラム ...
Excel/CSVデータをPythonの分析環境に取り込む
今回の分析シナリオは、
シナリオ
タイタニック号の乗客の概要と生死と旅客費・年齢等の関係性を1時間以内に調べて教えてください。
です。
利用するデータは、以下のボタンを押下するとダウンロードできます。
早速、Anacondaを起動しPythonで読み込みましょう。
#pandasというツールを導入
import pandas as pd
#データを読み込む
df = pd.read_csv('【練習用】タイタニック号データセット.csv',encoding='shift-jis')
#読み込んだデータの最初の5行を表示
df.head()
下と同じ表示がでたら、環境への読み込み完了です!
dfという変数にテーブルが格納されました。
【心得】エラーが出た時の対処法(Try & Error)
さて、エラーがでた人は成長のチャンスです!
おそらく2パターンのいずれか、または両方のエラーが出たと思います。
エラーの内容
①pandasが見つからない。
②データが見つからない。
英語で出たエラー文言をGoogleで検索して、解消してみましょう。
「エラーが出たらGoogleで調べる。」でプログラミングの実力はグングン身につきます。
ヒント
①pipコマンドでpandasをAnaconda環境にインストールする。
②データは絶対パスで場所を記載する。(Pythonファイルと同じフォルダに配置した場合不要)
(例:df = pd.read_csv('C:\Users\●●●\△△△\【練習用】タイタニック号データセット.csv')
STEP2:データの確認と整形処理
STEP2では、データの全体像を把握する処理を学びます。
データの全体像を確認する
①レコード数の確認
df.count()
全部で891レコードのデータで、年齢に欠損があることが分かります。
②欠損値の確認
df.isnull().sum()
Null(欠損値)の数を確認したら、年齢に177レコード分の欠損があることが分かりました。
③データの全体像を捉える
df.describe()
たった1行のコードで全統計値を出すことができます。
※旅客クラス「1=1等、2=2等、3=3等」、生死「0=死亡、1=生存」
統計値からの示唆
全部で891人の乗客のデータであること。(年齢不明が177人)
少なくとも50%以上の人が亡くなっている。
乗客の年齢は、新生児から80歳の高齢者までいた。75%以上が38歳未満。
これだけでも、チームで次の仮設を立てるには十分な情報量ですよね!
例えば
・年齢や旅客クラスごとの分布をもう少し詳しく分析してみよう!
・生存可否と年齢、旅客クラスの関係性を解き明かしたい!など
※STEP3で深掘りしていきます!
④データを絞り込む(クレンジング)
詳細な分析に入る前にデータのクレンジング方法をお伝えします。
先ほど「年齢がNULLだったレコード」と「旅客運賃の列(旅客クラスで代替え可)」は不要ですので絞り込みます。
#年齢の列にNullが含まれるレコードを落とす
df1 = df.dropna(subset=['年齢'])
#必要な列だけを指定して残す
df1 = df1[['乗客ID','生死','性別','旅客クラス','年齢']]
#読み込んだデータの最初の5行を表示
df1.head()
今回処理を加えた"df1変数"の中身はデータのクレンジングがされましたが、最初に定義した"df変数"の中身は変わっていません。
これが、Excelでやっている分析をPythonでするメリットです。
Excelだと
ExcelだとあるSheetのデータ(df)を加工せずに残しながら、いろんな加工(df1)を高速で加えていることになります。
Excelでは一度加工してしまうと分析の度にファイルを複製する必要がありますが、Pythonではこれが不要です。
実際に手を動かすと、処理速度をより体感できます。
このコードをコピペし少し修正すれば、簡単にいろんな切り口のデータセットを作ることが可能です。
プリグラミングの世界は、一度作ったプログラムは今後資産になります!
チャレンジ
データを加工するコードはいろんな種類があります。
「特定 列 残す python」などで検索すれば、直感的なコードを選びましたが、
もっと効率的なコードもありますのでいろいろ試してください。
STEP3:データの可視化
STEP3では、STEP2までで加工してきたデータをグラフに描写し示唆を得ます。
ヒストグラムで乗客の年齢分布を確認する
ヒストグラムを作成するコードは以下の通りです。
%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(font=["Meiryo","Yu Gothic"])
df2 = df1[['年齢']]
df2.plot.hist(bins=[0,11,21,31,41,51,61,71,81])
plt.title("乗客の年齢の分布はどうなっているか?")
plt.show()
たった数行でグラフを描くことができました!
タイタニック号は富裕層の高齢者が多いイメージでしたが、20代が多いデータセットでしたね。
グラフを書くためのコードも、コピペで使いまわし可能です!
チャレンジ
旅客運賃のヒストグラムを自分で作ってみよう!
(df1で旅客運賃を削除せず残すこと。)
散布図で年齢と旅客運賃と生存の関係を可視化する
散布図を作成するコードは以下の通りです。
%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(font=["Meiryo","Yu Gothic"])
#散布図を重ねて表示するため、生存と死亡でデータセットを分ける。
df_alive = df1[df1["生死"]==1]
df_dead = df1[df1["生死"]==0]
#それぞれの散布図を描写する
plt.scatter(df_alive["年齢"],df_alive["旅客運賃"],c="g")
plt.scatter(df_dead["年齢"],df_dead["旅客運賃"],c="r")
plt.title("乗客年齢と旅客運賃と生存の関係はどうなっているか?")
plt.xlabel("年齢")
plt.ylabel("旅客クラス")
plt.xlim(0,80)
plt.ylim(0,500)
plt.show()
散布図も簡単に作成できました。
補足
・緑の点:生存者
・赤の点:死亡者
これを見ると、旅客運賃が高いほど生存できた人が多い傾向が読み取れそうですね!
いろんな角度で分析してみてください(^^
STEP4:アウトプットの出力(Excel/CSV)
最後にSTEP4では、これまで加工したデータをExcelに出力します。
どんなデータを見て分析したかを関係者に配布したり、グラフ化だけをExcelに任せるとした場合はこの機能が重要です。
さっそくコードを示します。
#excelに出力する
df2.to_excel('ヒストグラム基データ.xlsx',encoding='shift-jis',index=False)
#csvに出力する
df2.to_csv('ヒストグラム基データ.csv',encoding='shift-jis',index=False)
こんなデータが出力されたら成功です。ほかのテーブルも出力してみましょう!
エラーが出たら、Google検索で原因を調べましょう!
使えないコードは記載していないので、環境にないツールがあるはずです。pipコマンドでインストールしてあげて下さい。
どうして解決できず、解決するコマンドを知りたい場合は記事にコメントください!
まとめ(次の学習ステップ)
今回は「ビジネスで活用できるPythonのデータ分析」について解説しました。
Excelでの分析も良いですが、より早くより高度な分析にはPythonの活用は重要です。
プログラミング言語がPythonが初めてで、一応基礎的な文法を網羅的に知りたい人は、Progateというアプリがオススメです。
データサイエンティストとして、キャリア形成を考えている人は以下の記事も参考になります。
-
【完全版】Python習得のロードマップ|初心者プログラミング知識0から年収800万円へ
年収上げたいけど、プログラマって稼げるの? プログラマって知識0からでもなれるの? という質問をもらいますが、「Python」と「データ分析」を武器にすれば6ヶ月で年収800万円以上を狙うことは十分可 ...
それでは、また次の記事でお会いしましょう。
最近のコメント