Π§Π΅ΡΡΠΎ Ρ
ΠΎΡΠ°ΡΠ°, ΠΊΠΎΠΈΡΠΎ Π½Π°Π²Π»ΠΈΠ·Π°Ρ Π² ΠΎΠ±Π»Π°ΡΡΡΠ° Π½Π° Data Science, ΠΈΠΌΠ°Ρ Π½Π΅ ΡΡΠ²ΡΠ΅ΠΌ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈ Π·Π° ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ Π³ΠΈ ΠΎΡΠ°ΠΊΠ²Π°. ΠΠ½ΠΎΠ·ΠΈΠ½Π° ΠΌΠΈΡΠ»ΡΡ, ΡΠ΅ ΡΠ΅Π³Π° ΡΠ΅ Π·Π°ΠΏΠΎΡΠ½Π°Ρ Π΄Π° ΠΏΠΈΡΠ°Ρ ΡΡΡΠ°Ρ
ΠΎΡΠ½ΠΈ Π½Π΅Π²ΡΠΎΠ½Π½ΠΈ ΠΌΡΠ΅ΠΆΠΈ, Π΄Π° ΡΡΠ·Π΄Π°Π²Π°Ρ Π³Π»Π°ΡΠΎΠ²ΠΈ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΡΠΈ ΠΊΠ°ΡΠΎ ΠΠ΅Π»Π΅Π·Π½ΠΈΡ ΡΠΎΠ²Π΅ΠΊ ΠΈΠ»ΠΈ Π΄Π° ΠΏΠ΅ΡΠ΅Π»ΡΡ Π½Π° ΡΠΈΠ½Π°Π½ΡΠΎΠ²ΠΈΡΠ΅ ΠΏΠ°Π·Π°ΡΠΈ.
ΠΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΠ°Π½Π½ΠΈ Π½Π° Scientist Π΅ ΡΠ²ΡΡΠ·Π°Π½Π° Ρ Π΄Π°Π½Π½ΠΈ, ΠΈ Π΅Π΄ΠΈΠ½ ΠΎΡ Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΈΡΠ΅ ΠΈ Π²ΡΠ΅ΠΌΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΈ ΠΌΠΎΠΌΠ΅Π½ΡΠΈ Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° Π΄Π°Π½Π½ΠΈ ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Π³ΠΈ ΠΏΠΎΠ΄Π°Π΄Π΅ΠΌ Π½Π° Π½Π΅Π²ΡΠΎΠ½Π½Π° ΠΌΡΠ΅ΠΆΠ° ΠΈΠ»ΠΈ Π΄Π° Π³ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π½Π°ΡΠΈΠ½.
Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ Π½Π°ΡΠΈΡΡ Π΅ΠΊΠΈΠΏ ΡΠ΅ ΠΎΠΏΠΈΡΠ΅ ΠΊΠ°ΠΊ Π±ΡΡΠ·ΠΎ ΠΈ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΈΠΌ Π΄Π°Π½Π½ΠΈ Ρ ΡΡΡΠΏΠΊΠ° ΠΏΠΎ ΡΡΡΠΏΠΊΠ° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΈ ΠΊΠΎΠ΄. Π‘ΡΡΠ΅ΠΌΠΈΡ ΠΌΠ΅ ΡΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΊΠΎΠ΄Π° Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π³ΡΠ²ΠΊΠ°Π², Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π° Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½Π°Π±ΠΎΡΠΈ ΠΎΡ Π΄Π°Π½Π½ΠΈ.
ΠΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΠΈΠΎΠ½Π°Π»ΠΈΡΡΠΈ ΠΌΠΎΠΆΠ΅ ΠΈ Π΄Π° Π½Π΅ Π½Π°ΠΌΠ΅ΡΡΡ Π½ΠΈΡΠΎ Π΅ΠΊΡΡΡΠ°ΠΎΡΠ΄ΠΈΠ½Π°ΡΠ½ΠΎ Π² ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ, Π½ΠΎ Π½Π°ΡΠΈΠ½Π°Π΅ΡΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΏΠΎΡΠ΅ΡΠΏΡΡ Π½Π΅ΡΠΎ Π½ΠΎΠ²ΠΎ, Π° ΡΡΡΠΎ ΠΈ Π²ΡΠ΅ΠΊΠΈ, ΠΊΠΎΠΉΡΠΎ ΠΎΡΠ΄Π°Π²Π½Π° ΠΌΠ΅ΡΡΠ°Π΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½ notebook Π·Π° Π±ΡΡΠ·Π° ΠΈ ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΊΠΎΠΏΠΈΡΠ° ΠΊΠΎΠ΄Π° ΠΈ Π΄Π° Π³ΠΎ ΡΠΎΡΠΌΠ°ΡΠΈΡΠ° ΡΠΏΠΎΡΠ΅Π΄ ΡΠ΅Π±Π΅ ΡΠΈ, ΠΈΠ»ΠΈ
ΠΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅ Π½Π°Π±ΠΎΡ ΠΎΡ Π΄Π°Π½Π½ΠΈ. ΠΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡΠ°Π²ΠΈΠΌ ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΠΊ?
Π ΡΠ°ΠΊΠ°, ΡΡΠ°Π½Π΄Π°ΡΡ: Π½ΡΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ Ρ ΠΊΠ°ΠΊΠ²ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΡΠ°Π±ΠΎΡΠ°, ΠΎΠ±ΡΠ°ΡΠ° ΠΊΠ°ΡΡΠΈΠ½Π°. ΠΠ° ΡΠΎΠ²Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ 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() #ΠΠΎΠΊΠ°Π·Π²Π°ΠΌΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈΡΠ΅ 
ΠΠ»Π΅Π΄Π°ΠΌΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈΡΠ΅:
- Π‘ΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π»ΠΈ Π±ΡΠΎΡΡ Π½Π° ΡΠ΅Π΄ΠΎΠ²Π΅ΡΠ΅ Π½Π° Π²ΡΡΠΊΠ° ΠΊΠΎΠ»ΠΎΠ½Π° Π½Π° ΠΎΠ±ΡΠΈΡ Π±ΡΠΎΠΉ ΡΠ΅Π΄ΠΎΠ²Π΅?
- ΠΠ°ΠΊΠ²Π° Π΅ ΡΡΡΠ½ΠΎΡΡΡΠ° Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅ Π² Π²ΡΡΠΊΠ° ΠΊΠΎΠ»ΠΎΠ½Π°?
- ΠΠΎΡ ΠΊΠΎΠ»ΠΎΠ½Π° ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ 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
