Як провести ефективний розвідувальний аналіз даних (EDA)

Привіт, ми повернулися до гарячої теми у світі науки про дані – розвідувального аналізу даних (Exploratory Data Analysis, EDA). Думайте про EDA як про попередню детективну роботу; це та частина, яка може зробити або зруйнувати ваше подальше моделювання даних. У цій статті я спробую пояснити EDA через своє розуміння. Отже, давайте почнемо!


Чому EDA?

Уявіть, що ви археолог. Ви б копали навмання? – Ні, ви б спершу обстежили територію, чи не так?

Аналогічно, EDA допомагає вам знати, де копати, щоб знайти інсайти. Йдеться про запобігання недосконалим моделям і неправильним висновкам шляхом розуміння існуючої структури та змінних ваших даних. (особливості)


Структурований підхід: Фреймворк APP

Давайте використаємо для цього мій улюблений фреймворк APP:

  1. Увага (Attention): Зрозумійте свій набір даних.
  2. Мета: Визначте свої цілі.
  3. Процес (Process): Виконайте власне EDA.
  4. Користь (Profit): Отримуйте та впроваджуйте інсайти.

Крок 1: Увага – знайте свої дані

Типи даних

Запустіть df.dtypes у Python, щоб зрозуміти, які типи змінних ви маєте.

Знання того, чи маєте ви справу з числовими або категоріальними даними, допоможе вам у подальших кроках.

Розмір і форма даних

Щоб побачити розмір і форму ваших даних, запустіть df.shape.

Якщо ви маєте справу з великими даними, можливо, вам доведеться використовувати спеціалізовані інструменти для вашої EDA.

Відсутні значення

Виконайте df.isull().sum(), щоб знайти відсутні значення.

Це може вказати, чи можна покладатися на стовпчик для аналізу, чи потрібно вжити заходів для імплікації.

Крок 2: Мета – цілі та завдання

Намагаєтесь зрозуміти поведінку користувачів? Можливо, спрогнозувати майбутні продажі? Розуміючи свою мету, ви можете ефективно таргетувати свою EDA.

Крок 3: Процес – серце EDA

Ось де відбувається дія. Ми зануримося в чотири основні компоненти:

Узагальнення даних

Використовуйте df.describe() для узагальнення ваших даних. Це дасть вам середнє значення, медіану, стандартне відхилення тощо.

Для категорійних даних використовуйте df['назва_стовпчика'].value_counts(), щоб побачити частоту кожної категорії.

Очищення даних

1. Обробка пропущених значень: Якщо у стовпчику занадто багато пропущених значень, подумайте про його вилучення. Якщо пропущено лише декілька значень, подумайте про методи імплікації. Існує кілька методів інтерполяції, які ви можете розглянути:

  • Середня/медіанна/модальна імплікація: Замінити відсутні значення середнім значенням (для нормально розподілених даних), медіаною (для викривлених даних) або модою (для категоричних даних).
df['column'].fillna(df['column'].mean(), inplace=True)
  • Пряме або зворотне заповнення: особливо корисно для даних часових рядів, де ви можете заповнити пропущені значення попереднім або наступним значенням.
df['column'].fillna(method='ffill', inplace=True)
  • K-найближчих сусідів (KNN – k-nearest neighbors) Імплікація: Це заповнення пропущених значень на основі схожих точок даних. Це трохи складніше, але може бути більш точним.
from sklearn.impute import KNNImputer
imputer = KNNImputer(n_neighbors=5)
df_filled = imputer.fit_transform(df)
  • Імпутація на основі моделі: Ви можете навчити модель машинного навчання (наприклад, регресійну модель) передбачати відсутні значення на основі інших змінних.
  • Видалення: Іноді краще видалити рядки або стовпці з відсутніми значеннями, особливо якщо вони складають значну частину ваших даних.
df.dropna(inplace=True)

2. Викиди: Пропуски можуть значно спотворити ваші результати. Ось як їх виявити та впоратися з ними:

  • Бокс-план (box-plot): Візуальний метод виявлення викидів. Значення, які виходять за межі вусів, є потенційними викидами.
sns.boxplot(x=df['Column_Name'])
  • Z-рахунок: Показує, на скільки стандартних відхилень точка відрізняється від середнього значення. Як правило, значення Z-рахунку вище 3 або нижче -3 вважається відхиленням.
from scipy import stats
z_scores = stats.zscore(df['Column_Name'])
outliers = df[(z_scores < -3) | (z_scores > 3)]
  • IQR (Interquartile Range): IQR – це діапазон між першим квартилем (25-й процентиль) і третім квартилем (75-й процентиль). Значення, які опускаються нижче Q1-1,5 * IQR або вище Q3 + 1,5 * IQR, є потенційними викидами.
Q1 = df['Column_Name'].quantile(0.25)
Q3 = df['Column_Name'].quantile(0.75)
IQR = Q3 - Q1
outliers = df[(df['Column_Name'] < (Q1 - 1.5 * IQR)) | (df['Column_Name'] > (Q3 + 1.5 * IQR))]

Після того, як ви визначили викиди, ви можете вирішити, чи видалити їх, обмежити їх або дослідити далі, щоб зрозуміти їх причину. Пам’ятайте, що іноді викиди містять цінну інформацію, тому будьте обережні!


Трансформація даних

Перетворення даних у більш придатну форму або структуру може полегшити отримання інсайтів та побудову моделей. Давайте заглибимося в деякі популярні методи трансформації:

1. Нормалізація: Нормалізація допомагає масштабувати числові дані з різних стовпчиків до еквівалентного масштабу, щоб жоден набір значень не домінував над іншими.

  • Масштабування Min-Max: Цей метод масштабує дані у вказаному діапазоні, зазвичай від 0 до 1.
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df['normalized_column'] = scaler.fit_transform(df[['column']])
  • Нормалізація Z-рахунку (стандартизація): Дані перетворюються так, щоб їхнє середнє значення дорівнювало 0, а стандартне відхилення – 1. Це особливо корисно для алгоритмів, які покладаються на відстані або градієнти.
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df['standardized_column'] = scaler.fit_transform(df[['column']])
  • Перетворення журналу: Корисно для даних, які сильно викривлені. Це може допомогти зменшити вплив викидних значень.
import numpy as np
df['log_transformed_column'] = np.log(df['column'])

2. Кодування: Для категорійних даних використовуйте кодування One-Hot Encoding або Label Encoding, щоб перетворити категорії в числа.

  • Одномоментне кодування: Цей метод створює новий стовпчик для кожної категорії і позначає наявність 1 або 0. Він підходить, коли між категоріями немає порядкового зв’язку.
df_encoded = pd.get_dummies(df, columns=['categorical_column'])
  • Кодування міток: Категорії перетворюються на послідовність цілих чисел. Це дуже важливо, коли між категоріями існує природний порядковий зв’язок.
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
df['encoded_column'] = encoder.fit_transform(df['categorical_column'])
  • Кодування цільової змінної (середнє кодування): Для кожної категорії обчислюється середнє значення цільової змінної, яке використовується як нова ознака.
mean_encoded = df.groupby(['categorical_column'])['target'].mean().to_dict()
df['encoded_column'] = df['categorical_column'].map(mean_encoded)

Пам’ятайте, що рішення про трансформацію завжди повинні ґрунтуватися на глибинній природі ваших даних і конкретних вимогах подальшого аналізу або моделювання.

Якщо ви сумніваєтеся, на цьому етапі вам допоможуть методи візуалізації та узагальнення.

Візуалізація даних

  1. Гістограми: Використовуйте гістограми, щоб побачити розподіл числової змінної.
import matplotlib.pyplot as plt
plt.hist(df['Income'])
plt.show()

2. Кореляційна теплова карта: Щоб побачити, як взаємодіють різні змінні, створіть теплову карту.

corr = df.corr()
sns.heatmap(corr, annot=True)

3. Парні графіки: Тут представлені парні зв’язки для швидкого огляду.

sns.pairplot(df)

Крок 4: Виплата – пожинаємо плоди

Тепер настав час отримати винагороду. Інсайти можуть бути як простими, наприклад, краще зрозуміти вашу клієнтську базу, так і складними, наприклад, визначити правильні функції для моделі машинного навчання.


Висновок

Тепер ви пройшли звивистими шляхами EDA і, сподіваємось, прийшли до певних відкриттів, що відкривають очі. Використовуючи фреймворк APP і занурюючись у процес узагальнення, очищення, перетворення та візуалізації даних, ви заклали міцний фундамент для будь-якого проекту в галузі науки про дані.

Тож наступного разу, коли вам дадуть необроблений набір даних, ви знатимете, як впоратися з ним, як професіонал.

Сподіваюся, цей вичерпний посібник принесе вам багато успіхів у вашій майбутній подорожі в галузі науки про дані. Коментуйте цю статтю, якщо ви знайшли її цінною, і слідкуйте за новинами!


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

https://medium.com/dare-to-be-better/rfm-analysis-using-python-5df29f3cf757
https://medium.com/dare-to-be-better/case-study-2-customer-lifetime-value-analysis-cltv-using-python-325a52a04de
https://medium.com/dare-to-be-better/case-study-3-netflix-subscription-forecasting-resume-project-6f510fe637a2

ПІДПИСУЙТЕСЬ ТУТ👇

Зв’язок:https://ai-codehub.beehiiv.com

Інформаційний бюлетень AI CodeHub

Безкоштовні електронні книги:

https://codewarepam.gumroad.com/?source=post_page—–fa4e65ab7735——————————–

ОРИГІНАЛ СТАТТІ:How to Conduct an Effective Exploratory Data Analysis (EDA)

АВТОР СТАТІ:Richard Warepam

🚀Долучайтесь до нашої спільноти Telegram:

🚀Долучайтесь до нашої спільноти FaceBook:

🚀Долучайтесь до нашої спільноти Twiter X:

Leave a Reply

Your email address will not be published. Required fields are marked *