تحلیل داده‌های واقعی با Pandas و Matplotlib: یک پروژه گام به گام
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 14 دقیقه

تحلیل داده‌های واقعی با Pandas و Matplotlib: یک پروژه گام به گام

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

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

معرفی سناریوی واقعی پروژه

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

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

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

آماده‌سازی محیط توسعه

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

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

پیش از هر چیز باید اطمینان حاصل شود که پایتون روی سیستم نصب است. سپس با استفاده از ابزار مدیریت بسته‌ها، کتابخانه‌های اصلی پروژه نصب می‌شوند. این کتابخانه‌ها شامل Pandas برای پردازش داده و Matplotlib برای مصورسازی هستند. در صورتی که اپلیکیشن نهایی نیازمند رابط کاربری باشد، می‌توان از Streamlit نیز استفاده کرد.

pip install pandas
pip install matplotlib
pip install streamlit

در صورت تمایل به ایجاد یک محیط مجزا، استفاده از virtualenv یا venv توصیه می‌شود تا وابستگی‌های پروژه از سایر پروژه‌ها جدا بماند.

ایجاد ساختار اولیه‌ی پروژه

برای نظم‌دهی بهتر، ساختار ساده‌ای برای پروژه در نظر گرفته می‌شود. نمونه‌ای از این ساختار:

project/
│
├── data/
│   └── sales.csv
│
├── src/
│   ├── analysis.py
│   ├── charts.py
│   └── app.py
│
└── README.md

پوشه‌ی data برای نگهداری داده‌های خام، پوشه‌ی src برای کدهای اصلی و فایل app.py برای اجرای اپلیکیشن در نظر گرفته می‌شود.

بارگذاری و بررسی اولیه‌ی داده‌ها

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

نمونه کد برای بارگذاری داده:

import pandas as pd

df = pd.read_csv("data/sales.csv")

print(df.head())
print(df.info())

این مرحله تصویری اولیه از داده‌ها ارائه می‌دهد و مشخص می‌کند که در مراحل بعدی چه نوع پاک‌سازی یا تبدیل‌هایی لازم خواهد بود.

پاک‌سازی و آماده‌سازی داده‌ها

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

شناسایی و مدیریت داده‌های ناقص

در گام نخست باید مشخص شود که کدام ستون‌ها دارای مقادیر خالی هستند و این مقادیر چه تاثیری بر تحلیل خواهند داشت. بسته به نوع داده و اهمیت ستون، می‌توان تصمیم گرفت که رکوردهای ناقص حذف شوند یا مقادیر مناسب برای آن‌ها جایگزین شود.

نمونه کد برای بررسی داده‌های ناقص:

print(df.isnull().sum())

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

تبدیل انواع داده

در بسیاری از مجموعه‌داده‌ها، ستون‌هایی مانند تاریخ یا مبلغ ممکن است به‌صورت رشته ذخیره شده باشند. این موضوع می‌تواند مانع تحلیل صحیح شود. بنابراین لازم است انواع داده به شکل مناسب تبدیل شوند.

نمونه تبدیل تاریخ:

df["order_date"] = pd.to_datetime(df["order_date"])

این تبدیل امکان انجام تحلیل‌های زمانی مانند گروه‌بندی بر اساس ماه یا هفته را فراهم می‌کند.

حذف داده‌های غیرمعتبر یا پرت

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

نمونه شناسایی مقادیر پرت:

q1 = df["amount"].quantile(0.25)
q3 = df["amount"].quantile(0.75)
iqr = q3 - q1

lower = q1 - 1.5 * iqr
upper = q3 + 1.5 * iqr

df = df[(df["amount"] >= lower) & (df["amount"] <= upper)]

ایجاد ستون‌های کمکی

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

نمونه ایجاد ستون ماه:

df["month"] = df["order_date"].dt.month

این مرحله باعث می‌شود تحلیل‌های بعدی ساده‌تر و دقیق‌تر انجام شوند و اپلیکیشن نهایی بتواند گزارش‌های متنوع‌تری ارائه دهد.

تحلیل اکتشافی داده‌ها (EDA)

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

بررسی توزیع داده‌ها

یکی از نخستین گام‌ها، مشاهده‌ی توزیع متغیرهای کلیدی مانند مبلغ فروش، تعداد سفارش‌ها یا تعداد محصولات فروخته‌شده است. این کار به شناسایی الگوهای کلی و تشخیص رفتارهای غیرعادی کمک می‌کند.

نمونه کد برای بررسی توزیع یک ستون:

import matplotlib.pyplot as plt

plt.hist(df["amount"], bins=30)
plt.xlabel("Amount")
plt.ylabel("Frequency")
plt.title("Distribution of Sales Amounts")
plt.show()

این نمودار نشان می‌دهد که داده‌ها در چه بازه‌هایی متمرکز شده‌اند و آیا الگوهای خاصی در توزیع وجود دارد یا خیر.

تحلیل روندهای زمانی

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

نمونه گروه‌بندی بر اساس ماه:

monthly_sales = df.groupby("month")["amount"].sum()
print(monthly_sales)

این تحلیل مشخص می‌کند که کدام ماه‌ها بیشترین فروش را داشته‌اند و آیا روند افزایشی یا کاهشی قابل توجهی وجود دارد.

بررسی روابط بین متغیرها

برای درک بهتر رفتار داده‌ها، بررسی رابطه‌ی میان متغیرها ضروری است. برای مثال، ممکن است بخواهیم بدانیم آیا بین تعداد سفارش و مبلغ پرداختی رابطه‌ای وجود دارد یا کدام دسته‌بندی محصولات بیشترین سهم را در فروش دارد.

نمونه تحلیل دسته‌بندی‌ها:

category_sales = df.groupby("category")["amount"].sum()
print(category_sales)

این تحلیل کمک می‌کند تا در اپلیکیشن نهایی، بخش‌هایی مانند «محصولات پرفروش» یا «دسته‌بندی‌های برتر» طراحی شوند.

شناسایی الگوهای اولیه

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

مصورسازی داده‌ها با Matplotlib

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

طراحی ساختار ماژول مصورسازی

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

نمونه ساختار فایل:

src/
└── charts.py

در این فایل، توابعی تعریف می‌شود که هر یک مسئول رسم یک نوع نمودار هستند.

رسم نمودار روند فروش

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

نمونه کد:

import matplotlib.pyplot as plt

def plot_monthly_sales(monthly_sales):
    plt.figure(figsize=(10, 5))
    plt.plot(monthly_sales.index, monthly_sales.values)
    plt.xlabel("Month")
    plt.ylabel("Total Sales")
    plt.title("Monthly Sales Trend")
    plt.grid(True)
    plt.tight_layout()
    plt.show()

این نمودار امکان مشاهده‌ الگوهای فصلی یا دوره‌ای را فراهم می‌کند.

نمودار میله‌ای برای مقایسه دسته‌بندی‌ها

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

نمونه کد:

def plot_category_sales(category_sales):
    plt.figure(figsize=(10, 5))
    plt.bar(category_sales.index, category_sales.values)
    plt.xlabel("Category")
    plt.ylabel("Total Sales")
    plt.title("Sales by Category")
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.show()

این نمودار برای بخش «محصولات پرفروش» در اپلیکیشن بسیار کاربردی خواهد بود.

نمودار Scatter برای بررسی روابط

برای تحلیل رابطه‌ی میان دو متغیر، مانند تعداد سفارش و مبلغ پرداختی، نمودار Scatter ابزار مناسبی است.

نمونه کد:

def plot_quantity_vs_amount(df):
    plt.figure(figsize=(8, 5))
    plt.scatter(df["quantity"], df["amount"])
    plt.xlabel("Quantity")
    plt.ylabel("Amount")
    plt.title("Relationship Between Quantity and Amount")
    plt.tight_layout()
    plt.show()

این نمودار کمک می‌کند تا الگوهای احتمالی مانند افزایش مبلغ با افزایش تعداد شناسایی شود.

نکات مهم در طراحی نمودارها

  • استفاده از برچسب‌های واضح برای محور‌ها
  • انتخاب اندازه‌ی مناسب برای شکل
  • استفاده از Grid برای خوانایی بهتر
  • تنظیم فاصله‌ها با tight_layout
  • پرهیز از شلوغی و عناصر غیرضروری

این اصول باعث می‌شود نمودارها در اپلیکیشن نهایی حرفه‌ای و قابل استفاده باشند.

ساخت اپلیکیشن تحلیل داده

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

انتخاب چارچوب مناسب برای ساخت اپلیکیشن

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

ساخت فایل اصلی اپلیکیشن

در فایل app.py ساختار کلی اپلیکیشن تعریف می‌شود. این فایل مسئول بارگذاری داده، دریافت ورودی از کاربر، فراخوانی توابع تحلیل و نمایش نمودارهاست.

نمونه ساختار اولیه:

import streamlit as st
import pandas as pd
from charts import plot_monthly_sales, plot_category_sales, plot_quantity_vs_amount

df = pd.read_csv("data/sales.csv")

st.title("Sales Analysis Application")

selected_category = st.selectbox("Select Category", df["category"].unique())
filtered_df = df[df["category"] == selected_category]

st.subheader("Monthly Sales Trend")
monthly_sales = filtered_df.groupby("month")["amount"].sum()
plot_monthly_sales(monthly_sales)

st.subheader("Sales by Category")
category_sales = df.groupby("category")["amount"].sum()
plot_category_sales(category_sales)

st.subheader("Quantity vs Amount")
plot_quantity_vs_amount(filtered_df)

این ساختار پایه‌ای است و می‌تواند بسته به نیاز پروژه گسترش یابد.

افزودن فیلترهای تعاملی

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

نمونه فیلتر بازه‌ی زمانی:

start_date = st.date_input("Start Date")
end_date = st.date_input("End Date")

df["order_date"] = pd.to_datetime(df["order_date"])
date_filtered_df = df[(df["order_date"] >= start_date) & (df["order_date"] <= end_date)]

نمایش نتایج و گزارش‌ها

اپلیکیشن می‌تواند علاوه بر نمودارها، نتایج عددی مانند مجموع فروش، میانگین مبلغ سفارش یا تعداد مشتریان را نیز نمایش دهد. این اطلاعات برای تصمیم‌گیری مدیریتی بسیار ارزشمند هستند.

نمونه نمایش آمار:

st.metric("Total Sales", date_filtered_df["amount"].sum())
st.metric("Average Order Amount", date_filtered_df["amount"].mean())

ساختاردهی بهتر و توسعه‌پذیری

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

تست اپلیکیشن با داده‌های واقعی

پس از ساخت اپلیکیشن، لازم است عملکرد آن در شرایط واقعی بررسی شود تا اطمینان حاصل شود که تمام بخش‌ها به‌درستی کار می‌کنند و تجربه‌ی کاربر مطابق انتظار است. این مرحله کمک می‌کند نقاط ضعف احتمالی شناسایی شوند و اپلیکیشن پیش از استفاده‌ نهایی به سطح قابل قبولی از پایداری و کارایی برسد.

اجرای سناریوهای واقعی

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

  • بررسی فروش یک دسته‌بندی خاص در بازه‌ی زمانی مشخص
  • تحلیل روند فروش ماهانه برای کل داده‌ها
  • مقایسه‌ی عملکرد چند دسته‌بندی
  • مشاهده‌ی رابطه‌ی میان تعداد سفارش و مبلغ پرداختی

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

ارزیابی سرعت و کارایی

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

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

بررسی تجربه‌ی کاربری

ظاهر و رفتار اپلیکیشن نقش مهمی در پذیرش آن توسط کاربران دارد. در این مرحله باید بررسی شود که:

  • فیلترها در جای مناسب قرار گرفته‌اند
  • نمودارها خوانا و قابل تفسیر هستند
  • پیام‌های خطا واضح و قابل فهم‌اند
  • مسیر استفاده از اپلیکیشن پیچیدگی غیرضروری ندارد

بازخورد کاربران آزمایشی می‌تواند در بهبود تجربه‌ی کاربری بسیار مؤثر باشد.

اطمینان از صحت نتایج

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

جمع‌بندی

در این پروژه مسیر کامل تحلیل داده طی شد، از آماده‌سازی و پاک‌سازی داده‌ها تا ساخت یک اپلیکیشن ساده برای نمایش نتایج. این فرایند نشان داد که چگونه می‌توان داده‌های خام را به اطلاعات قابل استفاده تبدیل کرد و آن‌ها را در قالب یک ابزار تعاملی در اختیار کاربر قرار داد. ترکیب Pandas و Matplotlib همراه با یک رابط کاربری سبک، امکان ساخت یک راهکار عملی و قابل اجرا را فراهم می‌کند.

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

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
در انتظار ثبت رای

/@arastoo
ارسطو عباسی
کارشناس تست نرم‌افزار و مستندات

...

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

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

ارسطو عباسی

کارشناس تست نرم‌افزار و مستندات