Korzystanie z narzędzia Copilot w notesach usługi Microsoft Fabric

Ukończone

Copilot for Fabric Data Engineering pomaga w pisaniu kodu w notesach. Współdziała ona z tabelami i plikami usługi Lakehouse i może odwoływać się do ramek danych, z którymi pracujesz.

Istnieje wiele sposobów interakcji z platformą Copilot for Fabric Data Engineering, w tym:

  • Polecenia magiczne to specjalne polecenia, których można używać w komórkach notatnika do wykonywania określonych zadań. Zaczynają się od znaku podwójnego procentu (%%) lub pojedynczego znaku procentowego (%).
  • Okienko czatu Copilot: możesz poprosić Copilot o pomoc w prostym angielskim, który generuje kod dla ciebie na podstawie twojego żądania. Jest to najlepsze rozwiązanie w przypadku wieloetapowych przepływów pracy, tworzenia logiki między komórkami i przeglądania wygenerowanego kodu z widokiem różnic.
  • In-cell Copilot: Możesz komunikować się bezpośrednio nad dowolną pojedynczą komórką kodu, używając pola tekstowego i poleceń ze slashem. Jest to najlepsze rozwiązanie w przypadku akcji skoncentrowanych, pojedynczych komórek, takich jak naprawianie błędów lub wyjaśnianie logiki.

Polecenia magiczne

Polecenia czatu to specjalne polecenia, których można używać w notesach usługi Microsoft Fabric do interakcji z Copilot. Oto lista najczęściej używanych poleceń:

Command Description
%%chat Zadaj pytania dotyczące stanu notesu.
%%code Generowanie kodu na potrzeby manipulowania danymi lub wizualizacji.
%show_chat_history Pokaż historię czatów.
%clear_chat_history Wyczyść historię czatu.
%set_output Zmień wartość domyślną dla sposobu, w jaki polecenia magic zapewniają dane wyjściowe. Wybierz miejsce, w którym ma być umieszczany wygenerowany kod, na podstawie opcji, takich jak
- bieżąca komórka
- nowa komórka
- dane wyjściowe komórki
- do zmiennej
%describe Zawiera podsumowania i opisy załadowanych ramek danych.
%%add_comments Dodaj komentarze do kodu.

Ponadto istnieje kilka poleceń umożliwiających naprawianie błędów, konfigurowanie ustawień prywatności i zarządzanie ramkami danych. Aby uzyskać więcej informacji, zobacz korzystanie z okienka czatu Copilot w notesach usługi Microsoft Fabric.

Wbudowany Copilot

Funkcja Copilot w komórkach pozwala na interakcję z Copilot bezpośrednio nad dowolną komórką kodu, bez opuszczania kontekstu edycji. Wybierz przycisk Copilot wyświetlany powyżej komórki kodu, aby otworzyć pole tekstowe, w którym można wpisać żądanie lub użyć polecenia ukośnika.

Dostępne komendy ukośnika to:

Command Description
/explain Zawiera proste wyjaśnienie logiki kodu komórki.
/fix Identyfikuje błędy w komórce i sugeruje poprawki.
/comments Automatycznie dodaje komentarze kodu do logiki dokumentów i zmian danych.
/optimize Sugeruje ulepszenia wydajności i efektywności.

Użyj funkcji Copilot w komórce, aby uściślić określoną komórkę — na przykład zrozumieć, co robi transformacja, naprawić błąd składniowy lub udokumentować kod przed udostępnieniem notesu. W przypadku wieloetapowych przepływów pracy lub zadań międzyskomórkowych przejdź do panelu czatu Copilot.

Example

W tym przykładzie korzystamy z narzędzia Copilot do inżynierii danych strukturalnych w celu ładowania, przekształcania i zapisywania danych w systemie Lakehouse. Wyobraźmy sobie, że contoso Health, wielospełowa sieć szpitalna, chce rozszerzyć swoje usługi w UE i chce analizować przewidywane dane populacji. W tym przykładzie użyto zestawu danych prognozy populacji Eurostatu (urzędu statystycznego Unii Europejskiej).

Źródło: EUROPOP2023 Populacja 1 stycznia według wieku, płci i typu projekcji [proj_23np], Ostatnia aktualizacja 28 czerwca 2023 r.

Ładowanie danych

Zacznij od nowego notesu dołączonego do usługi Lakehouse. W nowej komórce możesz wypróbować następującą podpowiedź. Prefiksowanie za pomocą %%code sygnalizuje Copilotowi, że chcesz wygenerować kod. Uruchom go za każdym razem, gdy wszystko jest gotowe, aby zobaczyć, co proponuje 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 generuje kod, który może się nieco różnić w zależności od środowiska i najświeższych aktualizacji 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')}")

Po uruchomieniu komórki powinieneś znaleźć plik pobrany i umieszczony w folderze tymczasowym platformy Lakehouse.

W innej nowej komórce możesz poprosić Copilota o załadowanie danych w następujący sposób:

%%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.

Wynikowa ramka danych będzie zawierać zawartość pliku TSV. Jeden z możliwych wygenerowanych skryptów może wyglądać następująco:

#### 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)

Oto przykład tego, jak mogą wyglądać dane wyjściowe:

freq,projekcja,seks,wiek,jednostka,geo\TIME_PERIOD 2022 2023 ...\ 2100
A,BSL,F,TOTAL,PER,AT 4553444 4619179 ...\ 4807661
A,BSL,F,TOTAL,PER,BE 5883978 5947528 ...\ 6331785
A,BSL,F,TOTAL,PER,BG 3527626 3605059 ...\ 2543673
...\ ...\ ...\ ...\ 5081250
A,BSL,F,TOTAL,PER,CY 463622 476907 ...\ 504781

Przekształcanie danych

Następnie rozważ przekształcenie danych: podzielenie połączonego pierwszego pola na oddzielne kolumny, oczyszczenie nieużywanych pól, standaryzację typów danych i zastosowanie nieco filtrowania. Monit, taki jak poniższe polecenie w nowej komórce, może kierować CoPilotem:

%%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 generuje kod, który może się nieco różnić w zależności od środowiska i najświeższych aktualizacji 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)

Oto przykład tego, jak mogą wyglądać dane wyjściowe:

projekcja płeć obszar geograficzny 2022 2023 ...\ 2100
Projekcje linii bazowej F AT 4553444 4619179 ...\ 4807661
Projekcje linii bazowej F BYĆ 5883978 5947528 ...\ 6331785
Projekcje linii bazowej F BG 3527626 3605059 ...\ 2543673
...\ ...\ ...\ ...\ ...\ ...\ ...\
Projekcje linii bazowej F jednostka logiczna 320333 329401 ...\ 498954

Zapisywanie danych

Aby utrwalić wynik, możesz wykorzystać usługi Lakehouse po dokonaniu przekształceń. Na przykład monit o komórkę, taki jak ten, spowoduje, że Copilot wygeneruje logikę zapisywania:

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

Copilot generuje kod, który może się nieco różnić w zależności od środowiska i najświeższych aktualizacji 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")

Validation

Aby sprawdzić, czy tabela jest zapisana zgodnie z oczekiwaniami, rozwiń listę tabel w usłudze Lakehouse i przejrzyj jej zawartość. Możesz również zwrócić się do panelu czatu Copilot w celu uzyskania szybkich pytań eksploracyjnych; Copilot odpowie za pomocą wyjaśnień lub kodu możliwego do uruchomienia. Przykład:

What is the projected population for geo BE in 2050?

Copilot generuje kod, aby filtrować dane według określonego regionu i roku oraz wyświetlać wynik.

# 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()

Najlepsze rozwiązania

  • Copilot jest obecnie najsilniejszy w scenariuszach inżynierii danych i nauki o danych, więc formułowanie pytań w tych dziedzinach ma tendencję do uzyskiwania jaśniejszych wyników.
  • Podawanie konkretnych odwołań do zasobów danych Copilot (ścieżek plików, nazw tabel, nazw kolumn) zwykle poprawia dokładność i użyteczność wygenerowanych odpowiedzi.
  • Ładowanie danych jako ramek danych lub przypinanie zestawów danych w usłudze Lakehouse zapewnia bogatszy kontekst, umożliwiając dokładniejszą analizę i przekształcenia.