자습서: 의미 체계 모델에서 함수 종속성 분석
이 자습서에서는 Power BI 분석가가 수행한 이전 작업을 기반으로 하며 의미 체계 모델(Power BI 데이터 세트) 형식으로 저장됩니다. Microsoft Fabric 내의 Synapse 데이터 과학 환경에서 SemPy(프리뷰)를 사용하여 DataFrame 열에 존재하는 함수 종속성을 분석할 수 있습니다. 이 분석은 보다 정확한 인사이트를 얻기 위해 중요하지 않은 데이터 품질 문제를 발견하는 데 도움이 됩니다.
이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.
- 도메인 지식을 적용하여 의미 체계 모델의 함수 종속성에 대한 가설을 공식화합니다.
- Power BI와의 통합을 지원하고 데이터 품질 분석을 자동화하는 데 도움이 되는 의미 체계 링크의 Python 라이브러리(SemPy) 구성 요소에 대해 알아봅니다. 이러한 구성 요소는 다음과 같습니다.
- FabricDataFrame - 추가적인 의미 체계 정보를 통해 향상된 Pandas와 유사한 구조입니다.
- Fabric 작업 영역에서 Notebook으로 의미 체계 모델을 당겨오기 위한 유용한 함수입니다.
- 함수 종속성에 대한 가설의 평가를 자동화하고 의미 체계 모델에서 관계 위반을 식별하는 유용한 함수입니다.
필수 조건
Microsoft Fabric 구독을 구매합니다. 또는 무료 Microsoft Fabric 평가판에 등록합니다.
Microsoft Fabric에 로그인합니다.
홈페이지 왼쪽의 환경 전환기를 사용하여 Synapse 데이터 과학 환경으로 전환합니다.
왼쪽 탐색 창에서 작업 영역을 선택하여 내 작업 영역을 찾아 선택합니다. 이 작업 영역은 현재 작업 영역이 됩니다.
fabric-samples GitHub 리포지토리에서Customer Profitability Sample.pbix 의미체계 모델을 다운로드하여 작업 영역에 업로드합니다.
Notebook에서 따라 하기
이 자습서에는 powerbi_dependencies_tutorial.ipynb Notebook이 함께 제공됩니다.
이 자습서에 함께 제공되는 Notebook을 열려면 데이터 과학 자습서를 위한 시스템 준비의 지침에 따라 Notebook을 작업 영역으로 가져옵니다.
이 페이지에서 코드를 복사하여 붙여넣으려는 경우 새 Notebook을 만들 수 있습니다.
코드 실행을 시작하기 전에 Notebook에 레이크하우스를 연결해야 합니다.
Notebook 설정
이 섹션에서는 필요한 모듈 및 데이터를 통해 Notebook 환경을 설정합니다.
Notebook 내의
%pip
인라인 설치 기능을 사용하여 PyPI에서SemPy
를 설치합니다.%pip install semantic-link
나중에 필요한 모듈을 가져옵니다.
import sempy.fabric as fabric from sempy.dependencies import plot_dependency_metadata
데이터 로드 및 전처리
이 자습서에서는 표준 샘플 의미 체계 모델인 Customer Profitability Sample.pbix를 사용합니다. 의미 체계 모델에 대한 설명은 Power BI에 대한 고객 수익성 샘플을 참조하세요.
SemPy의
read_table
함수를 사용하여 Power BI 데이터를 FabricDataFrames에 로드합니다.dataset = "Customer Profitability Sample" customer = fabric.read_table(dataset, "Customer") customer.head()
FabricDataFrame에
State
테이블을 로드합니다.state = fabric.read_table(dataset, "State") state.head()
이 코드의 출력은 Pandas DataFrame처럼 보이지만, 실제로는 Pandas를 기반으로 몇 가지 유용한 작업을 지원하는
FabricDataFrame
이라는 데이터 구조를 초기화했습니다.customer
의 데이터 형식 확인:type(customer)
출력이 형식
sempy.fabric._dataframe._fabric_dataframe.FabricDataFrame
의customer
임을 확인합니다.customer
및state
DataFrames 조인:customer_state_df = customer.merge(state, left_on="State", right_on="StateCode", how='left') customer_state_df.head()
함수 종속성 식별
함수 종속성은 DataFrame 내의 두 개(이상)의 열에 있는 값 간의 일대다 관계로 나타납니다. 이러한 관계를 사용하면 데이터 품질 문제를 자동으로 검색할 수 있습니다.
병합된 DataFrame에서 SemPy의
find_dependencies
함수를 실행하여 열의 값 간에 기존 함수 종속성을 식별합니다.dependencies = customer_state_df.find_dependencies() dependencies
SemPy의
plot_dependency_metadata
함수를 사용하여 식별된 종속성을 시각화합니다.plot_dependency_metadata(dependencies)
예상대로, 함수 종속성 그래프는
Customer
열이City
,Postal Code
,Name
과 같은 몇몇 열을 결정한다는 것을 보여줍니다.놀랍게도 그래프에서
City
와Postal Code
사이에는 함수적 종속성이 나타나지 않는데, 아마도 열 간의 관계에 위반이 많기 때문일 겁니다. SemPy의plot_dependency_violations
함수를 사용하면 특정 열 간의 종속성 위반을 시각화할 수 있습니다.
품질 문제에 대한 데이터 탐색
SemPy의
plot_dependency_violations
시각화 함수를 사용하여 그래프를 그릴 수 있습니다.customer_state_df.plot_dependency_violations('Postal Code', 'City')
종속성 위반 플롯의 왼쪽에는
Postal Code
에 대한 값이, 오른쪽에는City
에 대한 값이 표시됩니다. 이 두 값이 포함된 행이 있는 경우 가장자리는 왼쪽의Postal Code
와 오른쪽의City
를 연결합니다. 가장자리에는 해당 행의 수로 주석이 추가됩니다. 예를 들어 우편 번호가 20004인 두 개의 행이 있는데, 한 행에는 도시가 ‘North Tower’이고 다른 행에는 도시가 ‘Washington’입니다.또한 플롯에 몇 가지 위반과 많은 빈 값이 표시됩니다.
Postal Code
에 대한 빈 값 수를 확인합니다.customer_state_df['Postal Code'].isna().sum()
50개 행에는 우편 번호에 대한 NA가 있습니다.
빈 값이 있는 행을 삭제합니다. 그런 다음
find_dependencies
함수를 사용하여 종속성을 찾습니다. SemPy의 내부 작업을 엿볼 수 있는 추가 매개 변수verbose=1
을 확인하세요.customer_state_df2=customer_state_df.dropna() customer_state_df2.find_dependencies(verbose=1)
Postal Code
및City
의 조건부 엔트로피는 0.049입니다. 이 값은 함수 종속성 위반이 있음을 나타냅니다. 위반을 수정하기 전에 조건부 엔트로피에 대한 임계값을 기본값인0.01
에서0.05
로 올려 종속성을 확인할 수 있습니다. 임계값이 낮을수록 종속성이 줄어들거나 선택성이 높아집니다.조건부 엔트로피의 임계값을 기본값
0.01
에서0.05
로 올립니다.plot_dependency_metadata(customer_state_df2.find_dependencies(threshold=0.05))
어떤 엔터티가 다른 엔터티의 값을 결정하는지에 대한 도메인 지식을 적용하면 이 종속성 그래프는 정확한 것처럼 보입니다.
감지된 많은 데이터 품질 문제를 자세히 살펴봅니다. 예를 들어 대시 화살표가
City
와Region
을 연결하는데, 이는 종속성이 대략적인 수준에 불과하다는 것을 나타냅니다. 이 대략적인 관계는 부분적인 함수 종속성이 있음을 암시할 수 있습니다.customer_state_df.list_dependency_violations('City', 'Region')
Region
값이 비어 있지 않은 경우 위반이 발생하는 각 사례를 자세히 살펴봅니다.customer_state_df[customer_state_df.City=='Downers Grove']
결과는 도시 Downers Grove가 Illinois 주와 Nebraska 주에 걸쳐 존재함을 보여줍니다. 그러나 Downer's Grove는 Nebraska 주가 아니라 Illinois 주에 있는 도시입니다.
도시 Fremont를 살펴봅니다.
customer_state_df[customer_state_df.City=='Fremont']
California에는 Fremont라는 도시가 있습니다. 그러나 Texas의 경우 검색 엔진이 Fremont가 아니라 Premont를 반환합니다.
또한 종속성 위반의 원래 그래프(빈 값이 있는 행을 삭제하기 전)에서 점선으로 표시된 대로
Name
과Country/Region
사이의 종속성 위반이 보이는 것도 의심스럽습니다.customer_state_df.list_dependency_violations('Name', 'Country/Region')
SDI 디자인이라는 한 고객이 United States와 Canada라는 두 지역에 있는 것으로 보입니다. 이 현상은 의미 체계 위반이 아닐 수 있지만 흔하지 않은 경우일 수 있습니다. 그럼에도 불구하고 자세히 살펴볼 가치가 있습니다.
고객 SDI 디자인을 자세히 살펴봅니다.
customer_state_df[customer_state_df.Name=='SDI Design']
추가 조사 결과, 실제로 동일한 이름을 가진 서로 다른 두 고객(다른 산업의 고객)이었습니다.
탐색적 데이터 분석은 흥미로운 프로세스이며 데이터 정리도 마찬가지입니다. 데이터를 어떻게 보는지, 무엇을 묻고 싶은지 등에 따라 데이터에 숨겨진 것이 항상 있기 마련입니다. 의미 체계 링크는 데이터를 활용해 더 많은 성과를 달성할 수 있는 새로운 도구를 제공합니다.
관련 콘텐츠
의미 체계 링크/SemPy에 대한 다른 자습서를 확인해 볼 수 있습니다.