Kahibaro
Discord Login Register

مثال‌های سادهٔ تحلیل داده

مروری خیلی کوتاه قبل از شروع مثال‌ها

در این زیرفصل فرض می‌کنیم:

در این‌جا تمرکز ما روی چند سناریوی واقعی کوچک است تا ببینید با همین مفاهیم ساده، چطور می‌شود تحلیل داده انجام داد.

برای همه‌ی مثال‌ها چند نکته:

  import numpy as np
  import pandas as pd
  import matplotlib.pyplot as plt
  plt.show()

استفاده می‌کنیم (در برخی محیط‌ها مثل Jupyter ممکن است خودش نمایش دهد).

مثال ۱: تحلیل نمره‌های یک کلاس

سناریو

یک فایل (یا جدول) از نمره‌های یک کلاس دارید و می‌خواهید:

برای سادگی، داده را مستقیماً در کد می‌سازیم؛ در عمل می‌تواند از فایل خوانده شود.

import pandas as pd
import matplotlib.pyplot as plt
# داده‌ی نمونه: نمره‌های یک کلاس
data = {
    "name": ["علی", "سارا", "مهدی", "مینا", "رضا", "نگار", "حسین", "الهام"],
    "score": [18, 12, 9, 15, 7, 20, 14, 8]
}
df = pd.DataFrame(data)
print(df)

محاسبه‌ی شاخص‌های ساده

avg_score = df["score"].mean()
min_score = df["score"].min()
max_score = df["score"].max()
print("میانگین نمره:", avg_score)
print("کمترین نمره:", min_score)
print("بیشترین نمره:", max_score)

چند مثال دیگر از آمار ساده:

print("میانه‌ی نمره:", df["score"].median())
print("انحراف معیار:", df["score"].std())

شمارش دانشجویان قبول و مردود

failed = df[df["score"] < 10]
passed = df[df["score"] >= 10]
print("تعداد مردودها:", len(failed))
print("تعداد قبول‌ها:", len(passed))
print("مردودها:")
print(failed)

رسم نمودار میله‌ای نمره‌ها

plt.bar(df["name"], df["score"])
plt.xlabel("دانشجو")
plt.ylabel("نمره")
plt.title("نمره‌های دانشجویان")
plt.xticks(rotation=45)  # چرخاندن برچسب‌ها برای خوانایی بهتر
plt.tight_layout()
plt.show()

نکات تحلیلی ساده

df["status"] = df["score"].apply(lambda x: "قبول" if x >= 10 else "مردود")
print(df)

این نوع برچسب‌گذاری (Labeling) در بسیاری از تحلیل‌ها تکرار می‌شود.

مثال ۲: تحلیل ساده‌ی فروش ماهانه

سناریو

فرض کنید داده‌ی فروش یک فروشگاه در چند ماه مختلف را دارید و می‌خواهید:

import pandas as pd
import matplotlib.pyplot as plt
data = {
    "month": ["فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور"],
    "sales": [1200, 1500, 1600, 900, 2000, 2300]
}
df = pd.DataFrame(data)
print(df)

آمار کلی فروش

total_sales = df["sales"].sum()
avg_sales = df["sales"].mean()
max_sales = df["sales"].max()
best_month = df.loc[df["sales"].idxmax(), "month"]
print("مجموع فروش:", total_sales)
print("میانگین فروش:", avg_sales)
print("بیشترین فروش:", max_sales, "در ماه", best_month)

رسم روند فروش (نمودار خطی)

plt.plot(df["month"], df["sales"], marker="o")
plt.xlabel("ماه")
plt.ylabel("میزان فروش")
plt.title("روند فروش ماهانه")
plt.grid(True)
plt.tight_layout()
plt.show()

تشخیص ماه‌های «ضعیف» و «خوب»

مثلاً بگوییم:

weak_months = df[df["sales"] < 1000]
great_months = df[df["sales"] > 1800]
print("ماه‌های با فروش ضعیف:")
print(weak_months)
print("\nماه‌های با فروش خیلی خوب:")
print(great_months)

می‌توانیم یک ستون وضعیت اضافه کنیم:

def label_sales(x):
    if x < 1000:
        return "ضعیف"
    elif x > 1800:
        return "خیلی خوب"
    else:
        return "معمولی"
df["status"] = df["sales"].apply(label_sales)
print(df)

این‌طور دسته‌بندی کردن برای گزارش‌های مدیریتی خیلی رایج است.

مثال ۳: تحلیل ساده‌ی داده‌های وزنی و قدی

سناریو

می‌خواهیم یک رابطه‌ی ساده بین قد و وزن را بررسی کنیم و یک نمودار پراکنش (Scatter Plot) رسم کنیم.

import pandas as pd
import matplotlib.pyplot as plt
data = {
    "height_cm": [160, 165, 170, 175, 180, 185, 190],
    "weight_kg": [55, 60, 65, 72, 80, 85, 90]
}
df = pd.DataFrame(data)
print(df)

محاسبه‌ی BMI به عنوان یک ویژگی جدید

فرمول BMI:

$$
BMI = \frac{\text{weight (kg)}}{(\text{height (m)})^2}
$$

ارتفاع بر حسب متر $= \frac{\text{height\_cm}}{100}$

df["height_m"] = df["height_cm"] / 100
df["BMI"] = df["weight_kg"] / (df["height_m"] ** 2)
print(df[["height_cm", "weight_kg", "BMI"]])

دسته‌بندی ساده براساس BMI

(تعریف دقیق پزشکی مطرح نیست؛ فقط یک مثال تحلیلی است)

def label_bmi(bmi):
    if bmi < 18.5:
        return "کم‌وزن"
    elif bmi < 25:
        return "نرمال"
    else:
        return "بالای نرمال"
df["BMI_label"] = df["BMI"].apply(label_bmi)
print(df)

رسم نمودار پراکنش قد و وزن

plt.scatter(df["height_cm"], df["weight_kg"])
plt.xlabel("قد (cm)")
plt.ylabel("وزن (kg)")
plt.title("نمودار پراکنش قد و وزن")
plt.grid(True)
plt.show()

می‌توانید از رنگ‌ها یا اندازه‌های مختلف برای نشان دادن برچسب BMI استفاده کنید (ایده برای تمرین).

مثال ۴: کار با داده‌ی زمانی ساده (دمای روزانه)

سناریو

دمای هوا را در چند روز متوالی ثبت کرده‌اید و می‌خواهید:

import pandas as pd
import matplotlib.pyplot as plt
data = {
    "date": [
        "2024-01-01", "2024-01-02", "2024-01-03",
        "2024-01-04", "2024-01-05", "2024-01-06", "2024-01-07"
    ],
    "temp_c": [5, 7, 6, 4, 3, 8, 10]
}
df = pd.DataFrame(data)
# تبدیل ستون تاریخ به نوع datetime
df["date"] = pd.to_datetime(df["date"])
print(df)

آمار ساده‌ی دما

print("میانگین دما:", df["temp_c"].mean())
print("کمترین دما:", df["temp_c"].min())
print("بیشترین دما:", df["temp_c"].max())
coldest_day = df.loc[df["temp_c"].idxmin(), "date"]
hottest_day = df.loc[df["temp_c"].idxmax(), "date"]
print("سردترین روز:", coldest_day)
print("گرم‌ترین روز:", hottest_day)

رسم نمودار زمانی دما

plt.plot(df["date"], df["temp_c"], marker="o")
plt.xlabel("تاریخ")
plt.ylabel("دما (°C)")
plt.title("تغییرات دمای روزانه")
plt.grid(True)
plt.tight_layout()
plt.show()

در داده‌های واقعی‌تر، می‌توانید این کار را برای هفته، ماه یا سال انجام دهید و روندهای فصلی را ببینید.

مثال ۵: پاک‌سازی و میانگین‌گیری داده‌ی پرسشنامه

سناریو

یک پرسشنامه‌ی ساده با امتیاز از ۱ تا ۵ دارید؛ بعضی جواب‌ها ناقص است (کاربر چیزی وارد نکرده یا مقدار نامعتبر داده است). می‌خواهید:

import pandas as pd
data = {
    "user": ["کاربر۱", "کاربر۲", "کاربر۳", "کاربر۴", "کاربر۵"],
    "rating": [5, None, 3, 6, 4]  # توجه: 6 نامعتبر است، None داده‌ی خالی
}
df = pd.DataFrame(data)
print(df)

پیدا کردن و مدیریت مقادیر خالی (NaN)

پانداس مقدار None را معمولاً به NaN تبدیل می‌کند.

print("مقادیر خالی:")
print(df[df["rating"].isna()])

می‌توانیم سطرهای خالی را حذف کنیم:

df_clean = df.dropna(subset=["rating"])
print("بعد از حذف مقادیر خالی:")
print(df_clean)

حذف امتیازهای نامعتبر

مثلاً امتیاز باید بین ۱ و ۵ باشد:

valid_ratings = df_clean[(df_clean["rating"] >= 1) & (df_clean["rating"] <= 5)]
print("امتیازهای معتبر:")
print(valid_ratings)

میانگین امتیاز معتبر

avg_rating = valid_ratings["rating"].mean()
print("میانگین امتیاز معتبر:", avg_rating)

این یک نمونه‌ی رایج از «پاک‌سازی داده» است که تقریباً در همه‌ی پروژه‌های واقعی لازم می‌شود.

پیشنهادهایی برای تمرین بیشتر

با الهام از مثال‌های بالا، می‌توانید این تمرین‌ها را انجام دهید:

  1. نمره‌های کلاس
    • یک ستون بسازید که به هر محدوده‌ی نمره (۰–۱۰، ۱۰–۱۵، ۱۵–۲۰) یک برچسب بدهد.
    • تعداد افراد در هر دسته را حساب کنید و نمودار میله‌ای آن را رسم کنید.
  2. فروش ماهانه
    • یک ستون «فروش تجمعی» (cumulative_sales) بسازید که مجموع فروش از ابتدای سال تا آن ماه را نشان دهد.
    • نمودار فروش ماهانه و فروش تجمعی را روی یک شکل (دو خط) رسم کنید.
  3. قد و وزن
    • در نمودار پراکنش، برای افراد با برچسب BMI متفاوت (کم‌وزن، نرمال، بالای نرمال) رنگ‌های مختلف استفاده کنید.
  4. دمای روزانه
    • روزهایی را که دما بالاتر از میانگین است با یک علامت (مثلاً دایره‌ی قرمز) در نمودار مشخص کنید.
  5. پرسشنامه
    • علاوه بر میانگین، میانه (median) و بیشترین امتیاز (max) را هم حساب کنید.
    • تعداد پاسخ‌دهندگان با امتیاز ۵ را پیدا کنید و درصد آن‌ها را نسبت به کل پاسخ‌های معتبر حساب کنید.

این مثال‌ها نشان می‌دهند که حتی با ابزارهای بسیار پایه‌ای pandas، NumPy و matplotlib می‌توانید تحلیل‌های مفید و قابل‌فهم انجام دهید. در مراحل بعدی، می‌توانید به سراغ مجموعه‌داده‌های بزرگ‌تر و پیچیده‌تر بروید.

Views: 7

Comments

Please login to add a comment.

Don't have an account? Register now!