نوٽ پيڊ-چيٽ شيٽ تيز ڊيٽا پري پروسيسنگ لاءِ

اڪثر ماڻهو جيڪي ڊيٽا سائنس جي ميدان ۾ داخل ٿين ٿا انهن جي حقيقي اميدن کان گهٽ آهن جيڪي انهن جو انتظار ڪري رهيا آهن. گھڻن ماڻھن جو خيال آھي ته ھاڻي اھي سٺا نيورل نيٽ ورڪ لکندا، آئرن مين مان وائس اسسٽنٽ ٺاھيندا، يا مالي مارڪيٽن ۾ سڀني کي مات ڏيندا.
پر ڪم ڊيٽا سائنسدان ڊيٽا تي مبني آهي، ۽ سڀ کان اهم ۽ وقت سازي پهلون مان هڪ آهي ڊيٽا کي پروسيس ڪرڻ کان اڳ ان کي هڪ نيورل نيٽ ورڪ ۾ فيڊ ڪرڻ يا ان جو تجزيو ڪرڻ هڪ خاص طريقي سان.

هن آرٽيڪل ۾، اسان جي ٽيم بيان ڪندي ته توهان قدم قدم جي هدايتن ۽ ڪوڊ سان تڪڙو ۽ آساني سان ڊيٽا ڪيئن پروسيس ڪري سگهو ٿا. اسان ڪوڊ کي ڪافي لچڪدار بڻائڻ جي ڪوشش ڪئي ۽ مختلف ڊيٽا سيٽن لاءِ استعمال ٿي سگھي ٿي.

ڪيترن ئي پروفيشنلز کي شايد هن آرٽيڪل ۾ ڪا به غير معمولي ڳالهه نه ملي سگهي، پر شروعات ڪندڙ ڪجهه نوان سکڻ جي قابل هوندا، ۽ جيڪو به ماڻهو ڊگهي عرصي کان تيز ۽ منظم ڊيٽا پروسيسنگ لاءِ هڪ الڳ نوٽ بڪ ٺاهڻ جو خواب ڏسي رهيو آهي، اهو ڪوڊ ڪاپي ڪري سگهي ٿو ۽ ان کي پنهنجي لاءِ فارميٽ ڪري سگهي ٿو، يا Github مان ختم ٿيل نوٽ بڪ ڊائون لوڊ ڪريو.

اسان ڊيٽا سيٽ حاصل ڪيو. اڳتي ڇا ڪجي؟

تنهن ڪري، معيار: اسان کي سمجهڻ جي ضرورت آهي ته اسان ڇا ڪري رهيا آهيون، مجموعي تصوير. هن کي ڪرڻ لاءِ، اسان استعمال ڪريون ٿا پنڊاس کي صرف مختلف ڊيٽا جي قسمن کي بيان ڪرڻ لاءِ.

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. ان لاءِ اڳڪٿيون ڪرڻ لاءِ اسان ڪهڙي ڪالم کي نشانو بڻائڻ چاهيون ٿا؟

انهن سوالن جا جواب توهان کي ڊيٽا سيٽ جو تجزيو ڪرڻ جي اجازت ڏين ٿا ۽ توهان جي ايندڙ عملن لاءِ تقريباً هڪ منصوبو ٺاهيو.

انهي سان گڏ، هر ڪالمن ۾ قدرن تي هڪ گہرے نظر لاء، اسان استعمال ڪري سگهون ٿا pandas describe() فنڪشن. بهرحال، هن فنڪشن جو نقصان اهو آهي ته اهو اسٽرنگ ويلز سان ڪالمن بابت معلومات مهيا نٿو ڪري. اسان انهن سان بعد ۾ معاملو ڪنداسين.

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 مان sklearn لائبريري. اهو اسان جي قيمتن کي 0 ۽ 1 جي وچ ۾ ٺاهيندو، جيڪو مستقبل ۾ ماڊل کي تربيت ڏيڻ ۾ مدد ڪندو.

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

هي ڊيٽا هاڻي ڪنهن به شيءِ لاءِ تيار آهي - نيورل نيٽ ورڪ، معياري ايم ايل الگورتھم، وغيره.

هن آرٽيڪل ۾، اسان وقت جي سيريز جي ڊيٽا سان ڪم ڪرڻ جي حساب ۾ نه ورتو، ڇو ته اهڙي ڊيٽا لاء توهان کي ٿوري مختلف پروسيسنگ ٽيڪنالاجي استعمال ڪرڻ گهرجي، توهان جي ڪم تي منحصر آهي. مستقبل ۾، اسان جي ٽيم هن موضوع تي هڪ الڳ مضمون وقف ڪندي، ۽ اسان کي اميد آهي ته اهو توهان جي زندگي ۾ ڪجهه دلچسپ، نئون ۽ مفيد آڻيندو، جهڙوڪ هن هڪ.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو