2. [Repositories] Introduction to Data Transformations14 - クリーニングユーティリティの作成
Warning

注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

14 - クリーニングユーティリティの作成

この内容は learn.palantir.com ↗ でも以下の内容をご覧いただけますが、アクセシビリティの観点から、ここに掲載しています。

📖 タスクの概要

ユーザーの生データの値の一部は最適な形式ではありません。この演習では、データの前処理に使用する関数を含む2つのユーティリティファイルを作成します。ユーザーがパイプラインの早い段階で修正したい異常には、次のようなものがあります(これらに限らず):

  • flight_alerts_rawflightDate 行は現在、文字列型であるのではなく、日付型です。
  • 両方のマッピングデータセットの mapped_value 行には余分なスペースが含まれ、テキストは小文字で _ 文字で区切られています。現在の値 "·······open_and_assigned." よりも "Open and Assigned" が良いです。

この最初のユーティリティファイルでは、リポジトリが作成されたときに提供された examples.py ファイルを改名して再利用します。このトレーニングのルートは、Python/PySpark を使用したデータ変換技術についての知識を前提としており、構文についての指示は提供されません。ただし、提供されるコードには、その目的を明確にするためのコメントが含まれています。

🔨 タスクの説明

  1. リポジトリの Master から yourName/feature/preprocessing という新しいブランチを作成します。

  2. リポジトリの Files パネルの examples.py ファイルを右クリックし、それを cleaning_utils.pyRename します。

  3. コードエディタウィンドウのファイルの内容を削除します(例えば、ctrl + a → Delete を使用します)。

  4. 下のコードブロックをコピーし、それをコードエディタに貼り付けます。

    コードコメントで説明されている機能が、上記で説明した問題の一部を解決し、行名を正規化する方法に注目してください。

    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()
    
  5. 次のメッセージでコードをコミットします:"feature: add cleaning utils."