Руководство. Анализ функциональных зависимостей в семантической модели
В этом руководстве описаны предыдущие действия, выполненные аналитиком Power BI и хранящимся в виде семантических моделей (наборы данных Power BI). Используя SemPy (предварительная версия) в интерфейсе Synapse Обработка и анализ данных в Microsoft Fabric, вы анализируете функциональные зависимости, существующие в столбцах кадра данных. Этот анализ помогает обнаружить нетривиальные проблемы с качеством данных, чтобы получить более точные аналитические сведения.
В этом руководстве описано следующее:
- Применение знаний домена для формирования гипотез о функциональных зависимостях в семантической модели.
- Ознакомьтесь с компонентами библиотеки Python семантики (SemPy), которая поддерживает интеграцию с Power BI и помогает автоматизировать анализ качества данных. К этим компонентам относятся:
- FabricDataFrame — структура, похожая на pandas, улучшена с дополнительной семантической информацией.
- Полезные функции для извлечения семантических моделей из рабочей области Fabric в записную книжку.
- Полезные функции, которые автоматизируют оценку гипотез о функциональных зависимостях и определяют нарушения связей в семантических моделях.
Необходимые компоненты
Получение подписки Microsoft Fabric. Или зарегистрируйте бесплатную пробную версию Microsoft Fabric.
Войдите в Microsoft Fabric.
Используйте переключатель интерфейса в левой части домашней страницы, чтобы перейти на интерфейс Synapse Обработка и анализ данных.
Выберите рабочие области в области навигации слева, чтобы найти и выбрать рабочую область. Эта рабочая область становится текущей рабочей областью.
Скачайте семантику семантической модели sample.pbix клиента из репозитория GitHub для примеров структуры и отправьте ее в рабочую область.
Следуйте инструкциям в записной книжке
Записная книжка powerbi_dependencies_tutorial.ipynb сопровождается этим руководством.
Чтобы открыть сопровождающую записную книжку для этого руководства, следуйте инструкциям в статье "Подготовка системы для обработки и анализа данных", чтобы импортировать записную книжку в рабочую область.
Если вы хотите скопировать и вставить код на этой странице, можно создать новую записную книжку.
Перед запуском кода обязательно подключите lakehouse к записной книжке .
Настройка записной книжки
В этом разделе описана настройка среды записной книжки с необходимыми модулями и данными.
Установите из PyPI с помощью
%pip
встроенной возможности установкиSemPy
в записной книжке:%pip install semantic-link
Выполните необходимые импорты модулей, которые потребуются вам позже:
import sempy.fabric as fabric from sempy.dependencies import plot_dependency_metadata
Загрузка и предварительная обработка данных
В этом руководстве используется стандартная семантическая модель Customer Profitability Sample.pbix. Описание семантической модели см . в примере рентабельности клиентов для Power BI.
Загрузите данные Power BI в FabricDataFrames с помощью функции SemPy
read_table
:dataset = "Customer Profitability Sample" customer = fabric.read_table(dataset, "Customer") customer.head()
Загрузите таблицу
State
в FabricDataFrame:state = fabric.read_table(dataset, "State") state.head()
Хотя выходные данные этого кода выглядят как pandas DataFrame, вы фактически инициализировали структуру данных, которая
FabricDataFrame
поддерживает некоторые полезные операции на вершине pandas.Проверьте тип
customer
данных:type(customer)
Выходные данные подтверждают тип
customer
sempy.fabric._dataframe._fabric_dataframe.FabricDataFrame
.'Присоединение к кадрам
customer
данных:state
customer_state_df = customer.merge(state, left_on="State", right_on="StateCode", how='left') customer_state_df.head()
Определение функциональных зависимостей
Функциональная зависимость манифестирует себя как связь "один ко многим" между значениями в двух (или более) столбцах в кадре данных. Эти связи можно использовать для автоматического обнаружения проблем с качеством данных.
Запустите функцию 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
, вероятно, потому что между столбцами существует много нарушений. Функцию SemPyplot_dependency_violations
можно использовать для визуализации нарушений зависимостей между определенными столбцами.
Изучение данных о проблемах с качеством
Рисование графа
plot_dependency_violations
с помощью функции визуализации SemPy.customer_state_df.plot_dependency_violations('Postal Code', 'City')
На графике нарушений зависимостей отображаются значения на
Postal Code
левой стороне и значения дляCity
правой стороны. Ребра подключаетсяPostal Code
к левой сторонеCity
с правой стороны, если есть строка, содержащая эти два значения. Края аннотированы с количеством таких строк. Например, есть две строки с почтовым кодом 20004, один с городом "Северная башня" и другой с городом "Вашингтон".Кроме того, на графике показаны несколько нарушений и много пустых значений.
Подтвердите число пустых значений для
Postal Code
:customer_state_df['Postal Code'].isna().sum()
50 строк имеют NA для почтового индекса.
Удалите строки с пустыми значениями. Затем найдите зависимости с помощью
find_dependencies
функции. Обратите внимание на дополнительный параметрverbose=1
, который предлагает представление о внутренних работах SemPy: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')
Ознакомьтесь с каждым из случаев, когда значение nonempty
Region
приводит к нарушению:customer_state_df[customer_state_df.City=='Downers Grove']
Результат показывает город Даунинг Гроув, происходящий в Иллинойсе и Небраска. Тем не менее, Роща Даунер является городом в Иллинойсе, а не Небраска.
Посмотрите на город Фремонт:
customer_state_df[customer_state_df.City=='Fremont']
Там город под названием Фремонт в Калифорнии. Однако для Техаса поисковая система возвращает Premont, а не Фремонт.
Это также подозрительно, чтобы увидеть нарушения зависимости между
Name
иCountry/Region
, как указано пунктирной строкой в исходном графе нарушений зависимостей (прежде чем удалить строки с пустыми значениями).customer_state_df.list_dependency_violations('Name', 'Country/Region')
Похоже, что один клиент SDI Design присутствует в двух регионах - США и Канаде. Это событие может не быть семантической нарушением, но может быть просто редким случаем. Тем не менее, стоит взглянуть:
Ознакомьтесь с проектом SDI клиента:
customer_state_df[customer_state_df.Name=='SDI Design']
Дальнейшие проверки показывают, что на самом деле два разных клиента (от разных отраслей) с одинаковым именем.
Анализ аналитических данных — это захватывающий процесс, поэтому очистка данных. Всегда есть что-то, что данные скрываются, в зависимости от того, как вы посмотрите на него, что вы хотите попросить, и т. д. Семантическая ссылка предоставляет новые средства, которые можно использовать для получения дополнительных возможностей с данными.
Связанный контент
Ознакомьтесь с другими руководствами по семантической ссылке / SemPy:
- Руководство. Очистка данных с помощью функциональных зависимостей
- Руководство. Извлечение и вычисление мер Power BI из записной книжки Jupyter
- Руководство. Обнаружение связей в семантической модели с помощью семантической связи
- Руководство. Обнаружение связей в наборе данных Synthea с помощью семантической ссылки
- Руководство по проверке данных с помощью SemPy и великих ожиданий (GX) (предварительная версия)