Paadi-cheat dì fun ṣiṣe iṣaaju Data ni iyara

Nigbagbogbo awọn eniyan ti nwọle aaye ti Imọ-jinlẹ Data ni o kere ju awọn ireti ojulowo ti ohun ti n duro de wọn. Ọpọlọpọ eniyan ro pe ni bayi wọn yoo kọ awọn nẹtiwọọki nkankikan, ṣẹda oluranlọwọ ohun lati Iron Eniyan, tabi lu gbogbo eniyan ni awọn ọja inawo.
Sugbon sise data Onimọ-jinlẹ jẹ idari data, ati ọkan ninu pataki julọ ati awọn aaye ti n gba akoko ni ṣiṣe data naa ṣaaju ifunni rẹ sinu nẹtiwọọki nkankikan tabi ṣe itupalẹ rẹ ni ọna kan.

Ninu nkan yii, ẹgbẹ wa yoo ṣe apejuwe bi o ṣe le ṣe ilana data ni iyara ati irọrun pẹlu awọn ilana igbesẹ-nipasẹ-igbesẹ ati koodu. A gbiyanju lati jẹ ki koodu naa rọ pupọ ati pe o le ṣee lo fun awọn ipilẹ data oriṣiriṣi.

Ọpọlọpọ awọn alamọdaju le ma ri ohunkohun ti o ṣe pataki ninu nkan yii, ṣugbọn awọn olubere yoo ni anfani lati kọ ẹkọ tuntun, ati pe ẹnikẹni ti o ti nireti lati ṣe iwe ajako lọtọ fun iyara ati ṣiṣe data ti iṣeto le daakọ koodu naa ki o ṣe ọna kika fun ara wọn, tabi ṣe igbasilẹ iwe ajako ti o pari lati Github.

A ti gba data. Kini lati ṣe tókàn?

Nitorinaa, boṣewa: a nilo lati loye ohun ti a nṣe pẹlu, aworan gbogbogbo. Lati ṣe eyi, a lo pandas lati ṣalaye nirọrun awọn oriṣi data oriṣiriṣi.

import pandas as pd #импортируем pandas
import numpy as np  #импортируем numpy
df = pd.read_csv("AB_NYC_2019.csv") #читаем датасет и записываем в переменную df

df.head(3) #смотрим на первые 3 строчки, чтобы понять, как выглядят значения

Paadi-cheat dì fun ṣiṣe iṣaaju Data ni iyara

df.info() #Демонстрируем информацию о колонках

Paadi-cheat dì fun ṣiṣe iṣaaju Data ni iyara

Jẹ ki a wo awọn iye ọwọn:

  1. Ṣe awọn nọmba ti ila ni kọọkan iwe ni ibamu si awọn lapapọ nọmba ti ila?
  2. Kini pataki ti data ninu iwe kọọkan?
  3. Apapọ wo ni a fẹ lati fojusi lati ṣe awọn asọtẹlẹ fun u?

Awọn idahun si awọn ibeere wọnyi yoo gba ọ laaye lati ṣe itupalẹ dataset ati ni aijọju fa ero kan fun awọn iṣe atẹle rẹ.

Paapaa, fun iwo jinlẹ ni awọn iye ninu iwe kọọkan, a le lo iṣẹ pandas apejuwe (). Sibẹsibẹ, aila-nfani ti iṣẹ yii ni pe ko pese alaye nipa awọn ọwọn pẹlu awọn iye okun. A yoo koju wọn nigbamii.

df.describe()

Paadi-cheat dì fun ṣiṣe iṣaaju Data ni iyara

Magic iworan

Jẹ ki a wo ibi ti a ko ni awọn iye rara:

import seaborn as sns
sns.heatmap(df.isnull(),yticklabels=False,cbar=False,cmap='viridis')

Paadi-cheat dì fun ṣiṣe iṣaaju Data ni iyara

Eyi jẹ iwo kukuru lati oke, ni bayi a yoo tẹsiwaju si awọn nkan ti o nifẹ si

Jẹ ki a gbiyanju lati wa ati, ti o ba ṣeeṣe, yọ awọn ọwọn ti o ni iye kan ṣoṣo ni gbogbo awọn ori ila (wọn kii yoo ni ipa lori abajade ni ọna eyikeyi):

df = df[[c for c
        in list(df)
        if len(df[c].unique()) > 1]] #Перезаписываем датасет, оставляя только те колонки, в которых больше одного уникального значения

Ni bayi a daabobo ara wa ati aṣeyọri ti iṣẹ akanṣe wa lati awọn laini ẹda-iwe (awọn ila ti o ni alaye kanna ni ilana kanna bi ọkan ninu awọn laini ti o wa tẹlẹ):

df.drop_duplicates(inplace=True) #Делаем это, если считаем нужным.
                                 #В некоторых проектах удалять такие данные с самого начала не стоит.

A pin dataset si meji: ọkan pẹlu awọn iye agbara, ati ekeji pẹlu awọn iwọn

Nibi a nilo lati ṣe alaye kekere kan: ti awọn ila pẹlu data ti o padanu ni agbara ati data iwọn ko ni ibatan pupọ pẹlu ara wọn, lẹhinna a yoo nilo lati pinnu kini a rubọ - gbogbo awọn laini pẹlu data ti o padanu, apakan nikan ninu wọn, tabi awọn ọwọn kan. Ti awọn ila ba ni ibamu, lẹhinna a ni gbogbo ẹtọ lati pin dataset si meji. Bibẹẹkọ, iwọ yoo ni akọkọ lati koju awọn laini ti ko ṣe atunṣe data ti o padanu ni agbara ati pipo, ati lẹhinna pin dataset si meji.

df_numerical = df.select_dtypes(include = [np.number])
df_categorical = df.select_dtypes(exclude = [np.number])

A ṣe eyi lati jẹ ki o rọrun fun wa lati ṣe ilana awọn iru data oriṣiriṣi meji wọnyi - nigbamii a yoo loye bawo ni irọrun ti eyi jẹ ki igbesi aye wa rọrun.

A ṣiṣẹ pẹlu pipo data

Ohun akọkọ ti o yẹ ki a ṣe ni pinnu boya “awọn ọwọn amí” wa ninu data titobi. A pe awọn ọwọn wọnyi nitori pe wọn ṣafihan ara wọn bi data pipo, ṣugbọn ṣe bi data agbara.

Báwo la ṣe lè dá wọn mọ̀? Nitoribẹẹ, gbogbo rẹ da lori iru data ti o n ṣe itupalẹ, ṣugbọn ni gbogbogbo iru awọn ọwọn le ni data alailẹgbẹ kekere (ni agbegbe ti awọn iye alailẹgbẹ 3-10).

print(df_numerical.nunique())

Ni kete ti a ba ti ṣe idanimọ awọn ọwọn Ami, a yoo gbe wọn lati data pipo si data agbara:

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']) #добавляем третью колонку-шпион в качественные данные

Ni ipari, a ti yapa data pipo patapata lati data agbara ati ni bayi a le ṣiṣẹ pẹlu rẹ daradara. Ohun akọkọ ni lati loye ibiti a ni awọn iye ofo (NaN, ati ni awọn igba miiran 0 yoo gba bi awọn iye ofo).

for i in df_numerical.columns:
    print(i, df[i][df[i]==0].count())

Ni aaye yii, o ṣe pataki lati ni oye ninu eyiti awọn odo awọn ọwọn le tọka si awọn iye ti o padanu: ṣe eyi nitori bii a ṣe gba data naa? Tabi o le jẹ ibatan si awọn iye data? Awọn ibeere wọnyi gbọdọ wa ni idahun lori ipilẹ-ọrọ nipasẹ ọran.

Nitorinaa, ti a ba pinnu pe a le padanu data nibiti awọn odo wa, o yẹ ki a rọpo awọn odo pẹlu NaN lati jẹ ki o rọrun lati ṣiṣẹ pẹlu data ti o sọnu nigbamii:

df_numerical[["колонка 1", "колонка 2"]] = df_numerical[["колонка 1", "колонка 2"]].replace(0, nan)

Bayi jẹ ki a wo ibiti a ti padanu data:

sns.heatmap(df_numerical.isnull(),yticklabels=False,cbar=False,cmap='viridis') # Можно также воспользоваться df_numerical.info()

Paadi-cheat dì fun ṣiṣe iṣaaju Data ni iyara

Nibi awọn iye wọnyẹn inu awọn ọwọn ti o nsọnu yẹ ki o samisi ni ofeefee. Ati nisisiyi igbadun naa bẹrẹ - bawo ni lati ṣe pẹlu awọn iye wọnyi? Ṣe Mo le paarẹ awọn ori ila pẹlu awọn iye wọnyi tabi awọn ọwọn? Tabi fọwọsi awọn iye ofo wọnyi pẹlu awọn miiran?

Eyi ni aworan atọka isunmọ ti o le ṣe iranlọwọ fun ọ lati pinnu kini o le, ni ipilẹ, ṣee ṣe pẹlu awọn iye ofo:

Paadi-cheat dì fun ṣiṣe iṣaaju Data ni iyara

0. Yọ kobojumu ọwọn

df_numerical.drop(labels=["колонка1","колонка2"], axis=1, inplace=True)

1. Njẹ nọmba awọn iye ṣofo ninu iwe yii tobi ju 50% lọ?

print(df_numerical.isnull().sum() / df_numerical.shape[0] * 100)

df_numerical.drop(labels=["колонка1","колонка2"], axis=1, inplace=True)#Удаляем, если какая-то колонка имеет больше 50 пустых значений

2. Pa awọn ila pẹlu awọn iye ṣofo

df_numerical.dropna(inplace=True)#Удаляем строчки с пустыми значениями, если потом останется достаточно данных для обучения

3.1. Fi sii a ID iye

import random #импортируем random
df_numerical["колонка"].fillna(lambda x: random.choice(df[df[column] != np.nan]["колонка"]), inplace=True) #вставляем рандомные значения в пустые клетки таблицы

3.2. Fi sii iye igbagbogbo

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. Fi aropin tabi iye loorekoore sii

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. Fi iye ti a ṣe iṣiro nipasẹ awoṣe miiran

Nigba miiran awọn iye le ṣe iṣiro ni lilo awọn awoṣe ipadasẹhin ni lilo awọn awoṣe lati ile-ikawe sklearn tabi awọn ile ikawe miiran ti o jọra. Ẹgbẹ wa yoo yasọtọ nkan lọtọ lori bii eyi ṣe le ṣee ṣe ni ọjọ iwaju nitosi.

Nitorinaa, ni bayi, alaye nipa data pipo yoo ni idilọwọ, nitori ọpọlọpọ awọn nuances miiran wa nipa bii o ṣe le ṣe igbaradi data dara julọ ati iṣaju fun awọn iṣẹ ṣiṣe ti o yatọ, ati awọn nkan ipilẹ fun data pipo ni a ti gba sinu akọọlẹ ninu nkan yii, ati bayi ni akoko lati pada si data agbara eyiti a yapa awọn igbesẹ pupọ pada lati awọn iwọn. O le yi iwe ajako yii pada bi o ṣe wù, ni ibamu si awọn iṣẹ ṣiṣe ti o yatọ, ki iṣaju data ṣiṣe ni iyara pupọ!

data ti o ni agbara

Ni ipilẹ, fun data agbara, ọna fifi koodu-gbona kan ni a lo lati le ṣe ọna kika rẹ lati okun (tabi ohun kan) si nọmba kan. Ṣaaju ki o to lọ si aaye yii, jẹ ki a lo aworan atọka ati koodu loke lati koju awọn iye ofo.

df_categorical.nunique()

sns.heatmap(df_categorical.isnull(),yticklabels=False,cbar=False,cmap='viridis')

Paadi-cheat dì fun ṣiṣe iṣaaju Data ni iyara

0. Yọ kobojumu ọwọn

df_categorical.drop(labels=["колонка1","колонка2"], axis=1, inplace=True)

1. Njẹ nọmba awọn iye ṣofo ninu iwe yii tobi ju 50% lọ?

print(df_categorical.isnull().sum() / df_numerical.shape[0] * 100)

df_categorical.drop(labels=["колонка1","колонка2"], axis=1, inplace=True) #Удаляем, если какая-то колонка 
                                                                          #имеет больше 50% пустых значений

2. Pa awọn ila pẹlu awọn iye ṣofo

df_categorical.dropna(inplace=True)#Удаляем строчки с пустыми значениями, 
                                   #если потом останется достаточно данных для обучения

3.1. Fi sii a ID iye

import random
df_categorical["колонка"].fillna(lambda x: random.choice(df[df[column] != np.nan]["колонка"]), inplace=True)

3.2. Fi sii iye igbagbogbo

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)

Nitorinaa, a ti ni imudani nikẹhin lori awọn asan ni data agbara. Bayi o to akoko lati ṣe fifi koodu-gbona kan lori awọn iye ti o wa ninu data data rẹ. Ọna yii ni igbagbogbo lo lati rii daju pe algorithm rẹ le kọ ẹkọ lati data didara-giga.

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))

Nitorinaa, a ti pari nikẹhin sisẹ agbara ọtọtọ ati data pipo - akoko lati darapọ wọn pada

new_df = pd.concat([df_numerical,df_categorical], axis=1)

Lẹhin ti a ti ṣajọpọ awọn akopọ data papọ si ọkan, a le nipari lo iyipada data nipa lilo MinMaxScaler lati ile-ikawe sklearn. Eyi yoo jẹ ki awọn iye wa laarin 0 ati 1, eyiti yoo ṣe iranlọwọ nigbati ikẹkọ awoṣe ni ọjọ iwaju.

from sklearn.preprocessing import MinMaxScaler
min_max_scaler = MinMaxScaler()
new_df = min_max_scaler.fit_transform(new_df)

Data yii ti ṣetan fun ohunkohun - awọn nẹtiwọọki nkankikan, awọn algoridimu ML boṣewa, ati bẹbẹ lọ!

Ninu nkan yii, a ko ṣe akiyesi ṣiṣẹ pẹlu data jara akoko, nitori iru data bẹẹ o yẹ ki o lo awọn ilana iṣelọpọ oriṣiriṣi oriṣiriṣi, da lori iṣẹ-ṣiṣe rẹ. Ni ọjọ iwaju, ẹgbẹ wa yoo ya nkan lọtọ si akọle yii, ati pe a nireti pe yoo ni anfani lati mu nkan ti o nifẹ si, tuntun ati iwulo sinu igbesi aye rẹ, bii eyi.

orisun: www.habr.com

Fi ọrọìwòye kun