다음을 통해 공유


자습서: 의미 체계 모델에서 함수 종속성 분석

이 자습서에서는 의미 체계 모델(Power BI 데이터 세트)으로 저장된 Power BI 분석가의 작업을 기반으로 합니다. Microsoft Fabric의 Synapse 데이터 과학 환경에서 SemPy(미리 보기)를 사용하여 DataFrame 열의 기능 종속성을 분석합니다. 이 분석을 통해 미묘한 데이터 품질 문제를 검색하여 보다 정확한 인사이트를 얻을 수 있습니다.

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

  • 도메인 지식을 적용하여 의미 체계 모델의 함수 종속성에 대한 가설을 공식화합니다.
  • Power BI와 통합되고 데이터 품질 분석을 자동화하는 데 도움이 되는 SemPy(Semantic Link Python 라이브러리)의 구성 요소에 대해 알아보세요. 이러한 구성 요소는 다음과 같습니다.
    • FabricDataFrame — pandas와 같은 구조에 추가적인 의미 정보로 강화된 구조체
    • 패브릭 작업 영역에서 Notebook으로 의미 체계 모델을 끌어오는 함수
    • 함수 종속성 가설을 평가하고 의미 체계 모델에서 관계 위반을 식별하는 함수

필수 조건

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

  2. fabric-samples GitHub 리포지토리에서 고객 수익성 샘플.pbix 파일을 다운로드합니다.

  3. 작업 영역에서 보고서>가져오기 또는 페이지가 매겨진 보고서>를 선택하고, 이 컴퓨터에서 고객 수익성 Sample.pbix 파일을 작업 영역에 업로드하십시오.

Notebook에서 따라 하기

이 자습서에는 powerbi_dependencies_tutorial.ipynb Notebook이 함께 제공됩니다.

Notebook 설정

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

  1. 노트북에서 PyPI로부터 SemPy를 설치하려면 %pip을 사용하세요.

    %pip install semantic-link
    
  2. 필요한 모듈을 가져옵니다.

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

데이터 로드 및 전처리

이 자습서에서는 표준 샘플 의미 체계 모델인 Customer Profitability Sample.pbix를 사용합니다. 의미 체계 모델에 대한 설명은 Power BI에 대한 고객 수익성 샘플을 참조하세요.

  1. 함수 FabricDataFrame을(를) 사용하여 Power BI 데이터를 fabric.read_table에 로드합니다.

    dataset = "Customer Profitability Sample"
    customer = fabric.read_table(dataset, "Customer")
    customer.head()
    
  2. State 에 테이블을 로드합니다FabricDataFrame.

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

    출력은 pandas DataFrame처럼 보이지만 이 코드는 pandas 위에 작업을 추가하는 데이터 FabricDataFrame 구조를 초기화합니다.

  3. 의 데이터 형식을 확인합니다 customer.

    type(customer)
    

    출력은 다음과 같습니다 customersempy.fabric._dataframe._fabric_dataframe.FabricDataFrame.

  4. customerstateDataFrame 개체를 결합합니다.

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

함수 종속성 식별

기능 종속성은 DataFrame에 있는 두 개 이상의 열에서 값 간에 일 대 다 관계입니다. 이러한 관계를 사용하여 데이터 품질 문제를 자동으로 검색합니다.

  1. 병합된 find_dependencies 항목에서 SemPy 함수 DataFrame 를 실행하여 열 값 간의 기능 종속성을 식별합니다.

    dependencies = customer_state_df.find_dependencies()
    dependencies
    
  2. SemPy의 plot_dependency_metadata 함수를 사용하여 종속성을 시각화합니다.

    plot_dependency_metadata(dependencies)
    

    종속성 메타데이터 플롯의 스크린샷.

    기능 종속성 그래프는 열이 Customer 열과 같은 CityPostal CodeName열을 결정한다는 것을 보여 줍니다.

    그래프는 아마도 열 CityPostal Code 간의 관계에 많은 위반이 있기 때문에 함수 종속성을 표시하지 않는 것 같습니다. SemPy 함수 plot_dependency_violations 를 사용하여 특정 열 간의 종속성 위반을 시각화합니다.

품질 문제에 대한 데이터 탐색

  1. SemPy의 plot_dependency_violations 시각화 함수를 사용하여 그래프를 그릴 수 있습니다.

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

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

    종속성 위반 그래프에서는 왼쪽에 Postal Code의 값이, 오른쪽에 City의 값이 각각 나타납니다. 이 두 값이 포함된 행이 있는 경우 가장자리는 왼쪽의 Postal Code와 오른쪽의 City를 연결합니다. 가장자리에는 그러한 행의 수가 주석으로 표시됩니다. 예를 들어 우편 번호가 20004인 두 개의 행이 있는데, 한 행에는 도시가 ‘North Tower’이고 다른 행에는 도시가 ‘Washington’입니다.

    또한 플롯에는 몇 가지 위반과 많은 빈 값이 표시됩니다.

  2. Postal Code에 대한 빈 값 수를 확인합니다.

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

    50개의 행에는 NA 값이 포함되어 있습니다 Postal Code.

  3. 빈 값이 있는 행을 삭제합니다. 그런 다음 find_dependencies 함수를 사용하여 종속성을 찾습니다. SemPy의 내부 작업을 엿볼 수 있는 추가 매개 변수 verbose=1을 확인하세요.

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

    Postal CodeCity의 조건부 엔트로피는 0.049입니다. 이 값은 함수 종속성 위반이 있음을 나타냅니다. 위반을 수정하기 전에 조건부 엔트로피에 대한 임계값을 기본값인 0.01에서 0.05로 올려 종속성을 확인할 수 있습니다. 임계값이 낮을수록 종속성이 줄어들거나 선택성이 높아집니다.

  4. 조건부 엔트로피의 임계값을 기본값 0.01에서 0.05로 올립니다.

    plot_dependency_metadata(customer_state_df2.find_dependencies(threshold=0.05))
    

    엔트로피 임계값이 더 높은 종속성 메타데이터 플롯의 스크린샷

    다른 엔터티의 값을 결정하는 엔터티에 대한 도메인 지식을 적용하면 이 종속성 그래프가 정확해 보입니다.

  5. 감지된 많은 데이터 품질 문제를 자세히 살펴봅니다. 예를 들어 대시 화살표가 CityRegion을 연결하는데, 이는 종속성이 대략적인 수준에 불과하다는 것을 나타냅니다. 이 대략적인 관계는 부분적인 함수 종속성이 있음을 암시할 수 있습니다.

    customer_state_df.list_dependency_violations('City', 'Region')
    
  6. Region 값이 비어 있지 않은 경우 위반이 발생하는 각 사례를 자세히 살펴봅니다.

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

    결과는 일리노이와 네브래스카에있는 다우너스 그로브의 도시를 보여줍니다. 그러나 다우너스 그로브는 네브래스카가 아닌 일리노이의 도시입니다.

  7. 도시 Fremont를 살펴봅니다.

    customer_state_df[customer_state_df.City=='Fremont']
    

    California에는 Fremont라는 도시가 있습니다. 그러나 Texas의 경우 검색 엔진이 Fremont가 아니라 Premont를 반환합니다.

  8. 또한 종속성 위반의 원래 그래프(빈 값이 있는 행을 삭제하기 전)에서 점선으로 표시된 대로 NameCountry/Region 사이의 종속성 위반이 보이는 것도 의심스럽습니다.

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

    한 고객인 SDI 디자인이 두 지역(미국 및 캐나다)에 나타납니다. 이 경우는 의미적 위반이 아닐 수 있으며, 단지 흔치 않을 수 있습니다. 그럼에도 불구하고 자세히 살펴볼 만한 가치가 있습니다.

  9. 고객 SDI 디자인을 자세히 살펴봅니다.

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

    추가 검사는 동일한 이름을 가진 서로 다른 산업의 두 고객을 보여줍니다.

예비 데이터 분석 및 데이터 정리는 반복적입니다. 찾는 것은 질문과 관점에 따라 달라집니다. 의미 체계 링크는 데이터에서 더 많은 것을 얻을 수 있는 새로운 도구를 제공합니다.

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