Ma'lumotlarni tez qayta ishlash uchun bloknot-cheat varaq

Ko'pincha Data Science sohasiga kiruvchi odamlar ularni nima kutayotganiga nisbatan real umidlarga ega emaslar. Ko'pchilik endi ular ajoyib neyron tarmoqlarni yozadilar, Iron Man-dan ovozli yordamchini yaratadilar yoki moliyaviy bozorlarda hammani mag'lub etadilar deb o'ylashadi.
Lekin ish ma'lumotlar Olim ma'lumotlarga asoslangan va eng muhim va ko'p vaqt talab qiladigan jihatlardan biri ma'lumotlarni neyron tarmoqqa yuborishdan yoki ma'lum bir usulda tahlil qilishdan oldin qayta ishlashdir.

Ushbu maqolada bizning jamoamiz bosqichma-bosqich ko'rsatmalar va kod yordamida ma'lumotlarni qanday tez va oson qayta ishlashingiz mumkinligini tasvirlab beradi. Biz kodni juda moslashuvchan qilishga harakat qildik va uni turli ma'lumotlar to'plamlari uchun ishlatish mumkin edi.

Ko'pgina mutaxassislar ushbu maqolada g'ayrioddiy narsani topa olmasligi mumkin, ammo yangi boshlanuvchilar yangi narsalarni o'rganishlari mumkin va uzoq vaqtdan beri tez va tuzilgan ma'lumotlarni qayta ishlash uchun alohida daftar qilishni orzu qilgan har bir kishi kodni nusxalashi va uni o'zi uchun formatlashi mumkin yoki Github-dan tayyor daftarni yuklab oling.

Biz ma'lumotlar to'plamini oldik. Keyin nima qilish kerak?

Shunday qilib, standart: biz nima bilan shug'ullanayotganimizni, umumiy rasmni tushunishimiz kerak. Buning uchun biz turli xil ma'lumotlar turlarini aniqlash uchun pandalardan foydalanamiz.

import pandas as pd #ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ pandas
import numpy as np  #ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ numpy
df = pd.read_csv("AB_NYC_2019.csv") #Ρ‡ΠΈΡ‚Π°Π΅ΠΌ датасСт ΠΈ записываСм Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ df

df.head(3) #смотрим Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 3 строчки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ выглядят значСния

Ma'lumotlarni tez qayta ishlash uchun bloknot-cheat varaq

df.info() #ДСмонстрируСм ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°Ρ…

Ma'lumotlarni tez qayta ishlash uchun bloknot-cheat varaq

Keling, ustun qiymatlarini ko'rib chiqaylik:

  1. Har bir ustundagi satrlar soni satrlarning umumiy soniga mos keladimi?
  2. Har bir ustundagi ma'lumotlarning mohiyati nimada?
  3. Buni bashorat qilish uchun qaysi ustunni nishonlashni xohlaymiz?

Ushbu savollarga javoblar sizga ma'lumotlar to'plamini tahlil qilish va keyingi harakatlaringiz uchun taxminiy rejani tuzish imkonini beradi.

Bundan tashqari, har bir ustundagi qiymatlarni chuqurroq ko'rib chiqish uchun biz pandas describe() funktsiyasidan foydalanishimiz mumkin. Biroq, bu funksiyaning kamchiligi shundaki, u satr qiymatlari bo'lgan ustunlar haqida ma'lumot bermaydi. Biz ular bilan keyinroq shug'ullanamiz.

df.describe()

Ma'lumotlarni tez qayta ishlash uchun bloknot-cheat varaq

Sehrli vizualizatsiya

Keling, bizda umuman qadriyatlar yo'qligini ko'rib chiqaylik:

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

Ma'lumotlarni tez qayta ishlash uchun bloknot-cheat varaq

Bu yuqoridan qisqacha ko'rinish edi, endi biz qiziqarliroq narsalarga o'tamiz

Keling, barcha satrlarda faqat bitta qiymatga ega bo'lgan ustunlarni topishga va iloji bo'lsa, o'chirishga harakat qilaylik (ular natijaga hech qanday ta'sir qilmaydi):

df = df[[c for c
        in list(df)
        if len(df[c].unique()) > 1]] #ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°Π΅ΠΌ датасСт, оставляя Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… большС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния

Endi biz o'zimizni va loyihamizning muvaffaqiyatini takroriy satrlardan himoya qilamiz (mavjud qatorlardan biri bilan bir xil tartibda bir xil ma'lumotlarni o'z ichiga olgan qatorlar):

df.drop_duplicates(inplace=True) #Π”Π΅Π»Π°Π΅ΠΌ это, Ссли считаСм Π½ΡƒΠΆΠ½Ρ‹ΠΌ.
                                 #Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ с самого Π½Π°Ρ‡Π°Π»Π° Π½Π΅ стоит.

Biz ma'lumotlar to'plamini ikkiga ajratamiz: biri sifat qiymatlari bilan, ikkinchisi esa miqdoriy

Bu erda biz kichik bir aniqlik kiritishimiz kerak: agar sifat va miqdoriy ma'lumotlarda etishmayotgan ma'lumotlarga ega bo'lgan chiziqlar bir-biri bilan unchalik bog'liq bo'lmasa, biz nima qurbon qilishimizni hal qilishimiz kerak - etishmayotgan ma'lumotlarga ega barcha chiziqlar, ularning faqat bir qismi, yoki ma'lum ustunlar. Agar chiziqlar o'zaro bog'liq bo'lsa, biz ma'lumotlar to'plamini ikkiga bo'lish huquqiga egamiz. Aks holda, siz birinchi navbatda etishmayotgan ma'lumotlarni sifat va miqdoriy jihatdan bog'lamaydigan chiziqlar bilan shug'ullanishingiz kerak bo'ladi va shundan keyingina ma'lumotlar to'plamini ikkiga bo'ling.

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

Biz buni ushbu ikki xil turdagi ma'lumotlarni qayta ishlashni osonlashtirish uchun qilamiz - keyinchalik bu bizning hayotimizni qanchalik osonlashtirishini tushunamiz.

Biz miqdoriy ma'lumotlar bilan ishlaymiz

Biz qilishimiz kerak bo'lgan birinchi narsa, miqdoriy ma'lumotlarda "josus ustunlar" mavjudligini aniqlashdir. Biz bu ustunlarni shunday deb ataymiz, chunki ular o'zlarini miqdoriy ma'lumotlar sifatida taqdim etadilar, lekin sifatli ma'lumotlar sifatida ishlaydilar.

Ularni qanday aniqlashimiz mumkin? Albatta, barchasi siz tahlil qilayotgan ma'lumotlarning tabiatiga bog'liq, lekin umuman olganda, bunday ustunlar kam noyob ma'lumotlarga ega bo'lishi mumkin (3-10 noyob qiymatlar mintaqasida).

print(df_numerical.nunique())

Ayg'oqchi ustunlarni aniqlaganimizdan so'ng, biz ularni miqdoriy ma'lumotlardan sifatli ma'lumotlarga o'tkazamiz:

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']) #добавляСм Ρ‚Ρ€Π΅Ρ‚ΡŒΡŽ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ-шпион Π² качСствСнныС Π΄Π°Π½Π½Ρ‹Π΅

Nihoyat, biz miqdoriy ma'lumotlarni sifatli ma'lumotlardan butunlay ajratdik va endi biz u bilan to'g'ri ishlashimiz mumkin. Birinchi narsa, bizda bo'sh qiymatlar mavjudligini tushunish (NaN va ba'zi hollarda 0 bo'sh qiymatlar sifatida qabul qilinadi).

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

Shu nuqtada, qaysi ustunlarda nol etishmayotgan qiymatlarni ko'rsatishi mumkinligini tushunish muhimdir: bu ma'lumotlar qanday to'planganligi bilan bog'liqmi? Yoki bu ma'lumotlar qiymatlari bilan bog'liq bo'lishi mumkinmi? Bu savollarga har bir holatda javob berish kerak.

Shunday qilib, agar biz hali ham nol bo'lgan joyda ma'lumotlar etishmayotgan deb qaror qilsak, keyinchalik yo'qolgan ma'lumotlar bilan ishlashni osonlashtirish uchun nollarni NaN bilan almashtirishimiz kerak:

df_numerical[["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° 1", "ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° 2"]] = df_numerical[["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° 1", "ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° 2"]].replace(0, nan)

Keling, qaerda ma'lumotlar etishmayotganini ko'rib chiqaylik:

sns.heatmap(df_numerical.isnull(),yticklabels=False,cbar=False,cmap='viridis') # МоТно Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ df_numerical.info()

Ma'lumotlarni tez qayta ishlash uchun bloknot-cheat varaq

Bu erda ustunlar ichida etishmayotgan qiymatlar sariq rang bilan belgilanishi kerak. Va endi qiziqarli boshlanadi - bu qadriyatlar bilan qanday kurashish mumkin? Ushbu qiymatlar yoki ustunlar bilan qatorlarni o'chirishim kerakmi? Yoki bu bo'sh qiymatlarni boshqalari bilan to'ldiringmi?

Mana, bo'sh qiymatlar bilan nima qilish mumkinligini aniqlashga yordam beradigan taxminiy diagramma:

Ma'lumotlarni tez qayta ishlash uchun bloknot-cheat varaq

0. Keraksiz ustunlarni olib tashlang

df_numerical.drop(labels=["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2"], axis=1, inplace=True)

1. Ushbu ustundagi bo'sh qiymatlar soni 50% dan ortiqmi?

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

df_numerical.drop(labels=["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2"], axis=1, inplace=True)#УдаляСм, Ссли какая-Ρ‚ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ‚ большС 50 пустых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

2. Bo'sh qiymatlari bo'lgan satrlarni o'chirish

df_numerical.dropna(inplace=True)#УдаляСм строчки с пустыми значСниями, Ссли ΠΏΠΎΡ‚ΠΎΠΌ останСтся достаточно Π΄Π°Π½Π½Ρ‹Ρ… для обучСния

3.1. Tasodifiy qiymat kiritish

import random #ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ random
df_numerical["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°"].fillna(lambda x: random.choice(df[df[column] != np.nan]["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°"]), inplace=True) #вставляСм Ρ€Π°Π½Π΄ΠΎΠΌΠ½Ρ‹Π΅ значСния Π² пустыС ΠΊΠ»Π΅Ρ‚ΠΊΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

3.2. Doimiy qiymat kiritish

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. O'rtacha yoki eng tez-tez uchraydigan qiymatni kiriting

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. Boshqa model tomonidan hisoblangan qiymatni kiriting

Ba'zida qiymatlarni sklearn kutubxonasi yoki boshqa shunga o'xshash kutubxonalar modellari yordamida regressiya modellari yordamida hisoblash mumkin. Bizning jamoamiz buni yaqin kelajakda qanday qilish mumkinligi haqida alohida maqola ajratadi.

Shunday qilib, hozircha miqdoriy ma'lumotlar haqidagi hikoya to'xtatiladi, chunki turli xil vazifalar uchun ma'lumotlarni tayyorlash va oldindan qayta ishlashni qanday qilib yaxshiroq qilish haqida ko'plab boshqa nuanslar mavjud va miqdoriy ma'lumotlar uchun asosiy narsalar ushbu maqolada hisobga olingan va Endi sifat ma'lumotlariga qaytish vaqti keldi, biz miqdoriy ma'lumotlardan bir necha qadam orqaga ajratdik. Siz ushbu daftarni xohlaganingizcha o'zgartirishingiz mumkin, uni turli vazifalarga moslashtirasiz, shunda ma'lumotlarni oldindan qayta ishlash juda tez ketadi!

Sifatli ma'lumotlar

Asosan, sifatli ma'lumotlar uchun, uni satrdan (yoki ob'ektdan) raqamga formatlash uchun One-hot-kodlash usuli qo'llaniladi. Ushbu nuqtaga o'tishdan oldin, keling, bo'sh qiymatlar bilan ishlash uchun yuqoridagi diagramma va koddan foydalanamiz.

df_categorical.nunique()

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

Ma'lumotlarni tez qayta ishlash uchun bloknot-cheat varaq

0. Keraksiz ustunlarni olib tashlang

df_categorical.drop(labels=["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2"], axis=1, inplace=True)

1. Ushbu ustundagi bo'sh qiymatlar soni 50% dan ortiqmi?

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

df_categorical.drop(labels=["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1","ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2"], axis=1, inplace=True) #УдаляСм, Ссли какая-Ρ‚ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° 
                                                                          #ΠΈΠΌΠ΅Π΅Ρ‚ большС 50% пустых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

2. Bo'sh qiymatlari bo'lgan satrlarni o'chirish

df_categorical.dropna(inplace=True)#УдаляСм строчки с пустыми значСниями, 
                                   #Ссли ΠΏΠΎΡ‚ΠΎΠΌ останСтся достаточно Π΄Π°Π½Π½Ρ‹Ρ… для обучСния

3.1. Tasodifiy qiymat kiritish

import random
df_categorical["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°"].fillna(lambda x: random.choice(df[df[column] != np.nan]["ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°"]), inplace=True)

3.2. Doimiy qiymat kiritish

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)

Shunday qilib, biz nihoyat sifat ma'lumotlaridagi nulllarni ko'rib chiqdik. Endi ma'lumotlar bazangizdagi qiymatlarni bir martalik kodlashni amalga oshirish vaqti keldi. Ushbu usul ko'pincha algoritmingiz yuqori sifatli ma'lumotlardan o'rganishini ta'minlash uchun ishlatiladi.

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

Shunday qilib, biz nihoyat alohida sifat va miqdoriy ma'lumotlarni qayta ishlashni tugatdik - ularni qayta birlashtirish vaqti keldi

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

Ma'lumotlar to'plamini birlashtirgandan so'ng, biz nihoyat sklearn kutubxonasidan MinMaxScaler yordamida ma'lumotlarni o'zgartirishdan foydalanishimiz mumkin. Bu bizning qadriyatlarimizni 0 va 1 oralig'ida qiladi, bu kelajakda modelni o'rgatishda yordam beradi.

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

Bu ma'lumotlar endi hamma narsaga tayyor - neyron tarmoqlar, standart ML algoritmlari va boshqalar!

Ushbu maqolada biz vaqt seriyalari ma'lumotlari bilan ishlashni hisobga olmadik, chunki bunday ma'lumotlar uchun siz o'zingizning vazifangizga qarab biroz boshqacha ishlov berish usullaridan foydalanishingiz kerak. Kelajakda bizning jamoamiz ushbu mavzuga alohida maqola bag'ishlaydi va umid qilamizki, u sizning hayotingizga xuddi shu kabi qiziqarli, yangi va foydali narsalarni olib kirishi mumkin.

Manba: www.habr.com

a Izoh qo'shish