はじめに
ML を学ぶのに Python の専門家である必要はありませんが、表形式のデータに十分慣れている必要があります。この記事は、ML で最も必要なこと、つまりデータの読み取り、フィルタリング、変換、欠落データのチェック、および単純な機能の作成に焦点を当てた「集中コース」です。
レッスンの目標
- Pandas を使用してデータを読み取り、探索する
- モデルをトレーニングする前に最も一般的な操作を実行します。
- いつノートブックを使用するのか、いつコードを別のファイルに分割するのかを理解する
1. 常に使用する 2 つのライブラリ
NumPy
配列の算術演算とベクトル化演算に使用されます。
パンダ
表形式のデータに使用されます (DataFrame)。
ほとんどの基本的な ML プロジェクトでは、モデルよりも Pandas に多くの時間を費やします。
2. 最初のデータフレームを作成します
import pandas as pd
df = pd.DataFrame({
'dien_tich': [45, 60, 80, 120],
'so_phong': [1, 2, 3, 4],
'gia': [1.2, 1.8, 2.6, 4.1]
})
print(df)
結果は、行と列を含むテーブルになります。 ML では:
- 各行は通常、観測値です
- 各列は機能またはターゲットです
3. すぐに覚えておくべき 5 つのパンダのアクション
データのクイックビュー
df.head()
df.shape
df.columns
df.info()
df.describe()
列を選択
df['dien_tich']
df[['dien_tich', 'so_phong']]
ストリームをフィルタリングする
df[df['so_phong'] >= 2]
新しい列を作成する
df['gia_m2'] = df['gia'] / df['dien_tich']
アレンジ
df.sort_values('gia', ascending=False)
4. CSVからデータを読み取る
df = pd.read_csv('data/raw/houses.csv')
データを読み取った後は、常に次のことを行う必要があります。
print(df.head())
print(df.shape)
print(df.isnull().sum())
目標は、次の 3 つの質問に答えることです。
- データの行数と列数は何ですか?
- データが欠落している列はどれですか?
- どの列が数値で、どの列がテキストですか?
5. 欠損値とは何ですか?
欠損値とはデータセルが欠落していることを指します。たとえば、顧客が年齢を申告しなかったり、システムが特定のフィールドを記録しなかったりします。
確認してください:
df.isnull().sum()
基本的な取り扱い:
- 欠落している行/列が多すぎる場合はスキップします
- 平均値、中央値、または最頻値を入力します
- フラグを追加しました
is_missing
たとえば:
df['tuoi'] = df['tuoi'].fillna(df['tuoi'].median())
6. カテゴリ変数
多くの非数値列は次のとおりです。
- 都市
- サービスパッケージの種類
- 性別
ML モデルはプレーン テキストでは直接機能しないことが多いため、変換する必要があります。最も基本的な方法はワンホット エンコーディングです。
pd.get_dummies(df, columns=['thanh_pho'], drop_first=True)
7. Groupby と集約
これは、データを理解し、フィーチャを作成するための非常に強力なスキルです。
df.groupby('thanh_pho')['gia'].mean()
df.groupby('loai_khach')['doanh_thu'].agg(['mean', 'count'])
応用例:
- 顧客グループ別の平均収益
- 都市別の購入数
- サービスパッケージ別の解約率
8. データの結合
実際には、データが 1 つのテーブルに存在することはほとんどありません。
customers = pd.read_csv('customers.csv')
orders = pd.read_csv('orders.csv')
df = customers.merge(orders, on='customer_id', how='left')
重要なルール: マージ後は、行番号と新しく生成された null 値を必ず確認してください。
9. 基本的な特徴量エンジニアリング
特徴エンジニアリングでは、モデルの学習を改善するために追加の列を作成しています。
たとえば:
gia_m2 = gia / dien_tichthoi_gian_su_dung = ngay_hien_tai - ngay_dang_kytong_chi_tieu_30_ngay
優れた機能は、多くの場合、モデルのトリックからではなく、問題の理解から生まれます。
10. ノートブックですか、それともスクリプトですか?
次の場合にノートブックを使用します。
- データを探索する
- グラフを描く
- アイデアをすぐに試してみる
次の場合にスクリプト/モジュールを使用します。
- コードが何度も繰り返される
- 再利用が必要
- パイプラインをきれいにしてメンテナンスを容易にしたい
実践的な原則:
- 探索するためのノートブック
src/コードを生成する
短い例: 最初の EDA
import pandas as pd
df = pd.read_csv('data/raw/customers.csv')
print(df.head())
print(df.shape)
print(df.isnull().sum())
print(df['plan'].value_counts())
df['monthly_spend'] = df['total_spend'] / df['months_active']
print(df[['monthly_spend', 'churn']].head())
練習問題を練習する
- 任意の CSV ファイルを読み取り、実行します
head、info、describe。 - 元のデータから少なくとも 2 つの新しいフィーチャを作成します。
- EDA から学んだことを説明する文を 3 つ書きます。
よくある間違い
- その列の意味を理解せずにデータを編集する。
- 未来からの情報を使用して機能を作成します。
- マージは完了しましたが、行番号をチェックしませんでした。
完了基準
- CSVをDataFrameに読み込むことができます
- 基本的なフィルター、グループ化、マージを実行できます
- 問題に対して意味のある新しい特徴を作成します