بدء الاستخدام: تحسين البيانات وتنظيفها

ترشدك مقالة البدء هذه إلى استخدام دفتر ملاحظات Azure Databricks لتطهير وتحسين بيانات اسم طفل ولاية نيويورك التي تم تحميلها مسبقا في جدول في كتالوج Unity باستخدام Python وSc scala وR. في هذه المقالة، يمكنك تغيير أسماء الأعمدة وتغيير الكتابة بالأحرف الكبيرة وتهجئة جنس كل اسم طفل من جدول البيانات الخام - ثم حفظ DataFrame في جدول فضي. ثم تقوم بتصفية البيانات لتضمين بيانات عام 2021 فقط، وتجميع البيانات على مستوى الحالة، ثم فرز البيانات حسب العدد. وأخيرا، يمكنك حفظ DataFrame هذا في جدول ذهبي وتصور البيانات في مخطط شريطي. لمزيد من المعلومات حول الجداول الفضية والذهبية، راجع هندسة الميدالية.

هام

تعتمد مقالة بدء الاستخدام هذه على بدء الاستخدام: استيعاب بيانات إضافية وإدراجها. يجب إكمال الخطوات الواردة في هذه المقالة لإكمال هذه المقالة. للحصول على دفتر الملاحظات الكامل لمقالة بدء الاستخدام هذه، راجع استيعاب دفاتر ملاحظات بيانات إضافية.

المتطلبات

لإكمال المهام في هذه المقالة، يجب أن تفي بالمتطلبات التالية:

  • يجب تمكين كتالوج Unity لمساحة العمل الخاصة بك. للحصول على معلومات حول بدء استخدام كتالوج Unity، راجع إعداد كتالوج Unity وإدارته.
  • يجب أن يكون لديك الامتياز على WRITE VOLUME وحدة تخزين، USE SCHEMA والامتياز على المخطط الأصل، والامتياز USE CATALOG على الكتالوج الأصل.
  • يجب أن يكون لديك إذن لاستخدام مورد حساب موجود أو إنشاء مورد حساب جديد. راجع بدء الاستخدام: إعداد الحساب ومساحة العمل أو راجع مسؤول Databricks.

تلميح

للحصول على دفتر ملاحظات مكتمل لهذه المقالة، راجع تنظيف دفاتر ملاحظات البيانات وتحسينها.

الخطوة 1: إنشاء دفتر ملاحظات جديد

لإنشاء دفتر ملاحظات في مساحة العمل، انقر فوق أيقونة جديدة جديد في الشريط الجانبي، ثم انقر فوق دفتر الملاحظات. يتم فتح دفتر ملاحظات فارغ في مساحة العمل.

لمعرفة المزيد حول إنشاء دفاتر الملاحظات وإدارتها، راجع إدارة دفاتر الملاحظات.

الخطوة 2: تحديد المتغيرات

في هذه الخطوة، يمكنك تعريف المتغيرات لاستخدامها في مثال دفتر الملاحظات الذي تقوم بإنشائه في هذه المقالة.

  1. انسخ التعليمات البرمجية التالية والصقها في خلية دفتر الملاحظات الفارغة الجديدة. استبدل <catalog-name>و <schema-name>و <volume-name> بأسماء الكتالوج والمخطط ووحدات التخزين لوحدة تخزين كتالوج Unity. استبدل 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. في Group by، حدد Sex.

    جدول ذهبي

  7. انقر فوق حفظ.

تنظيف دفاتر ملاحظات البيانات وتحسينها

استخدم أحد دفاتر الملاحظات التالية لتنفيذ الخطوات الواردة في هذه المقالة. استبدل <catalog-name>و <schema-name>و <volume-name> بأسماء الكتالوج والمخطط ووحدات التخزين لوحدة تخزين كتالوج Unity. استبدل table_name القيمة اختياريا باسم جدول من اختيارك.

Python

تنظيف البيانات وتحسينها باستخدام Python

الحصول على دفتر الملاحظات

Scala

تنظيف البيانات وتحسينها باستخدام Scala

الحصول على دفتر الملاحظات

R

تنظيف البيانات وتحسينها باستخدام R

الحصول على دفتر الملاحظات

الموارد الإضافية