どうもニコイチです。前回のEDAに引き続き、Pythonを使ったデータ分析の旅を始めましょう!前回は、データ分析の最初のステップである探索的データ分析(EDA)の概要についてお話しました。今回は、EDAの中でも特に重要な「統計量」と「データの可視化」について、実際にデータを触りながら学んでいきましょう。
今回の相棒となるデータは、前回の記事でも使った「宿泊価格について_demo.csv」です。このデータを使って、データの基本的な特徴を理解していきましょう。
全編はこちらから
探索的データ分析(EDA)をおさらい
探索的データ分析(EDA)は、データと仲良くなるための最初のステップです。データ全体を眺めて、どんな特徴があるのか、何か面白い傾向はないかを探ります。
前回は、データの読み込みや基本情報の確認を行いましたね。今回は、さらに深くデータを理解するために、統計量を計算したり、グラフを使ってデータの見た目をチェックしたりしていきます。
統計量でデータの特徴を「数字で」捉える
統計量って何? データの「健康診断」みたいなもの
統計量とは、データの特徴を数字で表したものです。ちょうど、健康診断で身長や体重、血圧などの数値を見て体の状態を知るように、統計量を見ることでデータがどんな状態なのかを把握できます。
例えば、宿泊価格のデータであれば、「平均的な宿泊価格はいくらくらいかな?」「一番高い宿泊価格と安い宿泊価格の差はどれくらいかな?」といった疑問に答えることができます。
代表的な統計量を見てみよう!
ここでは、データ分析でよく使われる代表的な統計量を紹介します。
統計量 | 説明 | 例え |
最大値 | データの中で一番大きな値。 | クラスで一番背が高い人の身長 |
最小値 | データの中で一番小さな値。 | クラスで一番背が低い人の身長 |
平均値 | データ全体の真ん中あたりの値を示す代表的な値。全ての値を足して、データの個数で割ったもの。 | テストの平均点 |
中央値 | データを小さい順に並べたときに、ちょうど真ん中にくる値。データの数が偶数の場合は、真ん中の2つの値を足して2で割った値。 | 生徒を身長順に並べたとき、ちょうど真ん中の人の身長。もし偶数なら、真ん中の2人の身長の平均。 |
最頻値 | データの中で一番多く出てくる値。 | クラスで一番多い靴のサイズ |
四分位数 | データを小さい順に並べて4等分したときの区切り値。 | – 第一四分位数 (25%点): 成績の良い方から数えて上位75%の人の最低点 |
– 第二四分位数 (50%点): 中央値と同じ | – 第三四分位数 (75%点): 成績の良い方から数えて上位25%の人の最低点 | |
分散 | データが平均値からどれくらいバラバラに散らばっているかを示す値。ちょっと計算が複雑なので、ここでは「散らばり具合」を表すものと覚えておきましょう。 | クラスの生徒の身長が、平均身長からどれくらい離れているかのイメージ。数値が大きいほどバラバラ。 |
標準偏差 | 分散を扱いやすいように調整した値。分散の単位を元に戻したようなもので、データの散らばり具合を平均値と同じ単位で表します。 | 分散と同じく、クラスの生徒の身長のバラつき具合を示す。分散よりも直感的に理解しやすい。 |
Pythonで統計量を計算してみよう!
実際にPythonを使って、宿泊価格データの統計量を計算してみましょう。まずは、必要なライブラリをインポートして、CSVファイルを読み込みます。
import pandas as pd
# CSVファイルを読み込む
data = pd.read_csv('宿泊価格について_demo.csv')
# データの最初の5行を表示して確認
print(data.head())
次に、describe()メソッドを使うと、主要な統計量を一度に確認できます。
print(data.describe())
describe()メソッドは、数値データのある列に対して、個数 (count)、平均値 (mean)、標準偏差 (std)、最小値 (min)、四分位数 (25%, 50%, 75%)、最大値 (max) を計算してくれます。
特定の統計量だけを知りたい場合は、個別のメソッドを使うこともできます。
# 平均値
print(data['宿泊価格'].mean())
# 中央値
print(data['宿泊価格'].median())
# 最頻値
print(data['宿泊価格'].mode())
# 最大値
print(data['宿泊価格'].max())
# 最小値
print(data['宿泊価格'].min())
# 四分位数
print(data['宿泊価格'].quantile([0.25, 0.5, 0.75]))
# 分散
print(data['宿泊価格'].var())
# 標準偏差
print(data['宿泊価格'].std())
このように、Pythonを使うと簡単にデータの統計量を計算できます。これらの数値を見ることで、「宿泊価格の平均は〇〇円くらいだな」「一番高い宿泊価格は〇〇円か」といった情報を把握できます。
データの可視化でデータの特徴を「見て」捉える
データの可視化って何? データを「見える化」する魔法
データの可視化とは、データをグラフや図で表すことです。統計量でデータの数字の特徴を掴んだら、次は可視化でデータの見た目の特徴を捉えましょう。
例えば、たくさんの宿泊価格のデータがあったとしても、数字の羅列だけでは全体像を把握するのは難しいですよね。でも、ヒストグラムで宿泊価格の分布を表示すれば、価格帯ごとの宿泊施設の数や、価格が偏っている部分が一目でわかります。
代表的なグラフを見てみよう!
データ分析でよく使われるグラフには、主にヒストグラムと棒グラフがあります。
量的データの可視化:ヒストグラム
ヒストグラムは、数値データ(量的データ)の分布を見るのに適したグラフです。データをいくつかの区間(ビン)に分けて、それぞれの区間に含まれるデータの数を棒の高さで表します。
- 横軸:級 (階級) … データの値の範囲をいくつかの区間に分けたもの
- 縦軸:度数 … 各区間に入っているデータの数
ヒストグラムの見方
- 山が一つで左右対称(正規分布): 平均値、中央値、最頻値がほぼ同じ値になり、データが平均付近に集中していることを示します。多くの自然現象やテストの点数などで見られる一般的な分布です。
- 山が偏っている(歪んだ分布):
- 右に裾が長い場合(右skew): 平均値 > 中央値 > 最頻値 となり、小さい値にデータが多く、大きい値が少ないことを示します。例えば、所得分布などがこれに当てはまります。
- 左に裾が長い場合(左skew): 平均値 < 中央値 < 最頻値 となり、大きい値にデータが多く、小さい値が少ないことを示します。例えば、テストの難易度が高く、多くの人が低い点数を取った場合などがこれに当てはまります。
- 山が二つ以上ある場合(多峰性): 性質が異なる複数の集団が混ざっている可能性があります。例えば、男性と女性の身長データを一緒にプロットした場合などです。
- 集団から外れた値がある場合(外れ値): 他のデータから大きく離れた値があることを示します。データの入力ミスや、特別なケースなどが考えられます。
質的データの可視化:棒グラフ
棒グラフは、カテゴリデータ(質的データ)のそれぞれの項目の数を比較するのに適したグラフです。各項目の数を棒の長さで表します。
- 横軸:質的データの各値 … 例えば、都道府県名、ホテルの種類など
- 縦軸:度数 … 各項目のデータの数
棒グラフの見方
- 棒の高さ: 各項目のデータの数を表します。
- 棒の長さが全体的に同じ場合: 各項目がほぼ同じくらいの割合で存在することを示します。
- 特定の棒が突出している場合: その項目が特に多いことを示します。
Pythonでデータを可視化してみよう!
実際にPythonを使って、宿泊価格データの分布をヒストグラムで見てみましょう。matplotlibとseabornというライブラリを使うと、簡単にきれいなグラフを描画できます。
import matplotlib.pyplot as plt
import seaborn as sns
# ヒストグラムを描画
sns.histplot(data['宿泊価格'], kde=True) # kde=True を追加すると、近似的な確率密度曲線も表示される
plt.title('宿泊価格の分布')
plt.xlabel('宿泊価格')
plt.ylabel('頻度')
plt.show()
このコードを実行すると、宿泊価格のヒストグラムが表示されます。グラフの形状を見ることで、宿泊価格がどのような分布をしているのか、どの価格帯に宿泊施設が多いのかなどを視覚的に把握できます。
また、質的なデータがあれば、棒グラフで可視化することもできます。今回のデータに適切な質的データがあるか確認してみましょう。もしあれば、以下のようにして棒グラフを描画できます。
# 例:もし '部屋タイプ' という列が質的データだった場合
if '部屋タイプ' in data.columns:
sns.countplot(x='部屋タイプ', data=data)
plt.title('部屋タイプの数')
plt.xlabel('部屋タイプ')
plt.ylabel('数')
plt.show()
初心者がつまずきやすいポイント
- ヒストグラムのビンの数: ヒストグラムを作成する際に、データを区切る幅(ビンの数)を適切に設定しないと、データの分布が正確に表現されないことがあります。ビンの数が少なすぎると大雑把な分布になり、多すぎると細かすぎて全体像が見えにくくなります。色々なビンの数を試してみて、データの分布が最もよくわかるように調整しましょう。
- 外れ値の扱い: ヒストグラムや箱ひげ図で外れ値が見つかった場合、その外れ値が本当に異常な値なのか、それともデータの特性なのかを慎重に判断する必要があります。外れ値を安易に削除すると、重要な情報が失われる可能性もあります。
- 専門用語: 統計量やグラフの名前など、初めて聞く言葉が多くて混乱するかもしれません。一つ一つ意味を理解していくことが大切です。この記事では、できるだけわかりやすい例えを使って説明するように心がけていますが、もしわからないことがあれば、遠慮なく質問してください。
まとめ
今回は、データ分析の第一歩として、データの統計量と可視化について学びました。
- 統計量は、データの特徴を数字で捉えるためのもので、平均値や中央値、標準偏差などがあります。
- データの可視化は、データの特徴を見て捉えるためのもので、ヒストグラムや棒グラフなどがあります。
これらの手法を使うことで、データがどのような性質を持っているのか、どんな傾向があるのかを理解することができます。
データの分布特性を把握することは、データ分析において非常に重要です。特徴量の意味を理解したり、分布を可視化したりすることで、データに対する理解を深め、より高度な分析に進むための土台を築きましょう。
確認問題
以前の記事で扱ったデータ [2, 4, 7, 7, 10, 12, 13, 17, 20, 22, 30] について、以下の問いに答えてください。
- 平均値を計算してください。
- 最頻値を求めてください。
【正解】
- 平均値は約13である
- (2 + 4 + 7 + 7 + 10 + 12 + 13 + 17 + 20 + 22 + 30) / 11 = 144 / 11 ≈ 13.09
- 最頻値は7である
- データの中で最も多く出現する値は7です。
【解説】
平均値、中央値などの基本統計量は、データを見ていく上で非常に重要な値ですので、しっかりと意味を理解しておきましょう。
次回予告
次回は、今回学んだ統計量や可視化の結果を踏まえて、データの中に隠れている面白い関係性を見つける方法について解説します。お楽しみに!
コメント