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

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

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

Много профСсионалисти ΠΌΠΎΠΆΠ΅ ΠΈ Π΄Π° Π½Π΅ намСрят Π½ΠΈΡ‰ΠΎ Скстраординарно Π² Ρ‚Π°Π·ΠΈ статия, Π½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° почСрпят Π½Π΅Ρ‰ΠΎ Π½ΠΎΠ²ΠΎ, Π° ΡΡŠΡ‰ΠΎ ΠΈ всСки, ΠΊΠΎΠΉΡ‚ΠΎ ΠΎΡ‚Π΄Π°Π²Π½Π° ΠΌΠ΅Ρ‡Ρ‚Π°Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ собствСн notebook Π·Π° Π±ΡŠΡ€Π·Π° ΠΈ структурирана ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π° ΠΊΠΎΠ΄Π° ΠΈ Π΄Π° Π³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π° спорСд сСбС си, ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈ Π³ΠΎΡ‚ΠΎΠ² notebook ΠΎΡ‚ 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. Коя ΠΊΠΎΠ»ΠΎΠ½Π° искамС Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ target, Π·Π° Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΈ Π·Π° нСя?

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

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

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, Π·Π° Π΄Π° Π³ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°ΠΌΠ΅ ΠΎΡ‚ string (ΠΈΠ»ΠΈ object) Π² число. ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° ΠΌΠΈΠ½Π΅ΠΌ към Ρ‚Π°Π·ΠΈ Ρ‚ΠΎΡ‡ΠΊΠ°, Ρ‰Π΅ сС възползвамС ΠΎΡ‚ схСмата ΠΈ ΠΊΠΎΠ΄Π° ΠΎΡ‚Π³ΠΎΡ€Π΅, Π·Π° Π΄Π° сС справим с ΠΏΡ€Π°Π·Π½ΠΈΡ‚Π΅ стойности.

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)

И Ρ‚Π°ΠΊΠ°, накрая сС справихмС с ΠΏΡ€Π°Π·Π½ΠΈΡ‚Π΅ стойности Π² качСствСнитС Π΄Π°Π½Π½ΠΈ. Π‘Π΅Π³Π° Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈΠΌ 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