フリーキーズ | 独学プログラミング

データの種類を知る!質的変数と量的変数の違いを初心者にもわかりやすく解説

リンドくん

リンドくん

たなべ先生、データサイエンスの勉強を始めたんですけど、「質的変数」と「量的変数」って何が違うんですか?

たなべ

たなべ

これはデータ分析の基礎中の基礎なんだ。
簡単に言うと、数字で計算できるかどうかの違いなんだよ。例えば「身長」と「性別」、どちらが計算できると思う?

リンドくん

リンドくん

えっと...身長は平均とか出せそうですけど、性別は...できないですよね?

たなべ

たなべ

その通り!それがまさに量的変数と質的変数の違いなんだ。
今日はこの大事な概念をしっかり理解していこうね。

データサイエンスを学び始めると、必ず最初に出会うのが「変数の種類」という概念です。
データを正しく分析するためには、そのデータがどんな性質を持っているかを理解することが不可欠なんです。

なぜなら、データの種類によって使える分析手法や統計処理が全く異なるからです。
例えば、平均値を計算できるデータもあれば、それが意味をなさないデータもあります。

本記事では、データサイエンスの基礎となる「質的変数」と「量的変数」について、初心者の方でも理解できるよう、具体例とPythonコードを交えながら詳しく解説していきます。

オンラインコミュニティ運営しています

HackATAは、IT技術を習得する人のために広く開かれたオンラインコミュニティです。 現在、無料コミュニティとして開放していますので、ご気軽に参加してください。

✓ 再立ち上げ

✓ コミュニティの方向性について意見募集中

HackATA公式Webサイト

変数とは?データ分析の基本単位を理解しよう

リンドくん

リンドくん

そもそも「変数」って何なんですか?プログラミングの変数とは違うんですか?

たなべ

たなべ

プログラミングの変数と考え方は似ているけど、データサイエンスでは観測や測定の対象となる特性や属性のことを指すんだ。
例えば、学生のデータなら「年齢」「性別」「テストの点数」などが変数になるよ。

変数の基本概念

データサイエンスにおける変数(variable)とは、観測対象の特性や属性を表すものです。
例えば、ある学校の生徒データを考えてみましょう。

  • 年齢: 15歳、16歳、17歳...
  • 性別: 男性、女性
  • 身長: 160cm、175cm、168cm...
  • 好きな科目: 数学、国語、英語...
  • テストの点数: 85点、92点、78点...

これらすべてが「変数」です。
データ分析では、これらの変数がどんな性質を持っているかを理解することが、正しい分析への第一歩となります。

なぜ変数の種類を理解する必要があるのか

変数の種類を理解することは、以下の理由から非常に重要です。

  • 適切な分析手法の選択 → 変数の種類によって使える統計手法が異なります
  • 正しいグラフ化 → データの性質に合った可視化方法を選べます
  • 意味のある結果の導出 → 誤った分析を避け、信頼できる結果を得られます

例えば、「性別」という変数の平均値を計算しても意味がありませんよね。
これは「性別」が質的変数だからです。このように、変数の種類を正しく理解することで、意味のある分析ができるようになるのです。

質的変数とは?カテゴリーで分類されるデータ

リンドくん

リンドくん

質的変数って、具体的にどういうものなんですか?

たなべ

たなべ

質的変数はカテゴリーや種類を表す変数なんだ。
「男性/女性」「都道府県名」「好きな色」みたいに、数値で計算できないデータだよ。別名「カテゴリカル変数」とも呼ばれるんだ。

質的変数の特徴

質的変数(qualitative variable)は、以下のような特徴を持っています。

  • カテゴリーや種類を表現する
  • 数値計算(足し算、引き算など)に意味がない
  • 分類や集計に使われる
  • グループ分けの基準になる

具体的な例を見てみましょう。

import pandas as pd

# 学生データの例
student_data = pd.DataFrame({
    '名前': ['田中', '佐藤', '鈴木', '高橋', '伊藤'],
    '性別': ['男性', '女性', '男性', '女性', '男性'],
    '血液型': ['A型', 'O型', 'B型', 'AB型', 'A型'],
    '好きな科目': ['数学', '英語', '理科', '数学', '国語'],
    '居住地': ['東京', '大阪', '東京', '福岡', '東京']
})

print(student_data)

この例では、「性別」「血液型」「好きな科目」「居住地」がすべて質的変数です。
これらはカテゴリーを表しており、数値計算はできません。

質的変数の2つのタイプ

質的変数は、さらに2つのタイプに分類されます。

名義尺度(Nominal Scale)

順序に意味がないカテゴリーデータです。

例:

  • 性別(男性/女性)
  • 血液型(A型/B型/O型/AB型)
  • 都道府県名
  • 好きな色
# 名義尺度の例: 性別の集計
gender_counts = student_data['性別'].value_counts()
print("性別の人数:")
print(gender_counts)
# 出力:
# 男性    3
# 女性    2

順序尺度(Ordinal Scale)

カテゴリーに順序や序列があるデータです。

例:

  • 学年(小学生 < 中学生 < 高校生 < 大学生)
  • 成績(優 > 良 > 可 > 不可)
  • 満足度(非常に満足 > 満足 > 普通 > 不満 > 非常に不満)
  • Tシャツのサイズ(S < M < L < XL)
# 順序尺度の例
satisfaction_data = pd.DataFrame({
    '回答者': ['A', 'B', 'C', 'D', 'E'],
    '満足度': ['満足', '非常に満足', '普通', '満足', '不満']
})

# 順序を定義
satisfaction_order = ['非常に不満', '不満', '普通', '満足', '非常に満足']
satisfaction_data['満足度'] = pd.Categorical(
    satisfaction_data['満足度'],
    categories=satisfaction_order,
    ordered=True
)

print(satisfaction_data.sort_values('満足度'))

順序尺度は「大小関係」はわかりますが、その差の大きさは測定できません
例えば、「優」と「良」の差が、「良」と「可」の差と同じかどうかはわからないのです。

量的変数とは?数値で測定できるデータ

リンドくん

リンドくん

じゃあ量的変数は、数字で計算できるデータってことですか?

たなべ

たなべ

その通り!量的変数は数値で測定され、計算に意味があるデータなんだ。
身長、体重、テストの点数、年齢...これらは全部量的変数だよ。平均値や標準偏差といった統計量が計算できるんだ。

量的変数の特徴

量的変数(quantitative variable)は、以下のような特徴があります。

  • 数値で表現される
  • 数学的な計算(平均、合計、差など)に意味がある
  • 連続的または離散的な値を取る
  • より詳細な統計分析が可能

具体例を見てみましょう。

# 学生の成績データ
score_data = pd.DataFrame({
    '名前': ['田中', '佐藤', '鈴木', '高橋', '伊藤'],
    '年齢': [15, 16, 15, 17, 16],
    '身長(cm)': [165, 158, 172, 160, 168],
    '数学': [85, 92, 78, 88, 95],
    '英語': [78, 85, 82, 90, 88]
})

# 量的変数の統計量を計算
print("基本統計量:")
print(score_data[['年齢', '身長(cm)', '数学', '英語']].describe())

# 平均点の計算
print("\n数学の平均点:", score_data['数学'].mean())
print("英語の平均点:", score_data['英語'].mean())

この例では、「年齢」「身長」「数学の点数」「英語の点数」がすべて量的変数です。
これらは平均値や標準偏差などの統計量を計算することに意味があります。

量的変数の2つのタイプ

量的変数も、さらに2つのタイプに分類されます。

間隔尺度(Interval Scale)

等間隔の目盛りがあるが、絶対的なゼロ点がないデータです。

例)
  • 温度(摂氏・華氏)→ 0度は「温度がない」という意味ではない
  • 西暦年 → 紀元0年は「時間がない」という意味ではない
  • IQスコア
# 間隔尺度の例: 気温データ
temperature_data = pd.DataFrame({
    '日付': ['1月1日', '1月2日', '1月3日', '1月4日', '1月5日'],
    '気温(℃)': [5, 8, 3, 10, 7]
})

# 平均気温の計算は意味がある
print("平均気温:", temperature_data['気温(℃)'].mean(), "℃")

# しかし、「8℃は4℃の2倍暖かい」とは言えない
# なぜなら、0℃は「温度がない」ことを意味しないから

間隔尺度では、差は意味がありますが、比は意味を持ちません
例えば、20℃と10℃の差は10℃ですが、「20℃は10℃の2倍暖かい」とは言えないのです。

比率尺度(Ratio Scale)

等間隔の目盛りがあり、絶対的なゼロ点があるデータです。

例)
  • 身長、体重
  • 年齢
  • 収入、価格
  • 距離、速度
  • テストの得点(0点が「何もできない」を意味する場合)
# 比率尺度の例: 身長データ
height_data = pd.DataFrame({
    '名前': ['田中', '佐藤', '鈴木', '高橋', '伊藤'],
    '身長(cm)': [165, 158, 172, 160, 168],
    '体重(kg)': [58, 52, 68, 55, 62]
})

# 平均身長の計算
print("平均身長:", height_data['身長(cm)'].mean(), "cm")

# 比率の計算も意味がある
print("\n田中さんの身長は佐藤さんの何倍?")
ratio = height_data.loc[0, '身長(cm)'] / height_data.loc[1, '身長(cm)']
print(f"{ratio:.2f}倍")

# BMI(体重/身長の2乗)の計算
height_data['BMI'] = height_data['体重(kg)'] / (height_data['身長(cm)'] / 100) ** 2
print("\nBMI:")
print(height_data[['名前', 'BMI']])

比率尺度は最も情報量が多い尺度で、すべての数学的操作が意味を持ちます
「身長が2倍」「速度が3倍」といった比較ができるのは、絶対的なゼロ点があるからです。

変数の種類を見分けるポイント

リンドくん

リンドくん

実際にデータを見たとき、どうやって判断すればいいんですか?

たなべ

たなべ

いくつかの判断基準を覚えておくと便利だよ。
特に「計算に意味があるか」「ゼロ点があるか」を考えると分かりやすいんだ。

判断フローチャート

データの種類を見分けるには、以下の質問を順番に考えてみましょう。

  1. 数値で表現されているか?

    • YES → 量的変数の可能性
    • NO → 質的変数
  2. 数値計算(平均など)に意味があるか?

    • YES → 量的変数
    • NO → 質的変数(または順序尺度)
  3. 絶対的なゼロ点があるか?(量的変数の場合)

    • YES → 比率尺度
    • NO → 間隔尺度
  4. カテゴリー間に順序があるか?(質的変数の場合)

    • YES → 順序尺度
    • NO → 名義尺度

よくある間違い例

初心者がよく間違えるパターンを見てみましょう。

  • 郵便番号: 数字ですが、計算に意味がないので質的変数(名義尺度)
  • 電話番号: 数字ですが、計算に意味がないので質的変数(名義尺度)
  • 学生番号: 数字ですが、識別のためだけなので質的変数(名義尺度)
  • 背番号: 数字ですが、単なる識別記号なので質的変数(名義尺度)

これらは見た目は数字ですが、「平均を計算する」「足し算する」といった操作には意味がありません。
そのため、質的変数として扱う必要があるのです。

Pythonでデータの種類を判定しよう

リンドくん

リンドくん

実際のデータで変数の種類を判定する練習がしたいです!

たなべ

たなべ

それじゃあ、実際のデータセットを使って、変数の種類を判定してみようか。
Pythonのコードで自動判定する方法も教えるよ。

サンプルデータセットの作成

まず、様々な種類の変数を含むデータセットを作成しましょう。

import pandas as pd
import numpy as np

# 総合的なサンプルデータ
comprehensive_data = pd.DataFrame({
    # 質的変数(名義尺度)
    '学生ID': ['S001', 'S002', 'S003', 'S004', 'S005'],
    '性別': ['男性', '女性', '男性', '女性', '男性'],
    '出身地': ['東京', '大阪', '東京', '福岡', '北海道'],
    
    # 質的変数(順序尺度)
    '学年': ['1年', '2年', '3年', '1年', '2年'],
    '成績評価': ['優', '良', '優', '可', '良'],
    
    # 量的変数(間隔尺度)
    'IQ': [110, 125, 105, 130, 115],
    
    # 量的変数(比率尺度)
    '年齢': [16, 17, 18, 16, 17],
    '身長': [165, 158, 172, 160, 168],
    '数学': [85, 92, 78, 88, 95],
    '英語': [78, 85, 82, 90, 88]
})

print("サンプルデータ:")
print(comprehensive_data)

変数の種類を自動判定する

Pythonを使って、データの種類を判定するコードを書いてみましょう。

def classify_variable_type(series):
    """
    変数の種類を判定する関数
    """
    # データ型を確認
    dtype = series.dtype
    unique_count = series.nunique()
    total_count = len(series)
    
    # 数値型かどうか
    if pd.api.types.is_numeric_dtype(series):
        # ユニーク値が少ない場合は順序尺度の可能性
        if unique_count < 10 and unique_count < total_count * 0.5:
            return "質的変数(順序尺度の可能性)"
        else:
            return "量的変数"
    else:
        # 文字列型の場合
        if unique_count < 10:
            return "質的変数(名義尺度または順序尺度)"
        else:
            return "質的変数(名義尺度)"

# 各変数の種類を判定
print("\n変数の種類判定:")
for column in comprehensive_data.columns:
    var_type = classify_variable_type(comprehensive_data[column])
    print(f"{column}: {var_type}")

変数の種類に応じた分析例

それぞれの変数の種類に適した分析を実行してみましょう。

# 質的変数の分析: 度数分布
print("\n=== 質的変数の分析 ===")
print("\n性別の度数分布:")
print(comprehensive_data['性別'].value_counts())

print("\n出身地の度数分布:")
print(comprehensive_data['出身地'].value_counts())

# 量的変数の分析: 基本統計量
print("\n=== 量的変数の分析 ===")
quantitative_cols = ['年齢', '身長', '数学', '英語', 'IQ']
print("\n基本統計量:")
print(comprehensive_data[quantitative_cols].describe())

# 相関分析(量的変数のみ)
print("\n相関係数:")
print(comprehensive_data[quantitative_cols].corr())

可視化で理解を深める

変数の種類に応じた適切なグラフを作成しましょう。

import matplotlib.pyplot as plt
import japanize_matplotlib  # 日本語表示用

# グラフ設定
fig, axes = plt.subplots(2, 2, figsize=(12, 10))

# 質的変数: 棒グラフ
comprehensive_data['性別'].value_counts().plot(
    kind='bar',
    ax=axes[0, 0],
    title='性別の分布',
    color='skyblue'
)
axes[0, 0].set_ylabel('人数')

# 質的変数: 円グラフ
comprehensive_data['出身地'].value_counts().plot(
    kind='pie',
    ax=axes[0, 1],
    title='出身地の分布',
    autopct='%1.1f%%'
)

# 量的変数: ヒストグラム
axes[1, 0].hist(comprehensive_data['数学'], bins=5, color='lightgreen', edgecolor='black')
axes[1, 0].set_title('数学の点数分布')
axes[1, 0].set_xlabel('点数')
axes[1, 0].set_ylabel('人数')

# 量的変数: 箱ひげ図
comprehensive_data[['数学', '英語']].boxplot(ax=axes[1, 1])
axes[1, 1].set_title('数学と英語の点数比較')
axes[1, 1].set_ylabel('点数')

plt.tight_layout()
plt.show()

このように、変数の種類によって適切な分析手法や可視化方法が変わってきます
質的変数には度数分布や棒グラフ、量的変数には平均値や箱ひげ図といった具合です。

まとめ

リンドくん

リンドくん

なるほど!データの種類を正しく理解することが、正しい分析の第一歩なんですね!

たなべ

たなべ

その通り!変数の種類を見極める力は、データサイエンティストとして必須のスキルなんだ。
今日学んだことを実際のデータで練習してみてね。きっと分析がもっと楽しくなるはずだよ!

この記事では、データサイエンスの基礎となる「質的変数」と「量的変数」について詳しく解説してきました。
重要なポイントを改めて整理しましょう。

質的変数(カテゴリカル変数)
  • カテゴリーや種類を表す変数
  • 数値計算に意味がない
  • 名義尺度と順序尺度の2種類がある
  • 例: 性別、血液型、都道府県、成績評価
量的変数(数値変数)
  • 数値で測定され、計算に意味がある変数
  • 間隔尺度と比率尺度の2種類がある
  • 例: 身長、体重、年齢、テストの点数

判断のポイント

  • 数値で表現されていても、計算に意味がなければ質的変数
  • 絶対的なゼロ点があるかどうかで、間隔尺度と比率尺度を区別
  • 変数の種類によって、適切な分析手法が変わる

データサイエンスの学習は、基礎をしっかり固めることが何より重要です。
今日学んだ変数の種類は、これからのすべての分析の土台となる知識ですので、ぜひ何度も復習して身につけてください。

この記事をシェア

関連するコンテンツ