Bagikan melalui


Tutorial: Membersihkan data dengan dependensi fungsional

Gunakan dependensi fungsi untuk membersihkan data. Dependensi fungsional ada saat satu kolom dalam model semantik (himpunan data Power BI) bergantung pada kolom lain. Misalnya, ZIP code kolom dapat menentukan nilai dalam city kolom. Dependensi fungsi muncul sebagai hubungan satu-ke-banyak antara nilai dalam dua kolom atau lebih dalam DataFrame. Tutorial ini menggunakan himpunan data Synthea untuk menunjukkan bagaimana dependensi fungsi membantu mendeteksi masalah kualitas data.

Dalam tutorial ini, Anda mempelajari cara:

  • Terapkan pengetahuan domain untuk membentuk hipotesis tentang dependensi fungsi dalam model semantik.
  • Kenali komponen pustaka Semantic Link Python (SemPy) yang mengotomatiskan analisis kualitas data. Komponen-komponen ini meliputi:
    • FabricDataFrame—struktur seperti panda dengan informasi semantik tambahan.
    • Fungsi yang mengotomatiskan evaluasi hipotesis tentang dependensi fungsional dan mengidentifikasi pelanggaran dalam model semantik Anda.

Prasyarat

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

  • Masuk ke Microsoft Fabric.

  • Beralih ke Fabric dengan menggunakan pengalih pengalaman di sisi kiri bawah halaman beranda Anda.

    Cuplikan layar yang memperlihatkan pemilihan Fabric pada menu pengalih pengalaman.

  • Pilih Ruang Kerja di panel navigasi, lalu pilih ruang kerja Anda untuk mengaturnya sebagai ruang kerja saat ini.

Ikuti penjelasan di buku catatan

Gunakan buku catatan data_cleaning_functional_dependencies_tutorial.ipynb untuk mengikuti tutorial ini.

Menyiapkan buku catatan

Di bagian ini, Anda menyiapkan lingkungan notebook.

  1. Periksa versi Spark Anda. Jika Anda menggunakan Spark 3.4 atau yang lebih baru di Microsoft Fabric, Semantic Link disertakan secara default, sehingga Anda tidak perlu menginstalnya. Jika Anda menggunakan Spark 3.3 atau yang lebih lama, atau Anda ingin memperbarui ke Semantic Link terbaru, jalankan perintah berikut.

    %pip install -U semantic-link
    
  2. Impor modul yang Anda gunakan di buku catatan ini.

    import pandas as pd
    import sempy.fabric as fabric
    from sempy.fabric import FabricDataFrame
    from sempy.dependencies import plot_dependency_metadata
    
  3. Unduh data sampel. Dalam tutorial ini, gunakan himpunan data Synthea dari catatan medis sintetis (versi kecil untuk kesederhanaan).

    download_synthea(which='small')
    

Menjelajahi data

  1. Menginisialisasi FabricDataFrame dengan konten file providers.csv .

    providers = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv"))
    providers.head()
    
  2. Periksa masalah kualitas data dengan fungsi SemPy find_dependencies dengan merencanakan grafik dependensi fungsi yang terdeteksi otomatis.

    deps = providers.find_dependencies()
    plot_dependency_metadata(deps)
    

    Cuplikan layar grafik dependensi fungsi yang memperlihatkan Id menentukan NAMA dan ORGANISASI.

    Grafik menunjukkan yang Id menentukan NAME dan ORGANIZATION. Hasil ini diharapkan karena Id unik.

  3. Konfirmasikan bahwa Id itu unik.

    providers.Id.is_unique
    

    Kode mengembalikan True untuk mengonfirmasi bahwa Id unik.

Menganalisis dependensi fungsi secara mendalam

Grafik dependensi fungsi ini juga menunjukkan bahwa ORGANIZATION menentukan ADDRESS dan ZIP, seperti yang diharapkan. Namun, Anda mungkin mengharapkan ZIP juga menentukan CITY, tetapi panah putus-putus menunjukkan bahwa ketergantungan tersebut hanya bersifat perkiraan, menunjuk ke masalah kualitas data.

Ada kekhasan lain dalam grafik. Misalnya, NAME tidak menentukan GENDER, Id, SPECIALITY, atau ORGANIZATION. Masing-masing kekhasan ini mungkin layak diselidiki.

  1. Lihat lebih dalam perkiraan hubungan antara ZIP dan CITY dengan menggunakan fungsi SemPy list_dependency_violations untuk mencantumkan pelanggaran:
providers.list_dependency_violations('ZIP', 'CITY')
  1. Buat grafik dengan fungsi visualisasi plot_dependency_violations SemPy. Grafik ini berguna jika jumlah pelanggaran kecil:
providers.plot_dependency_violations('ZIP', 'CITY')

Cuplikan layar plot pelanggaran dependensi.

Plot pelanggaran dependensi menunjukkan nilai untuk ZIP di sisi kiri dan nilai untuk CITY di sisi kanan. Tepi menghubungkan kode pos di sisi kiri plot dengan kota di sisi kanan jika ada baris yang berisi dua nilai ini. Garis tepi diannotasi dengan jumlah baris yang sesuai. Misalnya, ada dua baris dengan kode pos 02747-1242, satu baris dengan kota "NORTH DARTHMOUTH" dan yang lainnya dengan kota "DARTHMOUTH", seperti yang ditunjukkan pada plot sebelumnya dan kode berikut:

  1. Konfirmasikan pengamatan dari plot dengan menjalankan kode berikut:
providers[providers.ZIP == '02747-1242'].CITY.value_counts()
  1. Plot ini juga menunjukkan bahwa, di antara baris yang memiliki CITY "DARTHMOUTH", sembilan baris memiliki ZIP 02747-1262. Satu baris memiliki ZIP 02747-1242. Satu baris memiliki ZIP 02747-2537. Konfirmasikan pengamatan ini dengan kode berikut:

    providers[providers.CITY == 'DARTHMOUTH'].ZIP.value_counts()
    
  2. Ada kode pos lain yang terkait dengan "DARTMOUTH", tetapi kode pos ini tidak ditampilkan dalam grafik pelanggaran dependensi karena tidak mengisyaratkan masalah kualitas data. Misalnya, kode pos "02747-4302" secara unik dikaitkan dengan "DARTMOUTH" dan tidak muncul dalam grafik pelanggaran dependensi. Konfirmasikan dengan menjalankan kode berikut:

    providers[providers.ZIP == '02747-4302'].CITY.value_counts()
    

Meringkas masalah kualitas data yang terdeteksi dengan SemPy

Grafik pelanggaran dependensi menunjukkan beberapa masalah kualitas data dalam model semantik ini:

  • Beberapa nama kota adalah huruf besar. Gunakan metode string untuk memperbaiki masalah ini.
  • Beberapa nama kota memiliki kualifikasi (atau awalan), seperti "Utara" dan "Timur". Misalnya, Kode Pos "2128" memetakan ke "EAST BOSTON" sekali dan ke "BOSTON" sekali. Masalah serupa terjadi antara "NORTH DARTMOUTH" dan "DARTMOUTH". Jatuhkan kualifikasi ini atau petakan Kode Pos ke kota dengan kejadian yang paling umum.
  • Ada kesalahan ketik dalam beberapa nama kota, seperti "PITTSFIELD" vs. "PITTSFILED" dan "NEWBURGPORT" vs. "NEWBURYPORT." Untuk "NEWBURGPORT", perbaiki kesalahan ketik ini dengan menggunakan kejadian yang paling umum. Untuk "PITTSFIELD," dengan hanya satu kemunculan masing-masing, disambiguasi otomatis jauh lebih sulit tanpa pengetahuan eksternal atau model bahasa.
  • Terkadang, awalan seperti "Barat" disingkat dengan huruf tunggal "W." Ganti "W" dengan "Barat" jika semua kejadian "W" adalah singkatan dari "Barat."
  • Kode Pos "02130" memetakan ke "BOSTON" sekali dan "Jamaika Plain" sekali. Masalah ini tidak mudah diperbaiki. Dengan lebih banyak data, petakan ke kejadian yang paling umum.

Membersihkan data

  1. Perbaiki kapitalisasi dengan mengubah nilai menjadi huruf besar/kecil.

    providers['CITY'] = providers.CITY.str.title()
    
  2. Jalankan deteksi pelanggaran lagi untuk mengonfirmasi bahwa ada lebih sedikit ambiguitas.

    providers.list_dependency_violations('ZIP', 'CITY')
    

Persingkat data secara manual, atau jatuhkan baris yang melanggar batasan fungsional antar kolom dengan menggunakan fungsi SemPy drop_dependency_violations .

Untuk setiap nilai variabel determinan, drop_dependency_violations memilih nilai paling umum dari variabel dependen dan menghilangkan semua baris dengan nilai lain. Terapkan operasi ini hanya jika Anda yakin bahwa heuristik statistik ini mengarah pada hasil yang benar untuk data Anda. Jika tidak, tulis kode Anda sendiri untuk menangani pelanggaran yang terdeteksi.

  1. Jalankan drop_dependency_violations fungsi pada ZIP kolom dan CITY .

    providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')
    
  2. Cantumkan pelanggaran dependensi antara ZIP dan CITY.

    providers_clean.list_dependency_violations('ZIP', 'CITY')
    

Kode mengembalikan daftar kosong untuk menunjukkan bahwa tidak ada lagi pelanggaran batasan fungsi.ZIP -> CITY

Lihat tutorial lain untuk tautan semantik atau SemPy: