Поделиться через


Руководство. Анализ функциональных зависимостей в семантической модели

В этом руководстве описаны предыдущие действия, выполненные аналитиком 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 к записной книжке .

Настройка записной книжки

В этом разделе описана настройка среды записной книжки с необходимыми модулями и данными.

  1. Установите из PyPI с помощью %pip встроенной возможности установки SemPy в записной книжке:

    %pip install semantic-link
    
  2. Выполните необходимые импорты модулей, которые потребуются вам позже:

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

Загрузка и предварительная обработка данных

В этом руководстве используется стандартная семантическая модель Customer Profitability Sample.pbix. Описание семантической модели см . в примере рентабельности клиентов для Power BI.

  1. Загрузите данные Power BI в FabricDataFrames с помощью функции SemPy 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, вы фактически инициализировали структуру данных, которая FabricDataFrame поддерживает некоторые полезные операции на вершине pandas.

  3. Проверьте тип customerданных:

    type(customer)
    

    Выходные данные подтверждают тип customer sempy.fabric._dataframe._fabric_dataframe.FabricDataFrame.'

  4. Присоединение к кадрам customer данных:state

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

Определение функциональных зависимостей

Функциональная зависимость манифестирует себя как связь "один ко многим" между значениями в двух (или более) столбцах в кадре данных. Эти связи можно использовать для автоматического обнаружения проблем с качеством данных.

  1. Запустите функцию SemPy find_dependencies в объединенном кадре данных, чтобы определить все существующие функциональные зависимости между значениями в столбцах:

    dependencies = customer_state_df.find_dependencies()
    dependencies
    
  2. Визуализация определенных зависимостей с помощью функции SemPy plot_dependency_metadata :

    plot_dependency_metadata(dependencies)
    

    Снимок экрана: график метаданных зависимостей.

    Как ожидается, граф функциональных зависимостей показывает, что Customer столбец определяет некоторые столбцы, такие как City, Postal Codeи Name.

    Удивительно, что граф не показывает функциональную зависимость между City и Postal Code, вероятно, потому что между столбцами существует много нарушений. Функцию SemPy plot_dependency_violations можно использовать для визуализации нарушений зависимостей между определенными столбцами.

Изучение данных о проблемах с качеством

  1. Рисование графа plot_dependency_violations с помощью функции визуализации SemPy.

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

    Снимок экрана: график нарушений зависимостей.

    На графике нарушений зависимостей отображаются значения на Postal Code левой стороне и значения для City правой стороны. Ребра подключается Postal Code к левой стороне City с правой стороны, если есть строка, содержащая эти два значения. Края аннотированы с количеством таких строк. Например, есть две строки с почтовым кодом 20004, один с городом "Северная башня" и другой с городом "Вашингтон".

    Кроме того, на графике показаны несколько нарушений и много пустых значений.

  2. Подтвердите число пустых значений для Postal Code:

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

    50 строк имеют NA для почтового индекса.

  3. Удалите строки с пустыми значениями. Затем найдите зависимости с помощью 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по умолчанию, чтобы увидеть зависимости. Более низкие пороговые значения приводят к уменьшению числа зависимостей (или более высокой избирательности).

  4. Повышение порогового значения условной энтропии от значения 0.01 по умолчанию:0.05

    plot_dependency_metadata(customer_state_df2.find_dependencies(threshold=0.05))
    

    График метаданных зависимостей с более высоким пороговым значением для энтропии.

    Если применить знания о домене для какой сущности определяет значения других сущностей, этот граф зависимостей кажется точным.

  5. Ознакомьтесь с дополнительными проблемами с качеством данных, обнаруженными. Например, тиреные стрелки присоединяются City и Regionуказывают, что зависимость является приблизительной. Эта приблизительная связь может означать, что существует частичная функциональная зависимость.

    customer_state_df.list_dependency_violations('City', 'Region')
    
  6. Ознакомьтесь с каждым из случаев, когда значение nonempty Region приводит к нарушению:

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

    Результат показывает город Даунинг Гроув, происходящий в Иллинойсе и Небраска. Тем не менее, Роща Даунер является городом в Иллинойсе, а не Небраска.

  7. Посмотрите на город Фремонт:

    customer_state_df[customer_state_df.City=='Fremont']
    

    Там город под названием Фремонт в Калифорнии. Однако для Техаса поисковая система возвращает Premont, а не Фремонт.

  8. Это также подозрительно, чтобы увидеть нарушения зависимости между Name и Country/Region, как указано пунктирной строкой в исходном графе нарушений зависимостей (прежде чем удалить строки с пустыми значениями).

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

    Похоже, что один клиент SDI Design присутствует в двух регионах - США и Канаде. Это событие может не быть семантической нарушением, но может быть просто редким случаем. Тем не менее, стоит взглянуть:

  9. Ознакомьтесь с проектом SDI клиента:

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

    Дальнейшие проверки показывают, что на самом деле два разных клиента (от разных отраслей) с одинаковым именем.

Анализ аналитических данных — это захватывающий процесс, поэтому очистка данных. Всегда есть что-то, что данные скрываются, в зависимости от того, как вы посмотрите на него, что вы хотите попросить, и т. д. Семантическая ссылка предоставляет новые средства, которые можно использовать для получения дополнительных возможностей с данными.

Ознакомьтесь с другими руководствами по семантической ссылке / SemPy: