Kahibaro
Discord Login Register

پروژهٔ کوچک وب یا داده

مقدمه

در این بخش یک پروژهٔ کوچک انتخاب می‌کنیم که با امکاناتی که تا این‌جا یاد گرفته‌اید، قابل انجام باشد.
هدف این پروژه‌ها:

در حد یک «نمونهٔ خیلی ساده» جلو می‌رویم؛ کافی است بتوانید ایده را ببینید و خودتان نسخهٔ شخصی‌تان را بسازید.

در ادامه دو مسیر پیشنهادی را می‌بینید. لازم نیست هر دو را انجام دهید؛ یکی را انتخاب کنید و تا حد ممکن کاملش کنید.


پروژهٔ کوچک وب: «دفترچهٔ تماس ساده با Flask»

ایدهٔ پروژه

یک وب‌اپلیکیشن خیلی ساده می‌سازیم که:

این پروژه فقط برای آشنا شدن با روند کار یک برنامهٔ وب است، نه ساختن یک سایت واقعی کامل.

پیش‌نیازها

pip install flask

(اگر از pip قبلاً استفاده نکرده‌اید، در فصل کتابخانه‌ها و pip توضیح داده شده است.)

ساختار پروژه

پیشنهاد می‌شود یک پوشهٔ جدید بسازید، مثلاً:

در این پروژه خیلی ساده، یک فایل HTML کافی است.

گام ۱: راه‌اندازی اولیهٔ Flask

در فایل app.py:

from flask import Flask, render_template, request, redirect
app = Flask(__name__)
contacts = []  # لیست برای نگه‌داشتن مخاطب‌ها در حافظهٔ برنامه
@app.route("/")
def index():
    return render_template("index.html", contacts=contacts)
if __name__ == "__main__":
    app.run(debug=True)

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

گام ۲: ساخت قالب HTML ساده

در پوشهٔ templates، فایل index.html:

<!DOCTYPE html>
<html lang="fa">
<head>
    <meta charset="UTF-8">
    <title>دفترچه تماس ساده</title>
</head>
<body>
    <h1>دفترچه تماس</h1>
    <h2>افزودن مخاطب جدید</h2>
    <form method="post" action="/add">
        <label>نام: <input type="text" name="name" required></label><br>
        <label>شماره: <input type="text" name="phone" required></label><br>
        <button type="submit">افزودن</button>
    </form>
    <h2>مخاطب‌ها</h2>
    {% if contacts %}
        <ul>
            {% for c in contacts %}
                <li>{{ c["name"] }} - {{ c["phone"] }}</li>
            {% endfor %}
        </ul>
    {% else %}
        <p>هنوز مخاطبی ثبت نشده است.</p>
    {% endif %}
</body>
</html>

در این فایل:

(این سینتکس مخصوص سیستم قالب‌دهی Flask است و به خود پایتون تعلق ندارد.)

گام ۳: افزودن مسیر برای ثبت مخاطب جدید

در app.py، زیر تابع index یک تابع جدید اضافه کنید:

@app.route("/add", methods=["POST"])
def add_contact():
    name = request.form.get("name")
    phone = request.form.get("phone")
    if name and phone:
        contact = {"name": name, "phone": phone}
        contacts.append(contact)
    return redirect("/")

اینجا:

گام ۴: اجرای برنامه

در ترمینال داخل پوشهٔ پروژه:

python app.py

معمولاً Flask آدرس‌ای شبیه این چاپ می‌کند:

 * Running on http://127.0.0.1:5000/

این آدرس را در مرورگر باز کنید؛ باید صفحهٔ دفترچه تماس را ببینید، مخاطب اضافه کنید و در لیست ببینید.

گسترش‌های پیشنهادی

اگر این پروژه برایتان آسان شد، می‌توانید:

  1. حذف مخاطب
    یک دکمه برای حذف هر مخاطب بگذارید و یک مسیر /delete/<index> تعریف کنید که با استفاده از del contacts[index] او را حذف کند.
  2. ذخیره در فایل
    به‌جای نگه‌داشتن داده فقط در حافظه، هنگام افزودن مخاطب، همهٔ لیست را در یک فایل متنی (مثلاً JSON ساده) ذخیره کنید و هنگام شروع برنامه، فایل را بخوانید.
  3. اعتبارسنجی ساده
    اگر شماره تلفن فقط باید عدد باشد، قبل از اضافه‌کردن بررسی کنید که phone.isdigit() باشد.

پروژهٔ کوچک داده: «تحلیل سادهٔ نمرهٔ دانشجویان»

اگر مسیر داده برایتان جالب‌تر است، می‌توانید این پروژه را انتخاب کنید.

ایدهٔ پروژه

از کتابخانه‌های متداول علم داده استفاده می‌کنیم:

پیش‌نیازها

نصب کتابخانه‌ها:

pip install pandas matplotlib

گام ۱: ساختن فایل CSV نمونه

در پوشهٔ پروژه، فایلی به‌نام grades.csv ایجاد کنید با محتوای ساده مثل:

name,grade
Ali,17
Sara,19
Reza,14
Mina,18
Omid,12

هر خط یک دانشجو و نمرهٔ او را نشان می‌دهد.

گام ۲: خواندن داده و محاسبات ساده

فایل analyze_grades.py:

import pandas as pd
# خواندن فایل CSV
df = pd.read_csv("grades.csv")
print("داده‌های خام:")
print(df)
# محاسبهٔ میانگین، بیشینه و کمینه
avg = df["grade"].mean()
mx = df["grade"].max()
mn = df["grade"].min()
print("\nآمار نمره‌ها:")
print("میانگین:", avg)
print("بیشترین نمره:", mx)
print("کمترین نمره:", mn)
# پیدا کردن دانشجویان با بیشترین و کمترین نمره
best_students = df[df["grade"] == mx]
worst_students = df[df["grade"] == mn]
print("\nبهترین دانشجو(ها):")
print(best_students)
print("\nضعیف‌ترین دانشجو(ها):")
print(worst_students)

اینجا:

گام ۳: رسم نمودار

در همان فایل:

import matplotlib.pyplot as plt
# رسم نمودار میله‌ای نمره‌ها
plt.bar(df["name"], df["grade"])
plt.title("نمرهٔ دانشجویان")
plt.xlabel("نام")
plt.ylabel("نمره")
plt.ylim(0, 20)  # چون نمره از 0 تا 20 است
plt.grid(axis="y")
plt.tight_layout()
plt.show()

با اجرای این اسکریپت:

python analyze_grades.py

گسترش‌های پیشنهادی

اگر این پروژه را خوب انجام دادید، می‌توانید:

  1. خواندن نام فایل از کاربر
    با input() از کاربر نام فایل CSV را بگیرید و همان را بخوانید.
  2. افزودن ستونی برای وضعیت قبولی/ردی
    مثلاً هرکس نمره‌اش $\geq ۱۰$ است، «قبول» و بقیه «رد شده».
    می‌توانید یک ستون جدید به DataFrame اضافه کنید:
   df["status"] = df["grade"].apply(
       lambda g: "قبول" if g >= 10 else "رد شده"
   )
   print(df)
  1. ذخیرهٔ نتایج در فایل جدید
    خروجی پردازش‌شده را در یک فایل CSV جدید ذخیره کنید:
   df.to_csv("grades_with_status.csv", index=False)
  1. ساخت نمودارهای دیگر
    مثلاً یک نمودار دایره‌ای (pie chart) برای تعداد قبول‌شده‌ها و ردشده‌ها.

چگونه از این پروژه‌ها بیشترین یادگیری را بگیرید؟

در فصل‌های بعدی و منابع تکمیلی، می‌توانید نسخه‌های حرفه‌ای‌تر این ایده‌ها را دنبال کنید؛ هدف این پروژه فقط این است که ببینید دانسته‌های فعلی‌تان چگونه به یک برنامهٔ واقعی کوچک تبدیل می‌شوند.

Views: 6

Comments

Please login to add a comment.

Don't have an account? Register now!