توضیحات پروژه:
در دنیای امروز، دادهها باارزشترین دارایی هر کسبوکار هستند؛ اما دادههای خام بدون تحلیل هیچ کاربردی ندارند. در این پروژه کاربردی، کارآموز ما با استفاده از زبان برنامهنویسی Python و کتابخانههای قدرتمند تحلیل داده، توانستهاند دادههای واقعی فروش را مورد بررسی و واکاوی قرار دهند.
این پروژه هوش تجاری (BI) و علم داده، به صاحبان کسبوکار کمک میکند تا رفتار مشتریان را بشناسند، روند فروش خود را در طول زمان پیشبینی کنند و تصمیمات استراتژیک دقیقتری بگیرند.
تکنولوژیها و ابزارهای استفاده شده
زبان برنامهنویسی : Python
کتابخانههای اصلی: Pandas(برای مدیریت و پاکسازی دادهها)، Matplotlib و Seaborn (برای نمودارها و تصویرسازی دادهها)
محیط توسعه: Jupyter Notebook / VS Code
این پروژه چه مسائلی را حل میکند؟
تحلیل روند فروش در طول زمان (Sell Over Time): بررسی نمودار صعودی یا نزولی فروش در بازههای زمانی مختلف (روزانه، ماهانه و فصلی) برای شناسایی روزهای پرفروش سال.
شناسایی محصولات پرفروش: آنالیز دقیق اینکه کدام خدمات یا محصولات بیشترین سودآوری را برای مجموعه داشتهاند.
رفتارشناسی مشتریان: تحلیل موقعیت جغرافیایی و زمانهای پیک خرید مشتریان جهت بهینهسازی فرآیند بازاریابی و تبلیغات هدفمند.
پاکسازی دادههای پرت (Data Cleaning): حذف دادههای ناقص و تکراری برای رسیدن به یک گزارش آماری دقیق و قابل اعتماد.
هدف از اجرای این پروژه در آموزشگاه
ما در دورههای برنامهنویسی مجتمع فنی تبریز ، صرفاً به آموزش تئوری سینتکس پایتون بسنده نمیکنیم. هدف ما آمادهسازی کارآموزان برای بازار کار واقعی است. کارآموز با پیادهسازی این پروژه، چالشهای واقعی یک «مستندسازی و تحلیلگر داده» را تجربه کرده و یاد میگیرد چگونه دادههای خام را به نمودارهای مدیریتی و کاربردی تبدیل کند.
گام اول : ما در این بخش سعی در پیدا کردن تعداد فروش با توجه به تاریخ های ماهانه و هفتگی بوده و با استفاده از نمودار سعی در نشان دادن تاریخ بر فروش هست. با توجه به اطلاعات به دست امده تعداد فروش ما قبل از سال نوع میلادی به اوج خود رسیده و بعد از سال نو میلادی به کمترین حالت خود می رسد. در نمودار هایی که درست کردیم می توانید بفهمید که فروش هر 54 فروشگاه ما جمع شده با همدر بازه ی زمانی هفتگی و ماهانه به چه صورت است. هر چند فروش ما در ماه آپریل دوباره رشد می کند. در قسمت های پایینی پرفروش ترین روز های ما و همچنین کم فروش ترین روز ها نشان داده شده است.
نمودار ماهانه فروش
نمودار هفتگی فروش
# in this section we trying to find sell by time and identify trend over time
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 1- let's first test our data randomly
df = pd.read_csv("retail_2016_2017.csv")
print("[1] this is test to find our 5 random data: ")
print(df.sample(5))
#2- now we group them by date so all other information sum up with each other
print("===================================================")
information = df.groupby(["date"],as_index=False).sum()
new = pd.to_datetime(information["date"])
test = pd.Series(np.array(information["sales"]),new)
print("[2] now we group them by date, and here is result: ")
print(test)
#3- now we need to find data by monthly sell and weekly sell and plot the information
print("===================================================")
print("it opened in other window!")
month = test.resample("ME").sum().plot()
month.set_title("monthly")
plt.show()
#4- now weekly chart
print("===================================================")
week = test.resample("W").sum().plot()
week.set_title("weekly")
plt.show()
#5- in this section gonna find best sales day for 10 days
print("[5] top 10 days: ")
print(test.sort_values(ascending=False).head(10))
#6- our worst 10 days
print("===================================================")
print("[6] worst day by sale: ")
print(test.sort_values().tail(10))
گام دوم: در قسمت دوم تحلیل ما شروع می کنیم به پرسیدن این سوال: در فروشگاه های ما پرفروش ترین محصول چیه؟ یا ده محصول پر فروش چیه؟ یا حتی برعکس آن. کم فروش ترین محصول ما چیه؟ خوشبختانه من به سوالات پاسخ دادم وجواب رو پیدا کردم .
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# first we read the csv file
df = pd.read_csv("retail_2016_2017.csv")
# second we group them by family
new = df.groupby(["family"],as_index=False).sum()
sale_by_family = pd.Series(np.array(new["sales"]),index=new["family"])
print(sale_by_family)
#third we gonna create chart
chart = sale_by_family.plot.bar(y="sales",x="family")
chart.set_title("family")
plt.show()
#fourth top 10 product
print("====================================================")
print("best seller products: ")
top_10 = sale_by_family.sort_values(ascending=False).head(10)
print(top_10)
# step 5: worst product by sell
print("====================================================")
print("worst product by sell: ")
worst_10 = sale_by_family.sort_values(ascending=True).head(10)
print(worst_10)
# step 6: best seller pie chart
top_10.plot.pie()
plt.show()
گام سوم : در این قسمت ما سعی می کنیم رابطه بین فروش و onpromotion را بفهمیم.همینطور که در نمودار می بینید هر دو رابطه مستقیم دارند و با افزایش فروش پروموشن ما نیز افزایش پیدا میکند .
نارنجی = Onpromotion
آبی = Sales
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# reading csv file
df = pd.read_csv("retail_2016_2017.csv")
#grouping by date
new = df.groupby(["date"],as_index=False).sum()
# we trying find relation between sell and promotion
timeSeries = pd.to_datetime(new["date"])
data_set = pd.DataFrame(np.array(new[["sales","onpromotion"]]),timeSeries)
data_set.columns = ["sales","onpromotion"]
weakly = data_set[["sales","onpromotion"]].resample("W").sum()
print(weakly)
# now we create the chart
print("ornage is onpromtion vs blue is sell")
x = weakly["sales"].plot(figsize=(12,5),label="Sales")
weakly["onpromotion"].plot(ax=x,secondary_y=True,label="onpromotion")
x.set_title("sales vs onpromotion")
x.set_ylabel("sales")
x.right_ax.set_ylabel("onpromotion")
plt.show()
گام چهارم : در این قسمت ما بهترین فروشگاه های خود را بررسی می کنیم که طبق چارت مشخص هستند.(بر اساس فروش)
نمودار بهترین فروشگاه های ما
نمودار بدترین فروشگاه های ما
در آخر کل فروشگاه های ما بر اساس فروش
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# reading csv file
df = pd.read_csv("retail_2016_2017.csv")
store = df.groupby(["store_nbr"],as_index=False).sum()
new_data = pd.Series(store["sales"],index=store["store_nbr"])
print("best store by sales: ")
print(new_data.sort_values(ascending=False).head(5))
print("==========================================")
print("worst store by sell: ")
print(new_data.sort_values(ascending=True).head(5))
# chart
new_data.plot.bar(figsize=(12,5))
plt.show()



