Chuyển đến nội dung chính

レッスン 3: ML のための Python/Pandas 短期集中コース

DataFrame、フィルタリング、groupby、merge、基本的な欠損データ処理、および Python データに慣れていない人向けの高速 EDA。

🧠 AI と ML — レッスン 2 レッスン 3: ML のための Python/Pandas 短期集中コース

機械学習: 基本から高度まで

パート 0: 初心者のための入門 (第 0 週)

xdev.asia

はじめに

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 つの質問に答えることです。

  1. データの行数と列数は何ですか?
  2. データが欠落している列はどれですか?
  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_tich
  • thoi_gian_su_dung = ngay_hien_tai - ngay_dang_ky
  • tong_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())

練習問題を練習する

  1. 任意の CSV ファイルを読み取り、実行します head、 info、 describe。
  2. 元のデータから少なくとも 2 つの新しいフィーチャを作成します。
  3. EDA から学んだことを説明する文を 3 つ書きます。

よくある間違い

  • その列の意味を理解せずにデータを編集する。
  • 未来からの情報を使用して機能を作成します。
  • マージは完了しましたが、行番号をチェックしませんでした。

完了基準

  • CSVをDataFrameに読み込むことができます
  • 基本的なフィルター、グループ化、マージを実行できます
  • 問題に対して意味のある新しい特徴を作成します