پیش‌نیاز و هدف یادگیری

این بخش، گام 24 از مسیر «پایتون از صفر» است. هدف این درس ساخت جدول و تجمیع مبلغ بر اساس دسته است. پیش‌نیاز: محیط مجازی، pip و شروع NumPy از صفر. کتابخانهٔ لازم: pandas؛ در میزکار سایت آماده است. اگر مفهوم قبلی برایتان ناآشناست، ابتدا مقالهٔ پیش‌نیاز را بخوانید و مثالش را اجرا کنید؛ حفظ‌کردن کد جای فهم ورودی و خروجی را نمی‌گیرد.

مفهوم اصلی به زبان ساده

Pandas دادهٔ جدولی را با DataFrame نمایش می‌دهد. هر ستون نام و نوع دارد و هر سطر یک مشاهده است. برای شروع کافی است لیستی از دیکشنری‌های هم‌شکل داشته باشید؛ لازم نیست فایل بزرگ یا پایگاه داده بسازید. در محیط مجازی رایانهٔ شخصی python -m pip install pandas را اجرا کنید؛ در میزکار سایت این کتابخانه آماده است.

مسئلهٔ این درس

در پروژهٔ «گزارش دسته‌های هزینه با Pandas» باید یک تابع مستقل بنویسید. میزکار ورودی نمونه را در request.json قرار می‌دهد؛ تابع solve دیکشنری داده را می‌گیرد و نتیجهٔ خود را برمی‌گرداند. در این قرارداد input لازم نیست و خواندن تعاملی از ترمینال ممکن است اجرای ارزیابی را متوقف کند. از مثال زیر شروع کنید و پیش از اجرای آن، شکل نتیجه را حدس بزنید.

نمونه‌کد قابل اجرا

import pandas as pd

def solve(data):
    if not data['rows']:
        return {'total': 0, 'by_category': {}}
    frame = pd.DataFrame(data['rows'], columns=['category', 'amount'])
    grouped = frame.groupby('category')['amount'].sum()
    return {'total': float(frame['amount'].sum()), 'by_category': {str(k): float(v) for k, v in grouped.items()}}

print(solve({'rows': [{'category': 'book', 'amount': 10}, {'category': 'transport', 'amount': 5}, {'category': 'book', 'amount': 2}]}))

نتیجهٔ مورد انتظار

{
  "total": 17,
  "by_category": {
    "book": 12,
    "transport": 5
  }
}

توضیح مرحله‌به‌مرحله

از rows یک DataFrame با ستون‌های category و amount می‌سازیم. groupby بر اساس دسته، سطرهای هم‌نام را کنار هم قرار می‌دهد و sum مبلغ هر گروه را جمع می‌کند. نتیجه ابتدا Series است و با to_dict به نگاشت قابل استفاده در JSON تبدیل می‌شود. مجموع کل از همان ستون amount به دست می‌آید؛ مقدارها در این قرارداد عددی و غیرگمشده‌اند.

قرارداد ورودی و خروجی

مثال فقط یک ورودی است، نه همهٔ مسئله. مقدارها را از data بخوانید و جواب نمونه را ثابت در برنامه ننویسید. نام کلیدها، نوع عدد و رشته و ترتیب فهرست‌ها بخشی از قراردادند. در پروژه، بخش پایانی main.py نتیجهٔ تابع را در result.json ذخیره می‌کند؛ آن بخش را نگه دارید. موفقیت اجرای برنامه با درست‌بودن پاسخ و قبولی ارزیابی یکسان نیست.

خطای رایج و راه تشخیص

groupby به‌تنهایی جمع نمی‌زند؛ باید ستون و عمل تجمیع را مشخص کنید. نام ستون اشتباه KeyError می‌دهد و باید با قرارداد ورودی مقایسه شود. دادهٔ خالی را پیش از ساخت گزارش مدیریت می‌کنیم. مقدار خالی و مقدار صفر یکی نیستند؛ این پروژه فقط صفر واقعی را می‌پذیرد و پاک‌سازی missing را به تمرین بعدی موکول می‌کند.

تمرین مستقل و خودآزمایی

دو هزینه در دستهٔ book و یک هزینه در دستهٔ transport اضافه کنید. مجموع گروه‌ها را با total مقایسه کنید. سپس یک سطر با مبلغ صفر بیفزایید و بررسی کنید دسته در گزارش باقی می‌ماند.

برای هر آزمایش، ورودی، خروجی مورد انتظار و خروجی واقعی را جدا بنویسید. اگر تفاوتی دیدید، یک نمونهٔ کوچک‌تر بسازید و تغییر را دوباره امتحان کنید. به جای اجرای چند تغییر هم‌زمان، هر بار یک فرض را بررسی کنید. پس از فهم نمونه، پروژهٔ مرتبط را در میزکار حل کنید؛ ارزیابی با چند ورودی متفاوت انجام می‌شود و پاسخ ثابت نمونه پذیرفته نخواهد شد.

گام بعدی

موضوع‌های این درس: Pandas · DataFrame · groupby. اگر می‌توانید دلیل هر خط را توضیح دهید و ورودی تازه‌ای را بدون دست‌کاری منطق اصلی حل کنید، به مقالهٔ بعدی بروید. هدف مسیر مقدماتی، تسلط بر همین رفتارهای کوچک و قابل آزمایش است؛ برای شروع پروژه‌های یادگیری ماشین عجله نکنید.

منابع و مطالعهٔ بیشتر

برای بررسی جزئیات و ادامهٔ مطالعه؛ متن این راهنما مستقلاً برای نوونتیکس نوشته شده است.