د ګړندي ډیټا پری پروسس کولو لپاره د نوټ پیډ شیټ شیټ

ډیری وختونه هغه خلک چې د ډیټا ساینس ساحې ته ننوځي د هغه څه په اړه چې دوی یې انتظار کوي د حقیقي توقعاتو څخه لږ وي. ډیری خلک فکر کوي چې اوس به دوی په زړه پوري عصبي شبکې ولولي ، د اوسپنې مین څخه به د غږ معاون رامینځته کړي ، یا په مالي بازارونو کې هرڅوک مات کړي.
خو کار د معلوماتو د ساینس پوه د معلوماتو لخوا پرمخ وړل کیږي، او یو له خورا مهم او وخت مصرفي اړخونو څخه د معلوماتو پروسس کول دي مخکې لدې چې دا په عصبي شبکه کې تغذیه کړي یا په یو مشخص ډول تحلیل کړي.

پدې مقاله کې ، زموږ ټیم به تشریح کړي چې تاسو څنګه کولی شئ د ګام په ګام لارښوونو او کوډونو سره ګړندي او په اسانۍ سره ډیټا پروسس کړئ. موږ هڅه وکړه چې کوډ خورا انعطاف منونکی او د مختلف ډیټاسیټونو لپاره وکارول شي.

ډیری مسلکیان ممکن پدې مقاله کې هیڅ غیر معمولي ونه موندل شي، مګر پیل کونکي به وکوالی شي یو څه نوي زده کړي، او هرڅوک چې د ګړندي او جوړښت شوي ډیټا پروسس کولو لپاره د جلا نوټ بوک جوړولو خوب لیدلی وي کولی شي کوډ کاپي کړي او د ځان لپاره یې فارمیټ کړي، یا له ګیتوب څخه بشپړ شوی نوټ بوک ډاونلوډ کړئ.

موږ ډیټا سیټ ترلاسه کړ. بیا به څه وکړي؟

نو، معیاري: موږ باید پوه شو چې موږ ورسره څه معامله کوو، ټولیز انځور. د دې کولو لپاره، موږ پانډا کاروو ترڅو په ساده ډول د مختلف ډیټا ډولونو تعریف کړو.

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() #Демонстрируем информацию о колонках

د ګړندي ډیټا پری پروسس کولو لپاره د نوټ پیډ شیټ شیټ

راځئ چې د کالم ارزښتونو ته وګورو:

  1. ایا په هر کالم کې د لینونو شمیر د لینونو ټول شمیر سره مطابقت لري؟
  2. په هر کالم کې د معلوماتو جوهر څه دی؟
  3. موږ کوم کالم په نښه کول غواړو ترڅو د دې لپاره وړاندوینې وکړو؟

د دې پوښتنو ځوابونه به تاسو ته اجازه درکړي چې ډیټاسیټ تحلیل کړئ او ستاسو د راتلونکو کړنو لپاره نږدې پلان جوړ کړئ.

همدارنګه، په هر کالم کې د ارزښتونو د ژورې لید لپاره، موږ کولی شو د پانډا بیان () فنکشن وکاروو. په هرصورت، د دې فعالیت نیمګړتیا دا ده چې دا د تار ارزښتونو سره د کالمونو په اړه معلومات نه ورکوي. موږ به وروسته ورسره معامله وکړو.

df.describe()

د ګړندي ډیټا پری پروسس کولو لپاره د نوټ پیډ شیټ شیټ

د جادو لید

راځئ چې وګورو چیرې چې موږ هیڅ ارزښت نه لرو:

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

د ګړندي ډیټا پری پروسس کولو لپاره د نوټ پیډ شیټ شیټ

دا له پورته څخه یو لنډ نظر و، اوس به نورو په زړه پورې شیانو ته لاړ شو

راځئ هڅه وکړو چې ومومئ او، که امکان ولري، هغه کالمونه لرې کړئ چې په ټولو قطارونو کې یوازې یو ارزښت لري (دوی به په هیڅ ډول پایله اغیزه ونکړي):

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

اوس موږ خپل ځان او زموږ د پروژې بریا د نقل شوي لینونو څخه ساتو (هغه لینونه چې ورته معلومات په ورته ترتیب کې یو له موجوده لینونو څخه لري):

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

موږ ډیټاسیټ په دوه برخو ویشو: یو د کیفیتي ارزښتونو سره، او بل د کمیت سره

دلته موږ اړتیا لرو یو کوچنی توضیحات وکړو: که چیرې په کمیتي او کمیتي ډیټا کې د ورک شوي ډیټا لیکونه یو له بل سره خورا تړاو نلري ، نو بیا به موږ پریکړه وکړو چې موږ څه قرباني کوو - د ورک شوي ډیټا سره ټولې کرښې ، یوازې د دوی یوه برخه ، یا ځینې کالمونه. که چیرې کرښې سره تړاو ولري، نو موږ حق لرو چې ډیټاسیټ په دوه برخو وویشو. که نه نو، تاسو به لومړی د هغو لینونو سره معامله وکړئ چې د ورک شوي ډاټا سره په کیفیت او کمیت سره تړاو نلري، او یوازې بیا ډیټاسیټ په دوو برخو ویشئ.

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

موږ دا د دې لپاره کوو چې زموږ لپاره دا دوه مختلف ډوله ډیټا پروسس کول اسانه کړو - وروسته به پوه شو چې دا زموږ ژوند څومره اسانه کوي.

موږ د کمیتي معلوماتو سره کار کوو

لومړی شی چې موږ یې باید وکړو دا معلومه کړو چې آیا په کمیتي معلوماتو کې "جاسوس کالمونه" شتون لري. موږ دې کالمونو ته ځکه وایو چې دوی ځان د کمیتي ډیټا په توګه وړاندې کوي ، مګر د کیفیت ډیټا په توګه عمل کوي.

موږ څنګه کولی شو دوی وپیژنو؟ البته، دا ټول د هغه معلوماتو په نوعیت پورې اړه لري چې تاسو یې تحلیل کوئ، مګر په عمومي توګه دا ډول کالمونه ممکن لږ ځانګړي ډاټا ولري (د 3-10 ځانګړي ارزښتونو په سیمه کې).

print(df_numerical.nunique())

یوځل چې موږ د جاسوس کالمونه وپیژندل، موږ به یې له کمي ډیټا څخه کیفیتي ډیټا ته واړوو:

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

په نهایت کې، موږ د کمیتي ډیټا په بشپړه توګه د کیفیت ډاټا څخه جلا کړی او اوس موږ کولی شو په سمه توګه کار وکړو. لومړی شی دا دی چې پوه شئ چیرې چې موږ خالي ارزښتونه لرو (NaN، او په ځینو مواردو کې 0 به د خالي ارزښتونو په توګه ومنل شي).

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

په دې وخت کې، دا مهمه ده چې پوه شئ چې په کوم کالم کې صفر ممکن ورک شوي ارزښتونه په ګوته کړي: ایا دا د دې له امله ده چې ډاټا څنګه راټول شوي؟ یا کیدای شي دا د معلوماتو ارزښتونو سره تړاو ولري؟ دا پوښتنې باید د قضیې په اساس ځواب شي.

نو، که موږ لاهم پریکړه وکړو چې موږ ممکن ډیټا ورک کړو چیرې چې صفر شتون ولري، موږ باید صفرونه د NaN سره بدل کړو ترڅو وروسته د دې ورک شوي ډیټا سره کار کول اسانه کړو:

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

اوس راځئ وګورو چې موږ چیرې معلومات ورکوو:

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

د ګړندي ډیټا پری پروسس کولو لپاره د نوټ پیډ شیټ شیټ

دلته د کالمونو دننه هغه ارزښتونه چې ورک دي باید په ژیړ کې نښه شي. او اوس تفریح ​​​​پیل کیږي - د دې ارزښتونو سره څنګه معامله وکړئ؟ ایا زه باید د دې ارزښتونو یا کالمونو سره قطارونه حذف کړم؟ یا دا خالي ارزښتونه په ځینو نورو سره ډک کړئ؟

دلته یو اټکل شوی ډیاګرام دی چې تاسو سره مرسته کولی شي پریکړه وکړي چې څه شی په اصولو کې د خالي ارزښتونو سره ترسره کیدی شي:

د ګړندي ډیټا پری پروسس کولو لپاره د نوټ پیډ شیټ شیټ

0. غیر ضروري کالمونه لرې کړئ

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

1. ایا په دې کالم کې د خالي ارزښتونو شمیر له 50٪ څخه ډیر دی؟

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

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

2. د خالي ارزښتونو سره کرښې ړنګ کړئ

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

3.1. د تصادفي ارزښت داخلول

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

3.2. د ثابت ارزښت داخلول

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. اوسط یا ډیری وختونه ارزښت دننه کړئ

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. د بل ماډل لخوا محاسبه شوي ارزښت دننه کړئ

ځینې ​​​​وختونه ارزښتونه د سکلیرن کتابتون یا نورو ورته کتابتونونو څخه د ماډلونو په کارولو سره د ریګریشن ماډلونو په کارولو سره محاسبه کیدی شي. زموږ ټیم به یو جلا مقاله وقف کړي چې دا څنګه په نږدې راتلونکي کې ترسره کیدی شي.

نو، د اوس لپاره، د کمیتي معلوماتو په اړه کیسه به مداخله وکړي، ځکه چې د مختلفو دندو لپاره د ډیټا چمتو کولو او مخکې پروسس کولو څرنګوالي په اړه ډیری نور لنډیزونه شتون لري، او پدې مقاله کې د کمیتي معلوماتو لپاره اساسي شیان په پام کې نیول شوي، او اوس د کيفي معلوماتو ته د راستنېدو وخت دی، کوم چې موږ څو مرحلې د کميتي ارقامو څخه جلا کړل. تاسو کولی شئ دا نوټ بوک د خپلې خوښې سره سم بدل کړئ ، دا مختلف دندو ته تطبیق کړئ ، نو د معلوماتو دمخه پروسس کول خورا ګړندي کیږي!

کیفیت لرونکي معلومات

اساسا، د کیفیتي معلوماتو لپاره، د یو ګرم کوډ کولو طریقه کارول کیږي ترڅو دا د تار (یا څیز) څخه یو شمیر ته بڼه ورکړي. مخکې له دې چې دې ټکي ته لاړ شو، راځئ چې پورته ډیاګرام او کوډ وکاروو ترڅو د خالي ارزښتونو سره معامله وکړو.

df_categorical.nunique()

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

د ګړندي ډیټا پری پروسس کولو لپاره د نوټ پیډ شیټ شیټ

0. غیر ضروري کالمونه لرې کړئ

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

1. ایا په دې کالم کې د خالي ارزښتونو شمیر له 50٪ څخه ډیر دی؟

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

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

2. د خالي ارزښتونو سره کرښې ړنګ کړئ

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

3.1. د تصادفي ارزښت داخلول

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

3.2. د ثابت ارزښت داخلول

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)

نو، موږ په پای کې په کیفیتي معلوماتو کې د نولسونو لاسوند ترلاسه کړ. اوس دا وخت دی چې په هغه ارزښتونو کې چې ستاسو په ډیټابیس کې دي یو ګرم کوډ کول ترسره کړئ. دا میتود ډیر ځله کارول کیږي ترڅو ډاډ ترلاسه کړي چې ستاسو الګوریتم کولی شي د لوړ کیفیت ډیټا څخه زده کړي.

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

نو، موږ په پای کې د جلا کیفیتي او کمیتي معلوماتو پروسس کولو پای ته ورساوه - د دوی د یوځای کولو وخت

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

وروسته له دې چې موږ ډیټاسیټونه په یو کې یوځای کړل، موږ کولی شو په پای کې د سکلیرن کتابتون څخه د MinMaxScaler په کارولو سره د معلوماتو بدلون وکاروو. دا به زموږ ارزښتونه د 0 او 1 ترمنځ رامینځته کړي، کوم چې به په راتلونکي کې د ماډل روزنه کې مرسته وکړي.

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

دا معلومات اوس د هر څه لپاره چمتو دي - عصبي شبکې، معیاري ML الګوریتمونه، او نور!

پدې مقاله کې ، موږ د وخت لړۍ ډیټا سره کار کول په پام کې ندي نیولي ، ځکه چې د دې ډول معلوماتو لپاره تاسو باید ستاسو د دندې پورې اړوند یو څه مختلف پروسس تخنیکونه وکاروئ. په راتلونکي کې، زموږ ټیم به دې موضوع ته جلا مقاله وقف کړي، او موږ هیله لرو چې دا به وکوالی شي ستاسو په ژوند کې یو څه په زړه پورې، نوي او ګټور راوړي، لکه د دې په څیر.

سرچینه: www.habr.com

Add a comment