Notepad-cheat sheet no ka hoʻoponopono ʻikepili wikiwiki

ʻO ka manawa pinepine ka poʻe e komo ana i ke kahua o ka ʻEpekema ʻIkepili he mea liʻiliʻi ma mua o nā manaʻo maoli o ka mea e kali nei iā lākou. Manaʻo ka poʻe he nui i kēia manawa e kākau lākou i nā pūnaewele neural maikaʻi, hana i kahi mea kōkua leo mai Iron Man, a i ʻole e hahau i nā mea āpau ma nā mākeke kālā.
Akā, hana 'Ikepili Hoʻohana ʻia ka ʻepekema i ka ʻikepili, a ʻo kekahi o nā mea koʻikoʻi a hoʻopau manawa ke hoʻoponopono i ka ʻikepili ma mua o ka hānai ʻana iā ia i loko o kahi neural network a i ʻole ka nānā ʻana iā ia ma kekahi ala.

Ma kēia ʻatikala, e wehewehe kā mākou hui pehea e hiki ai iā ʻoe ke hana i ka ʻikepili me ka maʻalahi me nā ʻōlelo aʻoaʻo a me nā code. Ua hoʻāʻo mākou e hana maʻalahi i ke code a hiki ke hoʻohana ʻia no nā ʻikepili ʻokoʻa.

ʻAʻole hiki i nā poʻe loea ke ʻike i kekahi mea kupaianaha ma kēia ʻatikala, akā hiki i ka poʻe hoʻomaka ke aʻo i kahi mea hou, a ʻo kēlā me kēia mea i moeʻuhane lōʻihi e hana i kahi puke kaʻawale no ka hoʻoili ʻikepili wikiwiki a hoʻonohonoho ʻia hiki ke kope i ke code a hōʻano hou iā lākou iho, a i ʻole. hoʻoiho i ka puke i hoʻopau ʻia mai Github.

Ua loaʻa iā mākou ka ʻikepili. He aha ka hana aʻe?

No laila, ke kūlana: pono mākou e hoʻomaopopo i ka mea a mākou e hana nei, ke kiʻi holoʻokoʻa. No ka hana ʻana i kēia, hoʻohana mākou i nā pandas e wehewehe i nā ʻano ʻikepili like ʻole.

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

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

Notepad-cheat sheet no ka hoʻoponopono ʻikepili wikiwiki

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

Notepad-cheat sheet no ka hoʻoponopono ʻikepili wikiwiki

E nānā kākou i nā waiwai kolamu:

  1. Ua like anei ka heluna o na laina o kela kolamu me ka huina o na laina?
  2. He aha ke ʻano o ka ʻikepili i kēlā me kēia kolamu?
  3. ʻO ke kolamu hea mākou e makemake ai e hoʻopaʻa i ka wānana no ia?

ʻO nā pane i kēia mau nīnau e ʻae iā ʻoe e nānā i ka ʻikepili a huki i kahi hoʻolālā no kāu mau hana e hiki mai ana.

Eia kekahi, no ka nānā hohonu ʻana i nā waiwai i kēlā me kēia kolamu, hiki iā mākou ke hoʻohana i ka hana pandas describe(). Eia naʻe, ʻo ka hemahema o kēia hana ʻaʻole ia e hāʻawi i ka ʻike e pili ana i nā kolamu me nā koina string. E hana mākou iā lākou ma hope.

df.describe()

Notepad-cheat sheet no ka hoʻoponopono ʻikepili wikiwiki

Kiʻi kilokilo

E nānā kākou i kahi o kā mākou waiwai ʻole:

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

Notepad-cheat sheet no ka hoʻoponopono ʻikepili wikiwiki

He nānā pōkole kēia mai luna mai, i kēia manawa e neʻe mākou i nā mea hoihoi

E ho'āʻo kākou e ʻimi a, inā hiki, e wehe i nā kolamu hoʻokahi wale nō waiwai ma nā lālani a pau (ʻaʻole lākou e hoʻopilikia i ka hopena ma kekahi ʻano):

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

I kēia manawa, pale mākou iā mākou iho a me ka holomua o kā mākou papahana mai nā laina ʻelua (nā laina i loaʻa ka ʻike like ma ke ʻano like me kekahi o nā laina e kū nei):

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

Māhele mākou i ka ʻikepili i ʻelua: hoʻokahi me nā waiwai qualitative, a ʻo kekahi me nā helu quantitative

Maanei, pono mākou e wehewehe iki: inā ʻaʻole pili pono nā laina me ka ʻikepili i nalowale i ka qualitative a me quantitative data, a laila pono mākou e hoʻoholo i ka mea a mākou e kaumaha ai - nā laina āpau me ka ʻikepili nalo, ʻo kahi hapa wale nō. a i ʻole kekahi mau kolamu. Inā pili nā laina, aia iā mākou nā kuleana āpau e puʻunaue i ka ʻikepili i ʻelua. A i ʻole, pono ʻoe e hana mua i nā laina i hoʻopili ʻole i ka ʻikepili i nalowale i ka qualitative a me quantitative, a laila e puʻunaue i ka dataset i ʻelua.

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

Hana mākou i kēia i mea e maʻalahi ai ka hoʻoponopono ʻana i kēia mau ʻano ʻikepili ʻelua - ma hope e hoʻomaopopo mākou i ka maʻalahi o kēia hana i ko mākou ola.

Hana mākou me ka ʻikepili quantitative

ʻO ka mea mua a mākou e hana ai, ʻo ia ka hoʻoholo inā he "koluma kiu" i ka ʻikepili helu. Kapa mākou i kēia mau kolamu no ka mea ke hōʻike nei lākou iā lākou iho he ʻikepili quantitative, akā hana ma ke ʻano he ʻikepili qualitative.

Pehea mākou e ʻike ai iā lākou? ʻOiaʻiʻo, pili ia i ke ʻano o ka ʻikepili āu e ʻimi nei, akā ma ka laulā he liʻiliʻi liʻiliʻi nā kolamu (ma kahi o 3-10 mau waiwai kūʻokoʻa).

print(df_numerical.nunique())

Ke ʻike mākou i nā kolamu kiu, e hoʻoneʻe mākou iā lākou mai ka ʻikepili quantitative i ka ʻikepili qualitative:

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

ʻO ka hope, ua hoʻokaʻawale loa mākou i ka ʻikepili quantitative mai ka ʻikepili qualitative a i kēia manawa hiki iā mākou ke hana pū me ia. ʻO ka mea mua, ʻo ia ka hoʻomaopopo ʻana i kahi i loaʻa iā mākou nā waiwai ʻole (NaN, a i kekahi mau hihia e ʻae ʻia ʻo 0 i nā waiwai ʻole).

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

I kēia manawa, he mea nui e hoʻomaopopo i kahi e hōʻike ai nā kolamu zero i nā waiwai i nalowale: no ke ʻano o ka ʻohi ʻia ʻana o ka ʻikepili? A i ʻole pili paha i nā waiwai ʻikepili? Pono e pane ʻia kēia mau nīnau i kēlā me kēia hihia.

No laila, inā hoʻoholo mākou e nalowale ana ka ʻikepili i loaʻa nā zeros, pono mākou e hoʻololi i nā zeros me NaN i mea e maʻalahi ai ka hana me kēia ʻikepili nalowale ma hope.

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

I kēia manawa, e ʻike kākou i kahi e nele ai ka ʻikepili:

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

Notepad-cheat sheet no ka hoʻoponopono ʻikepili wikiwiki

Eia kēlā mau waiwai i loko o nā kolamu e nalowale ana e kaha ʻia i ka melemele. A i kēia manawa hoʻomaka ka leʻaleʻa - pehea e hana ai i kēia mau waiwai? Pono wau e holoi i nā lālani me kēia mau waiwai a i ʻole kolamu? A i ʻole e hoʻopiha i kēia mau waiwai ʻole me nā mea ʻē aʻe?

Eia ke kiʻikuhi pili e hiki ke kōkua iā ʻoe e hoʻoholo i ka mea hiki ke hana ʻia me nā waiwai ʻole:

Notepad-cheat sheet no ka hoʻoponopono ʻikepili wikiwiki

0. Wehe i nā kolamu pono ʻole

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

1. Ua ʻoi aku ka nui o nā waiwai hakahaka ma kēia kolamu ma mua o 50%?

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

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

2. Holoi i nā laina me nā waiwai ʻole

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

3.1. Ke hoʻokomo ʻana i kahi waiwai maʻamau

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

3.2. Ke hoʻokomo nei i kahi waiwai mau

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. E hoʻokomo i ka waiwai awelika a i ʻole ka nui pinepine

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. E hoʻokomo i ka waiwai i helu ʻia e kekahi kumu hoʻohālike

I kekahi manawa hiki ke helu ʻia nā waiwai me ka hoʻohana ʻana i nā hiʻohiʻona regression me ka hoʻohana ʻana i nā hiʻohiʻona mai ka hale waihona puke sklearn a i ʻole nā ​​hale waihona puke like ʻole. E hāʻawi kā mākou hui i kahi ʻatikala ʻokoʻa e pili ana i ka hana ʻana i kēia wā e hiki mai ana.

No laila, i kēia manawa, e hoʻopau ʻia ka moʻolelo e pili ana i ka ʻikepili quantitative, no ka mea he nui nā nuances e pili ana i ka hana maikaʻi ʻana i ka hoʻomākaukau ʻana i ka ʻikepili a me ka preprocessing no nā hana like ʻole, a ua lawe ʻia nā mea kumu no ka ʻikepili quantitative i loko o kēia ʻatikala. ʻo ka manawa kēia e hoʻi ai i ka ʻikepili qualitative. Hiki iā ʻoe ke hoʻololi i kēia puke e like me kou makemake, me ka hoʻololi ʻana iā ia i nā hana like ʻole, no laila e holo wikiwiki ka preprocessing data!

ʻIkepili kūpono

ʻO ke kumu, no ka ʻikepili qualitative, hoʻohana ʻia ke ʻano Hoʻokahi-hot-encoding i mea e hoʻohālikelike ai mai kahi kaula (a i ʻole mea) i kahi helu. Ma mua o ka neʻe ʻana i kēia wahi, e hoʻohana kākou i ke kiʻikuhi a me ke code ma luna nei e hoʻoponopono i nā waiwai ʻole.

df_categorical.nunique()

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

Notepad-cheat sheet no ka hoʻoponopono ʻikepili wikiwiki

0. Wehe i nā kolamu pono ʻole

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

1. Ua ʻoi aku ka nui o nā waiwai hakahaka ma kēia kolamu ma mua o 50%?

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

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

2. Holoi i nā laina me nā waiwai ʻole

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

3.1. Ke hoʻokomo ʻana i kahi waiwai maʻamau

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

3.2. Ke hoʻokomo nei i kahi waiwai mau

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)

No laila, ua loaʻa iā mākou kahi paʻa i nā nulls i ka ʻikepili qualitative. ʻO ka manawa kēia e hana i ka hoʻopāpā wela hoʻokahi i nā waiwai i loko o kāu waihona. Hoʻohana pinepine ʻia kēia ʻano hana e hōʻoia e hiki i kāu algorithm ke aʻo mai ka ʻikepili kiʻekiʻe.

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

No laila, ua hoʻopau mākou i ka hana ʻana i ka ʻikepili qualitative a me quantitative kaʻawale - ka manawa e hoʻohui ai iā lākou

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

Ma hope o ka hoʻohui ʻana i nā ʻikepili i hoʻokahi, hiki iā mākou ke hoʻohana i ka hoʻololi ʻikepili me ka hoʻohana ʻana iā MinMaxScaler mai ka waihona sklearn. E hana kēia i kā mākou waiwai ma waena o 0 a me 1, e kōkua i ka wā e aʻo ai i ke kumu hoʻohālike i ka wā e hiki mai ana.

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

Ua mākaukau kēia ʻikepili no nā mea āpau - neural networks, standard ML algorithms, etc.!

Ma kēia ʻatikala, ʻaʻole mākou i noʻonoʻo i ka hana ʻana me ka ʻikepili manawa, no ka mea, no ia ʻikepili pono ʻoe e hoʻohana i nā ʻenehana hana ʻokoʻa, e pili ana i kāu hana. I ka wā e hiki mai ana, e hāʻawi kā mākou hui i kahi ʻatikala ʻokoʻa i kēia kumuhana, a ke manaʻo nei mākou e hiki ke lawe mai i kahi mea hoihoi, hou a pono i kou ola, e like me kēia.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka