استخدام Copilot في دفاتر ملاحظات Microsoft Fabric

مكتمل

يساعد Copilot for Fabric Data Engineering في كتابة التعليمات البرمجية في دفاتر الملاحظات. إنه يعمل مع جداول وملفات Lakehouse ، ويمكنه الرجوع إلى إطارات البيانات التي تعمل بها.

هناك طرق متعددة للتفاعل مع Copilot لهندسة بيانات البنية، بما في ذلك:

  • الأوامر السحرية هي أوامر خاصة يمكنك استخدامها في خلايا دفتر الملاحظات لتنفيذ مهام محددة. يبدأون بعلامة مضاعفة النسبة مئوية (%%) أو علامة مئوية واحدة (%).
  • نافذة دردشة Copilot: يمكنك طلب المساعدة من Copilot باللغة البسيطة، وهي تولد لك كودا بناء على طلبك. هذا أفضل لسير العمل متعدد الخطوات، وبناء المنطق عبر الخلايا، ومراجعة الكود المولد باستخدام عرض diff.
  • الطيار المساعد داخل الخلية: يمكنك التفاعل مع Copilot مباشرة فوق أي خلية كود فردية باستخدام مربع نص وأوامر slat. هذا أفضل للإجراءات المركزة والخلوية الواحدة مثل تصحيح الأخطاء أو شرح المنطق.

أوامر سحرية

أوامر الدردشة هي أوامر خاصة يمكنك استخدامها في دفاتر ملاحظات Microsoft Fabric للتفاعل مع Copilot. فيما يلي قائمة بالأوامر الأكثر استخداما:

أمر ‏‏الوصف
%%chat اطرح أسئلة حول حالة دفتر الملاحظات الخاص بك.
%%code إنشاء التعليمات البرمجية لمعالجة البيانات أو تصورها.
%show_chat_history إظهار سجل الدردشة.
%clear_chat_history امسح سجل الدردشة.
%set_output قم بتغيير الإعداد الافتراضي لكيفية توفير الأوامر السحرية للإخراج. اختر مكان وضع التعليمات البرمجية التي تم إنشاؤها ، من بين خيارات مثل
- الخلية الحالية
- خلية جديدة
- إخراج الخلية
- في متغير
%describe يوفر ملخصات وأوصاف لإطارات البيانات المحملة.
%%add_comments أضف تعليقات إلى التعليمات البرمجية الخاصة بك.

بالإضافة إلى ذلك ، هناك أيضا العديد من الأوامر التي تسمح لك بإصلاح الأخطاء وتكوين إعدادات الخصوصية وإدارة إطارات البيانات. انظر استخدام نافذة دردشة Copilot في دفاتر Microsoft Fabric لمزيد من المعلومات.

الطيار المساعد داخل الخلية

يتيح لك كوبايلوت داخل الخلية التفاعل مع كوبايلوت مباشرة فوق أي خلية كود، دون الخروج من سياق التحرير الخاص بك. اختر زر Copilot الذي يظهر فوق خلية الشيفرة لفتح مربع نص حيث يمكنك كتابة طلب أو استخدام أمر slam.

أوامر القطع المتاحة هي:

أمر ‏‏الوصف
/explain يوفر شرحا بسيطا لمنطق شفرة الخلية.
/fix يحدد الأخطاء في الزنزانة ويقترح تصحيحات.
/comments يضيف تلقائيا تعليقات الكود إلى منطق المستندات وتغييرات البيانات.
/optimize يقترح تحسينات في الأداء والكفاءة.

استخدم In-Cell Copilot عندما ترغب في تحسين خلية معينة — على سبيل المثال، فهم ما يفعله التحول، أو تصحيح خطأ في النحو، أو توثيق الكود قبل مشاركة الدفتر الملاحظ. لسير العمل متعدد الخطوات أو المهام عبر الخلايا، انتقل إلى لوحة دردشة Copilot بدلا من ذلك.

مثال

في هذا المثال، نستخدم Copilot لهندسة بيانات البنية لتحميل البيانات وتحويلها وحفظها في Lakehouse. لنتخيل أن شركة Contoso Health، وهي شبكة مستشفيات متعددة التخصصات، تريد توسيع خدماتها في الاتحاد الأوروبي وتريد تحليل البيانات السكانية المتوقعة. يستخدم هذا المثال مجموعة بيانات الإسقاط السكاني Eurostat (المكتب الإحصائي للاتحاد الأوروبي).

المصدر: EUROPOP2023 السكان في 1 يناير حسب العمر والجنس ونوع الإسقاط [proj_23np] ، آخر تحديث في 28 يونيو 2023.

تحميل البيانات

ابدأ في دفتر ملاحظات جديد مرفق بمنزل البحيرة الخاص بك. في خلية جديدة، يمكنك تجربة المطالبة التالية. البادئة بإشارات %%code إلى Copilot التي ترغب في إنشاء رمز قم بتشغيله كلما كنت مستعدا لرؤية ما يقترحه Copilot.

%%code

Download the following file from this URL:
https://ec.europa.eu/eurostat/api/dissemination/sdmx/2.1/data/proj_23np$defaultview/?format=TSV

Then write the file to the default lakehouse into a temporary folder. Create the temporary folder if it doesn't exist yet.

يقوم Copilot بإنشاء تعليمات برمجية ، والتي قد تختلف قليلا اعتمادا على بيئتك وآخر التحديثات ل Copilot.

#### ATTENTION: AI-generated code can include errors or operations you didn't intend. Review the code in this cell carefully before running it.

import urllib.request
import os

# Step 1: Download the file
url = "https://ec.europa.eu/eurostat/api/dissemination/sdmx/2.1/data/proj_23np$defaultview/?format=TSV"
file_path = "/tmp/proj_23np_defaultview.tsv"

urllib.request.urlretrieve(url, file_path)

# Step 2: Create a temporary folder in the default lakehouse
lakehouse_temp_folder = "/lakehouse/default/Files/temp"
os.makedirs(lakehouse_temp_folder, exist_ok=True)

# Step 3: Write the file to the lakehouse temporary folder
import shutil
shutil.move(file_path, os.path.join(lakehouse_temp_folder, "proj_23np.tsv"))

print(f"File successfully written to {os.path.join(lakehouse_temp_folder, 'proj_23np.tsv')}")

بعد تشغيل الخلية ، يجب أن تجد الملف الذي تم تنزيله ووضعه في المجلد المؤقت لمنزل البحيرة الخاص بك.

في خلية جديدة أخرى ، يمكنك أن تطلب من Copilot تحميل البيانات على النحو التالي:

%%code

Load the file 'Files/temp/proj_23np.tsv' into a spark dataframe.
The fields are separated with a tab.
Show the contents of the DataFrame using display method.

سيحتوي إطار البيانات الناتج على محتويات ملف TSV. يمكن أن يبدو أحد البرامج النصية المحتملة التي تم إنشاؤها كما يلي:

#### ATTENTION: AI-generated code can include errors or operations you didn't intend. Review the code in this cell carefully before running it.

# Load the file 'Files/temp/proj_23np.tsv' into a spark dataframe.
# The fields have been separated with a tab.
file_path = "Files/temp/proj_23np.tsv"

spark_df = spark.read.format("csv").option("delimiter", "\t").option("header", "true").load(file_path)

# Show the contents of the DataFrame using display method
display(spark_df)

فيما يلي مثال على الشكل الذي قد يبدو عليه الإخراج:

التردد ، الإسقاط ، الجنس ، العمر ، الوحدة ، الجغرافي \ TIME_PERIOD 2022 2023 ... 2100
أ ، BSL ، F ، المجموع ، لكل ، في 4553444 4619179 ... 4807661
أ ، BSL ، F ، المجموع ، لكل ، كن 5883978 5947528 ... 6331785
أ ، BSL ، F ، المجموع ، لكل ، BG 3527626 3605059 ... 2543673
... ... ... ... 5081250
أ ، BSL ، F ، المجموع ، بير ، سي 463622 476907 ... 504781

تحويل البيانات

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

%%code

Now transform this dataframe spark_df and split the first field 'freq,projection,sex,age,unit,geo\TIME_PERIOD' using a comma into 6 separate fields.

Then, remove the fields 'freq', 'age', 'unit'.

The fields 'projection', 'sex', 'geo' should be positioned first.

The 'projection' field contains codes that should be replaced with the following values:

 _'BSL' -> 'Baseline projections'.
 _'LFRT' -> 'Sensitivity test: lower fertility'.
 _'LMRT' -> 'Sensitivity test: lower mortality'.
 _'HMIGR' -> 'Sensitivity test: higher migration'.
 _'LMIGR' -> 'Sensitivity test: lower migration'.
 _'NMIGR' -> 'Sensitivity test: no migration'.

Filter the 'geo' field and remove values 'EA20' and 'EU27_2020' (these are not countries).

Filter the 'sex' field and remove 'T' (these are totals).

Strip spaces from all field names in the dataframe.

Convert the data type of all the year fields to integer.

Display (Render) the DataFrame.

يقوم Copilot بإنشاء تعليمات برمجية ، والتي قد تختلف قليلا اعتمادا على بيئتك وآخر التحديثات ل Copilot.

from pyspark.sql.functions import split, col

# Load the file 'Files/temp/proj_23np.tsv' into a spark dataframe.
file_path = "Files/temp/proj_23np.tsv"
spark_df = spark.read.format("csv").option("delimiter", "\t").option("header", "true").load(file_path)

# Split the first field 'freq,projection,sex,age,unit,geo\TIME_PERIOD' into 6 separate fields.
split_col = split(spark_df['freq,projection,sex,age,unit,geo\TIME_PERIOD'], ',')
spark_df = spark_df.withColumn('freq', split_col.getItem(0)) \
                   .withColumn('projection', split_col.getItem(1)) \
                   .withColumn('sex', split_col.getItem(2)) \
                   .withColumn('age', split_col.getItem(3)) \
                   .withColumn('unit', split_col.getItem(4)) \
                   .withColumn('geo', split_col.getItem(5))

# Remove the fields 'freq', 'age', 'unit'
columns_to_drop = ['freq', 'age', 'unit', 'freq,projection,sex,age,unit,geo\TIME_PERIOD']
spark_df = spark_df.drop(*columns_to_drop)

# Reorder the columns, placing 'projection', 'sex', 'geo' first
columns_order = ['projection', 'sex', 'geo']  |  [col for col in spark_df.columns if col not in ['projection', 'sex', 'geo']]
spark_df = spark_df.select(*columns_order)

# Replace projection field codes with values
replace_map = {
    'BSL': 'Baseline projections',
    'LFRT': 'Sensitivity test: lower fertility',
    'LMRT': 'Sensitivity test: lower mortality',
    'HMIGR': 'Sensitivity test: higher migration',
    'LMIGR': 'Sensitivity test: lower migration',
    'NMIGR': 'Sensitivity test: no migration'
}
spark_df = spark_df.replace(replace_map, subset=['projection'])

# Filter the 'geo' field to remove values 'EA20' and 'EU27_2020'
spark_df = spark_df.filter(~spark_df['geo'].isin(['EA20', 'EU27_2020']))

# Filter the 'sex' field to remove 'T'
spark_df = spark_df.filter(spark_df['sex'] != 'T')

# Strip spaces from all field names
spark_df = spark_df.toDF(*(c.replace(' ', '') for c in spark_df.columns))

# Convert the data type of all the year fields to integer
for column in spark_df.columns:
    if column.isnumeric():
        spark_df = spark_df.withColumn(column, col(column).cast('int'))

# Display the DataFrame
display(spark_df)

فيما يلي مثال على الشكل الذي قد يبدو عليه الإخراج:

projection جنس الجغرافيه 2022 2023 ... 2100
إسقاطات خط الأساس F في 4553444 4619179 ... 4807661
إسقاطات خط الأساس F كن 5883978 5947528 ... 6331785
إسقاطات خط الأساس F بي جي 3527626 3605059 ... 2543673
... ... ... ... ... ... ...
إسقاطات خط الأساس F لو 320333 329401 ... 498954

حفظ البيانات

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

%%code
 
Save the dataframe as a new table named 'Population' in the default lakehouse.

يقوم Copilot بإنشاء تعليمات برمجية ، والتي قد تختلف قليلا اعتمادا على بيئتك وآخر التحديثات ل Copilot.

#### ATTENTION: AI-generated code can include errors or operations you didn't intend. Review the code in this cell carefully before running it.

spark_df.write.format("delta").saveAsTable("Population")

التحقق

للتحقق من حفظ الجدول كما هو متوقع ، قم بتوسيع قائمة الجداول في Lakehouse الخاص بك وراجع محتوياته. يمكنك أيضا اللجوء إلى لوحة الدردشة Copilot للحصول على أسئلة استكشافية سريعة. سيرد Copilot بشروحات أو رمز قابل للتشغيل. على سبيل المثال:

What is the projected population for geo BE in 2050?

يقوم Copilot بإنشاء تعليمات برمجية لتصفية البيانات للجغرافيا والسنة المحددة، وعرض النتيجة.

# ATTENTION: AI-generated code can include errors or operations you didn't intend. Review the code in this cell carefully before running it.

from pyspark.sql import SparkSession

# Initialize Spark session
spark = SparkSession.builder.getOrCreate()

# Load the Population table into a Spark DataFrame
spark_df = spark.read.table("population")

# Filter for the projected population for geo BE in 2050
result_df = spark_df.filter((spark_df['geo'] == 'BE') & (spark_df['projection'] == 'Baseline projections')).select('2050')

# Show the result
result_df.show()

أفضل الممارسات

  • يعد Copilot حاليا الأقوى في سيناريوهات هندسة البيانات وعلوم البيانات ، لذا فإن تأطير الأسئلة في هذه المجالات يميل إلى تحقيق نتائج أكثر وضوحا.
  • عادة ما يؤدي إعطاء مراجع ملموسة إلى أصول البيانات الخاصة بك (مسارات الملفات وأسماء الجداول وأسماء الأعمدة) إلى تحسين خصوصية وفائدة الإجابات التي تم إنشاؤها.
  • يوفر تحميل البيانات كإطارات بيانات أو تثبيت مجموعات البيانات في Lakehouse سياقا أكثر ثراء ، مما يتيح تحليلا وتحويلات أكثر دقة.