ななぶろ

-お役立ち情報を気楽に紹介するブログ-

機械学習プログラム例:Pandasを活用したデータ前処理と分析の基礎

www.amazon.co.jp

はじめに

機械学習(Machine Learning)は、データからパターンを学習し、予測や意思決定を行う技術です。その中でも、データの前処理と分析は、機械学習モデルの性能を大きく左右する重要なステップです。Pythonで広く利用されているライブラリであるPandasは、これらの作業を効率的に行うための強力なツールを提供します。

本記事では、Pandasを活用した機械学習プログラム例を通して、データ前処理と分析の基礎を解説します。特に、データの読み込み、クリーニング、変換、集計といった基本的な操作に焦点を当て、具体的なコード例を用いて説明していきます。

1. Pandasとは?

Pandasは、Pythonでデータ分析を行うためのライブラリです。NumPyを基盤としており、数値計算だけでなく、様々な形式のデータを効率的に処理・分析するための機能を提供します。

主な特徴:

  • DataFrame: 表形式のデータを扱うための主要なデータ構造。ExcelのようなスプレッドシートやSQLデータベースのテーブルに似ています。
  • Series: 1次元のラベル付き配列。DataFrameの列として扱われます。
  • データの読み込み/書き出し: CSV、Excel、SQLデータベースなど、様々な形式のデータを簡単に読み込んだり、書き出したりできます。
  • データクリーニング: 欠損値の処理、重複行の削除、異常値の検出など、データ品質を向上させるための機能が豊富です。
  • データ変換: データ型の一致、新しい列の作成、既存の列の分割など、データの形式を変更するための機能を提供します。
  • データ集計: グループ化、ピボットテーブル、クロス集計など、データを要約・分析するための機能が充実しています。

Pandasは、データサイエンスや機械学習の分野で広く利用されており、Pythonエコシステムにおいて不可欠なツールとなっています。

2. Pandasのインストールとインポート

Pandasを使用するには、まずインストールする必要があります。以下のコマンドをターミナルまたはコマンドプロンプトで実行します。

pip install pandas

インストールが完了したら、PythonスクリプトにPandasをインポートします。

import pandas as pd

pdはPandasの慣例的なエイリアスです。

3. データ読み込み

Pandasで最も基本的な操作の一つは、データの読み込みです。様々な形式のデータを読み込むことができますが、ここではCSVファイルの読み込みを例に説明します。

# CSVファイルをDataFrameとして読み込む
df = pd.read_csv('data.csv')

# DataFrameの内容を表示する (最初の5行)
print(df.head())

read_csv()関数は、指定されたCSVファイルを読み込み、DataFrameオブジェクトとして返します。head()メソッドは、DataFrameの最初の数行を表示するために使用されます。

その他のデータ形式:

  • Excel: pd.read_excel('data.xlsx')
  • SQLデータベース: pd.read_sql_query('SELECT * FROM table', connection) (SQLAlchemyなどのライブラリが必要)

4. データ構造の確認

読み込んだデータの構造を確認することは、データ分析の最初のステップです。Pandasでは、以下のメソッドを使用してデータの情報を取得できます。

# DataFrameの形状を表示する (行数, 列数)
print(df.shape)

# 列名を表示する
print(df.columns)

# 各列のデータ型を表示する
print(df.dtypes)

# 最初の5行を表示する
print(df.head())

# 最後の5行を表示する
print(df.tail())

# DataFrameの情報 (欠損値の数など) を表示する
print(df.info())

これらのメソッドを使用することで、データのサイズ、列名、データ型、欠損値の有無などを確認できます。

5. データクリーニング

機械学習モデルにデータを投入する前に、データクリーニングは不可欠です。以下は、一般的なデータクリーニング操作の例です。

  • 欠損値の処理:

    • 削除: df.dropna() (欠損値を含む行を削除)
    • 補完: df.fillna(value) (指定した値で欠損値を埋める)
      • 平均値: df['column'].fillna(df['column'].mean())
      • 中央値: df['column'].fillna(df['column'].median())
      • 最頻値: df['column'].fillna(df['column'].mode()[0])
  • 重複行の削除: df.drop_duplicates()

  • 異常値の検出と処理:

    • 箱ひげ図や散布図を用いて視覚的に確認する。
    • 統計的な手法 (Zスコア、IQRなど) を用いて検出する。
    • 外れ値を削除または修正する。
# 欠損値を含む行を削除
df_cleaned = df.dropna()

# 'age'列の欠損値を平均値で補完
df['age'].fillna(df['age'].mean(), inplace=True)

# 重複行を削除
df_cleaned = df.drop_duplicates()

inplace=Trueは、元のDataFrameを直接変更することを意味します。

6. データ変換

データ分析や機械学習モデルの要件に合わせて、データの形式を変換する必要があります。以下は、一般的なデータ変換操作の例です。

  • データ型の変換: df['column'].astype(dtype)

    • 文字列から数値: df['age'] = df['age'].astype(int)
    • 数値から文字列: df['id'] = df['id'].astype(str)
  • 新しい列の作成: 既存の列に基づいて新しい列を作成します。

    • 例:df['age_group'] = pd.cut(df['age'], bins=[0, 18, 35, 60, float('inf')], labels=['Child', 'Young Adult', 'Adult', 'Senior'])
  • 既存の列の分割: 1つの列を複数の列に分割します。

    • 例:df[['city', 'state']] = df['address'].str.split(',', expand=True)
  • 文字列操作: strアクセサを使用して、文字列型の列に対して様々な操作を行います。

    • 大文字/小文字変換: .str.upper(), .str.lower()
    • 部分文字列の抽出: .str[start:end]
    • 正規表現による検索: .str.contains(pattern)
# 'age'列を整数型に変換
df['age'] = df['age'].astype(int)

# 'address'列をカンマで分割し、'city'と'state'の新しい列を作成
df[['city', 'state']] = df['address'].str.split(',', expand=True)

7. データ集計

データを要約・分析するために、Pandasでは様々な集計機能が提供されています。

  • グループ化: df.groupby(column)

    • 特定の列でデータをグループ化し、各グループに対して集計関数を適用します。
  • ピボットテーブル: pd.pivot_table(data, values, index, columns)

    • 複数の列に基づいてデータを要約・分析するための表を作成します。
  • クロス集計: pd.crosstab(index, columns)

    • 2つの列の組み合わせごとの頻度を計算します。
# 'city'でグループ化し、各都市の平均年齢を計算
average_age_by_city = df.groupby('city')['age'].mean()
print(average_age_by_city)

# 'city'と'gender'に基づいてピボットテーブルを作成し、各都市・性別の人数をカウント
pivot_table = pd.pivot_table(df, values='id', index='city', columns='gender', aggfunc='count')
print(pivot_table)

8. データ分析の例:相関関係の確認

機械学習モデルの構築前に、特徴量間の相関関係を調べることは重要です。Pandasでは、corr()メソッドを使用して相関行列を計算できます。

# 相関行列を計算
correlation_matrix = df.corr()
print(correlation_matrix)

# 'age'と'income'の相関係数を表示
print(df['age'].corr(df['income']))

相関係数は、-1から1の間の値をとり、特徴量間の線形関係の強さと方向を示します。正の値は正の相関、負の値は負の相関、0に近い値は相関がないことを意味します。

9. まとめ

本記事では、Pandasを活用した機械学習プログラム例を通して、データ前処理と分析の基礎を解説しました。データの読み込み、クリーニング、変換、集計といった基本的な操作を具体的なコード例を用いて説明し、機械学習モデル構築に向けた準備段階におけるPandasの重要性を示しました。

Pandasは、データサイエンスや機械学習において非常に強力なツールであり、これらのスキルを習得することで、より効率的にデータ分析を行い、より高性能な機械学習モデルを構築できるようになります。

参考文献:

今後の学習:

  • より高度なデータクリーニング手法(欠損値の補完方法、異常値検出アルゴリズムなど)
  • 特徴量エンジニアリング(新しい特徴量の作成、既存の特徴量の変換)
  • 機械学習モデルとの連携 (scikit-learnなどのライブラリ)
  • SQLデータベースとの連携

これらの知識を習得することで、より複雑なデータ分析や機械学習プロジェクトに取り組むことができるようになります。