単変量解析
個々の特徴量を理解するため、分布プロット、ヒストグラム、箱ひげ図、カウントプロットを扱います。
「単変量解析」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
単変量分析とは
単変量分析では、1回に1つの変数を調べ、その分布の中心、ばらつき、形状、特異な値を理解します。
適切なグラフは変数の種類によって異なります。
- 数値 → ヒストグラム、KDE、箱ひげ図、バイオリンプロット
- カテゴリ → カウントプロット(頻度を示す棒グラフ)
プロット用ライブラリの準備
Matplotlib(plt)とSeaborn(sns)を使います。SeabornはMatplotlibの上に構築されており、統計プロット向けにより見やすいデフォルト設定を備えています。
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
sns.set_theme(style="whitegrid")
df = pd.read_csv("data.csv")plt.histによるヒストグラム
ヒストグラムは、数値をビンに分け、それぞれのビンに入る値の個数を数えます。分布全体の形状を把握できます。
bins引数は解像度を調整します。少なすぎると構造が隠れ、多すぎるとノイズが増えます。
plt.hist(df["age"], bins=30, edgecolor="black")
plt.xlabel("Age")
plt.ylabel("Count")
plt.title("Age Distribution")
plt.show()KDEプロット — 滑らかな密度
カーネル密度推定(sns.kdeplot)は、分布を近似する滑らかな曲線を描きます。ぎざぎざしたヒストグラムの棒よりも読み取りやすい場合があります。
sns.histplot(..., kde=True)を使うと、両方を組み合わせて棒の上に滑らかな曲線を重ねられます。
sns.kdeplot(df["age"], fill=True)
plt.show()
sns.histplot(df["age"], bins=30, kde=True)
plt.show()歪みの検出
歪度は非対称性を表します。右側に長い裾がある場合は右(正)の歪み、左側に長い裾がある場合は左(負)の歪みです。
所得、価格、件数は通常、右に歪んだ分布になります。df[col].skew()で数値化でき、0から大きく離れた値は歪みを示します。
print(df["income"].skew()) # e.g. 2.3 -> strong right skew
sns.histplot(df["income"], bins=40, kde=True)
plt.show()二峰性の検出
二峰性のある分布には2つのピークがあります。これは、異なる2つのグループが混在している兆候であることが多いです(たとえば、1つの価格列に2種類の商品が含まれている場合など)。
KDEプロットを使うと、二峰性が明確になります。2つの山がないか確認しましょう。隠れたカテゴリ変数がこの分離を説明している可能性を示す手がかりです。
sns.kdeplot(df["price"], fill=True)
plt.title("Two peaks suggest two subpopulations")
plt.show()sns.boxplotによる箱ひげ図
箱ひげ図は、中央値(中央の線)、四分位範囲(IQR、箱)、およそIQRの1.5倍まで伸びるひげを示します。ひげの外側にある点は外れ値として示されます。
sns.boxplot(x=df["income"])
plt.title("Income — box plot")
plt.show()外れ値とIQRルール
箱ひげ図ではIQRルールを使います。点がQ1 - 1.5*IQRより下、またはQ3 + 1.5*IQRより上にある場合、その点は外れ値です。
境界値を自分で計算して、極端な値を除外したり上限・下限に収めたりできます。
q1 = df["income"].quantile(0.25)
q3 = df["income"].quantile(0.75)
iqr = q3 - q1
low, high = q1 - 1.5*iqr, q3 + 1.5*iqr
outliers = df[(df["income"] < low) | (df["income"] > high)]
print(len(outliers), "outliers")sns.violinplotによるバイオリンプロット
バイオリンプロットは、箱ひげ図と左右反転したKDEを組み合わせたものです。各高さでの幅が密度を示すため、分布の形状と要約統計量を同時に確認できます。
通常の箱ひげ図では隠れてしまう歪みや二峰性を見つけるのに、バイオリンプロットは適しています。
sns.violinplot(x=df["age"])
plt.title("Age — violin plot")
plt.show()カテゴリ変数のカウントプロット
カテゴリ列にはsns.countplotを使います。これはカテゴリの頻度を示す棒グラフで、value_counts()を視覚化したものです。
order引数を使うと、読みやすいように頻度順で棒を並べられます。
order = df["city"].value_counts().index
sns.countplot(y="city", data=df, order=order)
plt.title("Records per city")
plt.show()適切な単変量プロットの選択
簡単な判断ガイド:
- 数値列の形状 → ヒストグラムまたはKDE
- 外れ値と四分位数 → 箱ひげ図
- 形状と要約を同時に確認 → バイオリンプロット
- カテゴリの頻度 → カウントプロット
クイックチェック:プロットの選択
1つの数値列の中央値、四分位数、外れ値を確認したいとします。
まとめ:単変量分析
これで、1回に1つの変数を調べる方法を学びました。
- 分布の形状には
plt.histとsns.kdeplot - 非対称性の定量化には
.skew()、二峰性の確認にはKDEの山 - 外れ値の確認には
sns.boxplotとIQRルール - 形状と要約の同時確認には
sns.violinplot - カテゴリの頻度には
sns.countplot
次は、2つ以上の変数の関係を調べます。
AI チューターと学ぶ Python — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 53
- レッスン
- 225
よくある質問
「単変量解析」レッスンは無料ですか?
はい。「単変量解析」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「単変量解析」で何を学びますか?
個々の特徴量を理解するため、分布プロット、ヒストグラム、箱ひげ図、カウントプロットを扱います。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「単変量解析」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。