Partager via


Démarrage : améliorer et nettoyer des données

Cet article de démarrage vous guide tout au long du processus d’utilisation d’un notebook Azure Databricks pour nettoyer et améliorer les données de noms de nouveaux-nés de l’état de New York, précédemment chargées dans une table d’Unity Catalog, en utilisant Python, Scala et R. Dans cet article, vous modifiez les noms de colonnes, changez l’utilisation des majuscules et épelez le sexe de chaque nouveau-né à partir de la table de données brutes, puis vous enregistrez le DataFrame dans une table Silver. Vous filtrez ensuite les données pour inclure uniquement les données de 2021, regroupez les données au niveau de l’état, puis triez les données par nombre. Enfin, vous enregistrez ce DataFrame dans une table Gold et visualisez les données dans un graphique à barres. Si vous souhaitez découvrir plus d’informations sur les tables Silver et Gold, consultez Architecture de médaillon.

Important

Cet article de démarrage s’appuie sur Démarrage : ingérer et insérer des données supplémentaires. Vous devez terminer les étapes de cet article pour l’achever. Pour découvrir un notebook complet pour cet article de démarrage, voir Ingérer d’autres notebooks de données.

Spécifications

Pour effectuer les tâches décrites dans cet article, vous devez répondre aux exigences suivantes :

Conseil

Pour découvrir un notebook terminé pour cet article, voir Nettoyer et améliorer des notebooks de données.

Étape 1 : créer un notebook

Pour créer un notebook dans votre espace de travail, cliquez sur l’icône Nouveau Nouveau dans la barre latérale, puis sur Notebook. Un notebook vide s’ouvre dans l’espace de travail.

Pour en savoir plus sur la création et la gestion des notebooks, consultez Gérer les notebooks.

Étape 2 : Définir des variables

Dans cette étape, vous définissez des variables à utiliser dans l’exemple de notebook que vous créez dans cet article.

  1. Copiez et collez le code suivant dans la nouvelle cellule de notebook vide. Remplacez <catalog-name>, <schema-name> et <volume-name> par les noms de catalogue, de schéma et de volume d’un volume Unity Catalog. Remplacez éventuellement la valeur table_name par le nom de table de votre choix. Plus loin dans cet article, vous allez charger les données des noms de nouveaux-nés dans cette table.

  2. Appuyez sur Shift+Enter pour exécuter la cellule et créer une cellule vide.

    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
    

Étape 3 : charger les données brutes dans un nouveau DataFrame

Cette étape charge les données brutes précédemment enregistrées dans une table Delta dans un nouveau DataFrame afin de préparer le nettoyage et l’amélioration de ces données pour des analyses ultérieures.

  1. Copiez et collez le code suivant dans la nouvelle cellule de notebook vide.

    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. Appuyez sur Shift+Enter pour exécuter la cellule et passer à la cellule suivante.

Étape 4 : nettoyage, amélioration des données brutes et enregistrement

Dans cette étape, vous changez le nom de la colonne Year, modifiez les données de la colonne First_Name en plaçant une majuscule au début, mettez à jour les valeurs de la colonne Sex pour épeler le sexe et enregistrez le DataFrame dans une nouvelle table.

  1. Copiez et collez le code suivant dans une cellule de notebook vide.

    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. Appuyez sur Shift+Enter pour exécuter la cellule et passer à la cellule suivante.

Étape 5 : regrouper et visualiser les données

Dans cette étape, vous filtrez les données pour obtenir l’année 2021 uniquement, regroupez les données par nom et sexe, agrégez et triez par nombre. Vous enregistrez ensuite le DataFrame dans une table, puis visualisez les données dans un graphique à barres.

  1. Copiez et collez le code suivant dans une cellule de notebook vide.

    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. Appuyez sur Ctrl+Enter pour exécuter la cellule.

    1. Près de l’onglet Table, cliquez sur +, puis sur Visualisation.
  3. Dans l’éditeur de visualisation, cliquez sur Type de visualisation, puis vérifiez que l’option Barres est sélectionnée.

  4. Dans la Colonne X, sélectionnez First_Name.

  5. Cliquez sur Ajouter une colonne sous Colonnes Y, puis sélectionnez Total_Count.

  6. Dans Regrouper par, sélectionnez Sexe.

    table Gold

  7. Cliquez sur Enregistrer.

Nettoyer et améliorer les notebooks de données

Utilisez l’un des notebooks suivants pour effectuer les étapes contenues dans cet article. Remplacez <catalog-name>, <schema-name> et <volume-name> par les noms de catalogue, de schéma et de volume d’un volume Unity Catalog. Remplacez éventuellement la valeur table_name par le nom de table de votre choix.

Python

Nettoyer et améliorer des données en utilisant Python

Obtenir le notebook

Scala

Nettoyer et améliorer des données en utilisant Scala

Obtenir le notebook

R

Nettoyer et améliorer des données en utilisant R

Obtenir le notebook

Ressources supplémentaires