Π‘Π»ΠΎΠΊΠ½ΠΎΡ‚-ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° для швидкого Data preprocessing

Часто люди, Ρ‰ΠΎ Π·Π°Ρ…ΠΎΠ΄ΡΡ‚ΡŒ Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Data Science, ΠΌΠ°ΡŽΡ‚ΡŒ Π½Π΅ зовсім рСалістичні уявлСння ΠΏΡ€ΠΎ Ρ‚Π΅, Ρ‰ΠΎ Π½Π° Π½ΠΈΡ… Ρ‡Π΅ΠΊΠ°Ρ”. Π‘Π°Π³Π°Ρ‚ΠΎ Ρ…Ρ‚ΠΎ Π΄ΡƒΠΌΠ°Ρ”, Ρ‰ΠΎ Π·Π°Ρ€Π°Π· Π²ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ΡŒ ΠΊΡ€ΡƒΡ‚ΠΎ писати Π½Π΅ΠΉΡ€ΠΎΠΌΠ΅Ρ€Π΅ΠΆΡ–, ΡΡ‚Π²ΠΎΡ€ΡŽΠ²Π°Ρ‚ΠΈ голосового ΠΏΠΎΠΌΡ–Ρ‡Π½ΠΈΠΊΠ° Ρ–Π· Π—Π°Π»Ρ–Π·Π½ΠΎΡ— Π›ΡŽΠ΄ΠΈΠ½ΠΈ Π°Π±ΠΎ ΠΎΠ±Ρ–Π³Ρ€Π°Π²Π°Ρ‚ΠΈ всіх Π½Π° фінансових Ρ€ΠΈΠ½ΠΊΠ°Ρ….
АлС Ρ€ΠΎΠ±ΠΎΡ‚Π° Π΄Π°Π½Ρ– Scientist ΠΏΠΎΠ²'язана Π· Π΄Π°Π½ΠΈΠΌΠΈ, Ρ– Π· Π½Π°ΠΉΠ²Π°ΠΆΠ»ΠΈΠ²Ρ–ΡˆΠΈΡ… Ρ– час Π²ΠΈΡ‚Ρ€Π°Ρ‚Π½ΠΈΡ… ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ–Π² β€” Ρ†Π΅ ΠΎΠ±Ρ€ΠΎΠ±ΠΊΠ° Π΄Π°Π½ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚ΠΈΠΌ, як Ρ—Ρ… ΠΏΠΎΠ΄Π°Π²Π°Ρ‚ΠΈ Π² Π½Π΅ΠΉΡ€ΠΎΠΌΠ΅Ρ€Π΅ΠΆΡƒ Ρ‡ΠΈ Π°Π½Π°Π»Ρ–Π·ΡƒΠ²Π°Ρ‚ΠΈ ΠΏΠ΅Π²Π½ΠΈΠΌ способом.

Π£ Ρ†Ρ–ΠΉ статті наша ΠΊΠΎΠΌΠ°Π½Π΄Π° опишС Ρ‚Π΅, як ΠΌΠΎΠΆΠ½Π° Π»Π΅Π³ΠΊΠΎ Ρ‚Π° швидко ΠΎΠ±Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ Π΄Π°Π½Ρ– Π· ΠΏΠΎΠΊΡ€ΠΎΠΊΠΎΠ²ΠΎΡŽ Ρ–Π½ΡΡ‚Ρ€ΡƒΠΊΡ†Ρ–Ρ”ΡŽ Ρ‚Π° ΠΊΠΎΠ΄ΠΎΠΌ. Ми намагалися Π·Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ Ρ‚Π°ΠΊ, Ρ‰ΠΎΠ± ΠΊΠΎΠ΄ Π±ΡƒΠ² Π΄ΠΎΡΠΈΡ‚ΡŒ Π³Π½ΡƒΡ‡ΠΊΠΈΠΌ Ρ– ΠΉΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½Π° Π±ΡƒΠ»ΠΎ використовувати для Ρ€Ρ–Π·Π½ΠΈΡ… датасСтів.

Π‘Π°Π³Π°Ρ‚ΠΎ профСсіоналів ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎ Ρ– Π½Π΅ Π·Π½Π°ΠΉΠ΄ΡƒΡ‚ΡŒ Π½Ρ–Ρ‡ΠΎΠ³ΠΎ Скстраординарного Π² Ρ†Ρ–ΠΉ статті, Π°Π»Π΅ ΠΏΠΎΡ‡Π°Ρ‚ΠΊΡ–Π²Ρ†Ρ– Π·ΠΌΠΎΠΆΡƒΡ‚ΡŒ підкрСслити Ρ‰ΠΎΡΡŒ Π½ΠΎΠ²Π΅, Π° Ρ‚Π°ΠΊΠΎΠΆ ΠΊΠΎΠΆΠ΅Π½, Ρ…Ρ‚ΠΎ Π΄Π°Π²Π½ΠΎ мріяв Π·Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ собі ΠΎΠΊΡ€Π΅ΠΌΠΈΠΉ notebook для ΡˆΠ²ΠΈΠ΄ΠΊΠΎΡ— Ρ‚Π° структурованої ΠΎΠ±Ρ€ΠΎΠ±ΠΊΠΈ Π΄Π°Π½ΠΈΡ…, ΠΌΠΎΠΆΠ΅ ΡΠΊΠΎΠΏΡ–ΡŽΠ²Π°Ρ‚ΠΈ ΠΊΠΎΠ΄ Ρ– Π²Ρ–Π΄Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΡƒΠ²Π°Ρ‚ΠΈ ΠΉΠΎΠ³ΠΎ ΠΏΡ–Π΄ сСбС, Π°Π±ΠΎ скачати Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΉ notebook Π· Github.

ΠžΡ‚Ρ€ΠΈΠΌΠ°Π»ΠΈ dataset. Π©ΠΎ Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ Π΄Π°Π»Ρ–?

ΠžΡ‚ΠΆΠ΅, стандарт: Ρ‚Ρ€Π΅Π±Π° Π·Ρ€ΠΎΠ·ΡƒΠΌΡ–Ρ‚ΠΈ, Ρ–Π· Ρ‡ΠΈΠΌ ΠΌΠ°Ρ”ΠΌΠΎ справу, Π·Π°Π³Π°Π»ΡŒΠ½Ρƒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ. Для Ρ†ΡŒΠΎΠ³ΠΎ використовуємо ΠΏΠ°Π½Π΄Π°, Ρ‰ΠΎΠ± просто Π²ΠΈΠ·Π½Π°Ρ‡ΠΈΡ‚ΠΈ Ρ€Ρ–Π·Π½Ρ– Ρ‚ΠΈΠΏΠΈ Π΄Π°Π½ΠΈΡ….

import pandas as pd #ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ pandas
import numpy as np  #ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ numpy
df = pd.read_csv("AB_NYC_2019.csv") #Ρ‡ΠΈΡ‚Π°Π΅ΠΌ датасСт ΠΈ записываСм Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ df

df.head(3) #смотрим Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 3 строчки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ выглядят значСния

Π‘Π»ΠΎΠΊΠ½ΠΎΡ‚-ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° для швидкого Data preprocessing

df.info() #ДСмонстрируСм ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°Ρ…

Π‘Π»ΠΎΠΊΠ½ΠΎΡ‚-ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° для швидкого Data preprocessing

Дивимося Π½Π° значСння ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ:

  1. Π§ΠΈ Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Π°Ρ” ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ рядків ΠΊΠΎΠΆΠ½ΠΎΡ— ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Π·Π°Π³Π°Π»ΡŒΠ½Ρ–ΠΉ ΠΊΡ–Π»ΡŒΠΊΠΎΡΡ‚Ρ– рядків?
  2. Π―ΠΊΠ° ΡΡƒΡ‚ΡŒ Π΄Π°Π½ΠΈΡ… Ρƒ ΠΊΠΎΠΆΠ½Ρ–ΠΉ ΠΊΠΎΠ»ΠΎΠ½Ρ†Ρ–?
  3. Π―ΠΊΡƒ стовпчик ΠΌΠΈ Ρ…ΠΎΡ‡Π΅ΠΌΠΎ Π·Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ target, Ρ‰ΠΎΠ± Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ пСрСдбачСння для Π½Π΅Ρ—?

Π’Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Ρ– Π½Π° Ρ†Ρ– питання Π΄ΠΎΠ·Π²ΠΎΠ»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ°Π½Π°Π»Ρ–Π·ΡƒΠ²Π°Ρ‚ΠΈ датасСт Ρ– ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·Π½ΠΎ Π½Π°ΠΌΠ°Π»ΡŽΠ²Π°Ρ‚ΠΈ ΠΏΠ»Π°Π½ Π½Π°ΠΉΠ±Π»ΠΈΠΆΡ‡ΠΈΡ… Π΄Ρ–ΠΉ.

Π’Π°ΠΊΠΎΠΆ для Π±Ρ–Π»ΡŒΡˆ Π³Π»ΠΈΠ±ΠΎΠΊΠΎΠ³ΠΎ погляду Π½Π° значСння Π² ΠΊΠΎΠΆΠ½Ρ–ΠΉ ΠΊΠΎΠ»ΠΎΠ½Ρ†Ρ– ΠΌΠΎΠΆΠ΅ΠΌΠΎ скористатися Ρ„ΡƒΠ½ΠΊΡ†Ρ–Ρ”ΡŽ pandas describe(). Π©ΠΎΠΏΡ€Π°Π²Π΄Π°, Π½Π΅Π΄ΠΎΠ»Ρ–ΠΊ Ρ†Ρ–Ρ”Ρ— Ρ„ΡƒΠ½ΠΊΡ†Ρ–Ρ— Ρƒ Ρ†ΡŒΠΎΠΌΡƒ, Ρ‰ΠΎ Π²ΠΎΠ½Π° Π΄Π°Ρ” Ρ–Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†Ρ–ΡŽ ΠΏΡ€ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Π·Ρ– значСннями string. Π— Π½ΠΈΠΌΠΈ ΠΌΠΈ розбСрСмося ΠΏΡ–Π·Π½Ρ–ΡˆΠ΅.

df.describe()

Π‘Π»ΠΎΠΊΠ½ΠΎΡ‚-ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° для швидкого Data preprocessing

Π§Π°Ρ€Ρ–Π²Π½Π° візуалізація

ΠŸΠΎΡΠΎΡ€ΠΎΠΌΠΈΠΌΠΎ Π½Π° Ρ‚Π΅, Π΄Π΅ Π² нас відсутні значСння Π²Π·Π°Π³Π°Π»Ρ–:

import seaborn as sns
sns.heatmap(df.isnull(),yticklabels=False,cbar=False,cmap='viridis')

Π‘Π»ΠΎΠΊΠ½ΠΎΡ‚-ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° для швидкого Data preprocessing

Π¦Π΅ Π±ΡƒΠ² Π½Π΅Π²Π΅Π»ΠΈΠΊΠΈΠΉ погляд Π·Π²Π΅Ρ€Ρ…Ρƒ, Π·Π°Ρ€Π°Π· ΠΌΠΈ приступимо Π΄ΠΎ Ρ†Ρ–ΠΊΠ°Π²Ρ–ΡˆΠΈΡ… Ρ€Π΅Ρ‡Π΅ΠΉ

Π‘ΠΏΡ€ΠΎΠ±ΡƒΡ”ΠΌΠΎ Π·Π½Π°ΠΉΡ‚ΠΈ Ρ– ΠΏΠΎ моТливості Π²ΠΈΠ΄Π°Π»ΠΈΡ‚ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ, Π² яких Ρ” лишС ΠΎΠ΄Π½Π΅ значСння Ρƒ всіх рядках (Π²ΠΎΠ½ΠΈ Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π΅ Π²ΠΏΠ»ΠΈΠ²Π°Ρ‚ΠΈΠΌΡƒΡ‚ΡŒ):

df = df[[c for c
        in list(df)
        if len(df[c].unique()) > 1]] #ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°Π΅ΠΌ датасСт, оставляя Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… большС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния

Π’Π΅ΠΏΠ΅Ρ€ ΠΎΠ±Π΅Ρ€Ρ–Π³Π°Ρ”ΠΌΠΎ сСбС Ρ– успіх нашого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ Π²Ρ–Π΄ рядків-Π΄ΡƒΠ±Π»Ρ–ΠΊΠ°Ρ‚Ρ–Π² (рядків, які ΠΌΡ–ΡΡ‚ΡΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΉ Ρ‚Ρƒ саму Ρ–Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†Ρ–ΡŽ Π² Ρ‚ΠΎΠΌΡƒ самому порядку, Ρ‰ΠΎ Ρ– Π²ΠΆΠ΅ ΠΎΠ΄ΠΈΠ½ Π· Ρ–ΡΠ½ΡƒΡŽΡ‡ΠΈΡ… рядків):

df.drop_duplicates(inplace=True) #Π”Π΅Π»Π°Π΅ΠΌ это, Ссли считаСм Π½ΡƒΠΆΠ½Ρ‹ΠΌ.
                                 #Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ с самого Π½Π°Ρ‡Π°Π»Π° Π½Π΅ стоит.

ΠŸΠΎΠ΄Ρ–Π»ΡΡ”ΠΌΠΎ датасСт Π½Π° Π΄Π²Π°: ΠΎΠ΄ΠΈΠ½ Ρ–Π· якісними значСннями, Π° Ρ–Π½ΡˆΠΈΠΉ – Π· ΠΊΡ–Π»ΡŒΠΊΡ–ΡΠ½ΠΈΠΌΠΈ

Π’ΡƒΡ‚ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ Π·Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ Π½Π΅Π²Π΅Π»ΠΈΠΊΠ΅ уточнСння: якщо рядки Π· ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½ΠΈΠΌΠΈ Π΄Π°Π½ΠΈΠΌΠΈ Ρƒ якісних Ρ– ΠΊΡ–Π»ΡŒΠΊΡ–ΡΠ½ΠΈΡ… Π΄Π°Π½ΠΈΡ… сильно Π½Π΅ ΡΠΏΡ–Π²Π²Ρ–Π΄Π½ΠΎΡΡΡ‚ΡŒΡΡ ΠΌΡ–ΠΆ собою, Ρ‚ΠΎ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ Π±ΡƒΠ΄Π΅ ΡƒΡ…Π²Π°Π»ΠΈΡ‚ΠΈ Ρ€Ρ–ΡˆΠ΅Π½Π½Ρ, Ρ‡ΠΈΠΌ ΠΌΠΈ ΠΆΠ΅Ρ€Ρ‚Π²ΡƒΡ”ΠΌΠΎ – усіма рядками Π· ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½ΠΈΠΌΠΈ Π΄Π°Π½ΠΈΠΌΠΈ, лишС Ρ—Ρ…Π½ΡŒΠΎΡŽ Ρ‡Π°ΡΡ‚ΠΈΠ½ΠΎΡŽ Ρ‡ΠΈ ΠΏΠ΅Π²Π½ΠΈΠΌΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌΠΈ. Π―ΠΊΡ‰ΠΎ ΠΆ рядки ΡΠΏΡ–Π²Π²Ρ–Π΄Π½ΠΎΡΡΡ‚ΡŒΡΡ, ΠΌΠΈ ΠΌΠ°Ρ”ΠΌΠΎ ΠΏΠΎΠ²Π½Π΅ ΠΏΡ€Π°Π²ΠΎ Ρ€ΠΎΠ·Π΄Ρ–Π»ΠΈΡ‚ΠΈ датасСт Π½Π° Π΄Π²Π°. Π’ Ρ–Π½ΡˆΠΎΠΌΡƒ Π²ΠΈΠΏΠ°Π΄ΠΊΡƒ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ Π±ΡƒΠ΄Π΅ спочатку розібратися Π· рядками, Π² яких Π½Π΅ ΡΠΏΡ–Π²Π²Ρ–Π΄Π½ΠΎΡΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Ρ– Π΄Π°Π½Ρ– Π² якісних Ρ‚Π° ΠΊΡ–Π»ΡŒΠΊΡ–ΡΠ½ΠΈΡ…, Ρ– лишС ΠΏΠΎΡ‚Ρ–ΠΌ розділяти датасСт Π½Π° Π΄Π²Π°.

df_numerical = df.select_dtypes(include = [np.number])
df_categorical = df.select_dtypes(exclude = [np.number])

Ми Ρ€ΠΎΠ±ΠΈΠΌΠΎ Ρ†Π΅, Ρ‰ΠΎΠ± Π½Π°ΠΌ Π±ΡƒΠ»ΠΎ лСгшС обробляти Ρ†Ρ– Π΄Π²Π° Ρ€Ρ–Π·Π½Ρ– Ρ‚ΠΈΠΏΠΈ Π΄Π°Π½ΠΈΡ… β€” Π·Π³ΠΎΠ΄ΠΎΠΌ ΠΌΠΈ Π·Ρ€ΠΎΠ·ΡƒΠΌΡ–Ρ”ΠΌΠΎ, Π½Π°ΡΠΊΡ–Π»ΡŒΠΊΠΈ Ρ†Π΅ спрощує Тиття.

ΠŸΡ€Π°Ρ†ΡŽΡ”ΠΌΠΎ Π· ΠΊΡ–Π»ΡŒΠΊΡ–ΡΠ½ΠΈΠΌΠΈ Π΄Π°Π½ΠΈΠΌΠΈ

ΠŸΠ΅Ρ€ΡˆΠ΅, Ρ‰ΠΎ Π½Π°ΠΌ Π²Π°Ρ€Ρ‚ΠΎ Π·Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ – Π²ΠΈΠ·Π½Π°Ρ‡ΠΈΡ‚ΠΈ, Ρ‡ΠΈ Π½Π΅ΠΌΠ°Ρ” Β«ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ – ΡˆΠΏΠΈΠ³ΡƒΠ½Ρ–Π²Β» Ρƒ ΠΊΡ–Π»ΡŒΠΊΡ–ΡΠ½ΠΈΡ… Π΄Π°Π½ΠΈΡ…. Ми Π½Π°Π·ΠΈΠ²Π°Ρ”ΠΌΠΎ Ρ†Ρ– ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Ρ‚Π°ΠΊ, Ρ‚ΠΎΠΌΡƒ Ρ‰ΠΎ Π²ΠΎΠ½ΠΈ Π²ΠΈΠ΄Π°ΡŽΡ‚ΡŒ сСбС Π·Π° ΠΊΡ–Π»ΡŒΠΊΡ–ΡΠ½Ρ– Π΄Π°Π½Ρ–, Π° самі ΠΏΡ€Π°Ρ†ΡŽΡŽΡ‚ΡŒ як якісні.

Π―ΠΊ Π½Π°ΠΌ Ρ—Ρ… Π²ΠΈΠ·Π½Π°Ρ‡ΠΈΡ‚ΠΈ? Π—Π²ΠΈΡ‡Π°ΠΉΠ½ΠΎ, всС Π·Π°Π»Π΅ΠΆΠΈΡ‚ΡŒ Π²Ρ–Π΄ ΠΏΡ€ΠΈΡ€ΠΎΠ΄ΠΈ Π΄Π°Π½ΠΈΡ…, які Π’ΠΈ Π°Π½Π°Π»Ρ–Π·ΡƒΡ”Ρ‚Π΅, Π°Π»Π΅ ΠΏΠ΅Ρ€Π΅Π²Π°ΠΆΠ½ΠΎ Ρ‚Π°ΠΊΡ– ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ ΠΌΠΎΠΆΡƒΡ‚ΡŒ ΠΌΠ°Ρ‚ΠΈ ΠΌΠ°Π»ΠΎ ΡƒΠ½Ρ–ΠΊΠ°Π»ΡŒΠ½ΠΈΡ… Π΄Π°Π½ΠΈΡ… (Π² Ρ€Π°ΠΉΠΎΠ½Ρ– 3-10 ΡƒΠ½Ρ–ΠΊΠ°Π»ΡŒΠ½ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΡŒ).

print(df_numerical.nunique())

ΠŸΡ–ΡΠ»Ρ Ρ‚ΠΎΠ³ΠΎ, як ΠΌΠΈ визначимося Π· ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌΠΈ-ΡˆΠΏΠΈΠ³ΡƒΠ½Π°ΠΌΠΈ, ΠΌΠΈ пСрСмістимо Ρ—Ρ… Π· ΠΊΡ–Π»ΡŒΠΊΡ–ΡΠ½ΠΈΡ… Π΄Π°Π½ΠΈΡ… Ρƒ якісні:

spy_columns = df_numerical[['ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1', 'ΠΊΠΎΠ»ΠΎΠΊΠ°2', 'ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°3']]#выдСляСм ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ-ΡˆΠΏΠΈΠΎΠ½Ρ‹ ΠΈ записываСм Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ dataframe
df_numerical.drop(labels=['ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1', 'ΠΊΠΎΠ»ΠΎΠΊΠ°2', 'ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°3'], axis=1, inplace = True)#Π²Ρ‹Ρ€Π΅Π·Π°Π΅ΠΌ эти ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ ΠΈΠ· количСствСнных Π΄Π°Π½Π½Ρ‹Ρ…
df_categorical.insert(1, 'ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1', spy_columns['ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1']) #добавляСм ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ-шпион Π² качСствСнныС Π΄Π°Π½Π½Ρ‹Π΅
df_categorical.insert(1, 'ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2', spy_columns['ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2']) #добавляСм Π²Ρ‚ΠΎΡ€ΡƒΡŽ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ-шпион Π² качСствСнныС Π΄Π°Π½Π½Ρ‹Π΅
df_categorical.insert(1, 'ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°3', spy_columns['ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°3']) #добавляСм Ρ‚Ρ€Π΅Ρ‚ΡŒΡŽ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ-шпион Π² качСствСнныС Π΄Π°Π½Π½Ρ‹Π΅

ΠΠ°Ρ€Π΅ΡˆΡ‚Ρ– ΠΌΠΈ ΠΏΠΎΠ²Π½Ρ–ΡΡ‚ΡŽ Π²Ρ–Π΄ΠΎΠΊΡ€Π΅ΠΌΠΈΠ»ΠΈ ΠΊΡ–Π»ΡŒΠΊΡ–ΡΠ½Ρ– Π΄Π°Π½Ρ– Π²Ρ–Π΄ якісних Ρ– Ρ‚Π΅ΠΏΠ΅Ρ€ ΠΌΠΎΠΆΠ½Π° Π· Π½ΠΈΠΌΠΈ Π΄ΠΎΠ±Ρ€Π΅ ΠΏΠΎΠΏΡ€Π°Ρ†ΡŽΠ²Π°Ρ‚ΠΈ. ΠŸΠ΅Ρ€ΡˆΠ΅ слід Π·Ρ€ΠΎΠ·ΡƒΠΌΡ–Ρ‚ΠΈ, Π΄Π΅ Ρƒ нас Ρ” ΠΏΠΎΡ€ΠΎΠΆΠ½Ρ– значСння (NaN, Π° Π² дСяких Π²ΠΈΠΏΠ°Π΄ΠΊΠ°Ρ… Ρ– 0 Π±ΡƒΠ΄ΡƒΡ‚ΡŒ прийматися як ΠΏΠΎΡ€ΠΎΠΆΠ½Ρ– значСння).

for i in df_numerical.columns:
    print(i, df[i][df[i]==0].count())

На Ρ†ΡŒΠΎΠΌΡƒ Π΅Ρ‚Π°ΠΏΡ– Π²Π°ΠΆΠ»ΠΈΠ²ΠΎ Π·Ρ€ΠΎΠ·ΡƒΠΌΡ–Ρ‚ΠΈ, Π² яких ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°Ρ… Π½ΡƒΠ»Ρ– ΠΌΠΎΠΆΡƒΡ‚ΡŒ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΠΈ відсутні значСння: Ρ‡ΠΈ Ρ†Π΅ ΠΏΠΎΠ²'язано Π· Ρ‚ΠΈΠΌ, як збиралися Π΄Π°Π½Ρ–? Π§ΠΈ Ρ†Π΅ ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ ΠΏΠΎΠ²'язанС Ρ–Π· значСннями Π΄Π°Π½ΠΈΡ…? На Ρ†Ρ– питання ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Π°Ρ‚ΠΈ Ρƒ ΠΊΠΎΠΆΠ½ΠΎΠΌΡƒ ΠΎΠΊΡ€Π΅ΠΌΠΎΠΌΡƒ Π²ΠΈΠΏΠ°Π΄ΠΊΡƒ.

ΠžΡ‚ΠΆΠ΅, якщо ΠΌΠΈ всС ΠΆ Ρ‚Π°ΠΊΠΈ Π²ΠΈΡ€Ρ–ΡˆΠΈΠ»ΠΈ, Ρ‰ΠΎ Π΄Π°Π½Ρ– Ρƒ нас ΠΌΠΎΠΆΡƒΡ‚ΡŒ Π±ΡƒΡ‚ΠΈ відсутніми Ρ‚Π°ΠΌ, Π΄Π΅ Ρ” Π½ΡƒΠ»Ρ–, слід Π·Π°ΠΌΡ–Π½ΠΈΡ‚ΠΈ Π½ΡƒΠ»Ρ– Π½Π° NaN, Ρ‰ΠΎΠ± Π±ΡƒΠ»ΠΎ лСгшС ΠΏΠΎΡ‚Ρ–ΠΌ ΠΏΡ€Π°Ρ†ΡŽΠ²Π°Ρ‚ΠΈ Π· Ρ†ΠΈΠΌΠΈ Π²Ρ‚Ρ€Π°Ρ‡Π΅Π½ΠΈΠΌΠΈ Π΄Π°Π½ΠΈΠΌΠΈ:

df_numerical[["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° 1", "ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° 2"]] = df_numerical[["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° 1", "ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° 2"]].replace(0, nan)

Π’Π΅ΠΏΠ΅Ρ€ подивимося, Π΄Π΅ Ρƒ нас ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Ρ– Π΄Π°Π½Ρ–:

sns.heatmap(df_numerical.isnull(),yticklabels=False,cbar=False,cmap='viridis') # МоТно Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ df_numerical.info()

Π‘Π»ΠΎΠΊΠ½ΠΎΡ‚-ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° для швидкого Data preprocessing

Π’ΡƒΡ‚ ΠΌΠ°ΡŽΡ‚ΡŒ Π±ΡƒΡ‚ΠΈ Π²Ρ–Π΄Π·Π½Π°Ρ‡Π΅Π½Ρ– ΠΆΠΎΠ²Ρ‚ΠΈΠΌ ΠΊΠΎΠ»ΡŒΠΎΡ€ΠΎΠΌ Ρ‚Ρ– значСння всСрСдині стовпців, які відсутні. Π† Π½Π°ΠΉΡ†Ρ–ΠΊΠ°Π²Ρ–ΡˆΠ΅ ΠΏΠΎΡ‡ΠΈΠ½Π°Ρ”Ρ‚ΡŒΡΡ Ρ‚Π΅ΠΏΠ΅Ρ€ β€” як поводитися Π· Ρ†ΠΈΠΌΠΈ значСннями? Π’ΠΈΠ΄Π°Π»ΠΈΡ‚ΠΈ рядки Π· Ρ†ΠΈΠΌΠΈ значСннями Ρ‡ΠΈ стовпці? Π§ΠΈ Π·Π°ΠΏΠΎΠ²Π½ΠΈΡ‚ΠΈ Ρ†Ρ– ΠΏΠΎΡ€ΠΎΠΆΠ½Ρ– значСння якимись Ρ–Π½ΡˆΠΈΠΌΠΈ?

Ось ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·Π½Π° схСма, яка ΠΌΠΎΠΆΠ΅ Π΄ΠΎΠΏΠΎΠΌΠΎΠ³Ρ‚ΠΈ визначитися Π· Ρ‚ΠΈΠΌ, Ρ‰ΠΎ ΠΌΠΎΠΆΠ½Π° Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ– Π·Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ Π· ΠΏΠΎΡ€ΠΎΠΆΠ½Ρ–ΠΌΠΈ значСннями:

Π‘Π»ΠΎΠΊΠ½ΠΎΡ‚-ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° для швидкого Data preprocessing

0. Видаляємо Π½Π΅ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½Ρ– ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ

df_numerical.drop(labels=["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2"], axis=1, inplace=True)

1. ΠšΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ ΠΏΠΎΡ€ΠΎΠΆΠ½Ρ–Ρ… Π·Π½Π°Ρ‡Π΅Π½ΡŒ Ρƒ Ρ†Ρ–ΠΉ ΠΊΠΎΠ»ΠΎΠ½Ρ†Ρ– Π±Ρ–Π»ΡŒΡˆΠ° Π·Π° 50%?

print(df_numerical.isnull().sum() / df_numerical.shape[0] * 100)

df_numerical.drop(labels=["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2"], axis=1, inplace=True)#УдаляСм, Ссли какая-Ρ‚ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ‚ большС 50 пустых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

2. Видаляємо рядки Π· ΠΏΠΎΡ€ΠΎΠΆΠ½Ρ–ΠΌΠΈ значСннями

df_numerical.dropna(inplace=True)#УдаляСм строчки с пустыми значСниями, Ссли ΠΏΠΎΡ‚ΠΎΠΌ останСтся достаточно Π΄Π°Π½Π½Ρ‹Ρ… для обучСния

3.1. Вставляємо Π²ΠΈΠΏΠ°Π΄ΠΊΠΎΠ²Π΅ значСння

import random #ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ random
df_numerical["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°"].fillna(lambda x: random.choice(df[df[column] != np.nan]["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°"]), inplace=True) #вставляСм Ρ€Π°Π½Π΄ΠΎΠΌΠ½Ρ‹Π΅ значСния Π² пустыС ΠΊΠ»Π΅Ρ‚ΠΊΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

3.2. Вставляємо константнС значСння

from sklearn.impute import SimpleImputer #ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ SimpleImputer, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ значСния
imputer = SimpleImputer(strategy='constant', fill_value="<Π’Π°ΡˆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ здСсь>") #вставляСм ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ SimpleImputer
df_numerical[["новая_ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1",'новая_ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2','новая_ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°3']] = imputer.fit_transform(df_numerical[['ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1', 'ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2', 'ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°3']]) #ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ это для нашСй Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹
df_numerical.drop(labels = ["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°3"], axis = 1, inplace = True) #Π£Π±ΠΈΡ€Π°Π΅ΠΌ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ со старыми значСниями

3.3. Вставляємо сСрСднє Ρ‡ΠΈ ΠΌΠ°ΠΊΡ–ΡΠΌΠ°Π»ΡŒΠ½ΠΎ частС значСння

from sklearn.impute import SimpleImputer #ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ SimpleImputer, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ значСния
imputer = SimpleImputer(strategy='mean', missing_values = np.nan) #вмСсто mean ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ most_frequent
df_numerical[["новая_ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1",'новая_ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2','новая_ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°3']] = imputer.fit_transform(df_numerical[['ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1', 'ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2', 'ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°3']]) #ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ это для нашСй Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹
df_numerical.drop(labels = ["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°3"], axis = 1, inplace = True) #Π£Π±ΠΈΡ€Π°Π΅ΠΌ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ со старыми значСниями

3.4. Вставляємо значСння, обчислСнС Ρ–Π½ΡˆΠΎΡŽ модСллю

Часом значСння ΠΌΠΎΠΆΠ½Π° обчислити Π·Π° допомогою рСгрСсійних ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡŽΡ‡ΠΈ ΠΌΠΎΠ΄Π΅Π»Ρ– Π· Π±Ρ–Π±Π»Ρ–ΠΎΡ‚Π΅ΠΊΠΈ sklearn Π°Π±ΠΎ Ρ–Π½ΡˆΠΈΡ… схоТих Π±Ρ–Π±Π»Ρ–ΠΎΡ‚Π΅ΠΊ. Наша ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΡ€ΠΈΡΠ²ΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠΊΡ€Π΅ΠΌΡƒ ΡΡ‚Π°Ρ‚Ρ‚ΡŽ Ρ‰ΠΎΠ΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, як Ρ†Π΅ ΠΌΠΎΠΆΠ½Π° Π·Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ Π² Π½Π°ΠΉΠ±Π»ΠΈΠΆΡ‡ΠΎΠΌΡƒ ΠΌΠ°ΠΉΠ±ΡƒΡ‚Π½ΡŒΠΎΠΌΡƒ.

ΠžΡ‚ΠΆΠ΅, ΠΏΠΎΠΊΠΈ Ρ€ΠΎΠ·ΠΏΠΎΠ²Ρ–Π΄ΡŒ ΠΏΡ€ΠΎ ΠΊΡ–Π»ΡŒΠΊΡ–ΡΠ½Ρ– Π΄Π°Π½Ρ– ΠΏΠ΅Ρ€Π΅Ρ€Π²Π΅Ρ‚ΡŒΡΡ, Ρ‚ΠΎΠΌΡƒ Ρ‰ΠΎ Ρ” Π±Π΅Π·Π»Ρ–Ρ‡ Ρ–Π½ΡˆΠΈΡ… Π½ΡŽΠ°Π½ΡΡ–Π² ΠΏΡ€ΠΎ Ρ‚Π΅, як ΠΊΡ€Π°Ρ‰Π΅ Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ data preparation Ρ– preprocessing для Ρ€Ρ–Π·Π½ΠΈΡ… завдань, Ρ– Π±Π°Π·ΠΎΠ²Ρ– Ρ€Π΅Ρ‡Ρ– для ΠΊΡ–Π»ΡŒΠΊΡ–ΡΠ½ΠΈΡ… Π΄Π°Π½ΠΈΡ… Π±ΡƒΠ»ΠΈ Π²Ρ€Π°Ρ…ΠΎΠ²Π°Π½Ρ– Π² Ρ†Ρ–ΠΉ статті, Ρ– Π·Π°Ρ€Π°Π· самС час повСрнутися Π΄ΠΎ якісних Π΄Π°Π½ΠΈΡ…, які ΠΌΠΈ Π²Ρ–Π΄ΠΎΠΊΡ€Π΅ΠΌΠΈΠ»ΠΈ ΠΊΡ–Π»ΡŒΠΊΠ° ΠΊΡ€ΠΎΠΊΡ–Π² Ρ‚ΠΎΠΌΡƒ Π²Ρ–Π΄ ΠΊΡ–Π»ΡŒΠΊΡ–ΡΠ½ΠΈΡ…. Π’ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·ΠΌΡ–Π½ΡŽΠ²Π°Ρ‚ΠΈ Ρ†Π΅ΠΉ notebook Ρ‚Π°ΠΊ, як Π’Π°ΠΌ Π·Π°Π²Π³ΠΎΠ΄Π½ΠΎ, ΠΏΡ–Π΄Π»Π°ΡˆΡ‚ΠΎΠ²ΡƒΡŽΡ‡ΠΈ ΠΉΠΎΠ³ΠΎ ΠΏΡ–Π΄ Ρ€Ρ–Π·Π½Ρ– завдання, Ρ‰ΠΎΠ± data preprocessing ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠ² Π΄ΡƒΠΆΠ΅ швидко!

Якісні Π΄Π°Π½Ρ–

Π’ основному для якісних Π΄Π°Π½ΠΈΡ… Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡ”Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ One-hot-encoding, Ρ‰ΠΎΠ± Π²Ρ–Π΄Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΡƒΠ²Π°Ρ‚ΠΈ Ρ—Ρ… Π· string (Π°Π±ΠΎ object) Π΄ΠΎ числа. ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚ΠΈΠΌ як ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π΄ΠΎ Ρ†ΡŒΠΎΠ³ΠΎ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ, скористаємося ΡΡ…Π΅ΠΌΠΎΡŽ Ρ‚Π° ΠΊΠΎΠ΄ΠΎΠΌ Π·Π²Π΅Ρ€Ρ…Ρƒ, Ρ‰ΠΎΠ± розібратися Π· ΠΏΠΎΡ€ΠΎΠΆΠ½Ρ–ΠΌΠΈ значСннями.

df_categorical.nunique()

sns.heatmap(df_categorical.isnull(),yticklabels=False,cbar=False,cmap='viridis')

Π‘Π»ΠΎΠΊΠ½ΠΎΡ‚-ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° для швидкого Data preprocessing

0. Видаляємо Π½Π΅ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½Ρ– ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ

df_categorical.drop(labels=["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2"], axis=1, inplace=True)

1. ΠšΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ ΠΏΠΎΡ€ΠΎΠΆΠ½Ρ–Ρ… Π·Π½Π°Ρ‡Π΅Π½ΡŒ Ρƒ Ρ†Ρ–ΠΉ ΠΊΠΎΠ»ΠΎΠ½Ρ†Ρ– Π±Ρ–Π»ΡŒΡˆΠ° Π·Π° 50%?

print(df_categorical.isnull().sum() / df_numerical.shape[0] * 100)

df_categorical.drop(labels=["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2"], axis=1, inplace=True) #УдаляСм, Ссли какая-Ρ‚ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° 
                                                                          #ΠΈΠΌΠ΅Π΅Ρ‚ большС 50% пустых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

2. Видаляємо рядки Π· ΠΏΠΎΡ€ΠΎΠΆΠ½Ρ–ΠΌΠΈ значСннями

df_categorical.dropna(inplace=True)#УдаляСм строчки с пустыми значСниями, 
                                   #Ссли ΠΏΠΎΡ‚ΠΎΠΌ останСтся достаточно Π΄Π°Π½Π½Ρ‹Ρ… для обучСния

3.1. Вставляємо Π²ΠΈΠΏΠ°Π΄ΠΊΠΎΠ²Π΅ значСння

import random
df_categorical["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°"].fillna(lambda x: random.choice(df[df[column] != np.nan]["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°"]), inplace=True)

3.2. Вставляємо константнС значСння

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(strategy='constant', fill_value="<Π’Π°ΡˆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ здСсь>")
df_categorical[["новая_колонка1",'новая_колонка2','новая_колонка3']] = imputer.fit_transform(df_categorical[['колонка1', 'колонка2', 'колонка3']])
df_categorical.drop(labels = ["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°3"], axis = 1, inplace = True)

ΠžΡ‚ΠΆΠ΅, Π½Π°Ρ€Π΅ΡˆΡ‚Ρ– ΠΌΠΈ розібралися Π· ΠΏΠΎΡ€ΠΎΠΆΠ½Ρ–ΠΌΠΈ значСннями якісних Π΄Π°Π½ΠΈΡ…. Π’Π΅ΠΏΠ΅Ρ€ час Π·Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ one-hot-encoding для Π·Π½Π°Ρ‡Π΅Π½ΡŒ, які Ρ” Ρƒ Π²Π°ΡˆΡ–ΠΉ Π±Π°Π·Ρ– Π΄Π°Π½ΠΈΡ…. Π¦Π΅ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄ΡƒΠΆΠ΅ часто Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡ”Ρ‚ΡŒΡΡ для Ρ‚ΠΎΠ³ΠΎ, Ρ‰ΠΎΠ± ваш Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΌΡ–Π³ навчатися Π· урахуванням якісних Π΄Π°Π½ΠΈΡ….

def encode_and_bind(original_dataframe, feature_to_encode):
    dummies = pd.get_dummies(original_dataframe[[feature_to_encode]])
    res = pd.concat([original_dataframe, dummies], axis=1)
    res = res.drop([feature_to_encode], axis=1)
    return(res)

features_to_encode = ["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°3"]
for feature in features_to_encode:
    df_categorical = encode_and_bind(df_categorical, feature))

ΠžΡ‚ΠΆΠ΅, Π½Π°Ρ€Π΅ΡˆΡ‚Ρ– ΠΌΠΈ пСрСстали обробляти ΠΎΠΊΡ€Π΅ΠΌΠΎ якісні Ρ‚Π° ΠΊΡ–Π»ΡŒΠΊΡ–ΡΠ½Ρ– Π΄Π°Π½Ρ– – час ΠΏΠΎΡ”Π΄Π½ΡƒΠ²Π°Ρ‚ΠΈ Ρ—Ρ… Π½Π°Π·Π°Π΄.

new_df = pd.concat([df_numerical,df_categorical], axis=1)

ΠŸΡ–ΡΠ»Ρ Ρ‚ΠΎΠ³ΠΎ, як ΠΌΠΈ Π·'Ρ”Π΄Π½Π°Π»ΠΈ Ρ€Π°Π·ΠΎΠΌ датасСти Π² ΠΎΠ΄ΠΈΠ½, ΠΏΡ–Π΄ ΠΊΡ–Π½Π΅Ρ†ΡŒ ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ використовувати Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠ°Ρ†Ρ–ΡŽ Π΄Π°Π½ΠΈΡ… Π·Π° допомогою MinMaxScaler Ρ–Π· Π±Ρ–Π±Π»Ρ–ΠΎΡ‚Π΅ΠΊΠΈ sklearn. Π¦Π΅ Π·Ρ€ΠΎΠ±ΠΈΡ‚ΡŒ Π½Π°ΡˆΡ– значСння Π²Ρ–Π΄ 0 Π΄ΠΎ 1, Ρ‰ΠΎ Π΄ΠΎΠΏΠΎΠΌΠΎΠΆΠ΅ ΠΏΡ€ΠΈ Π½Π°Π²Ρ‡Π°Π½Π½Ρ– ΠΌΠΎΠ΄Π΅Π»Ρ– Π² ΠΌΠ°ΠΉΠ±ΡƒΡ‚Π½ΡŒΠΎΠΌΡƒ.

from sklearn.preprocessing import MinMaxScaler
min_max_scaler = MinMaxScaler()
new_df = min_max_scaler.fit_transform(new_df)

Π¦Ρ– Π΄Π°Π½Ρ– Ρ‚Π΅ΠΏΠ΅Ρ€ Π³ΠΎΡ‚ΠΎΠ²Ρ– Π΄ΠΎ всього β€” Π΄ΠΎ Π½Π΅ΠΉΡ€ΠΎΠ½Π½ΠΈΡ… ΠΌΠ΅Ρ€Π΅ΠΆ, стандартних ML Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ–Π² Ρ‚ΠΎΡ‰ΠΎ!

Π£ Ρ†Ρ–ΠΉ статті ΠΌΠΈ Π½Π΅ Π²Ρ€Π°Ρ…ΡƒΠ²Π°Π»ΠΈ Ρ€ΠΎΠ±ΠΎΡ‚Ρƒ Π· Π΄Π°Π½ΠΈΠΌΠΈ, Ρ‰ΠΎ Π½Π°Π»Π΅ΠΆΠ°Ρ‚ΡŒ Π΄ΠΎ тимчасових рядів, Ρ‚ΠΎΠΌΡƒ Ρ‰ΠΎ для Ρ‚Π°ΠΊΠΈΡ… Π΄Π°Π½ΠΈΡ… слід використовувати Ρ‚Ρ€ΠΎΡ…ΠΈ Ρ–Π½ΡˆΡ– Ρ‚Π΅Ρ…Π½Ρ–ΠΊΠΈ Ρ—Ρ… ΠΎΠ±Ρ€ΠΎΠ±ΠΊΠΈ, Π·Π°Π»Π΅ΠΆΠ½ΠΎ Π²Ρ–Π΄ Π’Π°ΡˆΠΎΠ³ΠΎ завдання. Π£ ΠΌΠ°ΠΉΠ±ΡƒΡ‚Π½ΡŒΠΎΠΌΡƒ наша ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΡ€ΠΈΡΠ²ΡΡ‚ΠΈΡ‚ΡŒ Ρ†Ρ–ΠΉ Ρ‚Π΅ΠΌΡ– ΠΎΠΊΡ€Π΅ΠΌΡƒ ΡΡ‚Π°Ρ‚Ρ‚ΡŽ, Ρ– ΠΌΠΈ сподіваємося, Ρ‰ΠΎ Π²ΠΎΠ½Π° Π·ΠΌΠΎΠΆΠ΅ принСсти Ρƒ Π’Π°ΡˆΠ΅ Тиття Ρ‰ΠΎΡΡŒ Ρ†Ρ–ΠΊΠ°Π²Π΅, Π½ΠΎΠ²Π΅ Ρ‚Π° кориснС, як Ρ– Ρ†Π΅.

Π”ΠΆΠ΅Ρ€Π΅Π»ΠΎ: habr.com

ΠšΡƒΠΏΠΈΡ‚ΠΈ Π½Π°Π΄Ρ–ΠΉΠ½ΠΈΠΉ хостинг для сайтів Ρ–Π· захистом Π²Ρ–Π΄ DDoS, VPS VDS сСрвСри πŸ”₯ ΠšΡƒΠΏΠΈΡ‚ΠΈ Π½Π°Π΄Ρ–ΠΉΠ½ΠΈΠΉ хостинг для сайтів Ρ–Π· захистом Π²Ρ–Π΄ DDoS, VPS VDS сСрвСри | ProHoster