Өгөгдөл цэвэрлэх
Өгөгдлийн шинжилгээчдийн цагийн 70–80 хувийг өгөгдөл цэвэрлэхэд зарцуулдаг гэсэн судалгаа байдаг. Бодит ертөнцийн өгөгдөл хэзээ ч төгс ирдэггүй — дутуу утга, буруу бичлэг, давхардсан мөр, тэвчиж болохгүй зай зэрэг асуудал үргэлж тохиолддог. Pandas эдгээрийг шийдэх хүчирхэг хэрэгслүүдтэй.
Дутуу утга (missing values)
Pandas дутуу утгыг NaN (Not a Number) гэж тэмдэглэдэг. Эхлээд дутуу утга байгаа эсэхийг шалгана:
import pandas as pd
өгөгдөл = {
"нэр": ["Болд", "Сарнай", None, "Номин", "Эрдэнэ"],
"нас": [20, None, 21, 23, 20],
"оноо": [85, 92, 78, None, 60],
"хот": ["УБ", "УБ", "Дархан", "УБ", None],
}
df = pd.DataFrame(өгөгдөл)
# Баганаар дутуу утгын тоо
print(df.isnull().sum())
# Дутуу утгатай мөрүүдийг бүгдийг устгах
цэвэр_df = df.dropna()
print(f"Үлдсэн мөр: {len(цэвэр_df)}")
Устгахын оронд дутуу утгыг дүүргэж болно — өгөгдөл алдахгүйн тулд илүү байнга хэрэглэгдэх арга:
# Тоон баганыг дундажаар дүүргэх
df["нас"] = df["нас"].fillna(df["нас"].mean())
df["оноо"] = df["оноо"].fillna(df["оноо"].median())
# Текстэн баганыг тогтмол утгаар дүүргэх
df["хот"] = df["хот"].fillna("Тодорхойгүй")
df["нэр"] = df["нэр"].fillna("Нэргүй")
print(df)
Давхардсан мөр ба буруу формат
Давхардсан өгөгдөл шинжилгээний үр дүнг гажуудуулдаг тул эрт илрүүлж устгах нь чухал:
# Давхардал шалгах
print(f"Давхардсан мөр: {df.duplicated().sum()}")
# Давхардлыг устгах (эхнийхийг нь үлдээнэ)
df = df.drop_duplicates()
# Тодорхой баганаар давхардал шалгах
df = df.drop_duplicates(subset=["нэр"])
Мөр мөрийн форматыг засах ч адилхан чухал. Зай, том/жижиг үсгийн хольц нийтлэг асуудал:
# Текстэн өгөгдлийг цэвэрлэх
df["нэр"] = df["нэр"].str.strip() # эхний, эцсийн зай хасах
df["хот"] = df["хот"].str.upper() # бүгдийг том үсгээр
df["хот"] = df["хот"].str.replace(" ", " ") # давхар зай засах
# Тоон өгөгдлийн хүрээ шалгаж буруугийг засах
df["оноо"] = df["оноо"].clip(0, 100) # 0–100 хүрээнд хязгаарлах
df["нас"] = df["нас"].astype(int) # float-аас int болгох
Баганын нэр ба өгөгдлийн төрөл цэвэрлэх
CSV файлаас уншсан өгөгдөл ихэвчлэн баганын нэрэнд зай, том үсэг хольсон байдаг. Стандартчилах нь хамгийн эхний алхам:
# Баганын нэрийг стандартчилах
df.columns = df.columns.str.strip().str.lower().str.replace(" ", "_")
# Өгөгдлийн төрлийг зөв болгох
df["огноо"] = pd.to_datetime(df["огноо"], format="%Y-%m-%d")
df["үнэ"] = pd.to_numeric(df["үнэ"], errors="coerce") # буруу утгыг NaN болгоно
# Өгөгдлийн төрлүүдийг шалгах
print(df.dtypes)
Бүрэн цэвэрлэх pipeline
Бодит төсөлд цэвэрлэх алхмуудыг нэг функцэд нэгтгэж, дахин ашигладаг — энэ нь мэргэжлийн зөв дадал:
def өгөгдөл_цэвэрлэх(df: pd.DataFrame) -> pd.DataFrame:
# 1. Баганын нэр стандартчилах
df.columns = df.columns.str.strip().str.lower().str.replace(" ", "_")
# 2. Давхардал устгах
df = df.drop_duplicates()
# 3. Дутуу утга засах
df["оноо"] = df["оноо"].fillna(df["оноо"].median())
df["хот"] = df["хот"].fillna("Тодорхойгүй")
# 4. Текст цэвэрлэх
df["нэр"] = df["нэр"].str.strip()
# 5. Хүрээнээс гарсан утга засах
df["оноо"] = df["оноо"].clip(0, 100)
print(f"Цэвэрлэсний дараа: {len(df)} мөр үлдлээ ✓")
return df
df_цэвэр = өгөгдөл_цэвэрлэх(df)
df_цэвэр.to_csv("цэвэр_өгөгдөл.csv", index=False, encoding="utf-8")
Өгөгдөл цэвэрлэх нь уйтгартай мэт санагдаж болох ч энэ алхмыг алгасвал дараагийн шинжилгээ, загвар бүгд буруу үр дүн өгнө. Цэвэр өгөгдөл — зөв шийдвэрийн суурь.
Дараагийн хичээлд:
Цэвэрлэсэн өгөгдлөө matplotlib ашиглан график хэлбэрт оруулна — шугамын, баарны, дугуй диаграмм зуран, өгөгдлийн дотоод хэв маягийг нүдэнд харагдуулж сурна.