No history yet

Տվյալների որակի բարելավում

Տվյալների որակի բարելավում

Իրական աշխարհի տվյալները հազվադեպ են կատարյալ։ Դրանք կարող են պարունակել սխալներ, բացթողումներ և անհամապատասխանություններ։ Այս «կեղտոտ» տվյալները կարող են խեղաթյուրել վերլուծության արդյունքները և հանգեցնել սխալ եզրակացությունների։ Հետևաբար, նախքան որևէ վերլուծություն կատարելը, կարևոր է մաքրել և նախապատրաստել տվյալների հավաքածուն։ Այս գործընթացը տվյալների մաքրումն է՝ տվյալագիտության հիմնարար և հաճախ ամենաշատ ժամանակ պահանջող փուլը։

Բացակայող արժեքներ. լրացնե՞լ, թե՞ հեռացնել

Տվյալների հավաքածուներում հաճախ հանդիպում են դատարկ կամ բացակայող արժեքներ, որոնք Pandas-ում սովորաբար նշվում են որպես NaN (Not a Number): Այս բացթողումների հետ վարվելու երկու հիմնական մոտեցում կա՝ հեռացում և լրացում (imputation):

Հեռացումը ամենապարզ լուծումն է: Եթե բացակայող տվյալներով տողերը քիչ են և չեն կազմում ձեր տվյալների զգալի մասը, դրանք կարելի է պարզապես հեռացնել: Սակայն այս մոտեցումը պետք է զգուշությամբ կիրառել, քանի որ կարող եք կորցնել արժեքավոր տեղեկատվություն:

Լրացումը կամ բացակայող արժեքները փոխարինելու գործընթացն է՝ հիմնվելով առկա տվյալների վրա: Թվային սյունակների համար սովորաբար օգտագործում են միջին թվաբանականը (mean) կամ միջնարժեքը (median), իսկ կատեգորիկ տվյալների համար՝ ամենահաճախ հանդիպող արժեքը (մոդան՝ mode): Ընտրությունը կախված է տվյալների բաշխումից և համատեքստից:

import pandas as pd
import numpy as np

# Ստեղծում ենք օրինակելի DataFrame
data = {'Age': [25, 30, np.nan, 35], 'City': ['Yerevan', 'Gyumri', 'Yerevan', np.nan]}
df = pd.DataFrame(data)

# 1. Հեռացնում ենք բացակայող արժեքներով տողերը
df_dropped = df.dropna()
# df_dropped-ը կպարունակի միայն առաջին տողը

# 2. Լրացնում ենք բացակայող տարիքը միջինով
mean_age = df['Age'].mean()
df['Age'].fillna(mean_age, inplace=True)

# 3. Լրացնում ենք բացակայող քաղաքը մոդայով (ամենահաճախ հանդիպող)
mode_city = df['City'].mode()[0]
df['City'].fillna(mode_city, inplace=True)

Ուշադրություն դարձրեք, որ inplace=True պարամետրը փոփոխում է սկզբնական DataFrame-ը։ Եթե այն բացակայում է, ֆունկցիան կվերադարձնի նոր, փոփոխված DataFrame։

Կրկնօրինակներ և անհամապատասխանություններ

Կրկնվող տողերը կարող են առաջանալ տվյալների հավաքագրման սխալների արդյունքում և կարող են արհեստականորեն մեծացնել որոշակի դիտարկումների կշիռը։ Pandas-ը թույլ է տալիս հեշտությամբ գտնել և հեռացնել դրանք։

# Ստեղծում ենք կրկնօրինակներով DataFrame
data = {'Name': ['Anna', 'Vardan', 'Anna'], 'Score': [88, 92, 88]}
df_duplicates = pd.DataFrame(data)

# Գտնում ենք կրկնօրինակները
duplicates = df_duplicates.duplicated()
# duplicates-ը կլինի [False, False, True] Boolean շարք

# Հեռացնում ենք կրկնօրինակները
df_cleaned = df_duplicates.drop_duplicates()
# df_cleaned-ը կպահպանի առաջին և երկրորդ տողերը

Մեկ այլ տարածված խնդիր է տվյալների տիպերի անհամապատասխանությունը: Օրինակ, թվային սյունակը կարող է սխալմամբ պահպանվել որպես տեքստ (object տիպ), ինչը կխանգարի մաթեմատիկական գործողություններ կատարել։ astype() մեթոդը թույլ է տալիս փոխարկել սյունակի տիպը։

# Տվյալների հավաքածու, որտեղ գինը տեքստ է
data = {'Product': ['A', 'B'], 'Price': ['100', '150.5']}
df_types = pd.DataFrame(data)

# Ստուգում ենք սկզբնական տիպերը
# print(df_types.dtypes) -> Product: object, Price: object

# Փոխարկում ենք 'Price' սյունակը float տիպի
df_types['Price'] = df_types['Price'].astype(float)

# Այժմ կարող ենք հաշվարկներ կատարել
total_price = df_types['Price'].sum() # 250.5

Տեքստային տվյալները նույնպես կարիք ունեն ստանդարտացման: Օրինակ, «Երևան», «երևան» և « Yerevan »-ը կարող են դիտարկվել որպես երեք տարբեր կատեգորիաներ։ str.lower() և str.strip() մեթոդները օգնում են լուծել այս խնդիրը՝ բոլոր արժեքները բերելով միասնական տեսքի։

# Տեքստային տվյալների ստանդարտացում
data = {'City': [' Yerevan ', 'gyumri', 'YEREVAN']}
df_text = pd.DataFrame(data)

df_text['City'] = df_text['City'].str.strip().str.lower()
# Արդյունքը՝ ['yerevan', 'gyumri', 'yerevan']

Անոմալիաների որս

(outliers) այն տվյալներն են, որոնք զգալիորեն տարբերվում են մնացած դիտարկումներից։ Դրանք կարող են լինել ինչպես տվյալների մուտքագրման սխալի արդյունք (օրինակ՝ մարդու տարիքը 200), այնպես էլ իրական, բայց հազվագյուտ երևույթ։ Անոմալիաների հայտնաբերումը կարևոր է, քանի որ դրանք կարող են խիստ ազդել վիճակագրական որոշ ցուցանիշների, օրինակ՝ միջինի վրա։

Անոմալիաները հայտնաբերելու պարզ եղանակներից է (IQR - Interquartile Range) օգտագործումը։ Ըստ այս մեթոդի, անոմալիա է համարվում ցանկացած արժեք, որը գտնվում է հետևյալ միջակայքերից դուրս.

Ստորին սահման=Q11.5×IQRՎերին սահման=Q3+1.5×IQR\text{Ստորին սահման} = Q1 - 1.5 \times IQR \\ \text{Վերին սահման} = Q3 + 1.5 \times IQR
# Անոմալիաների հայտնաբերում IQR մեթոդով
data = {'Score': [78, 82, 85, 88, 92, 95, 150]} # 150-ը ակնհայտ անոմալիա է
df_outliers = pd.DataFrame(data)

Q1 = df_outliers['Score'].quantile(0.25)
Q3 = df_outliers['Score'].quantile(0.75)
IQR = Q3 - Q1

lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

# Գտնում ենք անոմալիաները
outliers = df_outliers[(df_outliers['Score'] < lower_bound) | (df_outliers['Score'] > upper_bound)]

# print(outliers) -> կտպի 150 արժեքով տողը

Անոմալիաները հայտնաբերելուց հետո կարելի է դրանք հեռացնել, փոխարինել (օրինակ, վերին կամ ստորին սահմանային արժեքով) կամ առանձին ուսումնասիրել՝ հասկանալու դրանց պատճառը։ Տվյալների մաքրումը կրեատիվ և համատեքստից կախված գործընթաց է։ Չկա մեկ «ճիշտ» պատասխան, և լավագույն մոտեցումը կախված է ձեր տվյալներից և վերլուծության նպատակներից։

Lesson image
Quiz Questions 1/5

Ինչու՞ է տվյալների մաքրումը համարվում տվյալների վերլուծության կարևոր փուլ։

Quiz Questions 2/5

Pandas DataFrame-ում թվային սյունակի բացակայող արժեքները (NaN) լրացնելու համար սովորաբար օգտագործում են սյունակի միջին թվաբանականը (mean) կամ միջնարժեքը (median