Π‘Π»ΠΎΠΊΠ½ΠΎΡ‚-ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° для быстрого Data preprocessing

Часто люди, заходящиС Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Data Science, ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π΅ совсСм рСалистичныС прСдставлСния ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΡ… ΠΆΠ΄Π΅Ρ‚. МногиС Π΄ΡƒΠΌΠ°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ сСйчас ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΊΡ€ΡƒΡ‚ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ нСйросСти, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ голосового ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠ° ΠΈΠ· Π–Π΅Π»Π΅Π·Π½ΠΎΠ³ΠΎ Π§Π΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΈΠ»ΠΈ ΠΎΠ±Ρ‹Π³Ρ€Ρ‹Π²Π°Ρ‚ΡŒ всСх Π½Π° финансовых Ρ€Ρ‹Π½ΠΊΠ°Ρ….
Но Ρ€Π°Π±ΠΎΡ‚Π° Data Scientist завязана Π½Π° Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΠΆΠ½Π΅ΠΉΡˆΠΈΡ… ΠΈ врСмя Π·Π°Ρ‚Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² β€” это ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΈΡ… ΠΏΠΎΠ΄Π°Π²Π°Ρ‚ΡŒ Π² Π½Π΅ΠΉΡ€ΠΎΡΠ΅Ρ‚ΡŒ ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ способом.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ наша ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΠΏΠΈΡˆΠ΅Ρ‚ Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈ быстро ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ с пошаговой инструкциСй ΠΈ ΠΊΠΎΠ΄ΠΎΠΌ. ΠœΡ‹ ΡΡ‚Π°Ρ€Π°Π»ΠΈΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ΄ Π±Ρ‹Π» довольно Π³ΠΈΠ±ΠΊΠΈΠΌ ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ для Ρ€Π°Π·Π½Ρ‹Ρ… датасСтов.

МногиС профСссионалы Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π½Π΅ Π½Π°ΠΉΠ΄ΡƒΡ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ экстраординарного Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅, Π½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ смогут ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΏΠ½ΡƒΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ, ΠΊΡ‚ΠΎ Π΄Π°Π²Π½ΠΎ ΠΌΠ΅Ρ‡Ρ‚Π°Π» ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ сСбС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ notebook для быстрой ΠΈ структурированной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΠ΄ сСбя, ΠΈΠ»ΠΈ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ notebook с Github.

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ dataset. Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ дальшС?

Π˜Ρ‚Π°ΠΊ, стандарт: Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, с Ρ‡Π΅ΠΌ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ, ΠΎΠ±Ρ‰ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ pandas, Ρ‡Ρ‚ΠΎΠ±Ρ‹ просто ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ….

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