پکیجهای مختلف نمایش داده
آشنایی با پکیج Matplotlib
Matplotlib قدرتمندترین و محبوبترین کتابخانه مصورسازی داده در پایتون است که توسط John Hunter ساخته شده است. این کتابخانه به شما امکان میدهد هر نوع نمودار دلخواهی را با کنترل کامل روی تمام جزئیات رسم کنید. برای نصب، کافی است اجرا کنید:
pip install matplotlib (در Anaconda از قبل نصب است).
نحوه import استاندارد به صورت import matplotlib.pyplot as plt است. سبک کاری Matplotlib شبیه به نرمافزار MATLAB است – با توابعی مثل plt.plot()، plt.scatter() و غیره. در این بخش از دوره، قدم به قدم انواع نمودارهای پرکاربرد را با مثالهای واقعی یاد میگیرید. از نمودارهای ساده خطی گرفته تا پلاتهای سه بعدی حرفهای، همه را با Matplotlib پیادهسازی خواهید کرد. توانایی مصورسازی داده نه فقط برای نمایش نتایج، بلکه برای کشف الگوها و ارائه گزارشهای تأثیرگذار به مدیران، یک مهارت کلیدی برای هر دیتا ساینتیست است.
Line Plot
Line Plot (نمودار خطی) برای نمایش روند تغییرات یک متغیر نسبت به متغیر دیگر (معمولاً زمان) استفاده میشود. سادهترین دستور:
که x و y لیست یا آرایه numpy هستند.
مثال: plt.plot([1, 2, 3, 4], [10, 20, 25, 30]).
میتوانید با پارامتر linestyle (مثل '–' برای خط چین، ':' برای نقطهچین) و marker (مثل 'o' برای دایره، '^' برای مثلث) ظاهر خط را تغییر دهید. برای رسم چند خط روی یک نمودار، کافی است چند بار ()plt.plot پشت سر هم صدا زده شود. همچنین ()plt.legend برای نمایش راهنما ضروری است.
کاربردهای اصلی: نمایش قیمت سهام در طول زمان، تغییرات دما، رشد جمعیت و هر نوع سری زمانی. در این دوره، با دیتاستهای واقعی مثل فروش ماهانه یک فروشگاه، Line Plot را میسازید و تفسیر میکنید.
Scatter Plot
Scatter Plot (نمودار پراکندگی) برای نمایش رابطه بین دو متغیر عددی استفاده میشود. هر نقطه روی نمودار نماینده یک نمونه از داده است.
دستور: plt.scatter(x, y)، یا با قابلیت رنگبندی بر اساس دسته سوم: plt.scatter(x, y, c=z, cmap='viridis'). اندازه نقاط نیز با پارامتر s قابل تنظیم است.
Scatter plot به شما کمک میکند به سرعت ببینید آیا بین دو متغیر همبستگی مثبت، منفی یا بدون همبستگی وجود دارد. همچنین خوشههای طبیعی داده، دادههای پرت و الگوهای غیرخطی را آشکار میکند. برای مثال، با رسم scatter plot سن و درآمد مشتریان، میتوان حدس زد که آیا با افزایش سن، درآمد هم بیشتر میشود یا خیر. در این دوره، با دادههای واقعی مثل قیمت خانه در برابر متراژ، scatter plot کشیده و تفسیر آماری آن را یاد میگیرید.
Step Plot
Step Plot (نمودار پلهای) شبیه Line Plot است اما با پلههای گسسته به جای خطوط پیوسته.
دستور plt.step(x, y, where='pre') (پله در ابتدای بازه) یا where='post' (پله در انتهای بازه).
این نمودار برای نمایش متغیرهایی که در بازههای زمانی ثابت میمانند و سپس ناگهان تغییر میکنند، ایدهآل است.
کاربردها: نمایش مانده حساب بانکی در طول ماه (که تا تراکنش بعدی ثابت میماند)، تغییر قیمت کالا در تاریخهای مشخص، خروجی سیستمهای دیجیتال و هیستوگرامهای تجمعی. Step plot در تحلیل دادههای رویدادمحور و سریهای زمانی با نمونهبرداری نامنظم بسیار مفید است. در این دوره، با مثال تغییر مرحلهای موجودی انبار در اثر ثبت سفارشها، Step Plot را تمرین میکنید.
Bar Plot
Bar Plot (نمودار میلهای یا ستونی) برای مقایسه مقادیر بین دستههای مجزا استفاده میشود.
دستور عمودی: plt.bar(categories, values)
افقی: plt.barh(categories, values)
میتوانید با color رنگ میلهها، با edgecolor حاشیه، و با width یا height ضخامت را تنظیم کنید. برای رسم Bar plot گروهی (چند متغیر در کنار هم)، از width و تنظیم x موقعیتها استفاده میشود. Bar plotهای انباشته (stacked) نیز با پارامتر bottom پیادهسازی میشوند.
کاربردهای رایج: مقایسه فروش محصولات مختلف، آمار جمعیتی به تفکیک شهر، نمرات دانشجویان در درسها و عملکرد تیمهای فروش. در این دوره، با یک دیتاست فروش واقعی، Bar plotهای حرفهای برای ارائه به مدیران میسازید.
Histogram
Histogram (هیستوگرام) توزیع یک متغیر عددی را با تقسیم داده به بازهها (bins) و شمارش تعداد نقاط در هر بازه نشان میدهد.
دستور اصلی: plt.hist(data, bins=10, alpha=0.7, color='blue').
پارامتر bins تعداد بازهها یا مرز بازهها را مشخص میکند (با قانون استرجس یا Freedman-Diaconis برآورد میشود). alpha شفافیت برای همپوشانی چند هیستوگرام روی هم مفید است.
هیستوگرام به شما نشان میدهد داده شما چوله است یا متقارن، چند قله دارد (modality)، آیا داده پرت دارد و آیا میتوان آن را نرمال فرض کرد. برای مقایسه توزیع دو گروه، میتوانید دو هیستوگرام با alpha=0.5 روی هم رسم کنید. در این دوره، هیستوگرام سن مشتریان، قد افراد و نمرات آزمون را کشیده و نحوه انتخاب تعداد bins بهینه را یاد میگیرید.
Box Plot
Box Plot (نمودار جعبهای) یکی از قدرتمندترین نمودارها برای خلاصه کردن توزیع داده و تشخیص دادههای پرت است. هر Box Plot پنج آماره کلیدی را نشان میدهد:
- حداقل (غیر پرت)
- چارک اول (Q1 – ۲۵٪)
- میانه (Q2 – ۵۰٪)
- چارک سوم (Q3 – ۷۵٪)
- حداکثر (غیر پرت)
جعبه از Q1 تا Q3 کشیده میشود، خط وسط میانه است. سبیلها (whiskers) تا ۱.۵倍 دامنه بین چارکی (IQR = Q3 – Q1) کشیده میشوند. هر نقطه خارج از این محدوده، داده پرت (Outlier) محسوب میشود و با علامت دایره یا ستاره نشان داده میشود.
دستور ساده: plt.boxplot(data) یا برای چند متغیر با هم: plt.boxplot([data1, data2, data3]).
کاربرد: مقایسه توزیع حقوق در چند بخش مختلف شرکت، تشخیص مشتریان پرت از نظر میزان خرید و بررسی کیفیت سنسورها. در این دوره، یاد میگیرید Box plot را تفسیر کنید و از آن برای تصمیمگیری در پاکسازی داده استفاده کنید.
3D Plot
برای نمایش دادههایی با سه بعد (سه ویژگی عددی) استفاده میشود. برای فعالسازی، باید ماژول from mpl_toolkits.mplot3d import Axes3D را import کنید و سپس با fig = plt.figure(); ax = fig.add_subplot(111, projection='3d') یک محور سه بعدی بسازید.
انواع نمودارها در 3D:
- Scatter سه بعدی: ax.scatter(x, y, z)
- خط سه بعدی: ax.plot(x, y, z)
- سطح (Surface plot): ax.plot_surface(X, Y, Z, cmap='viridis')
- Wireframe: ax.plot_wireframe(X, Y, Z)
3D plot برای درک روابط پیچیده بین سه متغیر، نمایش توابع ریاضی، و تجسم خوشهبندی در سه بعد فوقالعاده مفید است. هر چند برای ارائه نهایی معمولاً کاهش ابعاد به 2D ترجیح داده میشود، اما برای اکتشاف دادهها، 3D plot یک ابزار بینظیر است. در این دوره، با دیتاست IRIS (سه ویژگی گل) یک scatter سه بعدی زیبا رسم میکنید.
Plot Attributes
نمودارهای حرفهای نیاز به تنظیمات (Attributes) مناسب برای قابل فهم شدن دارند. مهمترین ویژگیها در Matplotlib:
- عنوان (Title): plt.title('متن عنوان') – با fontsize و fontweight قابل تنظیم.
- برچسب محورها (Axis Labels): plt.xlabel('x label') و plt.ylabel('y label')
- راهنما (Legend): plt.legend(['A', 'B']) – حتماً قبل از legend در plot یا scatter پارامتر label را تعیین کنید.
- شبکه (Grid): plt.grid(True, linestyle='–', alpha=0.7)
- محدوده محورها (Axis Limits): plt.xlim(xmin, xmax) و plt.ylim(ymin, ymax)
- مقیاس محورها: plt.xscale('log') یا plt.yscale('log') برای مقیاس لگاریتمی.
- ذخیره نمودار: plt.savefig('filename.png', dpi=300, bbox_inches='tight')
- نشان دادن نمودار: ()plt.show
- پاک کردن: ()plt.clf برای پاک کردن شکل جاری.
استفاده از این attributes باعث میشود نمودارهای شما حرفهای، واضح و آماده برای ارائه یا چاپ شوند. در این دوره، هر نمودار را با تنظیمات کامل میسازیم تا خروجی شما در سطح تیمهای دیتا ساینس بینالمللی باشد.
آشنایی با پکیج Seaborn
Seaborn یک کتابخانه مصورسازی سطح بالا بر پایه Matplotlib است که مخصوص آمار و علم داده طراحی شده. با نصب pip install seaborn (در Anaconda از قبل هست) و import با import seaborn as sns کار میکند. Seaborn سه مزیت بزرگ دارد:
- استایل زیبا و حرفهای به صورت پیشفرض
- توابع سطح بالا برای تحلیل آماری (مثل رسم رگرسیون، heatmap همبستگی، و violin plot)
- کار راحت با DataFrameهای pandas – مستقیماً با نام ستونها کار میکند
اگر Matplotlib مثل "مداد و کاغذ" است، Seaborn مثل "دوربین حرفهای" است – کارهای رایج را با کد کمتر و خروجی زیباتر انجام میدهد. در این دوره، ابتدا با توابع اصلی Seaborn آشنا میشوید و سپس یاد میگیرید چطور استایل Seaborn را با امکانات پایه Matplotlib ترکیب کنید.
Numerical Data Plotting با Seaborn
Seaborn توابع بسیار قدرتمندی برای مصورسازی دادههای عددی ارائه میدهد:
sns.histplot(data, x='col', bins=30): هیستوگرام با تخمین چگالی هسته (KDE) اختیاری – بسیار زیباتر از Matplotlib خام.
sns.kdeplot(data, x='col', fill=True): تخمین چگالی هسته – نسخه صاف و پیوسته هیستوگرام.
sns.rugplot(data, x='col'): خطهای کوچک روی محور x که موقعیت هر نقطه را نشان میدهد (برای درک تراکم).
sns.ecdfplot(data, x='col'): نمودار تابع توزیع تجمعی (ECDF) – جایگزین خوب برای هیستوگرام وقتی تعداد داده کم است.
sns.displot(data, x='col', kind='hist', col='category'): نسخه سطح بالا برای ایجاد faceted plots (چندین زیرنمودار بر اساس دسته).
همه این توابع به طور خودکار فاصله اطمینان (confidence intervals) را در صورت نیاز محاسبه میکنند. در این دوره، با دادههای واقعی مثل توزیع سن کاربران یک اپلیکیشن، هر کدام از این نمودارها را رسم و تفسیر میکنیم.
Categorical Data Plotting با Seaborn
برای دادههای دستهای (Categorical) یا ترکیب عددی–دستهای، Seaborn مجموعهای از توابع را در قالب sns.catplot() با پارامتر kind ارائه میدهد:
sns.barplot(data, x='cat', y='num'): میانگین متغیر عددی در هر دسته + فاصله اطمینان (پیشفرض ۹۵%).
sns.boxplot(data, x='cat', y='num'): Box plot برای هر دسته به صورت جداگانه – عالی برای مقایسه پراکندگی.
sns.violinplot(data, x='cat', y='num'): ترکیبی از box plot و KDE – توزیع کامل را نشان میدهد.
sns.countplot(data, x='cat'): تعداد نمونهها در هر دسته.
sns.pointplot(data, x='cat', y='num'): نقاط میانگین با خطوط اتصال – برای روند در دستههای ترتیبی.
sns.stripplot و swarmplot: نمایش نقاط واقعی داده.
برای نمونه، sns.catplot(data=df, x='تحصیلات', y='حقوق', kind='violin') به شما نشان میدهد توزیع حقوق در گروههای تحصیلی مختلف چگونه است. در این دوره، با دیتاست حقوق کارمندان، این نمودارها را تمرین میکنید.
Visualizing Distribution of Data
برای درک توزیع توأم (Joint Distribution) دو یا چند متغیر، Seaborn توابع قدرتمندی دارد:
sns.jointplot(data, x='col1′, y='col2′, kind='scatter'): نمودار ترکیبی شامل scatter plot در مرکز، هیستوگرام هر دو متغیر در حاشیهها. پارامتر kind میتواند 'kde', 'hist', 'reg', 'resid', 'hex' باشد.
sns.pairplot(data, vars=['col1′,'col2′,'col3′], hue='category'): ماتریسی از scatter plots برای هر جفت متغیر – روی قطر، هیستوگرام یا KDE هر متغیر. hue رنگبندی بر اساس دسته است.
sns.jointplot(…, kind='kde', fill=True): نمایش چگالی توأم به صورت کانتور.
sns.jointplot(…, kind='hex'): هیستوگرام دو بعدی با شش ضلعیها – برای دادههای حجیم.
Pairplot برای کشف سریع ارتباط بین متغیرها در ابتدای هر پروژه دادهکاوی استفاده میشود. در این دوره، با دیتاست معروف iris و tips، این نمودارهای حرفهای را میسازید و الگوهای پنهان را استخراج میکنید.
Linear Regression and Relationship
Seaborn رابطه خطی بین دو متغیر را در کنار مصورسازی کامل آماری نمایش میدهد:
sns.regplot(data, x='col1′, y='col2′): رسم scatter plot به همراه خط رگرسیون خطی و فاصله اطمینان ۹۵% (نوار خاکستری). همچنین آمارههایی مثل ضریب تعیین (R²) را میتوان با سفارشیسازی نشان داد.
sns.lmplot(data, x='col1′, y='col2′, hue='category', col='another_cat'): نسخه سطح بالا با پشتیبانی از facet شدن – یعنی رسم یک رگرسیون مجزا برای هر دسته در چندین زیرنمودار.
sns.residplot(data, x='col1′, y='col2′): نمودار باقیماندهها (residuals) برای ارزیابی مفروضات رگرسیون – اگر نقاط به صورت تصادفی حول صفر پراکنده باشند، مدل خطی مناسب است.
sns.lmplot(…, order=2): برای رگرسیون چندجملهای درجه ۲ (منحنی).
این توابع به طور خودکار outliers را که تاثیر زیادی روی خط رگرسیون دارند، آشکار میکنند. در این دوره، با یک دیتاست مسکن، رگرسیون قیمت بر حسب متراژ را رسم و تفسیر میکنید و یاد میگیرید تشخیص دهید که آیا رابطه خطی معنیدار است یا خیر.
Plot Attributes در Seaborn
Seaborn به شما کنترل بالایی روی ظاهر (Attributes) نمودارها میدهد با چند خط کد ساده:
سبک استایل (Style): sns.set_style('whitegrid') – مقادیر ممکن: 'darkgrid', 'whitegrid', 'dark', 'white', 'ticks'. استایل پیشفرض 'darkgrid' است که شبکه خاکستری روی پسزمینه تیره دارد.
پالت رنگی (Palette): sns.set_palette('viridis') – یا به صورت موقت در تابع: sns.boxplot(data, palette='Set2′). پالتهای محبوب: 'deep', 'muted', 'pastel', 'bright', 'dark', 'colorblind'.
مقیاس زمینه (Context): sns.set_context('notebook') – گزینهها: 'paper', 'notebook', 'talk', 'poster'. اندازه عناصر را برای ارائه مناسب تنظیم میکند.
حذف حاشیه (Despine): sns.despine() – حاشیههای بالا و راست را حذف میکند.
تنظیمات محلی: میتوانید rcParams را مستقیماً تغییر دهید: sns.set(rc=).
در این دوره، شما یاد میگیرید با ترکیب قدرت دریافتی از Seaborn و کنترل نهایی Matplotlib (با فراخوانی plt. بعد از sns.)، نمودارهایی بسازید که هم زیبا هستند و هم دقیقاً مطابق استانداردهای انتشار علمی یا ارائه مدیریتی باشند.
برای مشاهده برنامه کلاس های آموزش هوش مصنوعی، اینجا کلیک کنید.
دیدگاه خود را بنویسید