فصل ۱۶ · پروژهٔ تکمیلی

جمع‌آوری، تحلیل و نمایش داده

با مسیر یک پروژهٔ داده و نمونه‌های نقشه، شبکه و متن آشنا شو؛ یک گزارش کوچک بساز.

۵۰ دقیقهٔ پیشنهادی مطالعه و تمرین۵ بخشتمرین عملی و خودآزمایی

بعد از این فصل می‌توانی…

  • مراحل جمع‌آوری، پاک‌سازی، تحلیل و نمایش را توضیح بدهی.
  • کاربرد ذخیره‌سازی میان‌مرحله‌ای و نمایه‌سازی را بفهمی.
  • گزارش فراوانی و نمودار متنی ساده بسازی.

پیش از تمرین، رشته، فهرست، دیکشنری و مرتب‌سازی را مرور کن. اجرای پروژه‌های کامل منبع به آموزش جداگانهٔ وب، API و SQLite نیاز دارد.

پیشنهاد برای پیش‌نیاز: عبارت‌های منظم و استخراج اطلاعات

ویدیوی این فصل

جمع‌آوری، تحلیل و نمایش داده

ویدیوی این فصل هنوز اضافه نشده است. می‌توانی همین حالا آموزش متنی و تمرین‌ها را شروع کنی.

بخش 1

چهار مرحلهٔ یک پروژهٔ داده

پروژه معمولاً با جمع‌آوری داده شروع می‌شود؛ بعد داده پاک‌سازی و یکدست می‌شود، محاسبه انجام می‌گیرد و نتیجه به شکلی خوانا نمایش داده می‌شود. اگر ورودی نامعتبر را نادیده بگیری، نمودار زیبا هم می‌تواند گمراه‌کننده باشد.

این فصل در منبع شمارهٔ ۱۶ است. فایل‌های فصل‌های ۱۲ تا ۱۵ در مجموعهٔ دریافتی وجود ندارند. بنابراین پروژه‌های وب، API و پایگاه داده را در اینجا در سطح معماری معرفی می‌کنیم و تمرین اجرایی را با دادهٔ کوچک آماده انجام می‌دهیم.

بخش 2

دادهٔ مکانی و نقشه

در نمونهٔ GeoData اسلایدها، نام مکان به مختصات تبدیل می‌شود، پاسخ‌ها در geodata.sqlite ذخیره می‌شوند و دادهٔ آمادهٔ نمایش به مرورگر می‌رود. ذخیرهٔ پاسخ اجازه می‌دهد کار پس از توقف ادامه پیدا کند و درخواست تکراری کمتر شود.

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

بخش 3

خزنده، نمایه و رتبه‌بندی

خزنده صفحه‌ای را می‌خواند، پیوندهایش را استخراج می‌کند و برخی از آن‌ها را برای بررسی بعدی نگه می‌دارد. نمایه، نگاشت واژه‌ها به صفحه‌هاست تا هنگام جست‌وجو همهٔ متن‌ها دوباره خوانده نشوند.

PageRank در نمونهٔ اسلاید، اهمیت نسبی صفحه‌ها را از شبکهٔ پیوندها برآورد می‌کند. سیاست انتخاب صفحه، جلوگیری از بازدید تکراری و فاصلهٔ مناسب بین درخواست‌ها، بخش‌های طراحی خزنده‌اند. این درس خزندهٔ زنده اجرا نمی‌کند.

بخش 4

تحلیل پیام‌ها و انتخاب نمایش

نمونهٔ آرشیو پیام در اسلایدها، جمع‌آوری و ذخیره را از تحلیل جدا می‌کند. پس از پاک‌سازی می‌توان تعداد پیام هر فرستنده، واژه‌های پرتکرار یا تغییر تعداد پیام در زمان را محاسبه کرد.

برای مقایسهٔ دسته‌ها، نمودار میله‌ای مناسب است؛ برای تغییر در زمان، نمودار خطی؛ و برای ارتباط صفحه‌ها، نمایش شبکه. ابرواژه تأکید بصری می‌دهد اما مقایسهٔ دقیق عددها را دشوارتر می‌کند. در تمرین از میله‌های متنی استفاده می‌کنیم تا بدون کتابخانهٔ اضافی اجرا شود.

بخش 5

یک تحلیل کوچک و قابل تکرار

ورودی زیر چند نام رنگ است که بزرگی حروف و فاصلهٔ اضافی دارند. ابتدا strip و lower داده را یکدست می‌کنند، سپس دیکشنری فراوانی را نگه می‌دارد و در پایان هر # یک رأی را نمایش می‌دهد.

این نمونهٔ تکمیلی برای کارگاه سایت طراحی شده است؛ جایگزین پروژه‌های کامل نقشه و شبکه در منبع نیست.

نمودار متنی رأی‌ها

raw = [" Blue ", "red", "BLUE", "green", "red", "blue"]
counts = {}
for item in raw:
    color = item.strip().lower()
    if color:
        counts[color] = counts.get(color, 0) + 1
for color, count in sorted(counts.items()):
    print(color, "#" * count, count)
خروجی مورد انتظار
blue ### 3
green # 1
red ## 2
حالا نوبت توست

گزارش فعالیت گروه

از فهرست نام فعالیت‌ها یک گزارش بساز: فاصله‌ها و بزرگی حروف را یکدست کن، تعداد هر فعالیت را بشمار و بر اساس نام فعالیت میلهٔ متنی چاپ کن.

یک راهنمای کوچک

از strip().lower() و get کمک بگیر؛ برای نمایش از "#" * count استفاده کن.

پاسخ پیشنهادی و خروجی
activities = [" Code ", "read", "CODE", "play", "read"]
counts = {}
for item in activities:
    activity = item.strip().lower()
    if activity:
        counts[activity] = counts.get(activity, 0) + 1
for activity, count in sorted(counts.items()):
    print(activity, "#" * count, count)

خروجی نمونه

code ## 2
play # 1
read ## 2

خودآزمایی

پاسخ را انتخاب کن و دلیل آن را بخوان. این بخش برای تمرین است و نمرهٔ رسمی ثبت نمی‌کند.

1. چرا پاسخ‌های دریافت‌شده را ذخیره می‌کنیم؟
2. برای نمایش تغییر تعداد پیام در زمان کدام مناسب‌تر است؟