Π‘Π΅Π»Π΅ΠΆΠ½ΠΈΠΊ Π·Π° ΠΈΠ·ΠΌΠ°ΠΌΠ° Π·Π° Π±ΡŠΡ€Π·Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ

ЧСсто Ρ…ΠΎΡ€Π°Ρ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π°Π²Π»ΠΈΠ·Π°Ρ‚ Π² областта Π½Π° Data Science, ΠΈΠΌΠ°Ρ‚ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‚ рСалистични очаквания Π·Π° Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π³ΠΈ ΠΎΡ‡Π°ΠΊΠ²Π°. Много Ρ…ΠΎΡ€Π° смятат, Ρ‡Π΅ сСга Ρ‰Π΅ ΠΏΠΈΡˆΠ°Ρ‚ страхотни Π½Π΅Π²Ρ€ΠΎΠ½Π½ΠΈ ΠΌΡ€Π΅ΠΆΠΈ, Ρ‰Π΅ ΡΡŠΠ·Π΄Π°Π΄Π°Ρ‚ гласов асистСнт ΠΎΡ‚ Iron Man ΠΈΠ»ΠΈ Ρ‰Π΅ побСдят всички Π½Π° финансовитС ΠΏΠ°Π·Π°Ρ€ΠΈ.
Но Ρ€Π°Π±ΠΎΡ‚Π° Π”Π°Ρ‚Π° УчСният сС Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΠΈ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ ΠΈ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΈΡ‚Π΅ ΠΈ ΠΎΡ‚Π½Π΅ΠΌΠ°Ρ‰ΠΈ Π²Ρ€Π΅ΠΌΠ΅ аспСкти Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΠΎΠ΄Π°Π²Π°Π½ΠΈ Π² Π½Π΅Π²Ρ€ΠΎΠ½Π½Π° ΠΌΡ€Π΅ΠΆΠ° ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π½Π°Ρ‡ΠΈΠ½.

Π’ Ρ‚Π°Π·ΠΈ статия Π½Π°ΡˆΠΈΡΡ‚ Π΅ΠΊΠΈΠΏ Ρ‰Π΅ опишС ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ Π±ΡŠΡ€Π·ΠΎ ΠΈ лСсно с инструкции ΡΡ‚ΡŠΠΏΠΊΠ° ΠΏΠΎ ΡΡ‚ΡŠΠΏΠΊΠ° ΠΈ ΠΊΠΎΠ΄. ΠžΠΏΠΈΡ‚Π°Ρ…ΠΌΠ΅ сС Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΊΠΎΠ΄Π° доста гъвкав ΠΈ Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π°Π±ΠΎΡ€ΠΈ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ.

Много профСсионалисти ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ намСрят Π½ΠΈΡ‰ΠΎ Π½Π΅ΠΎΠ±ΠΈΡ‡Π°ΠΉΠ½ΠΎ Π² Ρ‚Π°Π·ΠΈ статия, Π½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰ΠΈΡ‚Π΅ Ρ‰Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π½Π°ΡƒΡ‡Π°Ρ‚ Π½Π΅Ρ‰ΠΎ Π½ΠΎΠ²ΠΎ ΠΈ всСки, ΠΊΠΎΠΉΡ‚ΠΎ ΠΎΡ‚Π΄Π°Π²Π½Π° ΠΌΠ΅Ρ‡Ρ‚Π°Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ Π±Π΅Π»Π΅ΠΆΠ½ΠΈΠΊ Π·Π° Π±ΡŠΡ€Π·Π° ΠΈ структурирана ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π° ΠΊΠΎΠ΄Π° ΠΈ Π΄Π° Π³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π° Π·Π° сСбС си, ΠΈΠ»ΠΈ ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Ρ‚Π΅ готовия Π±Π΅Π»Π΅ΠΆΠ½ΠΈΠΊ ΠΎΡ‚ Github.

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ…ΠΌΠ΅ Π½Π°Π±ΠΎΡ€Π° ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ. Какво Π΄Π° правя слСд Ρ‚ΠΎΠ²Π°?

И Ρ‚Π°ΠΊΠ°, ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚ΡŠΡ‚: трябва Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ с ΠΊΠ°ΠΊΠ²ΠΎ си ΠΈΠΌΠ°ΠΌΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°, ΠΎΠ±Ρ‰Π°Ρ‚Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°. Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ²Π°, Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ pandas, Π·Π° Π΄Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°ΠΌΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ.

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

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

Π‘Π΅Π»Π΅ΠΆΠ½ΠΈΠΊ Π·Π° ΠΈΠ·ΠΌΠ°ΠΌΠ° Π·Π° Π±ΡŠΡ€Π·Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ

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

Π‘Π΅Π»Π΅ΠΆΠ½ΠΈΠΊ Π·Π° ΠΈΠ·ΠΌΠ°ΠΌΠ° Π·Π° Π±ΡŠΡ€Π·Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ

НСка Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ стойноститС Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈΡ‚Π΅:

  1. Броят Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ във всяка ΠΊΠΎΠ»ΠΎΠ½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π»ΠΈ Π½Π° общия Π±Ρ€ΠΎΠΉ Ρ€Π΅Π΄ΠΎΠ²Π΅?
  2. Каква Π΅ ΡΡŠΡ‰Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ във всяка ΠΊΠΎΠ»ΠΎΠ½Π°?
  3. Коя ΠΊΠΎΠ»ΠΎΠ½Π° искамС Π΄Π° насочим, Π·Π° Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΈ Π·Π° нСя?

ΠžΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° Ρ‚Π΅Π·ΠΈ Π²ΡŠΠΏΡ€ΠΎΡΠΈ Ρ‰Π΅ Π²ΠΈ позволят Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ Π½Π°Π±ΠΎΡ€Π° ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ ΠΈ Π³Ρ€ΡƒΠ±ΠΎ Π΄Π° Π½Π°Ρ‡Π΅Ρ€Ρ‚Π°Π΅Ρ‚Π΅ ΠΏΠ»Π°Π½ Π·Π° слСдващитС си дСйствия.

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ°, Π·Π° ΠΏΠΎ-Π·Π°Π΄ΡŠΠ»Π±ΠΎΡ‡Π΅Π½ ΠΏΠΎΠ³Π»Π΅Π΄ Π²ΡŠΡ€Ρ…Ρƒ стойноститС във всяка ΠΊΠΎΠ»ΠΎΠ½Π°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ функцията pandas describe(). ΠΠ΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊΡŠΡ‚ Π½Π° Ρ‚Π°Π·ΠΈ функция ΠΎΠ±Π°Ρ‡Π΅ Π΅, Ρ‡Π΅ Π½Π΅ прСдоставя информация Π·Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈ с Π½ΠΈΠ·ΠΎΠ²ΠΈ стойности. Π©Π΅ сС Π·Π°Π΅ΠΌΠ΅ΠΌ с тях ΠΏΠΎ-късно.

df.describe()

Π‘Π΅Π»Π΅ΠΆΠ½ΠΈΠΊ Π·Π° ΠΈΠ·ΠΌΠ°ΠΌΠ° Π·Π° Π±ΡŠΡ€Π·Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ

ΠœΠ°Π³ΠΈΡ‡Π΅ΡΠΊΠ° визуализация

НСка Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ къдС ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ нямамС стойности:

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

Π‘Π΅Π»Π΅ΠΆΠ½ΠΈΠΊ Π·Π° ΠΈΠ·ΠΌΠ°ΠΌΠ° Π·Π° Π±ΡŠΡ€Π·Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ

Π’ΠΎΠ²Π° бСшС ΠΊΡ€Π°Ρ‚ΡŠΠΊ ΠΏΠΎΠ³Π»Π΅Π΄ ΠΎΡ‚Π³ΠΎΡ€Π΅, сСга Ρ‰Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ към ΠΏΠΎ-интСрСсни Π½Π΅Ρ‰Π°

НСка сС ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΠΌ ΠΈ, Π°ΠΊΠΎ Π΅ възмоТно, Π΄Π° ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅ΠΌ ΠΊΠΎΠ»ΠΎΠ½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚ само Π΅Π΄Π½Π° стойност във всички Ρ€Π΅Π΄ΠΎΠ²Π΅ (Ρ‚Π΅ няма Π΄Π° повлияят Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΏΠΎ никакъв Π½Π°Ρ‡ΠΈΠ½):

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()

Π‘Π΅Π»Π΅ΠΆΠ½ΠΈΠΊ Π·Π° ΠΈΠ·ΠΌΠ°ΠΌΠ° Π·Π° Π±ΡŠΡ€Π·Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ

Π’ΡƒΠΊ Ρ‚Π΅Π·ΠΈ стойности Π² ΠΊΠΎΠ»ΠΎΠ½ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ липсват, трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½ΠΈ Π² ΠΆΡŠΠ»Ρ‚ΠΎ. И сСга Π·Π°ΠΏΠΎΡ‡Π²Π° Π·Π°Π±Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ – ΠΊΠ°ΠΊ Π΄Π° сС справим с Ρ‚Π΅Π·ΠΈ цСнности? Врябва Π»ΠΈ Π΄Π° изтрия Ρ€Π΅Π΄ΠΎΠ²Π΅ с Ρ‚Π΅Π·ΠΈ стойности ΠΈΠ»ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΈ? Или Π΄Π° ΠΏΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ Ρ‚Π΅Π·ΠΈ ΠΏΡ€Π°Π·Π½ΠΈ стойности с Π΄Ρ€ΡƒΠ³ΠΈ?

Π•Ρ‚ΠΎ Π΅Π΄Π½Π° ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°, която ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ с ΠΏΡ€Π°Π·Π½ΠΈ стойности:

Π‘Π΅Π»Π΅ΠΆΠ½ΠΈΠΊ Π·Π° ΠΈΠ·ΠΌΠ°ΠΌΠ° Π·Π° Π±ΡŠΡ€Π·Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ

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 ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. ΠΠ°ΡˆΠΈΡΡ‚ Π΅ΠΊΠΈΠΏ Ρ‰Π΅ посвСти ΠΎΡ‚Π΄Π΅Π»Π½Π° статия Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° станС Ρ‚ΠΎΠ²Π° Π² Π±Π»ΠΈΠ·ΠΊΠΎ Π±ΡŠΠ΄Π΅Ρ‰Π΅.

Π’Π°ΠΊΠ° Ρ‡Π΅ засСга Ρ€Π°Π·ΠΊΠ°Π·ΡŠΡ‚ Π·Π° количСствСнитС Π΄Π°Π½Π½ΠΈ Ρ‰Π΅ бъдС ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ нюанси Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°Ρ‚Π° ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π°Ρ‚Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ, Π° основнитС Π½Π΅Ρ‰Π° Π·Π° количСствСнитС Π΄Π°Π½Π½ΠΈ са Π²Π·Π΅Ρ‚ΠΈ ΠΏΠΎΠ΄ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π² Ρ‚Π°Π·ΠΈ статия ΠΈ сСга Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΡŠΡ‚ Π΄Π° сС Π²ΡŠΡ€Π½Π΅ΠΌ към качСствСнитС Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»ΠΈΡ…ΠΌΠ΅ няколко ΡΡ‚ΡŠΠΏΠΊΠΈ Π½Π°Π·Π°Π΄ ΠΎΡ‚ количСствСнитС. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° промСнятС Ρ‚ΠΎΠ·ΠΈ Π±Π΅Π»Π΅ΠΆΠ½ΠΈΠΊ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΆΠ΅Π»Π°Π΅Ρ‚Π΅, ΠΊΠ°Ρ‚ΠΎ Π³ΠΎ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€Π°Ρ‚Π΅ към Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π°Ρ‚Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ Π΄Π° става ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡŠΡ€Π·ΠΎ!

ΠšΠ°Ρ‡Π΅ΡΡ‚Π²Π΅Π½ΠΈ Π΄Π°Π½Π½ΠΈ

По ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π·Π° качСствСни Π΄Π°Π½Π½ΠΈ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ One-hot-encoding, Π·Π° Π΄Π° сС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π° ΠΎΡ‚ Π½ΠΈΠ· (ΠΈΠ»ΠΈ ΠΎΠ±Π΅ΠΊΡ‚) Π² число. ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ към Ρ‚Π°Π·ΠΈ Ρ‚ΠΎΡ‡ΠΊΠ°, Π½Π΅ΠΊΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π° ΠΈ ΠΊΠΎΠ΄Π° ΠΏΠΎ-Π³ΠΎΡ€Π΅, Π·Π° Π΄Π° сС справим с ΠΏΡ€Π°Π·Π½ΠΈ стойности.

df_categorical.nunique()

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

Π‘Π΅Π»Π΅ΠΆΠ½ΠΈΠΊ Π·Π° ΠΈΠ·ΠΌΠ°ΠΌΠ° Π·Π° Π±ΡŠΡ€Π·Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ

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)

И Ρ‚Π°ΠΊΠ°, Π½Π°ΠΉ-накрая сС справихмС с Π½ΡƒΠ»Π΅Π²ΠΈΡ‚Π΅ стойности Π² качСствСнитС Π΄Π°Π½Π½ΠΈ. Π‘Π΅Π³Π° Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈΡ‚Π΅ Π΅Π΄Π½ΠΎ Π³ΠΎΡ€Π΅Ρ‰ΠΎ ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅ Π½Π° стойноститС, ΠΊΠΎΠΈΡ‚ΠΎ са във Π²Π°ΡˆΠ°Ρ‚Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. Π’ΠΎΠ·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠ½ΠΎΠ³ΠΎ чСсто, Π·Π° Π΄Π° сС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°, Ρ‡Π΅ Π²Π°ΡˆΠΈΡΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΡƒΡ‡ΠΈ ΠΎΡ‚ висококачСствСни Π΄Π°Π½Π½ΠΈ.

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 Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ ΠΈ Ρ‚.Π½.!

Π’ Ρ‚Π°Π·ΠΈ статия Π½Π΅ Π²Π·Π΅Ρ…ΠΌΠ΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ сСрии, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π·Π° Ρ‚Π°ΠΊΠΈΠ²Π° Π΄Π°Π½Π½ΠΈ трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Π² зависимост ΠΎΡ‚ Π²Π°ΡˆΠ°Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π°. Π’ Π±ΡŠΠ΄Π΅Ρ‰Π΅ Π½Π°ΡˆΠΈΡΡ‚ Π΅ΠΊΠΈΠΏ Ρ‰Π΅ посвСти ΠΎΡ‚Π΄Π΅Π»Π½Π° статия Π½Π° Ρ‚Π°Π·ΠΈ Ρ‚Π΅ΠΌΠ° ΠΈ сС надявамС, Ρ‡Π΅ Ρ‰Π΅ успСС Π΄Π° внСсС Π½Π΅Ρ‰ΠΎ интСрСсно, Π½ΠΎΠ²ΠΎ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² ΠΆΠΈΠ²ΠΎΡ‚Π° Π²ΠΈ, Ρ‚ΠΎΡ‡Π½ΠΎ ΠΊΠ°Ρ‚ΠΎ Ρ‚Π°Π·ΠΈ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€