Matetika ny olona miditra amin'ny sehatry ny Data Science dia tsy dia misy antenaina loatra ny zavatra miandry azy. Maro no mihevitra fa hanoratra tambajotra neural mangatsiatsiaka izy ireo, hamorona mpanampy feo avy amin'ny Iron Man, na handresy ny olona rehetra amin'ny tsenam-bola.
Fa asa Data Ny mpahay siansa dia mifototra amin'ny angon-drakitra, ary ny iray amin'ireo lafiny manan-danja sy mandany fotoana dia ny fanodinana ny angon-drakitra alohan'ny hanomezana azy ho tambajotra neural na famakafakana azy amin'ny fomba iray.
Ato amin'ity lahatsoratra ity, ny ekipanay dia mamaritra ny fomba ahafahanao manodina data haingana sy mora miaraka amin'ny toromarika sy kaody tsikelikely. Niezaka nanao ny kaody izahay mba ho mora azo ary azo ampiasaina amin'ny angon-drakitra samihafa.
Maro amin'ireo matihanina no mety tsy hahita zavatra miavaka ato amin'ity lahatsoratra ity, fa ireo vao manomboka dia ho afaka hianatra zava-baovao, ary izay efa nanonofy hatry ny ela ny hanao kahie mitokana ho an'ny fanodinana angon-drakitra haingana sy voalamina dia afaka mandika ny kaody ary manamboatra azy ho azy manokana, na
Nahazo ny angon-drakitra izahay. Inona no hatao manaraka?
Noho izany, ny fenitra: mila mahatakatra ny zavatra iainantsika isika, ny sary ankapobeny. Mba hanaovana izany, mampiasa panda izahay mba hamaritana ireo karazana angona samihafa.
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() #ΠΠ΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°Ρ
Andeha hojerentsika ny sandan'ny tsanganana:
- Mifanaraka amin'ny isan'ny andalana ve ny isan'ny andalana tsirairay?
- Inona no fototry ny angona isaky ny tsanganana?
- Andry inona no tiantsika hokendrena mba hanaovana vinavina momba izany?
Ny valin'ireo fanontaniana ireo dia ahafahanao mamakafaka ny angon-drakitra ary manao drafitra amin'ny hetsika manaraka.
Ary koa, raha hijery lalindalina kokoa ny soatoavina ao amin'ny tsanganana tsirairay, dia afaka mampiasa ny asan'ny pandas describe(). Na izany aza, ny tsy fahampian'ity asa ity dia ny tsy manome fampahalalana momba ny tsanganana misy soatoavin'ny tady. Hiatrika azy ireo isika any aoriana any.
df.describe()
Fampisehoana majika
Andeha hojerentsika hoe aiza isika no tsy manana soatoavina:
import seaborn as sns
sns.heatmap(df.isnull(),yticklabels=False,cbar=False,cmap='viridis')
Ity dia fijery fohy avy any ambony, ankehitriny dia hiroso amin'ny zavatra mahaliana kokoa isika
Andao hiezaka hitady ary, raha azo atao, esory ny tsanganana izay manana sanda tokana amin'ny andalana rehetra (tsy hisy fiantraikany amin'ny vokatra na inona na inona izany):
df = df[[c for c
in list(df)
if len(df[c].unique()) > 1]] #ΠΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π΄Π°ΡΠ°ΡΠ΅Ρ, ΠΎΡΡΠ°Π²Π»ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ
Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
Amin'izao fotoana izao dia miaro ny tenantsika sy ny fahombiazan'ny tetikasantsika amin'ny tsipika duplicate izahay (andalana misy fampahalalana mitovy amin'ny filaharana mitovy amin'ny andalana efa misy):
df.drop_duplicates(inplace=True) #ΠΠ΅Π»Π°Π΅ΠΌ ΡΡΠΎ, Π΅ΡΠ»ΠΈ ΡΡΠΈΡΠ°Π΅ΠΌ Π½ΡΠΆΠ½ΡΠΌ.
#Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
ΡΠ΄Π°Π»ΡΡΡ ΡΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ°Π»Π° Π½Π΅ ΡΡΠΎΠΈΡ.
Zarainay roa ny angon-drakitra: ny iray misy soatoavina qualitative, ary ny iray misy quantitative
Eto isika dia mila manao fanazavΓ na kely: raha tsy misy ifandraisany loatra ny andalana misy angon-drakitra tsy hita ao amin'ny data qualitative sy quantitative, dia mila manapa-kevitra isika hoe inona no ataontsika sorona - ny andalana rehetra misy angona tsy hita, ny ampahany amin'izy ireo ihany, na tsanganana sasany. Raha mifamatotra ny andalana dia manan-jo hizara roa ny angona. Raha tsy izany dia mila miatrika ireo andalana izay tsy mampifandray ny angon-drakitra tsy ampy amin'ny qualitative sy quantitative ianao, ary avy eo zarao roa ny angona.
df_numerical = df.select_dtypes(include = [np.number])
df_categorical = df.select_dtypes(exclude = [np.number])
Manao izany izahay mba hanamora ny fikarakaranay ireo karazana angona roa samihafa ireo - ho takatsika avy eo hoe tena manamora ny fiainantsika izany.
Miara-miasa amin'ny angona quantitative izahay
Ny zavatra voalohany tokony hataontsika dia ny mamaritra raha misy "tsanganana mpitsikilo" ao amin'ny angon-drakitra. Antsoinay ireo tsanganana ireo satria izy ireo dia maneho ny tenany ho angon-drakitra, fa miasa toy ny angona qualitative.
Ahoana no ahafantarantsika azy ireo? Mazava ho azy fa miankina amin'ny toetry ny angon-drakitra dinihinao izany rehetra izany, fa amin'ny ankapobeny ny tsanganana toy izany dia mety manana angon-drakitra tsy manam-paharoa (ao amin'ny faritra misy sanda tokana 3-10).
print(df_numerical.nunique())
Raha vantany vao fantatray ireo tsanganana mpitsikilo dia hamindra azy ireo avy amin'ny angona quantitative mankany amin'ny data qualitative izahay:
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']) #Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΡΠ΅ΡΡΡ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡ-ΡΠΏΠΈΠΎΠ½ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅
Farany, nanasaraka tanteraka ny angona quantitative sy qualitative izahay ary afaka miasa tsara amin'izany izahay. Voalohany, mila mahatakatra isika hoe aiza no misy sanda poakaty (NaN ary amin'ny tranga sasany dia 0 no ekena ho sanda foana).
for i in df_numerical.columns:
print(i, df[i][df[i]==0].count())
Amin'izao fotoana izao, zava-dehibe ny mahatakatra hoe aiza ny tsanganana aotra mety manondro soatoavina tsy hita: noho ny fomba fanangonana ny angona ve izany? Sa mety misy ifandraisany amin'ny soatoavin'ny angona? Ireo fanontaniana ireo dia tsy maintsy valiana isaky ny tranga.
Noho izany, raha mbola manapa-kevitra isika fa mety tsy ampy angon-drakitra misy aotra, dia tokony hosoloina NaN ny aotra mba hanamora ny fiasana amin'ity angona very ity any aoriana:
df_numerical[["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° 1", "ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° 2"]] = df_numerical[["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° 1", "ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° 2"]].replace(0, nan)
Andeha hojerentsika hoe aiza no tsy ampy angona:
sns.heatmap(df_numerical.isnull(),yticklabels=False,cbar=False,cmap='viridis') # ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ df_numerical.info()
Eto dia tokony hasiana marika mavo ireo soatoavina ao anatin'ny tsanganana tsy hita. Ary manomboka izao ny fahafinaretana - ny fomba hiatrehana ireo soatoavina ireo? Tokony hamafa andalana misy ireo soatoavina na tsanganana ireo ve aho? Sa fenoy ireo soatoavina poakaty ireo amin'ny hafa?
Ity misy kisary eo ho eo izay afaka manampy anao hanapa-kevitra izay azo atao amin'ny sanda foana:
0. Esory ny tsanganana tsy ilaina
df_numerical.drop(labels=["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2"], axis=1, inplace=True)
1. Mihoatra ny 50% ve ny isan'ny sanda foana amin'ity tsanganana ity?
print(df_numerical.isnull().sum() / df_numerical.shape[0] * 100)
df_numerical.drop(labels=["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2"], axis=1, inplace=True)#Π£Π΄Π°Π»ΡΠ΅ΠΌ, Π΅ΡΠ»ΠΈ ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅ 50 ΠΏΡΡΡΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
2. Fafao ny tsipika misy sanda foana
df_numerical.dropna(inplace=True)#Π£Π΄Π°Π»ΡΠ΅ΠΌ ΡΡΡΠΎΡΠΊΠΈ Ρ ΠΏΡΡΡΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΌ ΠΎΡΡΠ°Π½Π΅ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π°Π½Π½ΡΡ
Π΄Π»Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ
3.1. Mampiditra sanda kisendrasendra
import random #ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ random
df_numerical["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°"].fillna(lambda x: random.choice(df[df[column] != np.nan]["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°"]), inplace=True) #Π²ΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΠ°Π½Π΄ΠΎΠΌΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΏΡΡΡΡΠ΅ ΠΊΠ»Π΅ΡΠΊΠΈ ΡΠ°Π±Π»ΠΈΡΡ
3.2. Mampiditra sanda tsy miova
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. Ampidiro ny sanda antonony na matetika indrindra
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. Ampidiro ny sanda kajy amin'ny modely hafa
Indraindray ny soatoavina dia azo kajy amin'ny alΓ lan'ny modely regression amin'ny fampiasana modely avy amin'ny tranomboky sklearn na tranomboky hafa mitovy. Ny ekipanay dia hanolotra lahatsoratra mitokana momba ny fomba hanaovana izany tsy ho ela.
Noho izany, amin'izao fotoana izao, ny fitantarana momba ny angona quantitative dia ho tapaka, satria maro ny nuances momba ny fomba tsara kokoa ny fanomanana ny angona sy ny preprocessing ho an'ny asa isan-karazany, ary ny zavatra fototra ho an'ny angona quantitative dia nodinihina ato amin'ity lahatsoratra ity, ary izao no fotoana hiverenana amin'ny data qualitative izay nanasaraka dingana maromaro tamin'ny quantitative. Azonao atao ny manova ity kahie ity araka izay tianao, mampifanaraka azy amin'ny asa isan-karazany, mba handeha haingana be ny preprocessing data!
Data qualitative
Amin'ny ankapobeny, ho an'ny data qualitative, ny fomba One-hot-encoding dia ampiasaina mba handrafetana azy avy amin'ny tady (na zavatra) mankany amin'ny isa. Alohan'ny hirosoana amin'ity teboka ity, andao hampiasa ny kisary sy ny kaody etsy ambony mba hiatrehana ireo sanda poakaty.
df_categorical.nunique()
sns.heatmap(df_categorical.isnull(),yticklabels=False,cbar=False,cmap='viridis')
0. Esory ny tsanganana tsy ilaina
df_categorical.drop(labels=["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2"], axis=1, inplace=True)
1. Mihoatra ny 50% ve ny isan'ny sanda foana amin'ity tsanganana ity?
print(df_categorical.isnull().sum() / df_numerical.shape[0] * 100)
df_categorical.drop(labels=["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2"], axis=1, inplace=True) #Π£Π΄Π°Π»ΡΠ΅ΠΌ, Π΅ΡΠ»ΠΈ ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°
#ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅ 50% ΠΏΡΡΡΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
2. Fafao ny tsipika misy sanda foana
df_categorical.dropna(inplace=True)#Π£Π΄Π°Π»ΡΠ΅ΠΌ ΡΡΡΠΎΡΠΊΠΈ Ρ ΠΏΡΡΡΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ,
#Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΌ ΠΎΡΡΠ°Π½Π΅ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π°Π½Π½ΡΡ
Π΄Π»Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ
3.1. Mampiditra sanda kisendrasendra
import random
df_categorical["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°"].fillna(lambda x: random.choice(df[df[column] != np.nan]["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°"]), inplace=True)
3.2. Mampiditra sanda tsy miova
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)
Noho izany, nahazo ny farany momba ny nulls amin'ny angona qualitative izahay. Fotoana izao hanaovana fanodinkodinana mafana iray amin'ny soatoavina ao amin'ny angon-drakitrao. Ity fomba ity dia matetika ampiasaina mba hahazoana antoka fa ny algorithm anao dia afaka mianatra amin'ny angona avo lenta.
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))
Noho izany, vita ny fanodinana angon-drakitra misaraka sy quantitative - fotoana hanambatra azy ireo
new_df = pd.concat([df_numerical,df_categorical], axis=1)
Rehefa avy natambatra ho iray ny angona, dia afaka mampiasa ny fanovana angon-drakitra izahay amin'ny farany amin'ny fampiasana MinMaxScaler avy amin'ny tranomboky sklearn. Izany dia hahatonga ny soatoavinay eo anelanelan'ny 0 sy 1, izay hanampy amin'ny fampiofanana ny modely amin'ny ho avy.
from sklearn.preprocessing import MinMaxScaler
min_max_scaler = MinMaxScaler()
new_df = min_max_scaler.fit_transform(new_df)
Ity angona ity dia vonona amin'ny zavatra rehetra - tambajotra neural, algorithm ML mahazatra, sns.!
Ato amin'ity lahatsoratra ity, dia tsy nandinika ny miasa miaraka amin'ny angon-drakitra andiam-potoana, satria ho an'ny angon-drakitra toy izany dia tokony hampiasa teknika fanodinana hafa kely, arakaraka ny asanao. Amin'ny ho avy, ny ekipanay dia hanokana lahatsoratra misaraka amin'ity lohahevitra ity, ary manantena izahay fa ho afaka hitondra zavatra mahaliana, vaovao ary mahasoa eo amin'ny fiainanao, tahaka ity iray ity.
Source: www.habr.com