データの削除

PySparkで学ぶ特徴量エンジニアリング

John Hogue

Lead Data Scientist, General Mills

データが不良になる原因は?

  • 誤った記録
  • 固有のイベント
  • 不正なフォーマット
  • 重複
  • 欠損
  • 無関係なデータ

ドミノ

PySparkで学ぶ特徴量エンジニアリング

列の削除

df.select(['NO', 'UNITNUMBER', 'CLASS']).show()
+----+----------+-----+
|  NO|UNITNUMBER|CLASS|
+----+----------+-----+
|   1|      null|   SF|
| 156|        A8|   SF|
| 157|       207|   SF|
| 158|      701G|   SF|
| 159|        36|   SF|

以下の列は分析に不要

  • 'NO' 自動生成されたレコード番号
  • 'UNITNUMBER' 無関係なデータ
  • 'CLASS' すべて定数
PySparkで学ぶ特徴量エンジニアリング

列の削除

drop(*cols)

  • *cols – 削除する列名、または列名のリスト。
  • 指定した列を削除した新しいDataFrameを返す
# List of columns to drop
cols_to_drop = ['NO', 'UNITNUMBER', 'CLASS']

# Drop the columns df = df.drop(*cols_to_drop)
PySparkで学ぶ特徴量エンジニアリング

テキストフィルタリング

  • where(condition)
    • condition – types.BooleanType の列、またはSQL式の文字列。
    • 条件が真の行をフィルタリングする
  • like(other)
    • other – SQL LIKE パターン
    • ブール型の列を返す
  • ~
    • NOT 条件
df = df.where(~df['POTENTIALSHORTSALE'].like('Not Disclosed'))
PySparkで学ぶ特徴量エンジニアリング

外れ値のフィルタリング

データを平均(μ)の3標準偏差(3σ)以内にフィルタリングする

標準正規分布

PySparkで学ぶ特徴量エンジニアリング

値フィルタリングの例

# Calculate values used for filtering
std_val = df.agg({'SALESCLOSEPRICE': 'stddev'}).collect()[0][0]
mean_val = df.agg({'SALESCLOSEPRICE': 'mean'}).collect()[0][0]

# Create three standard deviation (μ ± 3σ) upper and lower bounds for data hi_bound = mean_val + (3 * std_val) low_bound = mean_val - (3 * std_val)
# Use where() to filter the DataFrame between values df = df.where((df['LISTPRICE'] < hi_bound) & (df['LISTPRICE'] > low_bound))
PySparkで学ぶ特徴量エンジニアリング

NA・NULLの削除

DataFrame.dropna()

  • how: 'any' または 'all'。'any' の場合、NULL が1つでもあればレコードを削除。'all' の場合、すべての値がNULLの場合のみ削除。
  • thresh: int、デフォルトはNone。指定した場合、非NULL値がthresh未満のレコードを削除。howパラメータより優先される。
  • subset: 対象とする列名のリスト(任意)。
PySparkで学ぶ特徴量エンジニアリング

NA・NULLの削除

# Drop any records with NULL values
df = df.dropna()

# drop records if both LISTPRICE and SALESCLOSEPRICE are NULL df = df.dropna(how='all', subset['LISTPRICE', 'SALESCLOSEPRICE '])
# Drop records where at least two columns have NULL values df = df.dropna(thresh=2)
PySparkで学ぶ特徴量エンジニアリング

重複の削除

重複とは?

  • 2つ以上のレコードがすべて同じ情報を持つ
  • 列の削除やデータセット結合後に重複を確認する

dropDuplicates()

  • DataFrame全体または列リストを対象に実行可能
  • PySparkでは削除されるレコードの順序は保証されない
# Entire DataFrame
df.dropDuplicates()

# Check only a column list df.dropDuplicates(['streetaddress'])
PySparkで学ぶ特徴量エンジニアリング

練習しましょう!

PySparkで学ぶ特徴量エンジニアリング

Preparing Video For Download...