Pandas入門: 機械学習(教師あり学習)のためのpandas関数解説

この記事では、機械学習(特に教師あり学習)で必須となるPandasライブラリの基本的な使い方を解説しています。

Pandasは、Pythonで表形式のデータを扱うことができ、機械学習のデータ前処理で欠かせない存在です。主に自分用のメモ代わり記事ですが、参考になる箇所があれば幸いです。

Pandasのインストールと基本

まず、Pandasを使うためには、Pythonがインストールされている必要があります。Pythonがインストールされたら、以下のコマンドでPandasをインストールできます:

pip install pandas

Pandasのインポート方法

Pandasを使うには、まずPythonプログラムにインポートする必要があります。一般的には以下のように短い別名「pd」を付けてインポートします:

import pandas as pd
これで、「pd」という短い名前でPandasの機能を呼び出せるようになります。

Pandasの基本的なデータ構造

Pandasには主に2つの重要なデータ構造があります:

  1. Series:1次元の配列のようなデータ構造
  2. DataFrame:表(エクセルのシートのような)のデータ構造

機械学習では主にDataFrameを使います。

DataFrameの作成方法

DataFrameを作成するには、いくつかの方法があります:

# 辞書からDataFrameを作成
data = {
'名前': ['田中', '鈴木', '佐藤'],
'年齢': [25, 30, 22],
'身長': [170, 165, 180]
}
df = pd.DataFrame(data)

# CSVファイルからDataFrameを作成
df = pd.read_csv('データ.csv')

# Excelファイルからデータを読み込む
df = pd.read_excel('データ.xlsx')
注意点:DataFrameはインスタンス化が必要です。pd.DataFrame()のように関数を実行して、結果を変数に代入します。

教師あり学習のためのPandas基本操作

機械学習(教師あり学習)では、以下のような流れでPandasを使います:

  1. データの読み込み
  2. データの確認と前処理
  3. 特徴量(X)と目的変数(y)の分離
  4. モデルの学習とテスト

それぞれの段階で使うPandasの機能を見ていきましょう。

1. データの読み込み

# CSVファイルを読み込む例
df = pd.read_csv('住宅価格.csv')

2. データの確認と前処理

# データの最初の5行を表示
df.head()

# データの基本情報を確認
df.info()

# 基本的な統計情報を表示
df.describe()

# 欠損値の確認
df.isnull().sum()

# 欠損値の処理(平均値で埋める例)
df['年収'].fillna(df['年収'].mean(), inplace=True)

# カテゴリ変数を数値に変換(One-Hotエンコーディング)
df_encoded = pd.get_dummies(df, columns=['地域'])

3. 特徴量(X)と目的変数(y)の分離

教師あり学習では、入力特徴量(X)と予測対象の目的変数(y)を分ける必要があります:

# 特徴量と目的変数を分離
X = df.drop('住宅価格', axis=1) # '住宅価格'列以外の全ての列を特徴量として使用
y = df['住宅価格'] # '住宅価格'列を目的変数として使用

axis=1は「列方向」を意味し、特定の列を削除するという意味です。

 

4. モデルの学習とテスト

scikit-learnと組み合わせて使う例:

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# 学習用とテスト用にデータを分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# モデルの学習
model = LinearRegression()
model.fit(X_train, y_train)

# モデルの予測
y_pred = model.predict(X_test)

# モデルの評価
mse = mean_squared_error(y_test, y_pred)
print(f'平均二乗誤差: {mse}')

よく使うPandasのメソッドと用途

データの基本確認

メソッド 用途
head() 先頭の数行を表示 df.head(10)
tail() 末尾の数行を表示 df.tail(5)
info() データ型や欠損値の情報を表示 df.info()
describe() 基本統計量を表示 df.describe()
shape データの行数と列数を確認 df.shape

データの選択と抽出

メソッド 用途
[] 列を選択 df['年齢']
loc[] ラベルを使って行・列を選択 df.loc[0:5, '名前':'年齢']
iloc[] インデックスを使って行・列を選択 df.iloc[0:5, 0:2]
query() 条件式で行を選択 df.query('年齢 > 25')

データの加工

メソッド 用途
fillna() 欠損値を埋める df.fillna(0)
drop() 行や列を削除 df.drop('列名', axis=1)
rename() 列名を変更 df.rename(columns={'旧名': '新名'})
sort_values() 値でソート df.sort_values('年齢')
groupby() グループ化して集計 df.groupby('性別').mean()

データの結合

メソッド 用途
concat() データフレームを結合 pd.concat([df1, df2])
merge() SQLのJOINのようにデータを結合 pd.merge(df1, df2, on='ID')

実際の例:住宅価格予測

実際に住宅価格を予測する例を見てみましょう:

# 必要なライブラリをインポート
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import numpy as np

# データを読み込む
df = pd.read_csv('住宅価格.csv')

# データの確認
print(df.head())
print(df.info())
print(df.describe())

# 欠損値の確認と処理
missing_values = df.isnull().sum()
print(f"欠損値の数: \n{missing_values}")

# カテゴリ変数をOne-Hotエンコーディング
df_encoded = pd.get_dummies(df, columns=['地域', '駅からの距離'])

# 特徴量と目的変数を分離
X = df_encoded.drop('住宅価格', axis=1)
y = df_encoded['住宅価格']

# データを学習用とテスト用に分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# モデルの学習
model = LinearRegression()
model.fit(X_train, y_train)

# モデルの予測
y_pred = model.predict(X_test)

# モデルの評価
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
print(f'平均二乗誤差: {mse}')
print(f'平方根平均二乗誤差: {rmse}')

# 特徴量の重要度を確認
feature_importance = pd.DataFrame({
'特徴量': X.columns,
'重要度': model.coef_
})
print(feature_importance.sort_values('重要度', ascending=False))

データが大きすぎる場合の処理は?

A: サンプリングや、Daskのような大規模データ処理ライブラリを使用する方法があります。また、必要な列だけを読み込むこともできます:

df = pd.read_csv('大きなデータ.csv', usecols=['必要な列1', '必要な列2'])

まとめ

Pandasは機械学習において非常に重要なライブラリです。

基本的な操作方法を習得すれば、データの前処理を効率的に行うことができます。ここで紹介した機能は基本的なものですが、これらを組み合わせることで、複雑なデータ操作も可能になります。

まずは小さなデータセットで練習し、徐々に理解を深めていくのが重要かと。機械学習の第一歩として、ぜひ利用していきましょう。