Sarritan Datu Zientzien eremuan sartzen diren pertsonek itxaropen errealistak baino ez dituzte itxaroten dutenaren inguruan. Jende askok uste du orain sare neuronal ederrak idatziko dituztela, Iron Man-en ahots-laguntzaile bat sortuko dutela edo finantza-merkatuetan guztiak irabaziko dituztela.
Baina lana Data Zientzialaria datuen araberakoa da, eta alderdi garrantzitsuenetako bat eta denbora behar duen alderdietako bat datuak prozesatzea da, sare neuronal batean sartu aurretik edo modu jakin batean aztertu aurretik.
Artikulu honetan, gure taldeak datuak azkar eta erraz nola prozesatu ditzakezun deskribatuko du urratsez urrats argibide eta kodearekin. Kodea nahiko malgua egiten saiatu gara eta datu multzo ezberdinetarako erabil zitekeen.
Profesional askok ez dute artikulu honetan aparteko ezer aurkituko, baina hasiberriek zerbait berria ikasteko aukera izango dute, eta datuen prozesamendu bizkor eta egituratu baterako koaderno bereizia egiteko amesten duen edonork kodea kopiatu eta formateatu dezake bere kabuz, edo
Datu multzoa jaso dugu. Zer egin hurrengoan?
Beraz, estandarra: zertaz ari garen ulertu behar dugu, irudi orokorra. Horretarako, pandak erabiltzen ditugu datu mota desberdinak definitzeko.
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() #ΠΠ΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°Ρ
Ikus ditzagun zutabeen balioak:
- Zutabe bakoitzeko lerro kopurua bat al dago lerro kopuru osoarekin?
- Zein da zutabe bakoitzeko datuen funtsa?
- Zein zutabe bideratu nahi dugu horren iragarpenak egiteko?
Galdera hauen erantzunak datu-multzoa aztertzeko eta zure hurrengo ekintzetarako plan bat marraztu ahal izango duzu.
Gainera, zutabe bakoitzeko balioak sakonago ikusteko, pandas describe() funtzioa erabil dezakegu. Hala ere, funtzio honen desabantaila da ez duela kateen balioak dituzten zutabeei buruzko informaziorik ematen. Aurrerago jorratuko ditugu.
df.describe()
Ikuspegi magikoa
Ikus dezagun non ez dugun baliorik:
import seaborn as sns
sns.heatmap(df.isnull(),yticklabels=False,cbar=False,cmap='viridis')
Hau goitik begirada labur bat zen, orain gauza interesgarriagoetara pasako gara
Saia gaitezen errenkada guztietan balio bakarra duten zutabeak bilatzen eta, ahal bada, kentzen (ez dute emaitzari inola ere eragingo):
df = df[[c for c
in list(df)
if len(df[c].unique()) > 1]] #ΠΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π΄Π°ΡΠ°ΡΠ΅Ρ, ΠΎΡΡΠ°Π²Π»ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ
Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
Orain gure burua eta gure proiektuaren arrakasta lerro bikoiztuetatik babesten ditugu (lehendik dagoen lerroetako baten ordena berean informazio bera duten lerroetatik):
df.drop_duplicates(inplace=True) #ΠΠ΅Π»Π°Π΅ΠΌ ΡΡΠΎ, Π΅ΡΠ»ΠΈ ΡΡΠΈΡΠ°Π΅ΠΌ Π½ΡΠΆΠ½ΡΠΌ.
#Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
ΡΠ΄Π°Π»ΡΡΡ ΡΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ°Π»Π° Π½Π΅ ΡΡΠΎΠΈΡ.
Datu multzoa bitan banatzen dugu: bata balio kualitatiboekin, eta bestea kuantitatiboekin
Hemen argitze txiki bat egin behar dugu: datu kualitatiboetan eta kuantitatiboetan falta diren datuak dituzten lerroak ez badaude elkarren artean oso erlazionatuta, orduan erabaki beharko dugu zer sakrifikatzen dugun - falta diren datuak dituzten lerro guztiak, zati bat bakarrik, edo zutabe jakin batzuk. Lerroak korrelazionatzen badira, datu multzoa bitan banatzeko eskubide osoa dugu. Bestela, lehenik eta behin falta diren datuak kualitatiboki eta kuantitatiboki korrelazionatzen ez dituzten lerroei aurre egin beharko diezu, eta ondoren datu-multzoa bitan banatu.
df_numerical = df.select_dtypes(include = [np.number])
df_categorical = df.select_dtypes(exclude = [np.number])
Hau egiten dugu bi datu mota ezberdin hauek prozesatzea errazteko; gero ulertuko dugu horrek zenbat errazten duen gure bizitza.
Datu kuantitatiboekin lan egiten dugu
Egin behar dugun lehenengo gauza datu kuantitatiboetan "espioi-zutabeak" dauden ala ez zehaztea da. Zutabe horiei deitzen diegu bere burua datu kuantitatibo gisa aurkezten dutelako, baina datu kualitatibo gisa jokatzen dutelako.
Nola definitzen ditugu? Jakina, dena aztertzen ari zaren datuen izaeraren araberakoa da, baina orokorrean horrelako zutabeek datu berezi gutxi izan ditzakete (3-10 balio esklusiboen eskualdean).
print(df_numerical.nunique())
Espioi-zutabeak identifikatu ondoren, datu kuantitatiboetatik datu kualitatiboetara eramango ditugu:
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']) #Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΡΠ΅ΡΡΡ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡ-ΡΠΏΠΈΠΎΠ½ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅
Azkenik, datu kuantitatiboak guztiz bereizi ditugu datu kualitatiboetatik eta orain behar bezala lan egin dezakegu. Lehenengo gauza balio hutsak non ditugun ulertzea da (NaN, eta kasu batzuetan 0 balio huts gisa onartuko da).
for i in df_numerical.columns:
print(i, df[i][df[i]==0].count())
Puntu honetan, garrantzitsua da ulertzea zer zutabetan zeroek falta diren balioak adieraz ditzaketen: datuak nola bildu diren? Edo datuen balioekin erlazionatuta egon daiteke? Galdera hauek kasuan-kasuan erantzun behar dira.
Beraz, zeroak dauden lekuetan datuak falta izan daitezkeela erabakitzen badugu, zeroak NaN-rekin ordezkatu beharko genituzke gero galdutako datu hauekin lan egitea errazteko:
df_numerical[["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° 1", "ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° 2"]] = df_numerical[["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° 1", "ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° 2"]].replace(0, nan)
Ikus dezagun non falta diren datuak:
sns.heatmap(df_numerical.isnull(),yticklabels=False,cbar=False,cmap='viridis') # ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ df_numerical.info()
Hemen falta diren zutabeen barneko balio horiek horiz markatu behar dira. Eta orain dibertsioa hasten da - nola aurre egin balio horiei? Balio edo zutabe hauek dituzten errenkadak ezabatu behar al ditut? Edo balio huts hauek beste batzuekin bete?
Hona hemen gutxi gorabeherako diagrama bat, printzipioz balio hutsekin zer egin daitekeen erabakitzen lagunduko dizuna:
0. Kendu beharrezkoak ez diren zutabeak
df_numerical.drop(labels=["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2"], axis=1, inplace=True)
1. Zutabe honetako balio hutsen kopurua % 50 baino handiagoa al da?
print(df_numerical.isnull().sum() / df_numerical.shape[0] * 100)
df_numerical.drop(labels=["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2"], axis=1, inplace=True)#Π£Π΄Π°Π»ΡΠ΅ΠΌ, Π΅ΡΠ»ΠΈ ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅ 50 ΠΏΡΡΡΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
2. Ezabatu balio hutsak dituzten lerroak
df_numerical.dropna(inplace=True)#Π£Π΄Π°Π»ΡΠ΅ΠΌ ΡΡΡΠΎΡΠΊΠΈ Ρ ΠΏΡΡΡΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΌ ΠΎΡΡΠ°Π½Π΅ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π°Π½Π½ΡΡ
Π΄Π»Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ
3.1. Ausazko balio bat txertatzea
import random #ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ random
df_numerical["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°"].fillna(lambda x: random.choice(df[df[column] != np.nan]["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°"]), inplace=True) #Π²ΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΠ°Π½Π΄ΠΎΠΌΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΏΡΡΡΡΠ΅ ΠΊΠ»Π΅ΡΠΊΠΈ ΡΠ°Π±Π»ΠΈΡΡ
3.2. Balio konstante bat txertatzea
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. Sartu batez besteko balioa edo maizena
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. Txertatu beste eredu batek kalkulatutako balioa
Batzuetan, balioak erregresio ereduak erabiliz kalkula daitezke sklearn liburutegiko edo antzeko beste liburutegiko ereduak erabiliz. Gure taldeak beste artikulu bat eskainiko du etorkizun hurbilean hori nola egin daitekeen jakiteko.
Beraz, oraingoz, datu kuantitatiboei buruzko kontakizuna eten egingo da, zeren eta beste hainbat Γ±abardura baitaude zeregin ezberdinetarako datuak prestatzea eta aurreprozesatzea hobeto nola egin, eta datu kuantitatiboetarako oinarrizko gauzak kontuan hartu dira artikulu honetan, eta orain datu kualitatiboetara itzultzeko garaia da.kuantitatiboetatik hainbat urrats bereizi genituen. Koaderno hau nahi duzun bezala alda dezakezu, zeregin ezberdinetara egokituz, datuen aurreprozesatzea oso azkar joan dadin!
Datu kualitatiboak
Funtsean, datu kualitatiboetarako, One-hot-coding metodoa erabiltzen da kate batetik (edo objektu) zenbaki batera formateatzeko. Puntu honetara joan aurretik, erabil ditzagun goiko diagrama eta kodea balio hutsei aurre egiteko.
df_categorical.nunique()
sns.heatmap(df_categorical.isnull(),yticklabels=False,cbar=False,cmap='viridis')
0. Kendu beharrezkoak ez diren zutabeak
df_categorical.drop(labels=["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2"], axis=1, inplace=True)
1. Zutabe honetako balio hutsen kopurua % 50 baino handiagoa al da?
print(df_categorical.isnull().sum() / df_numerical.shape[0] * 100)
df_categorical.drop(labels=["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2"], axis=1, inplace=True) #Π£Π΄Π°Π»ΡΠ΅ΠΌ, Π΅ΡΠ»ΠΈ ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°
#ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅ 50% ΠΏΡΡΡΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
2. Ezabatu balio hutsak dituzten lerroak
df_categorical.dropna(inplace=True)#Π£Π΄Π°Π»ΡΠ΅ΠΌ ΡΡΡΠΎΡΠΊΠΈ Ρ ΠΏΡΡΡΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ,
#Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΌ ΠΎΡΡΠ°Π½Π΅ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π°Π½Π½ΡΡ
Π΄Π»Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ
3.1. Ausazko balio bat txertatzea
import random
df_categorical["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°"].fillna(lambda x: random.choice(df[df[column] != np.nan]["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°"]), inplace=True)
3.2. Balio konstante bat txertatzea
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)
Beraz, azkenean lortu dugu datu kualitatiboen nuluei buruzko helduleku bat. Orain zure datu-basean dauden balioetan kodeketa bero bat egiteko garaia da. Metodo hau sarritan erabiltzen da zure algoritmoak kalitate handiko datuetatik ikas dezakeela ziurtatzeko.
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))
Beraz, azkenik datu kualitatibo eta kuantitatibo bereiziak prozesatzen amaitu dugu; horiek berriro konbinatzeko garaia da
new_df = pd.concat([df_numerical,df_categorical], axis=1)
Datu multzoak batera konbinatu ondoren, azkenik, datuen eraldaketa erabil dezakegu sklearn liburutegiko MinMaxScaler erabiliz. Honek gure balioak 0 eta 1 artekoak izango dira, eta horrek etorkizunean eredua entrenatzen lagunduko du.
from sklearn.preprocessing import MinMaxScaler
min_max_scaler = MinMaxScaler()
new_df = min_max_scaler.fit_transform(new_df)
Datu hauek edozertarako prest daude orain: sare neuronalak, ML algoritmo estandarrak, etab.!
Artikulu honetan, ez dugu kontuan hartu denbora serieko datuekin lan egitea, datu horietarako prozesatzeko teknika apur bat desberdinak erabili behar dituzulako, zure zereginaren arabera. Etorkizunean, gure taldeak aparteko artikulu bat eskainiko dio gai honi, eta zure bizitzara zerbait interesgarria, berria eta erabilgarria ekartzea espero dugu, hau bezalaxe.
Iturria: www.habr.com