Kadalasan ang mga taong pumapasok sa larangan ng Data Science ay may mas mababa sa makatotohanang mga inaasahan sa kung ano ang naghihintay sa kanila. Maraming tao ang nag-iisip na ngayon ay magsusulat sila ng mga cool na neural network, gagawa ng voice assistant mula sa Iron Man, o matatalo ang lahat sa mga financial market.
ΠΠΎ ΡΠ°Π±ΠΎΡΠ° data Ang scientist ay batay sa data, at isa sa pinakamahalaga at nakakaubos ng oras na aspeto ay ang pagproseso ng data bago ito i-feed sa isang neural network o pag-aralan ito sa isang tiyak na paraan.
Sa artikulong ito, ilalarawan ng aming team kung paano mo mapoproseso ang data nang mabilis at madali gamit ang mga sunud-sunod na tagubilin at code. Sinubukan naming gawing flexible ang code at maaaring magamit para sa iba't ibang dataset.
Maraming mga propesyonal ang maaaring walang mahanap na kakaiba sa artikulong ito, ngunit ang mga baguhan ay makakapag-aral ng bago, at sinumang matagal nang nangangarap na gumawa ng hiwalay na kuwaderno para sa mabilis at nakabalangkas na pagproseso ng data ay maaaring kopyahin ang code at i-format ito para sa kanilang sarili, o
Natanggap namin ang dataset. Ano ang susunod na gagawin?
Kaya, ang pamantayan: kailangan nating maunawaan kung ano ang ating kinakaharap, ang pangkalahatang larawan. Upang gawin ito, gumagamit kami ng mga panda upang tukuyin lamang ang iba't ibang uri ng data.
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() #ΠΠ΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°Ρ
Tingnan natin ang mga halaga ng column:
- Ang bilang ba ng mga linya sa bawat hanay ay tumutugma sa kabuuang bilang ng mga linya?
- Ano ang kakanyahan ng datos sa bawat hanay?
- Aling column ang gusto naming i-target upang makagawa ng mga hula para dito?
Ang mga sagot sa mga tanong na ito ay magbibigay-daan sa iyong pag-aralan ang dataset at halos gumuhit ng plano para sa iyong mga susunod na aksyon.
Gayundin, para sa isang mas malalim na pagtingin sa mga halaga sa bawat hanay, maaari naming gamitin ang pandas describe() function. Gayunpaman, ang kawalan ng function na ito ay hindi ito nagbibigay ng impormasyon tungkol sa mga column na may mga string value. Haharapin natin sila mamaya.
df.describe()
Magic visualization
Tingnan natin kung saan wala tayong mga halaga:
import seaborn as sns
sns.heatmap(df.isnull(),yticklabels=False,cbar=False,cmap='viridis')
Ito ay isang maikling hitsura mula sa itaas, ngayon ay lilipat tayo sa mas kawili-wiling mga bagay
Subukan nating hanapin at, kung maaari, alisin ang mga column na may isang value lang sa lahat ng row (hindi sila makakaapekto sa resulta sa anumang paraan):
df = df[[c for c
in list(df)
if len(df[c].unique()) > 1]] #ΠΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π΄Π°ΡΠ°ΡΠ΅Ρ, ΠΎΡΡΠ°Π²Π»ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ
Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
Ngayon, pinoprotektahan namin ang aming sarili at ang tagumpay ng aming proyekto mula sa mga duplicate na linya (mga linya na naglalaman ng parehong impormasyon sa parehong pagkakasunud-sunod ng isa sa mga umiiral na linya):
df.drop_duplicates(inplace=True) #ΠΠ΅Π»Π°Π΅ΠΌ ΡΡΠΎ, Π΅ΡΠ»ΠΈ ΡΡΠΈΡΠ°Π΅ΠΌ Π½ΡΠΆΠ½ΡΠΌ.
#Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
ΡΠ΄Π°Π»ΡΡΡ ΡΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ°Π»Π° Π½Π΅ ΡΡΠΎΠΈΡ.
Hinahati namin ang dataset sa dalawa: ang isa ay may mga qualitative na value, at ang isa ay may quantitative na mga value
Narito kailangan nating gumawa ng isang maliit na paglilinaw: kung ang mga linya na may nawawalang data sa qualitative at quantitative na data ay hindi masyadong nakakaugnay sa isa't isa, kakailanganin nating magpasya kung ano ang ating isinasakripisyo - lahat ng mga linya na may nawawalang data, bahagi lamang ng mga ito, o ilang mga hanay. Kung magkakaugnay ang mga linya, may karapatan kaming hatiin ang dataset sa dalawa. Kung hindi, kakailanganin mo munang harapin ang mga linyang hindi nag-uugnay sa nawawalang data sa qualitative at quantitative, at pagkatapos ay hatiin ang dataset sa dalawa.
df_numerical = df.select_dtypes(include = [np.number])
df_categorical = df.select_dtypes(exclude = [np.number])
Ginagawa namin ito upang gawing mas madali para sa amin na iproseso ang dalawang magkaibang uri ng data na ito - mauunawaan namin sa ibang pagkakataon kung gaano nito pinapadali ang aming buhay.
Nagtatrabaho kami sa dami ng data
Ang unang bagay na dapat nating gawin ay tukuyin kung mayroong "mga haligi ng espiya" sa dami ng data. Tinatawag namin ang mga column na ito dahil ipinapakita nila ang kanilang mga sarili bilang quantitative data, ngunit gumaganap bilang qualitative data.
Paano natin sila makikilala? Siyempre, ang lahat ay nakasalalay sa likas na katangian ng data na iyong sinusuri, ngunit sa pangkalahatan, ang mga naturang column ay maaaring may maliit na natatanging data (sa rehiyon ng 3-10 natatanging mga halaga).
print(df_numerical.nunique())
Kapag natukoy na namin ang mga column ng spy, ililipat namin ang mga ito mula sa quantitative data patungo sa qualitative data:
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']) #Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΡΠ΅ΡΡΡ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡ-ΡΠΏΠΈΠΎΠ½ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅
Sa wakas, ganap na naming pinaghiwalay ang quantitative data mula sa qualitative data at ngayon ay magagawa na namin ito ng maayos. Ang unang bagay ay upang maunawaan kung saan mayroon kaming mga walang laman na halaga (NaN, at sa ilang mga kaso 0 ay tatanggapin bilang walang laman na mga halaga).
for i in df_numerical.columns:
print(i, df[i][df[i]==0].count())
Sa puntong ito, mahalagang maunawaan kung sa aling mga column ang mga zero ay maaaring magpahiwatig ng mga nawawalang halaga: ito ba ay dahil sa kung paano nakolekta ang data? O maaaring nauugnay ito sa mga halaga ng data? Ang mga tanong na ito ay dapat masagot sa isang case-by-case na batayan.
Kaya, kung magpapasya pa rin kami na maaaring wala kaming data kung saan mayroong mga zero, dapat naming palitan ang mga zero ng NaN upang gawing mas madaling gamitin ang nawawalang data na ito sa ibang pagkakataon:
df_numerical[["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° 1", "ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° 2"]] = df_numerical[["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° 1", "ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° 2"]].replace(0, nan)
Ngayon tingnan natin kung saan tayo nawawalang data:
sns.heatmap(df_numerical.isnull(),yticklabels=False,cbar=False,cmap='viridis') # ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ df_numerical.info()
Dito ang mga halaga sa loob ng mga column na nawawala ay dapat markahan ng dilaw. At ngayon ang saya ay nagsisimula - kung paano haharapin ang mga halagang ito? Dapat ko bang tanggalin ang mga hilera na may mga halaga o column na ito? O punan ang mga walang laman na halaga na ito ng ilang iba pa?
Narito ang isang tinatayang diagram na makakatulong sa iyong magpasya kung ano ang maaari, sa prinsipyo, gawin sa mga walang laman na halaga:
0. Alisin ang mga hindi kinakailangang column
df_numerical.drop(labels=["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2"], axis=1, inplace=True)
1. Ang bilang ba ng mga walang laman na halaga sa column na ito ay higit sa 50%?
print(df_numerical.isnull().sum() / df_numerical.shape[0] * 100)
df_numerical.drop(labels=["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2"], axis=1, inplace=True)#Π£Π΄Π°Π»ΡΠ΅ΠΌ, Π΅ΡΠ»ΠΈ ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅ 50 ΠΏΡΡΡΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
2. Tanggalin ang mga linyang may mga walang laman na halaga
df_numerical.dropna(inplace=True)#Π£Π΄Π°Π»ΡΠ΅ΠΌ ΡΡΡΠΎΡΠΊΠΈ Ρ ΠΏΡΡΡΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΌ ΠΎΡΡΠ°Π½Π΅ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π°Π½Π½ΡΡ
Π΄Π»Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ
3.1. Paglalagay ng random na halaga
import random #ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ random
df_numerical["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°"].fillna(lambda x: random.choice(df[df[column] != np.nan]["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°"]), inplace=True) #Π²ΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΠ°Π½Π΄ΠΎΠΌΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΏΡΡΡΡΠ΅ ΠΊΠ»Π΅ΡΠΊΠΈ ΡΠ°Π±Π»ΠΈΡΡ
3.2. Pagpasok ng pare-parehong halaga
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. Ipasok ang average o pinakamadalas na halaga
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. Ipasok ang halaga na kinakalkula ng isa pang modelo
Minsan ang mga halaga ay maaaring kalkulahin gamit ang mga modelo ng regression gamit ang mga modelo mula sa sklearn library o iba pang katulad na mga library. Ang aming koponan ay maglalaan ng isang hiwalay na artikulo kung paano ito magagawa sa malapit na hinaharap.
Kaya, sa ngayon, ang salaysay tungkol sa dami ng data ay maaantala, dahil maraming iba pang mga nuances tungkol sa kung paano mas mahusay na gawin ang paghahanda ng data at preprocessing para sa iba't ibang mga gawain, at ang mga pangunahing bagay para sa dami ng data ay isinasaalang-alang sa artikulong ito, at ngayon na ang panahon para bumalik sa qualitative data. na pinaghiwalay namin ng ilang hakbang pabalik mula sa quantitative. Maaari mong baguhin ang notebook na ito ayon sa gusto mo, iangkop ito sa iba't ibang gawain, upang ang paunang pagproseso ng data ay mabilis na mapupunta!
Bilang ng data
Karaniwan, para sa qualitative data, ang One-hot-encoding na paraan ay ginagamit upang i-format ito mula sa isang string (o bagay) patungo sa isang numero. Bago magpatuloy sa puntong ito, gamitin natin ang diagram at code sa itaas upang harapin ang mga walang laman na halaga.
df_categorical.nunique()
sns.heatmap(df_categorical.isnull(),yticklabels=False,cbar=False,cmap='viridis')
0. Alisin ang mga hindi kinakailangang column
df_categorical.drop(labels=["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2"], axis=1, inplace=True)
1. Ang bilang ba ng mga walang laman na halaga sa column na ito ay higit sa 50%?
print(df_categorical.isnull().sum() / df_numerical.shape[0] * 100)
df_categorical.drop(labels=["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2"], axis=1, inplace=True) #Π£Π΄Π°Π»ΡΠ΅ΠΌ, Π΅ΡΠ»ΠΈ ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°
#ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅ 50% ΠΏΡΡΡΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
2. Tanggalin ang mga linyang may mga walang laman na halaga
df_categorical.dropna(inplace=True)#Π£Π΄Π°Π»ΡΠ΅ΠΌ ΡΡΡΠΎΡΠΊΠΈ Ρ ΠΏΡΡΡΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ,
#Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΌ ΠΎΡΡΠ°Π½Π΅ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π°Π½Π½ΡΡ
Π΄Π»Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ
3.1. Paglalagay ng random na halaga
import random
df_categorical["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°"].fillna(lambda x: random.choice(df[df[column] != np.nan]["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°"]), inplace=True)
3.2. Pagpasok ng pare-parehong halaga
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)
Kaya, sa wakas ay mayroon na kaming hawakan sa mga nulls sa qualitative data. Ngayon ay oras na para magsagawa ng one-hot-encoding sa mga value na nasa iyong database. Ang paraang ito ay madalas na ginagamit upang matiyak na ang iyong algorithm ay maaaring matuto mula sa mataas na kalidad na data.
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))
Kaya, sa wakas natapos na namin ang pagproseso ng hiwalay na husay at dami ng data - oras na upang pagsamahin ang mga ito pabalik
new_df = pd.concat([df_numerical,df_categorical], axis=1)
Pagkatapos nating pagsamahin ang mga dataset sa isa, maaari na nating gamitin ang pagbabago ng data gamit ang MinMaxScaler mula sa sklearn library. Gagawin nito ang aming mga halaga sa pagitan ng 0 at 1, na makakatulong kapag sinasanay ang modelo sa hinaharap.
from sklearn.preprocessing import MinMaxScaler
min_max_scaler = MinMaxScaler()
new_df = min_max_scaler.fit_transform(new_df)
Ang data na ito ay handa na ngayon para sa anumang bagay - neural network, karaniwang ML algorithm, atbp.!
Sa artikulong ito, hindi namin isinasaalang-alang ang pagtatrabaho sa data ng serye ng oras, dahil para sa naturang data dapat kang gumamit ng bahagyang magkakaibang mga diskarte sa pagproseso, depende sa iyong gawain. Sa hinaharap, ang aming koponan ay maglalaan ng isang hiwalay na artikulo sa paksang ito, at inaasahan namin na ito ay makapagdala ng isang bagay na kawili-wili, bago at kapaki-pakinabang sa iyong buhay, tulad ng isang ito.
Pinagmulan: www.habr.com