これからPythonを学習する方の中には、
- Pythonを使用してのデータ分析では何ができるの?
- わざわざPythonを覚えてまでデータ分析を行う必要があるの?
と思っている方もいるでしょう。今回はPythonでできるデータ分析についてみていきましょう。
本記事はこれからPythonを学習しようか悩んでいる方や学び始めたばかりの初学者の方、PythonとRのどちらかを学習しようと検討している方などを対象にしています。例としてエクセルのデータ分析が出てきますが、必ずしも現在エクセルを触っている必要はありません。
- Pythonでできるデータ分析がわかります
- エクセルやRに対して優位な点がわかります
- 時間をかけてPythonを学んでも大丈夫だということがわかります
Pythonでのデータ分析
この後説明しますが、Pythonでデータ分析をするメリットで共通するものとして、
- 自動化できる:メール送信やExcelの入力など、作業を自動化できます。データ分析においても処理をまとめておくことによりデータが変わっても同じ処理を自動化することができます。
- ライブラリが豊富:グラフ作成や数値計算など、目的に応じて便利なライブラリが用意されていますので、簡単に高品質な解析を始めることが可能です。
- 複雑な解析手法が簡単に利用可能:複雑な解析手法であっても簡単に使用することが可能です。
- AI/機械学習/深層学習モデルの開発が可能:AI/機械学習/深層学習モデルを開発することができます。
などがあります。具体的にどのような部分がPythonで分析を行うメリットなのか、細かく見ていきましょう。
Pythonで実際にどんなことができるの?
○Pythonデータ分析でできること
- データの集計
- データクレンジング
- データ可視化
- データ分析
①データの集計
Pythonではpandasやnumpyなどのライブラリを使ってデータの読み込みや加工、集計などを簡単に行うことができます。
売上データや顧客データなどをCSVやExcelファイルから読み込み、日付や地域などでグループ化して、合計や平均などの統計量を簡単に算出することができます。エクセルでは、複数のシートやファイルを扱うのが大変ですが、Pythonでは一括で処理できます。
例えば、以下の例では東京都の気温(最高気温、最低気温、平均気温)、湿度(平均湿度)が入ったデータをcsvファイルから読み込んでいます。このように簡単に呼び出すことが可能です。
import pandas as pd
data = pd.read_csv('./data.csv', encoding='cp932')
data

集計も簡単で、特に基本的な統計量などは簡単に処理可能です。以下の例ではそれぞれのデータの数、平均値、標準偏差、最小値、最大値、それにデータを四等分したときの数値を示す四分位範囲を簡単に求めることが可能です。
data.describe()

同様に、各データの相関係数もデータのまま簡単に計算することが可能です。
data[['平均気温(℃)', '最高気温(℃)', '最低気温(℃)', '平均湿度(%)']].corr()

これらの作業はエクセルでも実施は可能ですが、データを呼び出し計算式を入れ、それを読み込んだデータと同じ列に入れたり別シートに入れたりと、シート内が煩雑になったり毎回同じ作業が発生したりします。
また、「基本統計量」のコマンドで出す場合はデータが変わるたびに出力される値をどこかに出力しなくてはならないため、これもまたシートが煩雑になる要因になります。
②データクレンジング
Pythonでは、pandasやnumpyなどのライブラリを使って、データの欠損値や外れ値、重複値などを検出し、削除や補完などの対処を行うことが可能です。例えば、データに抜けが存在する場合や、データに異常に高い値や低い値がある場合などに簡単に対応できます。
エクセルでは、手動でチェックしたり、データごとに対応する必要がありますが、Pythonでは自動で処理することが可能です。例えば先ほどと似たデータで例に見ていきましょう。
import pandas as pd
data2 = pd.read_csv('./data2.csv', encoding='cp932')
data2.describe()

先ほどとほぼ同じデータですが、今回のデータは
- 平均気温のデータ数が最低気温のデータ数より少ないのでデータが書欠けているのではないか?
- 最低気温の最高値が93度となっており、明らかにおかしい
ということがわかります。今回は平均気温が欠けているデータを見てみましょう。
data2[data2['平均気温(℃)']!=data2['平均気温(℃)']]

データを見ると、151番目と178番目のデータで平均の気温のデータが欠けているようです。このまま解析すると解析結果が正しく出ない可能性があるため、このデータを処理する必要があります。今回はわかりやすく、先ほどの統計量で出てきた平均値「17.724725」で埋めてあげましょう。
※本来は全体の平均値ではなく、7月の平均値で埋めてあげるなどの処理をしますが、今回は説明のための全体の平均値で埋めます。もちろん「7月の平均を出す」などの処理も簡単に行えます。
data2['平均気温(℃)'] = data2['平均気温(℃)'].fillna(17.724725)
data2.query("index==151 or index==178")

このようにPythonで行うと、各データごとに行う処理を一括で処理することができます。
今回は説明のために欠損値を抜き出して処理していますが、一括で自動処理する場合は以下の方法でも可能です。
data2 = data2.drop('Unnamed: 0', axis=1)
data2.fillna(data2.mean(), inplace=True)
また、データ全体を見渡し、欠損値の数を確認してから一気に埋める方法もあります。まずは欠損値の数を確認します。
data2.isnull().sum()

次にmaskと組み合わせて欠損値を一気に埋めます。
data2['平均気温(℃)'] = data2['平均気温(℃)'].mask(data2['平均気温(℃)'].isnull(), data2['平均気温(℃)'].mean())
data2.query("index==151 or index==178")

③データ可視化
Pythonでは、matplotlibやseabornなどのライブラリを使って、データをグラフやチャートなどで可視化することができます。棒グラフや折れ線グラフ、ヒストグラムや散布図などで表示して、トレンドや相関などを分かりやすく見ることができます。
エクセルでは呼び出したデータの数などに合わせて毎回グラフを調整する必要がありますが、Pythonならデータ数が変わっても同じようにグラフを作成することが可能です。
import matplotlib.pyplot as plt
import japanize_matplotlib
data2 = pd.read_csv('./data2.csv', encoding='cp932')
data2['平均気温(℃)'] = data2['平均気温(℃)'].fillna(17.724725)
plt.boxplot([data2[data2.columns[1]], data2[data2.columns[2]], data2[data2.columns[3]], data2[data2.columns[4]]], labels=[data2.columns[1], data2.columns[2], data2.columns[3], data2.columns[4]])

上の図は先ほど欠損値を埋めたデータを使用して、ボックスプロットを書いたものです。最初にデータを確認した際に気になっていた飛び値も一目でわかりますし、グラフの設定を細かくせずに、簡単にグラフを描くことができます。
④データ分析
Pythonでは、scipyやstatsmodelsなどのライブラリを使って、データに対して統計的な分析を行うことができます。平均や分散、標準偏差などの基本統計量を求めたり、回帰分析や因子分析などの多変量解析を行ったりすることができます。
Pythonでの統計解析はTech Teacher Blog内にも非常に多くの解説がありますので、いくつかご紹介します。


エクセルでも基本統計量は求めることが可能ですが、データに合わせて動的に求めることができなかったり、分析手法に関してはソルバーなどを使用して解決する必要があります。以下のリンクではエクセルで分析する方法を紹介しています。


Pythonを学習するには
このようにデータ分析においても非常に便利なPythonですが、以下のページで学習のロードマップを示しているので、学習の参考にしてください。

また、こちらのシリーズではPythonについて基礎から学ぶことができるように順を追って解説されています。学習の参考にしてください。

『Tech Teacher』3つの魅力
魅力1. オーダーメイドのカリキュラム
『Tech Teacher』では、決められたカリキュラムがなくオーダーメイドでカリキュラムを組んでいます。「質問だけしたい」「相談相手が欲しい」等のご要望も実現できます。
魅力2. 担当教師によるマンツーマン指導
Tech Teacherでは、完全マンツーマン指導で目標達成までサポートします。
東京大学を始めとする難関大学の理系学生・院生・博士の教師がが1対1で、丁寧に指導しています。
そのため、理解できない箇所は何度も分かるまで説明を受けることができます。
魅力3. 3,960円/30分で必要な分だけ受講
Tech Teacherでは、授業を受けた分だけ後払いの「従量課金制」を採用しているので、必要な分だけ授業を受講することができます。また、初期費用は入会金22,000円のみです。一般的なプログラミングスクールとは異なり、多額な初期費用がかからないため、気軽に学習を始めることができます。
まとめ
・魅力1. 担当教師によるマンツーマン指導
・魅力2. オーダーメイドのカリキュラム
・魅力3. 3,960円/30分で必要な分だけ受講
質問のみのお問い合わせも受け付けております。
まとめ
今回はPythonでできるデータ分析についてみてきました。Pythonはデータ分析において非常に優秀なツールで覚えて損はありませんので、ぜひこの内容を参考にしてマスターしてください。