この記事では、機械学習(特に教師あり学習)で必須となるPandasライブラリの基本的な使い方を解説しています。
Pandasは、Pythonで表形式のデータを扱うことができ、機械学習のデータ前処理で欠かせない存在です。主に自分用のメモ代わり記事ですが、参考になる箇所があれば幸いです。
Pandasのインストールと基本
まず、Pandasを使うためには、Pythonがインストールされている必要があります。Pythonがインストールされたら、以下のコマンドでPandasをインストールできます:
pip install pandas
Pandasのインポート方法
Pandasを使うには、まずPythonプログラムにインポートする必要があります。一般的には以下のように短い別名「pd」を付けてインポートします:
import pandas as pd
Pandasの基本的なデータ構造
Pandasには主に2つの重要なデータ構造があります:
- Series:1次元の配列のようなデータ構造
- 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')
pd.DataFrame()
のように関数を実行して、結果を変数に代入します。教師あり学習のためのPandas基本操作
機械学習(教師あり学習)では、以下のような流れでPandasを使います:
- データの読み込み
- データの確認と前処理
- 特徴量(X)と目的変数(y)の分離
- モデルの学習とテスト
それぞれの段階で使う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は機械学習において非常に重要なライブラリです。
基本的な操作方法を習得すれば、データの前処理を効率的に行うことができます。ここで紹介した機能は基本的なものですが、これらを組み合わせることで、複雑なデータ操作も可能になります。
まずは小さなデータセットで練習し、徐々に理解を深めていくのが重要かと。機械学習の第一歩として、ぜひ利用していきましょう。