Delen via


Aan de slag: Gegevens verbeteren en opschonen

In dit aan de slag-artikel wordt u begeleid bij het gebruik van een Azure Databricks-notebook voor het opschonen en verbeteren van de babynaamgegevens van new York State die eerder in een tabel in Unity Catalog zijn geladen met behulp van Python, Scala en R. In dit artikel wijzigt u kolomnamen, wijzigt u hoofdlettergebruik en spelt u het geslacht van elke babynaam uit de onbewerkte gegevenstabel en slaat u het DataFrame vervolgens op in een zilveren tabel. Vervolgens filtert u de gegevens om alleen gegevens op te nemen voor 2021, groepeer de gegevens op statusniveau en sorteert u de gegevens vervolgens op aantal. Ten slotte slaat u dit DataFrame op in een gouden tabel en visualiseert u de gegevens in een staafdiagram. Zie de medaille-architectuur voor meer informatie over zilveren en gouden tafels.

Belangrijk

Dit aan de slag-artikel bouwt voort op Aan de slag: Aanvullende gegevens opnemen en invoegen. U moet de stappen in dat artikel uitvoeren om dit artikel te voltooien. Zie Aanvullende gegevensnotitieblokken opnemen voor het volledige notitieblok voor dat aan de slag-artikel.

Vereisten

Als u de taken in dit artikel wilt uitvoeren, moet u voldoen aan de volgende vereisten:

  • Voor uw werkruimte moet Unity Catalog zijn ingeschakeld. Zie Unity Catalog instellen en beheren voor meer informatie over hoe u aan de slag gaat met Unity Catalog.
  • U moet beschikken over de WRITE VOLUME bevoegdheid op een volume, de USE SCHEMA bevoegdheid voor het bovenliggende schema en de USE CATALOG bevoegdheid voor de bovenliggende catalogus.
  • U moet gemachtigd zijn om een bestaande rekenresource te gebruiken of een nieuwe rekenresource te maken. Zie Aan de slag: Account en werkruimte instellen of uw Databricks-beheerder zien.

Tip

Zie Gegevensnotitieblokken opschonen en verbeteren voor een voltooid notitieblok voor dit artikel.

Stap 1: Een nieuw notitieblok maken

Als u een notitieblok in uw werkruimte wilt maken, klikt u op Nieuw pictogram Nieuw in de zijbalk en vervolgens op Notitieblok. Er wordt een leeg notitieblok geopend in de werkruimte.

Zie Notitieblokken beheren voor meer informatie over het maken en beheren van notitieblokken.

Stap 2: Variabelen definiƫren

In deze stap definieert u variabelen voor gebruik in het voorbeeldnotitieblok dat u in dit artikel maakt.

  1. Kopieer en plak de volgende code in de nieuwe lege notebookcel. Vervang , <schema-name>en <volume-name> door <catalog-name>de catalogus-, schema- en volumenamen voor een Unity Catalog-volume. Vervang eventueel de table_name waarde door een tabelnaam van uw keuze. U slaat de gegevens van de babynaam verderop in dit artikel op in deze tabel.

  2. Druk Shift+Enter om de cel uit te voeren en een nieuwe lege cel te maken.

    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
    

Stap 3: De onbewerkte gegevens laden in een nieuw DataFrame

Met deze stap worden de onbewerkte gegevens die eerder zijn opgeslagen in een Delta-tabel in een nieuw DataFrame geladen ter voorbereiding op het opschonen en verbeteren van deze gegevens voor verdere analyse.

  1. Kopieer en plak de volgende code in de nieuwe lege notebookcel.

    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. Druk Shift+Enter om de cel uit te voeren en naar de volgende cel te gaan.

Stap 4: Onbewerkte gegevens opschonen en verbeteren en opslaan

In deze stap wijzigt u de naam van de Year kolom, wijzigt u de gegevens in de First_Name kolom in de beginhoofdletters en werkt u de waarden voor de Sex kolom bij om het geslacht te bepalen en slaat u het DataFrame vervolgens op in een nieuwe tabel.

  1. Kopieer en plak de volgende code in een lege notebookcel.

    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. Druk Shift+Enter om de cel uit te voeren en naar de volgende cel te gaan.

Stap 5: Gegevens groeperen en visualiseren

In deze stap filtert u de gegevens alleen op jaar 2021, groepeer de gegevens op geslacht en naam, aggregeren op aantal en volgorde op aantal. Vervolgens slaat u het DataFrame op in een tabel en visualiseert u de gegevens in een staafdiagram.

  1. Kopieer en plak de volgende code in een lege notebookcel.

    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. Druk Ctrl+Enter om de cel uit te voeren.

    1. Klik naast het tabblad Tabel op + Visualisatie en klik vervolgens op Visualisatie.
  3. Klik in de visualisatie-editor op Visualisatietype en controleer of de balk is geselecteerd.

  4. SelecteerFirst_Name in de X-kolom.

  5. Klik op Kolom toevoegen onder Y-kolommen en selecteer Total_Count.

  6. Selecteer Sex in Groeperen op.

    gouden tafel

  7. Klik op Opslaan.

Gegevensnotebooks opschonen en verbeteren

Gebruik een van de volgende notebooks om de stappen in dit artikel uit te voeren. Vervang , <schema-name>en <volume-name> door <catalog-name>de catalogus-, schema- en volumenamen voor een Unity Catalog-volume. Vervang eventueel de table_name waarde door een tabelnaam van uw keuze.

Python

Gegevens opschonen en verbeteren met Behulp van Python

Notebook downloaden

Scala

Gegevens opschonen en verbeteren met Scala

Notebook downloaden

R

Gegevens opschonen en verbeteren met R

Notebook downloaden

Aanvullende bronnen