다음을 통해 공유


자습서: 기능 종속성을 사용하여 데이터 정리

이 자습서에서는 데이터 클린 대한 기능 종속성을 사용합니다. 함수 종속성은 의미 체계 모델(Power BI 데이터 세트)의 한 열이 다른 열의 함수일 때 존재합니다. 예를 들어 우편 번호 열에 도시 열의 값이 결정될 수 있습니다. 기능 종속성은 DataFrame 내의 두 개 이상의 열에 있는 값 간의 일대다 관계로 나타납니다. 이 자습서에서는 Synthea 데이터 세트를 사용하여 기능 관계가 데이터 품질 문제를 감지하는 데 어떻게 도움이 되는지 보여 줍니다.

이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.

  • do기본 지식을 적용하여 의미 체계 모델의 기능 종속성에 대한 가설을 작성합니다.
  • 데이터 품질 분석을 자동화하는 데 도움이 되는 의미 체계 링크의 Python 라이브러리(SemPy) 구성 요소를 숙지하세요. 이러한 구성 요소는 다음과 같습니다.
    • FabricDataFrame - 추가 의미 체계 정보로 개선된 pandas와 같은 구조체입니다.
    • 기능 종속성에 대한 가설의 평가를 자동화하고 의미 체계 모델에서 관계 위반을 식별하는 유용한 함수입니다.

필수 조건

  • 왼쪽 탐색 창에서 작업 영역을 선택하여 작업 영역을 찾아 선택합니다. 이 작업 영역은 현재 작업 영역이 됩니다.

Notebook에서 팔로우

data_클린ing_functional_dependencies_tutorial.ipynb Notebook은 이 자습서와 함께 제공됩니다.

이 자습서에 대해 함께 제공되는 Notebook을 열려면 데이터 과학 자습서를 위해 시스템 준비 자습서의 지침에 따라 Notebook을 작업 영역으로 가져옵니다.

이 페이지에서 코드를 복사하여 붙여 넣으면 새 Notebook을 만들 수 있습니다.

코드 실행을 시작하기 전에 Lakehouse를 Notebook에 연결해야 합니다.

Notebook 설정

이 섹션에서는 필요한 모듈 및 데이터를 사용하여 Notebook 환경을 설정합니다.

  1. Spark 3.4 이상의 경우 패브릭을 사용할 때 기본 런타임에서 의미 체계 링크를 사용할 수 있으며 설치할 필요가 없습니다. Spark 3.3 이하를 사용하거나 최신 버전의 의미 체계 링크로 업데이트하려는 경우 다음 명령을 실행할 수 있습니다.

python %pip install -U semantic-link  

  1. 나중에 필요한 모듈의 필요한 가져오기를 수행합니다.

    import pandas as pd
    import sempy.fabric as fabric
    from sempy.fabric import FabricDataFrame
    from sempy.dependencies import plot_dependency_metadata
    from sempy.samples import download_synthea
    
  2. 샘플 데이터를 끌어오기. 이 자습서에서는 합성 의료 레코드의 Synthea 데이터 세트(단순성을 위해 작은 버전)를 사용합니다.

    download_synthea(which='small')
    

데이터 탐색

  1. providers.csv 파일의 콘텐츠를 사용하여 초기화 FabricDataFrame 합니다.

    providers = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv"))
    providers.head()
    
  2. 자동 검색된 기능 종속성의 그래프를 그려 SemPy 함수 find_dependencies 의 데이터 품질 문제를 확인합니다.

    deps = providers.find_dependencies()
    plot_dependency_metadata(deps)
    

    기능 종속성의 그래프를 보여 주는 스크린샷.

    함수 종속성의 그래프는 고유하므로 예상되는 Id 결정 NAMEORGANIZATION (단색 화살표로 표시됨)를 보여 Id 줍니다.

  3. 고유한지 Id 확인합니다.

    providers.Id.is_unique
    

    코드가 반환 True 되어 고유한지 Id 확인합니다.

기능 종속성 심층 분석

함수 종속성 그래프는 예상대로 결정 ADDRESSZIP이를 ORGANIZATION 보여 줍니다. 그러나 확인할 CITY수도 ZIP 있지만 파선 화살표는 종속성이 대략적인 것일 뿐이며 데이터 품질 문제를 가리킵니다.

그래프에는 다른 특수성이 있습니다. 예를 들어 , NAMEGENDERId또는 SPECIALITYORGANIZATION. 이러한 각 특성은 조사할 가치가 있을 수 있습니다.

  1. SemPy의 list_dependency_violations 함수를 사용하여 위반의 테이블 형식 목록을 확인하여 대략적인 관계를 ZIPCITY자세히 살펴봅니다.

    providers.list_dependency_violations('ZIP', 'CITY')
    
  2. SemPy의 plot_dependency_violations 시각화 함수를 사용하여 그래프를 그립니다. 이 그래프는 위반 횟수가 작은 경우 유용합니다.

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

    종속성 위반의 플롯을 보여 주는 스크린샷

    종속성 위반 그림에는 왼쪽에 대한 ZIP 값과 오른쪽에 대한 CITY 값이 표시됩니다. 이 두 값을 포함하는 행이 있는 경우 가장자리는 그림의 왼쪽에 있는 우편 번호를 오른쪽에 있는 도시와 연결합니다. 가장자리는 이러한 행의 수로 주석이 추가됩니다. 예를 들어 우편 번호가 02747-1242인 두 개의 행이 있으며, 하나는 도시 "NORTH DARTHMOUTH"이고 다른 행은 이전 그림과 다음 코드와 같이 도시 "DARTHMOUTH"가 있는 행입니다.

  3. 다음 코드를 실행하여 종속성 위반의 플롯으로 수행한 이전 관찰을 확인합니다.

    providers[providers.ZIP == '02747-1242'].CITY.value_counts()
    
  4. 또한 "DARTHMOUTH"가 있는 CITY 행 중 9개 행은 ZIP 02747-1262이고 한 행은 ZIP 02747-1242이고 한 행은 ZIP 02747-2537입니다. 다음 코드를 사용하여 이러한 관찰을 확인합니다.

    providers[providers.CITY == 'DARTMOUTH'].ZIP.value_counts()
    
  5. "DARTMOUTH"와 연결된 다른 우편 번호가 있지만 이러한 우편 번호는 데이터 품질 문제를 암시하지 않으므로 종속성 위반 그래프에 표시되지 않습니다. 예를 들어 우편 번호 "02747-4302"는 "DARTMOUTH"에 고유하게 연결되며 종속성 위반 그래프에 표시되지 않습니다. 다음 코드를 실행하여 확인합니다.

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

SemPy에서 검색된 데이터 품질 문제 요약

종속성 위반 그래프로 돌아가면 이 의미 체계 모델에 몇 가지 흥미로운 데이터 품질 문제가 있음을 알 수 있습니다.

  • 일부 도시 이름은 모두 대문자입니다. 이 문제는 문자열 메서드를 사용하여 쉽게 해결할 수 있습니다.
  • 일부 도시 이름에는 "북쪽" 및 "동쪽"과 같은 한정자(또는 접두사)가 있습니다. 예를 들어 우편 번호 "2128"은 "EAST BOSTON"에 한 번 매핑되고 "BOSTON"에 한 번 매핑됩니다. "NORTH DARTHMOUTH"와 "DARTHMOUTH" 사이에도 비슷한 문제가 발생합니다. 이러한 한정자를 삭제하거나 가장 자주 발생하는 우편 번호를 도시에 매핑할 수 있습니다.
  • 일부 도시에는 "PITTSFIELD" vs. "PITTSFILED" 및 "NEWBURGPORT vs. "NEWBURYPORT"와 같은 오타가 있습니다. "NEWBURGPORT"의 경우 가장 일반적인 항목을 사용하여 이 오타를 수정할 수 있습니다. "PITTSFIELD"의 경우 각 항목이 하나만 있으면 외부 지식이나 언어 모델 사용 없이 자동 명확하게 구분하기가 훨씬 더 어려워집니다.
  • 경우에 따라 "West"와 같은 접두사는 단일 문자 "W"로 축약됩니다. "W"가 모두 "West"를 사용하는 경우 이 문제는 간단한 바꾸기로 해결될 수 있습니다.
  • 우편 번호 "02130"은 한 번 "보스턴"과 "자메이카 플레인"에 한 번 매핑됩니다. 이 문제는 해결하기 쉽지 않지만 더 많은 데이터가 있는 경우 가장 일반적인 항목에 매핑하는 것이 잠재적인 해결 방법이 될 수 있습니다.

데이터 정리

  1. 모든 대문자를 타이틀 사례로 변경하여 대문자화 문제를 해결합니다.

    providers['CITY'] = providers.CITY.str.title()
    
  2. 위반 검색을 다시 실행하여 일부 모호성이 사라졌는지 확인합니다(위반 횟수는 더 작음).

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

    이 시점에서 데이터를 더 수동으로 구체화할 수 있지만, 한 가지 잠재적인 데이터 클린업 작업은 SemPy의 drop_dependency_violations 함수를 사용하여 데이터의 열 간에 기능 제약 조건을 위반하는 행을 삭제하는 것입니다.

    결정 변수의 각 값에 대해 종속 변수 drop_dependency_violations 의 가장 일반적인 값을 선택하고 다른 값이 있는 모든 행을 삭제하여 작동합니다. 이 통계적 추론으로 인해 데이터에 대한 올바른 결과가 발생할 것이라고 확신하는 경우에만 이 작업을 적용해야 합니다. 그렇지 않으면 필요에 따라 검색된 위반을 처리하는 고유한 코드를 작성해야 합니다.

  3. drop_dependency_violationsCITY 열에서 함수를 ZIP 실행합니다.

    providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')
    
  4. 다음 사이의 ZIPCITY종속성 위반을 나열합니다.

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

    코드는 함수 제약 조건 CITY -> ZIP의 더 이상 위반이 없음을 나타내기 위해 빈 목록을 반환합니다.

의미 체계 링크/SemPy에 대한 다른 자습서를 확인하세요.