注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
この内容は learn.palantir.com ↗ でも以下の内容をご覧いただけますが、アクセシビリティの観点から、ここに掲載しています。
ユーザーの生データの値の一部は最適な形式ではありません。この演習では、データの前処理に使用する関数を含む2つのユーティリティファイルを作成します。ユーザーがパイプラインの早い段階で修正したい異常には、次のようなものがあります(これらに限らず):
flight_alerts_raw
の flightDate
行は現在、文字列型であるのではなく、日付型です。mapped_value
行には余分なスペースが含まれ、テキストは小文字で _
文字で区切られています。現在の値 "·······open_and_assigned." よりも "Open and Assigned" が良いです。この最初のユーティリティファイルでは、リポジトリが作成されたときに提供された examples.py
ファイルを改名して再利用します。このトレーニングのルートは、Python/PySpark を使用したデータ変換技術についての知識を前提としており、構文についての指示は提供されません。ただし、提供されるコードには、その目的を明確にするためのコメントが含まれています。
リポジトリの Master
から yourName/feature/preprocessing という新しいブランチを作成します。
リポジトリの Files パネルの examples.py
ファイルを右クリックし、それを cleaning_utils.py
に Rename します。
コードエディタウィンドウのファイルの内容を削除します(例えば、ctrl + a → Delete を使用します)。
下のコードブロックをコピーし、それをコードエディタに貼り付けます。
コードコメントで説明されている機能が、上記で説明した問題の一部を解決し、行名を正規化する方法に注目してください。
from pyspark.sql import functions as F
import re
def normalize_strings(df, string_columns):
"""
この関数は、データフレーム(df)と文字列行の配列を引数として取ります
この関数はデータフレームの文字列行リストを通過し、
1. アンダースコアをスペースに置き換えます
2. 各単語の最初の文字を大文字にします
3. 末尾の空白をトリムします
4. 空の文字列を null に置き換えます
"""
for colm in string_columns:
df = df.withColumn(colm, F.regexp_replace(F.col(colm), '_', ' '))
df = df.withColumn(colm, F.initcap(F.col(colm)))
df = df.withColumn(colm, F.trim(F.col(colm)))
df = df.withColumn(colm, F.when(F.col(colm) != "", F.col(colm)).otherwise(None))
return df
def normalize_column_names(df):
"""
この関数はデータフレーム(df)を引数として取ります
この関数は、データフレームのすべての行名を snake_case に変換するために normalize_column_name 関数を呼び出します
"""
return df.select(
*(F.col(f"`{colm}`").alias(normalize_column_name(colm)) for colm in df.columns)
)
def normalize_column_name(name):
"""
この関数は単一の行名(文字列)を引数として取ります
この関数は:
1. 末尾の空白をトリムします
2. camelCase を snake_case に変換します
3. 連続するアンダースコアを単一のアンダースコアに折りたたみます
4. 末尾のアンダースコアを削除します
"""
name = name.strip()
name = re.sub(r'([a-z])([A-Z])', r'\1_\2', name)
name = re.sub(r'[^a-zA-Z0-9_]', r'_', name)
name = re.sub(r'_+', r'_', name)
name = re.sub(r'_$', r'', name)
return name.lower()
次のメッセージでコードをコミットします:"feature: add cleaning utils."