مصورسازی داده یعنی انتخاب نمایش مناسبی که به یک سؤال مشخص پاسخ دهد. نمودار زیبا اگر مقایسه را دشوار کند یا اختلاف را بزرگتر از واقع نشان دهد، ابزار تحلیلی خوبی نیست. Matplotlib کنترل دقیق اجزای شکل را فراهم میکند و Seaborn بسیاری از نمودارهای آماری را با رابط سطح بالاتر ساده میسازد. آشنایی با هر دو کمک میکند از نمایش اولیه تا خروجی گزارش را آگاهانه طراحی کنید.
در این راهنما، دادهٔ فروش یک فروشگاه را مثال میزنیم: زمان، گروه محصول، تعداد و مبلغ. میخواهیم روند، توزیع و تفاوت گروهها را ببینیم. پیش از کدنویسی باید بدانیم هر ردیف چه معنایی دارد و آیا مبلغ، فروش قطعی است یا مبلغ سفارش اولیه. نمودار از دادهٔ مبهم، پاسخ روشن نمیسازد؛ فقط ابهام را در قالبی جذابتر نشان میدهد.
سؤال تحلیلی را قبل از نوع نمودار بنویسید
پرسش «چه نموداری بکشیم؟» را با «میخواهیم چه چیزی را مقایسه کنیم؟» جایگزین کنید. برای روند فروش روزانه، محور زمان و نمودار خطی مناسب است. برای مقایسهٔ درآمد چند گروه، نمودار میلهای معمولاً خواناتر است. برای فهم پراکندگی مبلغ سفارش، هیستوگرام یا نمودار جعبهای مفید است. انتخاب از سؤال میآید، نه از فهرست امکانات کتابخانه.
مخاطب نیز بر انتخاب اثر دارد. نمودار اکتشافی برای تحلیلگر میتواند جزئیات و چند پنل داشته باشد، اما شکل گزارش مدیریتی باید پیام محدود و روشنی منتقل کند. در هر دو حالت، واحد، دورهٔ زمانی، تعریف نمونه و منبع داده را مشخص کنید. عنوان کلی «تحلیل فروش» کمتر از عنوانی مانند «روند فروش قطعی هفتگی به تفکیک گروه» به خواننده کمک میکند.
آمادهسازی داده پیش از رسم
نوع تاریخ، مقدارهای خالی و ردیفهای تکراری را بررسی کنید. اگر فروش هر قلم در یک ردیف آمده، شمارش سطرها تعداد سفارش نیست. برای نمودار تعداد سفارش باید شناسهٔ یکتا را بشمارید. همچنین روز بدون فروش را از روز بدون داده جدا کنید. صفر قراردادن در یک بازهٔ ثبتنشده میتواند افتی ساختگی در روند ایجاد کند و نتیجهٔ گزارش را تغییر دهد.
تجمیع را صریح انجام دهید تا واحد تحلیل روشن باشد. جمع روزانه، میانگین مبلغ سفارش و تعداد مشتری یکتا سه شاخص متفاوتاند. ممکن است جمع فروش بالا برود چون تعداد سفارش بیشتر شده، نه چون مشتریان مبلغ بیشتری خرج میکنند. کنار هم گذاشتن شاخصهای مکمل میتواند توضیح بهتری بسازد، اما از انباشتن دهها نمودار بدون سؤال مشخص خودداری کنید.
Figure و Axes در Matplotlib
Figure ظرف کلی شکل است و Axes ناحیهای است که نمودار در آن رسم میشود. رابط شیءگرا با fig, ax = plt.subplots شروعی مناسب برای ساخت نمودارهای قابلکنترل است. سپس عنوان، برچسبها و داده را روی همان ax تنظیم میکنید. این روش در چندنموداریها از اتکا به وضعیت ضمنی نمودار فعال روشنتر است و احتمال تغییر پنل اشتباه را کاهش میدهد.
اندازهٔ شکل و اندازهٔ نوشته را با خروجی نهایی هماهنگ کنید. شکلی که روی نمایشگر بزرگ خواناست، در گزارش باریک یا تصویر پیامرسان ممکن است ناخوانا شود. تعداد برچسبهای محور را محدود و فاصلهها را تنظیم کنید. به جای اضافهکردن تزئین، عناصر ضروری را برجسته کنید. نمودار حرفهای معمولاً نتیجهٔ انتخاب دقیق و حذف شلوغی است، نه استفاده از بیشترین رنگ و افکت.
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
weeks = [1, 2, 3, 4]
revenue = [120, 140, 135, 165]
fig, ax = plt.subplots(figsize=(7, 4), layout="constrained")
ax.plot(weeks, revenue, marker="o")
ax.set(xlabel="Week", ylabel="Revenue (sample units)", title="Weekly revenue")
ax.set_xticks(weeks)
fig.savefig("weekly-revenue.png", dpi=160)
plt.close(fig)نمودار خطی؛ زمان باید واقعاً مرتب باشد
در نمودار خطی، اتصال نقاط به خواننده حس پیوستگی یا ترتیب میدهد. داده را بر اساس زمان مرتب کنید و فاصلهٔ زمانی را درست نمایش دهید. اگر میان دو ثبت چند روز فاصله افتاده، محور دستهای با فاصلههای برابر میتواند گمراهکننده باشد. برای دادهٔ زمانی، از نوع تاریخ واقعی استفاده کنید تا فاصلهها با زمان متناسب باشند و نبود داده نیز قابلتشخیص بماند.
هموارسازی و میانگین متحرک میتوانند روند را خواناتر کنند، اما نوسان را پنهان هم میکنند. اندازهٔ پنجره و روش را اعلام کنید و در صورت اهمیت، دادهٔ خام را کمرنگ در کنار روند نشان دهید. افت یا جهش را خودکار به یک رویداد نسبت ندهید؛ همزمانی، علیت را ثابت نمیکند. توضیح علت نیازمند اطلاعات و بررسی جداگانه است، نه صرفاً شکل دو خط روی یک نمودار.
نمودار میلهای برای مقایسهٔ گروهها
برای دستههای محدود، نمودار میلهای طول را به مقدار وصل میکند و مقایسه را آسان میسازد. ترتیب میلهها را بر اساس معنا یا مقدار انتخاب کنید. اگر نامها بلندند، جهت افقی اغلب خواناتر است. در نمودار میلهای معمولاً محور مقدار باید از صفر شروع شود؛ بریدن آن، اختلاف طولها را بیش از واقع نشان میدهد و برداشت بصری را تغییر میدهد.
برای دستههای بسیار زیاد، نمایش همهٔ آنها به نتیجه کمک نمیکند. میتوانید چند دستهٔ اصلی و گروه «سایر» نشان دهید، اما قاعدهٔ انتخاب را توضیح دهید و جمع را حفظ کنید. حذف گروههای کوچک بدون اشاره ممکن است مخاطب را دربارهٔ کل داده اشتباه بیندازد. اگر هدف توزیع بلنددنباله است، شاید نمودار رتبهبندی یا جدول خلاصه انتخاب مناسبتری از یک شکل بسیار شلوغ باشد.
هیستوگرام؛ انتخاب بازه بخشی از تحلیل است
هیستوگرام توزیع یک متغیر عددی را در بازهها نشان میدهد. تعداد و عرض بازهها بر ظاهر اثر زیادی دارد؛ بازهٔ خیلی پهن ممکن است چند قله را پنهان کند و بازهٔ خیلی باریک نویز را برجسته کند. چند انتخاب معقول را بررسی کنید و از انتخابی که فقط داستان دلخواه شما را بهتر نشان میدهد پرهیز کنید. اندازهٔ نمونه را نیز در نظر بگیرید.
اگر دو گروه را مقایسه میکنید، بازهها و دامنه باید سازگار باشند. تعداد خام با چگالی یا درصد یکسان نیست. گروه بزرگتر ممکن است میلههای بلندتری داشته باشد بدون اینکه شکل توزیعش متفاوت باشد. برچسب محور عمودی را دقیق بنویسید و اگر نرمالسازی کردهاید آن را اعلام کنید. دادهٔ گمشده یا مقدارهای خارج از دامنهٔ رسمشده را هم بهطور روشن گزارش کنید.
پراکندگی و نمودار جعبهای
نمودار پراکندگی برای رابطهٔ دو متغیر عددی مناسب است. هر نقطه یک نمونه است؛ بنابراین همپوشانی شدید میتواند تراکم را پنهان کند. شفافیت، کوچککردن نقطه یا استفاده از نمایش تراکم از راهحلهاست. رنگ را برای یک متغیر معنادار به کار ببرید، نه تزئین. اگر تعداد نمونه زیاد است، انتخاب روش نمایش باید هزینه و خوانایی را هم در نظر بگیرد.
نمودار جعبهای میانه و چارکها را خلاصه میکند و برای مقایسهٔ توزیع گروهها مفید است. نقطهٔ بیرون از سبیل الزاماً خطای داده نیست. همچنین دو توزیع متفاوت میتوانند خلاصهٔ جعبهای مشابه داشته باشند. وقتی نمونه کم است، نمایش نقطههای واقعی کنار خلاصه کمک میکند. مخاطب باید بداند هر گروه چند مشاهده دارد تا تفاوتی ناشی از تعداد کم را بیش از حد تفسیر نکند.
Seaborn و نقش تجمیع آماری
Seaborn با دادهٔ جدولی و نام ستونها راحت کار میکند و ارتباط متغیرها با محور، رنگ و پنل را بیان میکند. اما بعضی توابع بهطور پیشفرض داده را تجمیع میکنند یا عدمقطعیت تخمین میزنند. پیش از استفاده، بدانید تابع میانگین میگیرد، شمارش میکند یا همهٔ نمونهها را نشان میدهد. رفتار پیشفرض، تعریف مسئلهٔ شما را نمیشناسد و ممکن است با هدفتان یکی نباشد.
اگر جدول از قبل تجمیع شده، استفادهٔ دوباره از تابع دارای تخمینگر میتواند نتیجهٔ ناخواسته بدهد. مثلا میانگینِ میانگین گروههای با اندازهٔ متفاوت، میانگین کل نیست. در چنین حالتی، دادهٔ خام یا وزن مناسب لازم است. به نسخهٔ کتابخانه نیز توجه کنید؛ پارامترهای نمایش فاصلهٔ خطا در نسخههای مختلف تغییر کردهاند. مثال را با نسخهٔ نصبشده و مستندات همان نسخه تطبیق دهید.
رنگ، دسترسپذیری و صداقت بصری
رنگ نباید تنها حامل اطلاعات باشد. شکل نقطه، الگوی خط یا برچسب میتواند به کسانی که تفاوت برخی رنگها را نمیبینند کمک کند. برای مقدار پیوسته، طیف ترتیبی و برای انحراف حول یک مرکز، طیف واگرا مناسبتر است. استفادهٔ تصادفی از رنگهای بسیار متنوع، سلسلهمراتب اطلاعات را از بین میبرد. کنتراست نوشته و زمینه را در اندازهٔ نهایی بررسی کنید.
نمودار سهبعدی برای مقایسهٔ چند مقدار ساده معمولاً خوانایی را کم میکند، چون زاویه و پرسپکتیو بر ادراک اثر میگذارند. دو محور عمودی هم میتوانند ارتباطی ظاهری میان دو روند بسازند. اگر چنین طراحیای لازم است، دلیل و مقیاسها را شفاف کنید و گزینهٔ سادهتر مانند دو پنل را بررسی کنید. هدف اقناع با جلوه نیست؛ امکان بررسی مستقل داده برای خواننده است.
متن فارسی، ذخیره و بازتولید
برای نوشتهٔ فارسی، وجود فونت دارای حروف فارسی ضروری است، اما بهتنهایی شکلدهی و ترتیب راستبهچپ را در همهٔ محیطها تضمین نمیکند. خروجی به backend و پشتیبانی متن وابسته است. از فونت مجاز موجود استفاده و نتیجهٔ فایل خروجی را بررسی کنید. تغییر معکوس دستی متن راهحل عمومی درستی نیست، زیرا ترکیب عدد، واژهٔ لاتین و نشانهها را بههم میریزد.
نمودار را با اندازه و قالب مناسب ذخیره کنید. تصویر پیکسلی برای بعضی کاربردها کافی است و خروجی برداری برای چاپ میتواند بهتر باشد. دادهٔ ورودی، کد رسم، نسخهٔ کتابخانه و تنظیمات اصلی را کنار هم نگه دارید. اگر شکل تصادفی نمونهگیری میکند، بذر را ثبت کنید. پس از ذخیره نیز منابع شکل را ببندید تا اجرای تعداد زیادی نمودار حافظه را بیدلیل مصرف نکند.
چکلیست بازبینی پیش از انتشار نمودار
ابتدا عنوان و محور را بدون نگاهکردن به متن گزارش بخوانید. آیا معلوم است واحد مبلغ چیست، بازهٔ زمانی کدام است و داده جمع را نشان میدهد یا میانگین را؟ سپس ببینید دستهها حذف یا ادغام شدهاند یا نه. اگر بخشی از داده نمایش داده نمیشود، این محدودیت باید نزدیک شکل اعلام شود. خواننده نباید برای کشف یک فرض مهم مجبور به جستوجو در چند صفحهٔ دیگر باشد.
دوم، نسبتها را با عددهای واقعی کنترل کنید. در نمودار درصد، مخرج باید تعریف شود: درصد سفارشها، مشتریان یا مبلغ؟ اگر هر مشتری چند بار شمرده شده، سهم مشتری با سهم رویداد یکی نیست. در مقایسهٔ دورهها نیز طول دوره و تعداد روز کاری ممکن است متفاوت باشد. نمایش درصد رشد بدون مقدار پایه میتواند تغییر کوچک را بزرگ جلوه دهد؛ عدد پایه یا توضیح مناسب را اضافه کنید.
سوم، ظاهر را در اندازهٔ مصرف نهایی بررسی کنید. رنگهای نزدیک، نوشتهٔ کوچک و راهنمای دور از داده، فهم را کند میکنند. اگر مخاطب باید شکل را چاپ سیاهوسفید کند، تمایزها نباید فقط به رنگ وابسته باشند. برای نموداری که در سایت منتشر میشود، توضیح متنی کوتاه از پیام و داده فراهم کنید تا اطلاعات صرفاً در تصویر محبوس نماند. دسترسپذیری به نفع همهٔ خوانندگان است.
در نهایت، جملهٔ نتیجه را با شواهد تطبیق دهید. «همراهی دیده میشود» با «باعث شده است» فرق دارد و «در این نمونه بیشتر است» با «همیشه بیشتر خواهد بود» یکی نیست. اگر نمودار پاسخ قطعی نمیدهد، همین را بنویسید. صداقت دربارهٔ محدودیت، قدرت گزارش را کم نمیکند؛ امکان تصمیم درست و بررسی مستقل را بیشتر میکند و از نتیجهگیریهای فراتر از داده جلوگیری میکند.
تمرین با معیار ارزیابی روشن
از یک جدول فروش، سه نمودار بسازید: روند هفتگی، مقایسهٔ گروهها و توزیع مبلغ سفارش. پیش از هر نمودار، سؤال و واحد تحلیل را در یک جمله بنویسید. سپس یک پاسخ متنی کوتاه اضافه کنید که داده پشتیبانی میکند. ادعای علّی یا پیشبینی آینده را وارد نکنید مگر روش جداگانهای برای آن داشته باشید. نمودار باید بتواند بدون توضیح شفاهی طولانی خوانده شود.
برای کنترل، جمع دادهٔ نمایشدادهشده را با گزارش عددی مقایسه کنید، محور و واحد را بخوانید و تعداد نمونه را ببینید. از یک نفر بخواهید فقط با دیدن شکل، پیام اصلی را بگوید. اگر برداشت او با سؤال شما فرق دارد، طراحی را اصلاح کنید. این بازخورد دربارهٔ خوانایی است و جای آزمون صحت محاسبه را نمیگیرد؛ هر دو لازماند.
پرسشهای متداول
Matplotlib بهتر است یا Seaborn؟
این دو رقیب کاملاً جدا نیستند؛ Seaborn بر Matplotlib تکیه دارد. برای کنترل جزئی اجزا، Matplotlib پایهٔ مهمی است و برای بسیاری از نمایشهای آماری، Seaborn کد را سادهتر میکند. انتخاب را بر اساس نیاز انجام دهید و بدانید تابع انتخابی چه تبدیل یا تجمیعی روی داده انجام میدهد.
آیا نمودار دایرهای همیشه بد است؟
نه، ولی برای مقایسهٔ دقیق دستههای زیاد معمولاً انتخاب مناسبی نیست. اگر تعداد بخشها کم و سؤال دربارهٔ سهم از کل باشد، میتواند مفید باشد. باید مجموع واقعاً یک کل معنادار را نشان دهد. برای اختلافهای کوچک، نمودار میلهای اغلب خواناتر است و مقایسهٔ طول از زاویه آسانتر انجام میشود.
چرا نمودار من با عددهای گزارش فرق دارد؟
سطح ردیف، فیلتر، تجمیع، حذف مقدار خالی و تخمینگر پیشفرض را بررسی کنید. گاهی یک شکل میانگین را نشان میدهد و گزارش جمع را. در ادامه، مقالهٔ Pandas و SQL کمک میکنند تبدیلهای پیش از رسم را قابلآزمون کنید؛ بیشتر اختلافهای جدی نمودار از آمادهسازی داده آغاز میشوند، نه از تنظیم رنگ و ظاهر.
منابع و مطالعهٔ بیشتر
برای بررسی جزئیات و ادامهٔ مطالعه؛ متن این راهنما مستقلاً برای نوونتیکس نوشته شده است.
