قسمت چهارم- نمایش نمودار Pie Chart در Matplotlib
در این مثال ، ما می خواهیم داده های یک فایل اکسل که شامل مشتری ، تعداد خرید و مبلغ خرید و محصول هست را بر روی یک Pie Chart نمایش دهیم و می خواهیم حاصل ضرب تعداد خرید در مبلغ خرید را حساب و بر روی نمودار قرار دهیم ، طبیعتا مشتری های ما چندین بار از ما خرید کرده اند پس باید داده ها گروه بندی نیز شوند و سهم از کل نیز حساب گردد ، همچنین طبق مثاله های قبلی برای نمایش درست فارسی از کتابخانه های دیگر نیز استفاده کرده ایم .
برای دریافت فایل مثال می توانید از این لینک استفاده کنید.
برای محاسبه سهم از کل هر محصول در دادهها و نمایش آن با استفاده از matplotlib، باید مراحل زیر را دنبال کنیم:
مراحل:
محاسبه مجموع مبلغ خرید هر محصول:
ابتدا باید مجموع مبلغ خرید هر محصول را محاسبه کنیم. این کار با ضرب کردن تعداد خرید در مبلغ خرید برای هر ردیف داده و سپس گروهبندی محصولات به دست میآید.
محاسبه سهم هر محصول از کل:
بعد از محاسبه مجموع مبلغ خرید برای هر محصول، سهم هر محصول از کل مبلغ خرید به دست میآید. این کار با تقسیم مبلغ خرید هر محصول بر مجموع کل مبلغ خرید انجام میشود.
رسم نمودار:
سپس میتوانیم از یک نمودار دایرهای (Pie chart) یا نمودار بار (Bar chart) برای نمایش سهم هر محصول استفاده کنیم.
برای پیاده سازی آن ما از قطعه کد زیر استفاده کرده ایم که در ادامه به شرح آن می پردازیم
import pandas as pd import matplotlib.pyplot as plt from bidi.algorithm import get_display import arabic_reshaper # تابع برای بازسازی و مرتبسازی متنهای فارسی def reshape_text(text): reshaped_text = arabic_reshaper.reshape(text) # بازسازی متن فارسی return get_display(reshaped_text) # مرتبسازی بصری برای نمایش صحیح # خواندن دادهها از فایل اکسل filename = "data.xlsx" # نام فایل اکسل data = pd.read_excel(filename) # محاسبه مجموع مبلغ خرید (مبلغ خرید × تعداد خرید) برای هر ردیف داده data["مجموع مبلغ خرید"] = data["مبلغ خرید"] * data["تعداد خرید"] # محاسبه مجموع مبلغ خرید برای هر محصول total_sales = data["مجموع مبلغ خرید"].sum() # گروهبندی دادهها بر اساس محصول و محاسبه مجموع مبلغ خرید برای هر محصول grouped_data = data.groupby("محصول").agg({"مجموع مبلغ خرید": "sum"}).reset_index() # محاسبه سهم هر محصول از کل خرید grouped_data["سهم از کل"] = (grouped_data["مجموع مبلغ خرید"] / total_sales) * 100 # بازسازی متنهای فارسی در ستون "محصول" grouped_data["محصول"] = grouped_data["محصول"].apply(reshape_text) # رسم نمودار plt.figure(figsize=(12, 7)) # رسم نمودار دایرهای برای نمایش سهم هر محصول plt.pie(grouped_data["سهم از کل"], labels=grouped_data["محصول"], autopct='%1.1f%%', startangle=140) # تنظیمات نمودار plt.title(reshape_text("سهم از کل خرید هر محصول"), fontsize=14) # نمایش نمودار plt.tight_layout() plt.show()
محاسبه مجموع مبلغ خرید:
ابتدا با ضرب مبلغ خرید در تعداد خرید، مجموع مبلغ خرید برای هر ردیف داده به دست آمده است:
data["مجموع مبلغ خرید"] = data["مبلغ خرید"] * data["تعداد خرید"]
محاسبه مجموع مبلغ خرید کل:
سپس مجموع مبلغ خرید کل را محاسبه میکنیم:
total_sales = data["مجموع مبلغ خرید"].sum()
گروهبندی دادهها بر اساس محصول:
دادهها را بر اساس محصول گروهبندی کرده و مجموع مبلغ خرید را برای هر محصول محاسبه میکنیم:
grouped_data = data.groupby("محصول").agg({"مجموع مبلغ خرید": "sum"}).reset_index()
محاسبه سهم هر محصول از کل خرید:
سهم هر محصول از کل خرید با تقسیم مجموع مبلغ خرید هر محصول بر مجموع کل خرید به دست میآید و به درصد تبدیل میشود:
grouped_data["سهم از کل"] = (grouped_data["مجموع مبلغ خرید"] / total_sales) * 100
رسم نمودار دایرهای (Pie Chart):
برای نمایش سهم هر محصول، از نمودار دایرهای استفاده میکنیم. در این نمودار درصد سهم هر محصول به صورت خودکار نمایش داده میشود:
plt.pie(grouped_data["سهم از کل"], labels=grouped_data["محصول"], autopct='%1.1f%%', startangle=140)
autopct=‘%۱.۱f%%’ درصد سهم هر محصول را به فرمت یک رقم اعشاری نشان میدهد.
startangle=140 نمودار را از زاویه ۱۴۰ درجه شروع میکند تا نمایش آن به صورت متوازن و زیبا باشد.
تنظیمات نمودار و نمایش:
عنوان نمودار و چیدمان آن به فارسی تنظیم شده و نمودار به نمایش در میآید:
plt.title(reshape_text("سهم از کل خرید هر محصول"), fontsize=14) plt.tight_layout() # تنظیم فواصل برای جلوگیری از برخورد متنها
نتیجه:
این کد به شما این امکان را میدهد که سهم هر محصول از کل خریدها را در قالب یک نمودار دایرهای (Pie Chart) مشاهده کنید. هر قسمت از دایره نشاندهنده سهم هر محصول از مجموع خریدها است و با درصد نمایش داده میشود.
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.