次の方法で共有


概要: データの強化とクレンジング

この入門記事では、Azure Databricks ノートブックを使用して、Python、Scala、R を使用して Unity カタログのテーブルに以前に読み込まれたニューヨーク州の赤ちゃんの名前データをクレンジングおよび強化する方法について説明します。この記事では、生データ テーブルに対し、列名の変更、大文字の変更、各赤ちゃんの名前の性別をスペルに変更し、その後に DataFrame をシルバー テーブルに保存します。 そして、データをフィルター処理して 2021 年のデータのみを含むようにし、状態レベルでデータをグループ化し、カウント順でデータを並べ替えます。 最後に、この DataFrame をゴールド テーブルに保存し、横棒グラフでデータを視覚化します。 シルバー テーブルとゴールド テーブルの詳細については、「medallion アーキテクチャ」を参照してください。

重要

本概要記事は、「概要: 追加のデータを取り込んで挿入する」に基づいています。 この記事の手順を完了することが、本記事のタスクを完了するためには必要です。 この概要記事の完成したノートブックについては、「データのインポートと視覚化 ノートブック」を参照してください。

要件

この記事のタスクを完了するには、次の要件を満たす必要があります。

  • ワークスペースで Unity Catalog が有効になっている必要があります。 Unity Catalog の概要については、「Unity Catalog の設定と管理」を参照してください。
  • ボリュームの WRITE VOLUME 権限、親スキーマの USE SCHEMA 権限、親カタログの USE CATALOG 権限が必要です。
  • 既存のコンピューティング リソースを使用するか、新しいコンピューティング リソースを作成するためのアクセス許可が必要です。 「はじめに: アカウントとワークスペースのセットアップ」を参照するか、Databricks 管理者に問い合わせてください。

ヒント

本記事の完成したノートブックについては、「データのクレンジングと強化ノートブック」を参照してください。

手順 1: 新しいノートブックを作成する

ワークスペースにノートブックを作成するには、サイドバーの 新規アイコン [新規] をクリックしてから、[ノートブック] をクリックします。 ワークスペースに空のノートブックが開きます。

ノートブックの作成と管理について詳しくは、「Notebooks を管理する」を参照してください。

手順 2: 変数を定義する

この手順では、この記事で作成するノートブックの例で使用する変数を定義します。

  1. 次のコードをコピーして、新しい空のノートブック セルに貼り付けます。 <catalog-name><schema-name><volume-name> を、Unity Catalog ボリュームのカタログ、スキーマ、ボリュームの名前に置き換えます。 オプションとして、table_name を、任意のテーブル名に置き換えます。 この記事の後半で、このテーブルに赤ちゃんの名前のデータを保存します。

  2. Shift+Enter キーを押してセルを実行し、新しい空のセルを作成します。

    Python

    catalog = "<catalog_name>"
    schema = "<schema_name>"
    table_name = "baby_names"
    silver_table_name = "baby_names_prepared"
    gold_table_name = "top_baby_names_2021"
    path_table = catalog + "." + schema
    print(path_table) # Show the complete path
    

    Scala

    val catalog = "<catalog_name>"
    val schema = "<schema_name>"
    val tableName = "baby_names"
    val silverTableName = "baby_names_prepared"
    val goldTableName = "top_baby_names_2021"
    val pathTable = s"${catalog}.${schema}"
    print(pathTable) // Show the complete path
    

    R

    catalog <- "<catalog_name>"
    schema <- "<schema_name>"
    volume <- "<volume_name>"
    table_name <- "baby_names"
    silver_table_name <- "baby_names_prepared"
    gold_table_name <- "top_baby_names_2021"
    path_table <- paste(catalog, ".", schema, sep = "")
    print(path_table) # Show the complete path
    

手順 3: 生データを新しい DataFrame に読み込む

この手順では、以前に Delta テーブルに保存された生データを、さらに分析するためにこのデータをクレンジングおよび拡張するための準備として、新しい DataFrame に読み込みます。

  1. 次のコードをコピーして、新しい空のノートブック セルに貼り付けます。

    Python

    df_raw = spark.read.table(f"{path_table}.{table_name}")
    display(df_raw)
    

    Scala

    val dfRaw = spark.read.table(s"${pathTable}.${tableName}")
    display(dfRaw)
    

    R

    # Load the SparkR package that is already preinstalled on the cluster.
    library(SparkR)
    df_raw = sql(paste0("SELECT * FROM ", path_table, ".", table_name))
    display(df_raw)
    
  2. Shift+Enter キーを押してセルを実行してから、次のセルに移動します。

手順 4: 生データをクレンジングして強化し、保存する

このステップでは、Year列の名前を変更し、First_Name列のデータを大文字に変更し、Sexの列の値を更新して性別を明記し、DataFrameを新しいテーブルに保存します。

  1. 次のコードをコピーして、空のノートブック セルに貼り付けます。

    Python

    from pyspark.sql.functions import col, initcap, when
    
    # Rename "Year" column to "Year_Of_Birth"
    df_rename_year = df_raw.withColumnRenamed("Year", "Year_Of_Birth")
    
    # Change the case of "First_Name" column to initcap
    df_init_caps = df_rename_year.withColumn("First_Name", initcap(col("First_Name").cast("string")))
    
    # Update column values from "M" to "male" and "F" to "female"
    df_baby_names_sex = df_init_caps.withColumn(
    "Sex",
        when(col("Sex") == "M", "Male")
        .when(col("Sex") == "F", "Female")
    )
    
    # display
    display(df_baby_names_sex)
    
    # Save DataFrame to table
    df_baby_names_sex.write.mode("overwrite").saveAsTable(f"{path_table}.{silver_table_name}")
    

    Scala

    import org.apache.spark.sql.functions.{col, initcap, when}
    
    // Rename "Year" column to "Year_Of_Birth"
    val dfRenameYear = dfRaw.withColumnRenamed("Year", "Year_Of_Birth")
    
    // Change the case of "First_Name" data to initial caps
    val dfNameInitCaps = dfRenameYear.withColumn("First_Name", initcap(col("First_Name").cast("string")))
    
    // Update column values from "M" to "Male" and "F" to "Female"
    val dfBabyNamesSex = dfNameInitCaps.withColumn("Sex",
        when(col("Sex") equalTo "M", "Male")
        .when(col("Sex") equalTo "F", "Female"))
    
    // Display the data
    display(dfBabyNamesSex)
    
    // Save DataFrame to a table
    dfBabyNamesSex.write.mode("overwrite").saveAsTable(s"${pathTable}.${silverTableName}")
    

    R

    # Rename "Year" column to "Year_Of_Birth"
    df_rename_year <- withColumnRenamed(df_raw, "Year", "Year_Of_Birth")
    
    # Change the case of "First_Name" data to initial caps
    df_init_caps <- withColumn(df_rename_year, "First_Name", initcap(df_rename_year$First_Name))
    
    # Update column values from "M" to "Male" and "F" to "Female"
    df_baby_names_sex <- withColumn(df_init_caps, "Sex",
                                    ifelse(df_init_caps$Sex == "M", "Male",
                                          ifelse(df_init_caps$Sex == "F", "Female", df_init_caps$Sex)))
    # Display the data
    display(df_baby_names_sex)
    
    # Save DataFrame to a table
    saveAsTable(df_baby_names_sex, paste(path_table, ".", silver_table_name), mode = "overwrite")
    
  2. Shift+Enter キーを押してセルを実行してから、次のセルに移動します。

手順 5: データをグループ化して視覚化する

この手順では、データを 2021 年のみにフィルター処理し、性別と名前でデータをグループ化し、カウントで集計し、カウントで並べ替えます。 次に、DataFrame をテーブルに保存し、横棒グラフでデータを視覚化します。

  1. 次のコードをコピーして、空のノートブック セルに貼り付けます。

    Python

    from pyspark.sql.functions import expr, sum, desc
    from pyspark.sql import Window
    
    # Count of names for entire state of New York by sex
    df_baby_names_2021_grouped=(df_baby_names_sex
    .filter(expr("Year_Of_Birth == 2021"))
    .groupBy("Sex", "First_Name")
    .agg(sum("Count").alias("Total_Count"))
    .sort(desc("Total_Count")))
    
    # Display data
    display(df_baby_names_2021_grouped)
    
    # Save DataFrame to a table
    df_baby_names_2021_grouped.write.mode("overwrite").saveAsTable(f"{path_table}.{gold_table_name}")
    

    Scala

    import org.apache.spark.sql.functions.{expr, sum, desc}
    import org.apache.spark.sql.expressions.Window
    
    // Count of male and female names for entire state of New York by sex
    val dfBabyNames2021Grouped = dfBabyNamesSex
      .filter(expr("Year_Of_Birth == 2021"))
      .groupBy("Sex", "First_Name")
      .agg(sum("Count").alias("Total_Count"))
      .sort(desc("Total_Count"))
    
    // Display data
    display(dfBabyNames2021Grouped)
    
    // Save DataFrame to a table
    dfBabyNames2021Grouped.write.mode("overwrite").saveAsTable(s"${pathTable}.${goldTableName}")
    

    R

    # Filter to only 2021 data
    df_baby_names_2021 <- filter(df_baby_names_sex, df_baby_names_sex$Year_Of_Birth == 2021)
    
    # Count of names for entire state of New York by sex
    df_baby_names_grouped <- agg(
      groupBy(df_baby_names_2021, df_baby_names_2021$Sex, df_baby_names_2021$First_Name),
      Total_Count = sum(df_baby_names_2021$Count)
    )
    # Display data
    display(arrange(select(df_baby_names_grouped, df_baby_names_grouped$Sex, df_baby_names_grouped$First_Name, df_baby_names_grouped$Total_Count), desc(df_baby_names_grouped$Total_Count)))
    
    # Save DataFrame to a table
    saveAsTable(df_baby_names_2021_grouped, paste(path_table, ".", gold_table_name), mode = "overwrite")
    
  2. Ctrl+Enter キーを押してセルを実行します。

    1. [テーブル] タブの横にある + をクリックして、[視覚化] をクリックします。
  3. 視覚化エディターで、[視覚化の種類] をクリックし、[横棒グラフ] が選択されていることを確認します。

  4. [X列] で、First_Name を選択します。

  5. [Y 列] の下の [列の追加] をクリックし、[Total_Count] を選択します。

  6. [グループ化] で、[性別] を選択します。

    ゴールド テーブル

  7. [保存] をクリックします。

データのクレンジングと強化ノートブック

この記事の手順を実行するには、次のいずれかのノートブックを使用します。 <catalog-name><schema-name><volume-name> を、Unity Catalog ボリュームのカタログ、スキーマ、ボリュームの名前に置き換えます。 オプションとして、table_name を、任意のテーブル名に置き換えます。

Python

Python を使用してデータをクレンジングおよび強化する

ノートブックを入手

Scala

Scala を使用してデータをクレンジングおよび強化する

ノートブックを入手

R

R を使用してデータをクレンジングおよび強化する

ノートブックを入手

その他のリソース