기능 종속성을 사용하여 데이터를 정리합니다. 함수 종속성은 의미 체계 모델(Power BI 데이터 세트)의 한 열이 다른 열에 종속되는 경우에 존재합니다. 예를 들어 열은 ZIP code 열의 값을 city 확인할 수 있습니다. 함수 종속성은 에 있는 두 개 이상의 열에 있는 값 간의 일 대 다 관계로 DataFrame나타납니다. 이 자습서에서는 Synthea 데이터 세트를 사용하여 기능 종속성이 데이터 품질 문제를 감지하는 데 어떻게 도움이 되는지 보여줍니다.
이 자습서에서는 다음 방법을 알아봅니다.
- 도메인 지식을 적용하여 의미 체계 모델의 기능 종속성에 대한 가설을 형성합니다.
- 데이터 품질 분석을 자동화하는 SemPy(Semantic Link Python 라이브러리)의 구성 요소를 숙지합니다. 이러한 구성 요소는 다음과 같습니다.
-
FabricDataFrame- 추가 의미 체계 정보가 있는 pandas와 같은 구조체입니다. - 함수 종속성에 대한 가설을 자동으로 평가하고 의미 체계 모델의 위반을 식별하는 함수입니다.
-
필수 구성 요소
Microsoft Fabric 구독을받으세요. 또는 무료 Microsoft Fabric 평가판등록하세요.
Microsoft Fabric 에로그인하세요.
홈 페이지의 왼쪽 아래에 있는 환경 전환기를 사용하여 패브릭으로 전환합니다.
- 탐색 창에서 작업 영역을 선택한 다음 작업 영역을 선택하여 현재 작업 영역으로 설정합니다.
노트북에서 따라하세요.
이 자습서를 수행하려면 data_cleaning_functional_dependencies_tutorial.ipynb Notebook을 사용합니다.
이 자습서와 함께 제공되는 노트북을 열려면 데이터 과학 자습서를 위한 시스템 준비 지침에 따라 노트북을 워크스페이스로 가져옵니다.
이 페이지에서 코드를 복사하여 붙여 넣으면 새 Notebook 만들있습니다.
코드를 실행하기 전에 노트북에 lakehouse를 연결해야 합니다.
Notebook 설정
이 섹션에서는 Notebook 환경을 설정합니다.
Spark 버전을 확인합니다. Microsoft Fabric에서 Spark 3.4 이상을 사용하는 경우 의미 체계 링크가 기본적으로 포함되어 있으므로 설치할 필요가 없습니다. Spark 3.3 이하를 사용하거나 최신 의미 체계 링크로 업데이트하려는 경우 다음 명령을 실행합니다.
%pip install -U semantic-link이 Notebook에서 사용하는 모듈을 가져옵니다.
import pandas as pd import sempy.fabric as fabric from sempy.fabric import FabricDataFrame from sempy.dependencies import plot_dependency_metadata샘플 데이터를 다운로드합니다. 이 자습서에서는 합성 의료 레코드의 Synthea 데이터 세트(단순성을 위해 작은 버전)를 사용합니다.
download_synthea(which='small')
데이터 탐색
FabricDataFrame파일의 콘텐츠를 사용하여 초기화 합니다.providers = FabricDataFrame(pd.read_csv("synthea/csv/providers.csv")) providers.head()자동 검색된 기능 종속성의 그래프를 그려 SemPy 함수
find_dependencies의 데이터 품질 문제를 확인합니다.deps = providers.find_dependencies() plot_dependency_metadata(deps)그래프는 결정 및 .를
Id보여 줍니다NAME.ORGANIZATION이 결과는 고유하기 때문에Id필요합니다.고유한지
Id확인합니다.providers.Id.is_unique코드는
True반환하여Id고유한지 확인합니다.
기능 종속성 심층 분석
또한 기능 종속성 그래프는 ORGANIZATION 예상대로 ADDRESS 및 ZIP결정한다는 것을 보여 줍니다. 그러나 당신은 ZIP가 CITY도 결정할 것이라고 기대할 수도 있습니다. 하지만 파선 화살표는 이 종속성이 데이터 품질 문제를 가리키는 근사적임을 나타냅니다.
그래프에는 다른 특수성이 있습니다. 예를 들어 NAMEGENDER, Id, SPECIALITY또는 ORGANIZATION결정하지 않습니다. 이러한 각 특성은 조사할 가치가 있을 수 있습니다.
- SemPy 함수
ZIP를 사용하여 위반을 나열하여 대략적인 관계를CITYlist_dependency_violations자세히 살펴봅니다.
providers.list_dependency_violations('ZIP', 'CITY')
- SemPy의
plot_dependency_violations시각화 함수를 사용하여 그래프를 그립니다. 이 그래프는 위반 횟수가 작은 경우 유용합니다.
providers.plot_dependency_violations('ZIP', 'CITY')
종속성 위반의 플롯은 왼쪽에 대한 ZIP 값과 오른쪽에 대한 CITY 값을 보여 줍니다. 이 두 값을 포함하는 행이 있는 경우 가장자리는 그림의 왼쪽에 있는 우편 번호를 오른쪽에 있는 도시와 연결합니다. 가장자리는 이러한 행의 수가 표시됩니다. 예를 들어 우편 번호가 02747-1242인 두 개의 행이 있으며, 하나는 도시 "NORTH DARTHMOUTH"이고 다른 행은 이전 그림과 다음 코드와 같이 도시 "DARTHMOUTH"가 있는 행입니다.
- 다음 코드를 실행하여 플롯에서 관찰을 확인합니다.
providers[providers.ZIP == '02747-1242'].CITY.value_counts()
또한 플롯은 "DARTHMOUTH"로 표시된
CITY행 중 9개의 행이ZIP02747-1262임을 보여 줍니다. 한 행ZIP의 02747-1242입니다. 한 행ZIP의 02747-2537입니다. 다음 코드를 사용하여 이러한 관찰을 확인합니다.providers[providers.CITY == 'DARTHMOUTH'].ZIP.value_counts()"DARTMOUTH"와 연결된 다른 우편 번호가 있지만 이러한 우편 번호는 데이터 품질 문제를 암시하지 않으므로 종속성 위반 그래프에 표시되지 않습니다. 예를 들어 우편 번호 "02747-4302"는 "DARTMOUTH"와 고유하게 연결되며 종속성 위반 그래프에 표시되지 않습니다. 다음 코드를 실행하여 확인합니다.
providers[providers.ZIP == '02747-4302'].CITY.value_counts()
SemPy에서 검색된 데이터 품질 문제 요약
종속성 위반 그래프는 이 의미 체계 모델의 몇 가지 데이터 품질 문제를 보여 줍니다.
- 일부 도시 이름은 대문자입니다. 문자열 메서드를 사용하여 이 문제를 해결합니다.
- 일부 도시 이름에는 "북쪽" 및 "동쪽"과 같은 한정자(또는 접두사)가 있습니다. 예를 들어 우편 번호 "2128"은 "EAST BOSTON"에 한 번 매핑되고 "BOSTON"에 한 번 매핑됩니다. "NORTH DARTMOUTH"와 "DARTMOUTH" 간에도 비슷한 문제가 발생합니다. 이러한 한정자를 삭제하거나 가장 자주 발생하는 우편 번호를 도시에 매핑합니다.
- 일부 도시 이름에는 "PITTSFIELD" vs. "PITTSFILED" 및 "NEWBURGPORT" vs. "NEWBURYPORT"와 같은 오타가 있습니다. "NEWBURGPORT"의 경우 가장 일반적인 항목을 사용하여 이 오타를 수정합니다. "PITTSFIELD"의 경우 각각 한 번만 발생하므로 외부 지식이나 언어 모델 없이는 자동 명확성이 훨씬 더 어렵습니다.
- "West"와 같은 접두사는 "W"라는 한 글자로 축약되는 경우도 있습니다. "W"의 모든 발생이 "서쪽"을 사용하는 경우 "W"를 "서쪽"으로 바꿉니다.
- 우편 번호 "02130"한 번 "보스턴"과 한 번 "자메이카 평원"에 매핑됩니다. 이 문제는 쉽게 해결할 수 없습니다. 더 많은 데이터를 사용하여 가장 일반적인 항목에 매핑합니다.
데이터 정리
값을 제목 대/소문자로 변경하여 대문자를 수정합니다.
providers['CITY'] = providers.CITY.str.title()위반 검색을 다시 실행하여 모호성이 적다는 것을 확인합니다.
providers.list_dependency_violations('ZIP', 'CITY')
수동으로 데이터를 구체화하거나 SemPy의 drop_dependency_violations 함수를 사용하여 열 간의 기능 제약 조건을 위반하는 행을 삭제합니다.
결정 변수의 각 값에 대해 종속 변수 drop_dependency_violations 의 가장 일반적인 값을 선택하고 다른 값이 있는 모든 행을 삭제합니다. 이 통계적 추론으로 인해 데이터에 대한 올바른 결과가 발생한다고 확신하는 경우에만 이 작업을 적용합니다. 그렇지 않으면 감지된 위반을 처리하는 고유한 코드를 작성합니다.
drop_dependency_violations및ZIP열에서 함수를CITY실행합니다.providers_clean = providers.drop_dependency_violations('ZIP', 'CITY')사이의
ZIP종속성 위반을 나열합니다CITY.providers_clean.list_dependency_violations('ZIP', 'CITY')
이 코드는 빈 목록을 반환하여 함수 제약 ZIP -> CITY조건의 위반이 더 이상 없음을 나타냅니다.
관련 콘텐츠
의미 체계 링크 또는 SemPy에 대한 다른 자습서를 참조하세요.