Bagikan melalui


Tutorial: Menganalisis dependensi fungsi dalam model semantik

Dalam tutorial ini, Anda membangun pekerjaan sebelumnya yang dilakukan oleh analis Power BI dan disimpan dalam bentuk model semantik (himpunan data Power BI). Dengan menggunakan SemPy (pratinjau) di pengalaman Synapse Data Science dalam Microsoft Fabric, Anda dapat menganalisis dependensi fungsional yang ada pada kolom-kolom DataFrame. Analisis ini membantu menemukan masalah kualitas data nontrivial untuk mendapatkan wawasan yang lebih akurat.

Dalam tutorial ini, Anda mempelajari cara:

  • Terapkan pengetahuan domain untuk merumuskan hipotesis tentang dependensi fungsi dalam model semantik.
  • Biasakan diri dengan komponen pustaka Python dari tautan semantik (SemPy) yang mendukung integrasi dengan Power BI dan membantu mengotomatisasi analisis kualitas data. Komponen-komponen ini meliputi:
    • FabricDataFrame - struktur seperti panda yang ditingkatkan dengan informasi semantik tambahan.
    • Fungsi yang berguna untuk menarik model semantik dari ruang kerja Fabric ke notebook Anda.
    • Fungsi yang berguna yang mengotomatiskan evaluasi hipotesis tentang dependensi fungsi dan yang mengidentifikasi pelanggaran hubungan dalam model semantik Anda.

Prasyarat

  • Dapatkan langganan Microsoft Fabric . Atau, daftar untuk uji coba Microsoft Fabric gratis.

  • Masuk ke Microsoft Fabric.

  • Gunakan pengalih pengalaman di sisi kiri bawah halaman beranda Anda untuk beralih ke Fabric.

    Cuplikan layar menu pengalih pengalaman, memperlihatkan tempat untuk memilih Ilmu Data.

  • Pilih Ruang Kerja dari panel navigasi kiri untuk menemukan dan memilih ruang kerja Anda. Ruang kerja ini menjadi ruang kerja Anda saat ini.

  • Unduh model semantik Customer Profitability Sample.pbix dari repositori GitHub fabric-samples.

  • Di ruang kerja Anda, pilih Impor>Laporan atau Laporan Berhalaman>Dari komputer ini untuk mengunggah file Customer Profitability Sample.pbix ke ruang kerja Anda.

Ikuti di buku catatan

Notebook powerbi_dependencies_tutorial.ipynb ini menyertai tutorial ini.

Menyiapkan buku catatan

Di bagian ini, Anda menyiapkan lingkungan notebook dengan modul dan data yang diperlukan.

  1. Instal SemPy dari PyPI menggunakan kemampuan pemasangan sebaris %pip di dalam notebook:

    %pip install semantic-link
    
  2. Lakukan impor modul yang diperlukan yang akan Anda butuhkan nanti:

    import sempy.fabric as fabric
    from sempy.dependencies import plot_dependency_metadata
    

Memuat dan memproses data sebelumnya

Tutorial ini menggunakan model semantik sampel standar Customer Profitability Sample.pbix. Untuk deskripsi model semantik, lihat sampel Profitabilitas Pelanggan untuk Power BI.

  1. Muat data Power BI ke FabricDataFrames, menggunakan fungsi read_table SemPy:

    dataset = "Customer Profitability Sample"
    customer = fabric.read_table(dataset, "Customer")
    customer.head()
    
  2. Muat tabel State ke dalam FabricDataFrame:

    state = fabric.read_table(dataset, "State")
    state.head()
    

    Meskipun output kode ini terlihat seperti pandas DataFrame, Anda sebenarnya telah menginisialisasi struktur data yang disebut FabricDataFrame yang mendukung beberapa operasi berguna yang melengkapi pandas.

  3. Periksa jenis data customer:

    type(customer)
    

    Output mengonfirmasi bahwa customer berjenis sempy.fabric._dataframe._fabric_dataframe.FabricDataFrame.'

  4. Gabungkan customer dan state DataFrames:

    customer_state_df = customer.merge(state, left_on="State", right_on="StateCode",  how='left')
    customer_state_df.head()
    

Mengidentifikasi dependensi fungsi

Dependensi fungsi ini memanifestasikan dirinya sebagai hubungan satu-ke-banyak antara nilai dalam dua kolom (atau lebih) dalam DataFrame. Hubungan ini dapat digunakan untuk mendeteksi masalah kualitas data secara otomatis.

  1. Jalankan fungsi find_dependencies SemPy pada DataFrame gabungan untuk mengidentifikasi dependensi fungsional yang ada di antara nilai dalam kolom:

    dependencies = customer_state_df.find_dependencies()
    dependencies
    
  2. Visualisasikan dependensi yang diidentifikasi dengan menggunakan fungsi plot_dependency_metadata SemPy:

    plot_dependency_metadata(dependencies)
    

    Cuplikan layar memperlihatkan plot metadata dependensi.

    Seperti yang diharapkan, grafik dependensi fungsian menunjukkan bahwa kolom Customer menentukan beberapa kolom seperti City, Postal Code, dan Name.

    Anehnya, grafik tidak menunjukkan dependensi fungsi antara City dan Postal Code, mungkin karena ada banyak pelanggaran dalam hubungan antara kolom. Anda dapat menggunakan fungsi plot_dependency_violations SemPy untuk memvisualisasikan pelanggaran dependensi antara kolom tertentu.

Menjelajahi data untuk masalah kualitas

  1. Buat grafik dengan fungsi visualisasi plot_dependency_violations SemPy.

    customer_state_df.plot_dependency_violations('Postal Code', 'City')
    

    Cuplikan layar memperlihatkan plot pelanggaran dependensi.

    Plot pelanggaran dependensi menunjukkan nilai untuk Postal Code di sebelah kiri, dan nilai untuk City di sebelah kanan. Jika ada baris yang berisi nilai-nilai ini, maka tepi akan menyambungkan Postal Code di sisi kiri dengan City di sisi kanan. Tepi ditandai dengan jumlah baris yang sesuai. Misalnya, ada dua baris dengan kode pos 20004, satu dengan kota "Menara Utara" dan yang lainnya dengan kota "Washington".

    Selain itu, plot menunjukkan beberapa pelanggaran dan banyak nilai kosong.

  2. Konfirmasikan jumlah nilai kosong untuk Postal Code:

    customer_state_df['Postal Code'].isna().sum()
    

    50 baris memiliki NA untuk kode pos.

  3. Hapus baris dengan nilai kosong. Kemudian, temukan dependensi menggunakan fungsi find_dependencies. Perhatikan parameter tambahan verbose=1 yang menawarkan sekilas ke dalam pekerjaan internal SemPy:

    customer_state_df2=customer_state_df.dropna()
    customer_state_df2.find_dependencies(verbose=1)
    

    Entropi kondisi untuk Postal Code dan City adalah 0,049. Nilai ini menunjukkan bahwa ada pelanggaran dependensi fungsi. Sebelum Anda memperbaiki pelanggaran, naikkan ambang batas pada entropi kondisional dari nilai default 0.01 ke 0.05, hanya untuk melihat dependensi. Ambang batas yang lebih rendah menghasilkan lebih sedikit dependensi (atau selektivitas yang lebih tinggi).

  4. Naikkan ambang batas pada entropi kondisional dari nilai default 0.01 ke 0.05:

    plot_dependency_metadata(customer_state_df2.find_dependencies(threshold=0.05))
    

    Plot metadata dependensi dengan ambang yang lebih tinggi untuk entropi.

    Jika Anda menerapkan pengetahuan domain tentang entitas mana yang menentukan nilai entitas lain, grafik dependensi ini tampaknya akurat.

  5. Jelajahi lebih banyak masalah kualitas data yang terdeteksi. Misalnya, panah putus-putus menghubungkan City dan Region, yang menunjukkan bahwa ketergantungannya hanya perkiraan. Perkiraan hubungan ini dapat menyiratkan bahwa ada dependensi fungsi sebagian.

    customer_state_df.list_dependency_violations('City', 'Region')
    
  6. Lihat lebih dekat setiap kasus di mana nilai Region yang tidak ada menyebabkan pelanggaran:

    customer_state_df[customer_state_df.City=='Downers Grove']
    

    Hasilnya menunjukkan kota Downers Grove terjadi di Illinois dan Nebraska. Namun, Downer's Grove adalah kota di Illinois, bukan Nebraska.

  7. Lihatlah kota Fremont:

    customer_state_df[customer_state_df.City=='Fremont']
    

    Ada sebuah kota bernama Fremont di California. Namun, untuk Texas, mesin pencari mengembalikan Premont, bukan Fremont.

  8. Ini juga mencurigakan melihat pelanggaran dependensi antara Name dan Country/Region, seperti yang ditandai oleh garis putus-putus dalam grafik asli pelanggaran dependensi (sebelum menghilangkan baris dengan nilai kosong).

    customer_state_df.list_dependency_violations('Name', 'Country/Region')
    

    Tampaknya satu pelanggan, SDI Design hadir di dua wilayah - Amerika Serikat dan Kanada. Kejadian ini mungkin bukan pelanggaran semantik, tetapi mungkin hanya kasus yang jarang terjadi. Namun, ada baiknya melihat lebih dekat:

  9. Harap periksa lebih dekat pelanggan Desain SDI:

    customer_state_df[customer_state_df.Name=='SDI Design']
    

    Inspeksi lebih lanjut menunjukkan bahwa sebenarnya dua pelanggan yang berbeda (dari industri yang berbeda) dengan nama yang sama.

Analisis data eksploratif adalah proses yang menarik, dan begitu juga pembersihan data. Selalu ada sesuatu yang disembunyikan data, tergantung pada bagaimana Anda melihatnya, apa yang ingin Anda tanyakan, dan sebagainya. Tautan semantik memberi Anda alat baru yang dapat Anda gunakan untuk mencapai lebih banyak hal dengan data Anda.

Lihat tutorial lain untuk tautan semantik / SemPy: