Руководство, часть 2. Изучение и визуализация данных с помощью записных книжек Microsoft Fabric

В этом руководстве вы узнаете, как проводить анализ аналитических данных (EDA), чтобы изучить и исследовать данные при обобщении ключевых характеристик с помощью методов визуализации данных.

Вы будете использовать seabornбиблиотеку визуализации данных Python, которая предоставляет высокоуровневый интерфейс для создания визуальных элементов на кадрах данных и массивах. Дополнительные сведения см. в seabornстатье Seaborn: статистическая визуализация данных.

Вы также будете использовать Data Wrangler, инструмент на основе записной книжки, который предоставляет иммерсивный интерфейс для проведения анализа и очистки данных.

Ниже приведены основные действия, описанные в этом руководстве.

  1. Считывать данные, хранящиеся из разностной таблицы в lakehouse.
  2. Преобразуйте кадр данных Spark в Кадр данных Pandas, который поддерживает библиотеки визуализации Python.
  3. Используйте Wrangler для выполнения начальной очистки и преобразования данных.
  4. Выполнение анализа аналитических данных с помощью seaborn.

Необходимые компоненты

  • Получение подписки Microsoft Fabric. Или зарегистрируйте бесплатную пробную версию Microsoft Fabric.

  • Войдите в Microsoft Fabric.

  • Используйте переключатель интерфейса в левой части домашней страницы, чтобы перейти на интерфейс Synapse Обработка и анализ данных.

    Снимок экрана: меню переключателя интерфейса, в котором показано, где выбрать Обработка и анализ данных.

Это часть 2 из 5 в серии учебников. Чтобы завершить работу с этим руководством, сначала выполните указанные ниже действия.

Следуйте инструкциям в записной книжке

2-explore-очистка-data.ipynb — это записная книжка, сопровождающая это руководство.

Чтобы открыть сопровождающую записную книжку для этого руководства, следуйте инструкциям в статье "Подготовка системы для обработки и анализа данных", чтобы импортировать записную книжку в рабочую область.

Если вы хотите скопировать и вставить код на этой странице, можно создать новую записную книжку.

Перед запуском кода обязательно подключите lakehouse к записной книжке .

Внимание

Прикрепите тот же лейкхаус, который вы использовали в части 1.

Чтение необработанных данных из lakehouse

Чтение необработанных данных из раздела "Файлы " в lakehouse. Вы добавили эти данные в предыдущую записную книжку. Перед запуском этого кода убедитесь, что вы подключили тот же lakehouse, который вы использовали в части 1 к этой записной книжке.

df = (
    spark.read.option("header", True)
    .option("inferSchema", True)
    .csv("Files/churn/raw/churn.csv")
    .cache()
)

Создание кадра данных pandas из набора данных

Преобразуйте кадр данных Spark в pandas DataFrame для упрощения обработки и визуализации.

df = df.toPandas()

Отображение необработанных данных

Изучите необработанные данные с displayпомощью некоторых базовых статистических данных и отображение представлений диаграмм. Обратите внимание, что сначала необходимо импортировать необходимые библиотеки, такие как Numpy, Pnadasи SeabornMatplotlib для анализа данных и визуализации.

import seaborn as sns
sns.set_theme(style="whitegrid", palette="tab10", rc = {'figure.figsize':(9,6)})
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
from matplotlib import rc, rcParams
import numpy as np
import pandas as pd
import itertools
display(df, summary=True)

Использование Wrangler для выполнения начальной очистки данных

Чтобы изучить и преобразовать кадры данных Pandas в записной книжке, запустите Data Wrangler непосредственно из записной книжки.

Примечание.

Не удается открыть Wrangler, пока ядро записной книжки занято. Выполнение ячейки должно завершиться до запуска Data Wrangler.

  1. На вкладке "Данные записной книжки " выберите "Запустить Wrangler". Вы увидите список активированных панд dataFrames, доступных для редактирования.
  2. Выберите кадр данных, который вы хотите открыть в Data Wrangler. Так как эта записная книжка содержит только один кадр данных, dfвыберите df.

Снимок экрана: запуск wrangler данных из записной книжки.

Wrangler запускает и создает описательный обзор данных. В таблице в середине показан каждый столбец данных. На панели "Сводка " рядом с таблицей отображаются сведения о кадре данных. При выборе столбца в таблице сводка обновляется со сведениями о выбранном столбце. В некоторых случаях отображаемые и суммированные данные будут усеченным представлением кадра данных. В этом случае вы увидите изображение предупреждения в области сводки. Наведите указатель мыши на это предупреждение, чтобы просмотреть текст, объясняющий ситуацию.

Снимок экрана: обзор wrangler данных.

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

В остальной части этого раздела описаны действия по очистке данных с помощью Wrangler.

Удаление повторяющихся строк

На левой панели находится список операций (например, "Поиск" и "Замена", "Формат", "Формулы", "Числовые") можно выполнять в наборе данных.

  1. Разверните узел "Поиск и замена " и выберите " Удалить повторяющиеся строки".

    Снимок экрана: удаление повторяющихся строк в разделе поиска и замены.

  2. Откроется панель для выбора списка столбцов, которые нужно сравнить, чтобы определить повторяющиеся строки. Выберите RowNumber и CustomerId.

    На средней панели отображается предварительный просмотр результатов этой операции. В предварительной версии используется код для выполнения операции. В этом экземпляре данные, как представляется, не изменяются. Но так как вы смотрите на усеченное представление, это хорошая идея по-прежнему применять операцию.

    Снимок экрана: удаление повторяющихся строк в Data Wrangler.

  3. Нажмите кнопку "Применить" (в стороне или в нижней части), чтобы перейти к следующему шагу.

Удаление строк с отсутствующими данными

Используйте Wrangler для удаления строк с отсутствующими данными во всех столбцах.

  1. Выберите "Удалить отсутствующие значения" из поиска и замены.

  2. Выберите все из столбцов Target.

    Снимок экрана: удаление отсутствующих строк в Data Wrangler.

  3. Нажмите кнопку "Применить" , чтобы перейти к следующему шагу.

Удаление столбцов

Используйте Wrangler для удаления столбцов, которые вам не нужны.

  1. Разверните схему и выберите "Удалить столбцы".

  2. Выберите RowNumber, CustomerId, Фамилия. Эти столбцы отображаются красным цветом в предварительной версии, чтобы показать, что они изменены кодом (в данном случае удалено).)

    Снимок экрана: удаление столбцов в Data Wrangler.

  3. Нажмите кнопку "Применить" , чтобы перейти к следующему шагу.

Добавление кода в записную книжку

При каждом нажатии кнопки "Применить" на панели "Очистка" в левом нижнем углу создается новый шаг. В нижней части панели выберите предварительный просмотр кода для всех шагов , чтобы просмотреть сочетание всех отдельных шагов.

Нажмите кнопку "Добавить код в записную книжку " в левом верхнем углу, чтобы закрыть Data Wrangler и автоматически добавить код. Добавление кода в записную книжку упаковывает код в функцию, а затем вызывает функцию.

Снимок экрана: предварительный просмотр кода и место для доступа к записной книжке.

Совет

Код, созданный Data Wrangler, не будет применяться, пока не будет вручную запущена новая ячейка.

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

Этот код аналогичен коду, созданному Data Wrangler, но добавляется в аргумент inplace=True к каждому из созданных шагов. Задав параметр inplace=True, pandas перезаписывает исходный кадр данных вместо создания нового кадра данных в качестве выходных данных.

# Modified version of code generated by Data Wrangler 
# Modification is to add in-place=True to each step

# Define a new function that include all above Data Wrangler operations
def clean_data(df):
    # Drop rows with missing data across all columns
    df.dropna(inplace=True)
    # Drop duplicate rows in columns: 'RowNumber', 'CustomerId'
    df.drop_duplicates(subset=['RowNumber', 'CustomerId'], inplace=True)
    # Drop columns: 'RowNumber', 'CustomerId', 'Surname'
    df.drop(columns=['RowNumber', 'CustomerId', 'Surname'], inplace=True)
    return df

df_clean = clean_data(df.copy())
df_clean.head()

Изучение данных

Отображение некоторых сводок и визуализаций чистых данных.

Определение категориальных, числовых и целевых атрибутов

Используйте этот код для определения категориальных, числовых и целевых атрибутов.

# Determine the dependent (target) attribute
dependent_variable_name = "Exited"
print(dependent_variable_name)
# Determine the categorical attributes
categorical_variables = [col for col in df_clean.columns if col in "O"
                        or df_clean[col].nunique() <=5
                        and col not in "Exited"]
print(categorical_variables)
# Determine the numerical attributes
numeric_variables = [col for col in df_clean.columns if df_clean[col].dtype != "object"
                        and df_clean[col].nunique() >5]
print(numeric_variables)

Сводка с пятью номерами

Отображение сводки с пятью числами (минимальная оценка, первая квартиль, медиана, третий квартиль, максимальная оценка) для числовых атрибутов с помощью графиков полей.

df_num_cols = df_clean[numeric_variables]
sns.set(font_scale = 0.7) 
fig, axes = plt.subplots(nrows = 2, ncols = 3, gridspec_kw =  dict(hspace=0.3), figsize = (17,8))
fig.tight_layout()
for ax,col in zip(axes.flatten(), df_num_cols.columns):
    sns.boxplot(x = df_num_cols[col], color='green', ax = ax)
fig.delaxes(axes[1,2])

На диаграмме показаны сводки с пятью числами.

Распределение завершенных и неисксированных клиентов

Отображение распределения завершенных и неисселированных клиентов по категориальным атрибутам.

attr_list = ['Geography', 'Gender', 'HasCrCard', 'IsActiveMember', 'NumOfProducts', 'Tenure']
fig, axarr = plt.subplots(2, 3, figsize=(15, 4))
for ind, item in enumerate (attr_list):
    sns.countplot(x = item, hue = 'Exited', data = df_clean, ax = axarr[ind%2][ind//2])
fig.subplots_adjust(hspace=0.7)

На диаграмме показаны линейчатые диаграммы для завершенных и неисселированных клиентов.

Распределение числовых атрибутов

Отображение частоты распределения числовых атрибутов с помощью гистограммы.

columns = df_num_cols.columns[: len(df_num_cols.columns)]
fig = plt.figure()
fig.set_size_inches(18, 8)
length = len(columns)
for i,j in itertools.zip_longest(columns, range(length)):
    plt.subplot((length // 2), 3, j+1)
    plt.subplots_adjust(wspace = 0.2, hspace = 0.5)
    df_num_cols[i].hist(bins = 20, edgecolor = 'black')
    plt.title(i)
plt.show()

Граф показывает распределение числовых атрибутов.

Выполните проектирование функций

Выполните проектирование функций для создания новых атрибутов на основе текущих атрибутов:

df_clean["NewTenure"] = df_clean["Tenure"]/df_clean["Age"]
df_clean["NewCreditsScore"] = pd.qcut(df_clean['CreditScore'], 6, labels = [1, 2, 3, 4, 5, 6])
df_clean["NewAgeScore"] = pd.qcut(df_clean['Age'], 8, labels = [1, 2, 3, 4, 5, 6, 7, 8])
df_clean["NewBalanceScore"] = pd.qcut(df_clean['Balance'].rank(method="first"), 5, labels = [1, 2, 3, 4, 5])
df_clean["NewEstSalaryScore"] = pd.qcut(df_clean['EstimatedSalary'], 10, labels = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

Использование Wrangler для выполнения одно горячей кодировки

Wrangler также можно использовать для выполнения одно горячей кодировки. Для этого повторно откройте Data Wrangler. На этот раз выберите df_clean данные.

  1. Разверните формулы и выберите один горячий код.
  2. Откроется панель для выбора списка столбцов, для которого требуется выполнить одно горячее кодирование. Выберите географию и пол.

Вы можете скопировать созданный код, закрыть Data Wrangler, чтобы вернуться к записной книжке, а затем вставить в новую ячейку. Или нажмите кнопку "Добавить код в записную книжку " в левом верхнем углу, чтобы закрыть Data Wrangler и автоматически добавить код.

Если вы не использовали Data Wrangler, можно использовать следующую ячейку кода:

# This is the same code that Data Wrangler will generate
 
import pandas as pd
 
def clean_data(df_clean):
    # One-hot encode columns: 'Geography', 'Gender'
    df_clean = pd.get_dummies(df_clean, columns=['Geography', 'Gender'])
    return df_clean
 
df_clean_1 = clean_data(df_clean.copy())
df_clean_1.head()

Сводка наблюдений по анализу аналитических данных

  • Большинство клиентов из Франции по сравнению с Испанией и Германией, в то время как Испания имеет самый низкий показатель оттока по сравнению с Францией и Германией.
  • Большинство клиентов имеют кредитные карта.
  • Есть клиенты, возраст и кредитная оценка которых выше 60 и ниже 400, соответственно, но они не могут рассматриваться как вылитые.
  • Очень немногие клиенты имеют более двух продуктов банка.
  • Клиенты, не являющиеся активными, имеют более высокую скорость оттока.
  • Пол и срок пребывания в должности не влияют на решение клиента закрыть банковский счет.

Создание разностной таблицы для чистых данных

Эти данные будут использоваться в следующей записной книжке этой серии.

table_name = "df_clean"
# Create Spark DataFrame from pandas
sparkDF=spark.createDataFrame(df_clean_1) 
sparkDF.write.mode("overwrite").format("delta").save(f"Tables/{table_name}")
print(f"Spark dataframe saved to delta table: {table_name}")

Следующий шаг

Обучение и регистрация моделей машинного обучения с помощью этих данных: