فهرست مطالب
Toggleراهنمای جامع پاکسازی دادهها (Data Cleaning) با زبان R؛ از دادههای کثیف تا تحلیلهای دقیق
جملهای معروف در میان دانشمندان داده وجود دارد که میگوید: «دادههای کثیف، تحلیلهای کثیف به بار میآورند!» (Garbage in, Garbage out). در دنیای واقعی، دادههایی که از فرمهای وبسایتها، حسگرها، سیستمهای فروش یا نظرسنجیها جمعآوری میشوند، هرگز آماده تحلیل نیستند. این دادهها معمولاً پر از مقادیر گمشده، رکوردهای تکراری، فرمتهای تاریخ اشتباه و دادههای پرت (Outliers) هستند.
بر اساس آمار، یک دانشمند داده بیش از ۷۰ تا ۸۰ درصد از وقت خود را صرف آمادهسازی و پاکسازی دادهها (Data Cleaning) میکند. در میان ابزارهای مختلف، زبان برنامهنویسی R به دلیل داشتن اکوسیستم غنی و بستههای اختصاصی، یکی از قدرتمندترین پلتفرمها برای این کار است.
۱. چرا زبان R برای پاکسازی دادهها بیرقیب است؟
زبان R از ابتدا توسط آمارشناسان برای کار با دادهها طراحی شده است. بر خلاف زبانهای عمومی مانند پایتون، ساختار اصلی R بر پایه ابزاری به نام data.frame شکل گرفته که مأموریت آن ذخیرهسازی دادههای جدولی است.
بزرگترین مزیت R در بخش فرآوری داده، مجموعهای از بستهها به نام Tidyverse است. این اکوسیستم با ارائه یک زبان مشترک و خوانایی فوقالعاده بالا از طریق اپراتور پایپ (%>% یا |>\)، کدنویسی را به شدت لذتبخش و سریع میکند. با R شما میتوانید میلیونها سطر داده را با چند خط کد تمیز و ساختاریافته کنید.
۲. قدم اول: بررسی اولیه و شناخت ساختار دادهها (Data Exploration)
پیش از شروع به شستشوی دادهها، ابتدا باید حجم فاجعه را ارزیابی کنید! پس از بارگذاری دادهها در R، باید ساختار و نوع فیلدها را بررسی کنیم.
ابزارهای کلیدی برای ارزیابی دیتابیس
با فرض اینکه دادههای خود را بارگذاری کردهاید، ابزارهای زیر اولین خط دفاعی شما هستند:
-
تابع
str(data): ساختار کلی دیتابیس، تعداد سطرها، ستونها و نوع دادهای هر ستون (عددی، متنی، فاکتور) را نشان میدهد. -
تابع
summary(data): یک گزارش آماری سریع (شامل میانگین، میانه، حداقل، حداکثر و تعداد مقادیر گمشده) به شما ارائه میدهد. -
بسته
glimpse(data): از مجموعهdplyrنسخهای خواناتر و تمیزتر از دابغstrرا به نمایش میگذارد.
۳. ورود به جهان Tidyverse؛ نصب و فراخوانی ابزارهای اصلی
برای یک پروژه پاکسازی داده مدرن در R، ابتدا باید بسته tidyverse و بسته تخصصی پاکسازی یعنی janitor را نصب و فراخوانی کنیم:
install.packages("tidyverse")
install.packages("janitor")
library(tidyverse)
library(janitor)
بسته janitor یکی از بهترین ابزارها برای کارهای کثیف و اولیه مانند تمیز کردن نام ستونهاست که در ادامه به آن میپردازیم.
۴. گامبهگام فرآیند پاکسازی دادهها (Data Cleaning Steps) با R
بیایید مراحل اصلی دیتای کلینینگ را با مثالهای کاربردی در R جلو ببریم:
گام اول: تمیز کردن نام ستونها (Standardizing Column Names)
دادههای خام اغلب دارای نام ستونهایی با فاصله، حروف بزرگ و کوچک نامنظم، یا کاراکترهای عجیب هستند (مثلاً First Name! یا DATE_OF_BIRTH). تابع clean_names() از بسته janitor معجزه میکند:
# تبدیل تمام نام ستونها به فرمت استاندارد snake_case (حروف کوچک همراه با خط تیره زیرین)
clean_data <- raw_data %>%
clean_names()
با همین یک خط کد، نامی مثل Age (2026) به age_2026 تبدیل میشود که کار با آن در کدنویسی بسیار سادهتر است.
گام دوم: مدیریت و حذف رکوردهای تکراری (Handling Duplicates)
وجود رکوردهای تکراری در دیتابیس باعث سوگیری در نتایج آماری میشود. در مجموعه dplyr به راحتی با تابع distinct() میتوانید سطرهای تکراری را حذف کنید:
# حذف سطرهای کاملاً تکراری
clean_data <- clean_data %>%
distinct()
# حذف تکراریها بر اساس یک ستون خاص (مثلاً کد ملی یا آیدی کاربر)
clean_data <- clean_data %>%
distinct(user_id, .keep_all = TRUE)
گام سوم: اصلاح انواع دادهها (Fixing Data Types)
یکی از رایجترین مشکلات این است که اعداد یا تاریخها به صورت متنی (Character) ذخیره شدهاند. برای مثال، ستون قیمت دارای علامت دلار است و R آن را متن تشخیص میدهد. با استفاده از تابع mutate() و توابع تبدیلی، این مشکل حل میشود:
# تبدیل ستون متن به عددی و فاکتور
clean_data <- clean_data %>%
mutate(
age = as.numeric(age),
gender = as.factor(gender)
)
برای مدیریت تاریخها، بسته lubridate (که عضوی از Tidyverse است) بهترین ابزار است. فرقی نمیکند تاریخ به چه فرمتی نوشته شده باشد (2026-05-29 یا 29/05/2026)، توابعی مثل ymd() یا dmy() آن را به فرمت استاندارد تاریخ تبدیل میکنند:
library(lubridate)
clean_data <- clean_data %>%
mutate(registration_date = dmy(registration_date))
۵. چالش بزرگ مقادیر گمشده (Handling Missing Values – NA)
دادههای خالی یا همان NA (Not Available) بزرگترین کابوس در پردازش داده هستند. در R برای مدیریت این مقادیر چند استراتژی وجود دارد:
۱. شناسایی مقادیر گمشده
برای اینکه بدانید در هر ستون چند مقدار NA وجود دارد، کد زیر فوقالعاده است:
colSums(is.na(clean_data))
۲. حذف سطرهای دارای NA (حذف رادیکال)
اگر تعداد مقادیر گمشده بسیار کم است و حذف آنها آسیبی به تحلیل نمیزند، از na.omit() یا drop_na() استفاده کنید:
# حذف هر سطری که حداقل یک مقدار NA دارد
clean_data <- clean_data %>%
drop_na()
# حذف سطرها در صورتی که فقط در یک ستون خاص NA داشته باشند
clean_data <- clean_data %>%
drop_na(email_address)
۳. جایگزینی مقادیر گمشده (Imputation)
در بسیاری از مواقع حذف دادهها جرم است! در این حالت باید مقادیر خالی را با مقادیری مثل میانگین (Mean)، میانه (Median) یا یک مقدار ثابت جایگزین کنیم:
# جایگزینی مقادیر خالی ستون درآمد با میانه همان ستون
clean_data <- clean_data %>%
mutate(income = replace_na(income, median(income, na.rm = TRUE)))
۶. فیلتر کردن و اصلاح دادههای متنی با stringr
دادههای متنی معمولاً پر از فاصلههای اضافی در ابتدا و انتها هستند یا نیاز به جایگزینی کلمات دارند. بسته stringr در R کار را راحت کرده است:
# حذف فاصلههای اضافه از ابتدا و انتهای متن (Trim)
clean_data <- clean_data %>%
mutate(city = str_to_title(str_trim(city)))
# تابع str_to_title حرف اول کلمات را بزرگ میکند (مثلاً tehran تبدیل به Tehran میشود)
۷. شناسایی و مدیریت دادههای پرت (Outliers)
دادههای پرت دادههایی هستند که به طرز فاحشی از بقیه مقادیر فاصله دارند (مثلاً سن ۲۰۰ سال برای یک انسان!). برای شناسایی این دادهها در R، استفاده از نمودار جعبهای (Boxplot) یا معیارهای آماری مانند دامنه میانچارکی (IQR) مرسوم است.
# شناسایی دادههای پرت با معیار IQR
q1 <- quantile(clean_data$income, 0.25, na.rm = TRUE)
q3 <- quantile(clean_data$income, 0.75, na.rm = TRUE)
iqr <- q3 - q1
# فیلتر کردن دادهها و حذف مقادیر به شدت خارج از محدوده
clean_data <- clean_data %>%
filter(income >= (q1 - 1.5 * iqr) & income <= (q3 + 1.5 * iqr))
۸. بررسی نهایی؛ آیا دادههای ما واقعاً “Tidy” شدهاند؟
یک دادهی تمیز یا Tidy Data بر اساس تعریف هادلی ویکهام (خالق Tidyverse) باید ۳ ویژگی اصلی داشته باشد:
-
هر متغیر (Variable) باید در یک ستون مجزا قرار داشته باشد.
-
هر مشاهده (Observation) یا رکورد باید در یک سطر مجزا قرار گیرد.
-
هر مقدار (Value) باید در یک سلول مشخص قرار داشته باشد.
اگر دادههای شما این ساختار را ندارند، با استفاده از توابع pivot_longer() و pivot_wider() در بسته tidyr میتوانید شکل ساختاری جدول خود را از حالت افقی به عمودی (یا بالعکس) تغییر دهید تا کاملاً استاندارد شود.
نتیجهگیری نهایی
مراحل پاکسازی دادهها (Data Cleaning) با R شاید در ابتدا زمانبر و چالشبرانگیز به نظر برسد، اما با تسلط بر ابزارهای قدرتمند خانواده Tidyverse مانند dplyr ،stringr و janitor تبدیل به یک فرآیند کدنویسی لذتبخش و کاملاً خودکار میشود.
فراموش نکنید که یک دیتای تمیز، تضمینکننده دقت مدلهای هوش مصنوعی، الگوریتمهای یادگیری ماشین و نمودارهای آماری شماست. پس به عنوان یک متخصص داده، همیشه بیشترین انرژی خود را روی فاز شستشو و آمادهسازی دادهها بگذارید.
دوره آموزشی زبان برنامه نویسی R »کلیک کنید» یک برنامه جامع است که بر توسعه محاسبات آماری و علم دادهها ، ایجاد اشکال گرافیکی و نمودارها و تحلیل سریهای زمانی، رگرسیون خطی و…. با استفاده از ابزار R تمرکز دارد.
دنبال این هستید که داده های خود را از طریق تجزیه و تحلیل بصری به نمایش بذارید ؟ با ما در داده کاوی ویستا ارتباط برقرار کنید.
با یکی از کارشناسان داده ما تماس بگیرید و صحبت کنید، و ما به هر سوالی که ممکن است داشته باشید پاسخ خواهیم داد.
سپاسگذاریم از وقتی که برای خواندن این مقاله گذاشتید
.
برای خرید لایسنس پاور بی ای Power BI کلیک کنید
.
برای مشاهده ویدیوهای آموزشی داده کاوی و هوش تجاری ما را در شبکه های اجتماعی دنبال کنید
Youtube Chanel :VISTA Data Mining
Aparat Chanel: VISTA Data Mining
Instagram Chanel: VISTA Data Mining
Telegram Chanel: VISTA Data Mining
Linkedin Chanel: VISTA Company
ٖ


