بکندباز

طراحی پایتون: مقدمه ای بر Matplotlib برای تجسم داده ها در پایتون (قسمت 1)

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

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

  • نمودارهای خطی
  • هیستوگرام ها
  • نمودار های میله ای
  • نمودار های پراکنده
  • نمودار های استک
  • نمودارهای دایره ای

همچنین خواهیم دید که چه توابع و ماژول های مختلفی در matplotlib موجود است.

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

نصب کتابخانه Matplotlib

ساده ترین راه برای نصب matplotlib استفاده از نصب کننده pip است که با اکثر نصب های استاندارد پایتون ارائه می شود. دستور زیر را از ترمینال دلخواه خود اجرا کنید:

pip install matplotlib

اگر از توزیع Anaconda پایتون استفاده می کنید، می توانید از دستورات ذکر شده در اسناد رسمی ANACONDA برای نصب کتابخانه matplotlib نیز استفاده کنید.

وارد کردن کتابخانه های مورد نیاز: Numpy و MatplotLib.pyplot

هنگامی که matplotlib را نصب کردیم، مرحله بعدی وارد کردن کتابخانه های مورد نیاز است. کتابخانه pyplot در matplotlib برای رسم انواع مختلف نمودارها استفاده می شود. آن را همراه با کتابخانه NUMPY وارد می کنیم.

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

import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np

از آنجایی که من از Jupyter Notebook برای اجرای اسکریپت‌های این مقاله استفاده می‌کنم، باید عبارت %matplotlib را به صورت درون خطی اجرا کنم، که به IDE می‌گوید نمودارها را در رابط خود رسم کند. اگر از یک IDE مانند این استفاده نمی کنید، نیازی به اجرای این عبارت (خط دوم) ندارید.

نکته مهم دیگری که باید به آن توجه کنید این است که ما هنگام وارد کردن pyplot نام آن را به plt  تغییر دادیم، زیرا تایپ کردن آن آسان تر است و یک نام مستعار استاندارد برای pyplot است. از این پس در این مقاله، از این نام مستعار استفاده خواهیم داد.

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

تغییر اندازه پلات با استفاده از pyplot

برای مشاهده اندازه طرح پیش فرض نمودارهای ترسیم شده توسط plt اسکریپت زیر را اجرا کنید:

plot_size = plt.rcParams["figure.figsize"]
print(plot_size[0]) #6
print(plot_size[1]) #4

در اسکریپت بالا، از ویژگی rcParams در ماژول plt و ارسال مقدار figure.figsize به عنوان پارامتر استفاده کرده‌ایم که فهرستی حاوی عرض و ارتفاع پیش‌فرض نمودار را برمی‌گرداند. ایندکس اول عرض و ایندکس دوم ارتفاع است. هر دو مقدار روی صفحه چاپ می شوند. 6 و 4 را در خروجی مشاهده خواهید کرد، یعنی عرض پیش فرض نمودار 6 اینچ و ارتفاع پیش فرض 4 اینچ است.

برای تغییر اندازه طرح، اسکریپت زیر را اجرا کنید:

plot_size[0] = 8
plot_size[1] = 6
plt.rcParams["figure.figsize"] = plot_size

در کد بالا، عرض و ارتفاع نمودار را به ترتیب به 8 و 6 اینچ تغییر دادیم.

طرح های خطی

نمودار خطی ساده ترین نمودار در کتابخانه matplotlib است. این نمودار رابطه بین مقادیر محورهای x و y را در قالب یک منحنی نشان می دهد.

برای ایجاد نمودار خطی می توانید از تابع plot از ماژول plt استفاده کنید. اولین آرگومان تابع plot لیست مقادیری است که می خواهید در محور x نمایش دهید. و آرگومان دوم لیست مقادیری است که باید روی محور y رسم شوند. به مثال زیر دقت کنید:

plt.plot([-3,-2,-1,0,1,2,3],[9,4,1,0,1,4,9])
plt.‎show()‎

در اسکریپت بالا، ما شش مقدار در لیست برای محور x داریم و در محور y، مربع مقادیر x را داریم. این بدان معنی است که نمودار خطی تابع مربع را نشان می دهد، همانطور که در خروجی می بینید. توجه داشته باشید که رنگ طرح پیش فرض برای نمودارهای matplotlib آبی است.

نمودار

ذکر این نکته ضروری است که اگر از ویرایشگری غیر از Jupyter Notebook استفاده می کنید، باید عملکرد show از ماژول plt را فراخوانی کنید. اما در Jupyter، فراخوانی تابع show اختیاری است.

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

به جای وارد کردن دستی مقادیر لیست ها برای محور x و y، می توانیم از تابع linspace از کتابخانه numpy استفاده کنیم. این تابع برای تولید مقادیر سه آرگومان می گیرد: کران پایینی، کران بالایی، و تعداد نقاط با فاصله مساوی بین کران پایین و بالا. به اسکریپت زیر نگاه کنید:

x = np.linspace(-15, 14, 30)
y = np.power(x,3)

plt.plot(x, y, "rebeccapurple")
plt.‎show()‎

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

نکته برای مبتدیان: یک تابع در برنامه نویسی عملیات خاصی را انجام می دهد . برای ارسال داده به یک تابع، از آرگومان استفاده می کنیم. سپس تابع از آرگومان های ارسال شده به آن استفاده می کند. به عنوان مثال، در تابع plot، اولین پارامتر، داده ای است که روی محور x رسم می شود، دومین پارامتر داده ای است که روی محور y رسم می شود و پارامتر سوم، کد رنگ است. کد رنگ rebeccapurple مربوط به نوعی رنگ بنفش است.

در اینجا نموداری از رنگ های دیگر آورده شده است که می توانید استفاده کنید:

نمودار رنگ ها

 

خروجی به شکل زیر است:

نمودار

اضافه کردن برچسب ها، عنوان و توضیحات

برای افزودن برچسب به محورهای x و y، می‌توانید از توابع xlabel و ylabel از ماژول plt استفاده کنید. به طور مشابه، برای اضافه کردن عنوان، می‌توانید از تابع title مطابق شکل زیر استفاده کنید:

x = np.linspace(-15, 14, 30)
y = np.power(x,3)
 
plt.xlabel("input")
plt.ylabel("output")
plt.title("Cube Root")
plt.plot(x, y, "deepskyblue")
plt.‎show()‎

در خروجی، باید برچسب ها و عنوان محور خود را ببینید:

نمودار

برای افزودن توضیحات به نمودار خود، باید مقداری را برای ویژگی label تابع plot ارسال کنید، همانطور که در زیر نشان داده شده است:

x = np.linspace(-15, 14, 30)
 
cube = np.power(x,3)
square = np.power(x,2)
 
plt.xlabel("input")
plt.ylabel("output")
plt.title("Cube Root")
 
plt.plot(x, cube, "rebeccapurple", label = "Cube")
plt.plot(x, square , "deepskyblue", label = "Square")
plt.‎legend()‎
plt.‎show()‎

در اسکریپت بالا دو نمودار داریم: یکی برای تابع مربع و دیگری برای تابع مکعب. برای کمک به تمایز این دو، ما نه تنها می‌توانیم از رنگ‌های مختلف استفاده کنیم، بلکه می‌توانیم توضیحاتی را نیز بگنجانیم که به وضوح نشان دهد کدام نمودار برای چه است. در کد بالا، توضیحات طرح مکعب Cube نامگذاری شده است و به رنگ بنفش کشیده خواهد شد. توضیحات طرح مربع Square نام دارد و به رنگ آبی کشیده خواهد شد. خروجی اسکریپت بالا به شکل زیر است:

نمودار

نکته: چگونه می توان نموداری های خطی Matplotlib را بهبود بخشید

همچنین می توانید نشانگرهایی را به نقاط داده در نمودار خطی اضافه کنید. برای انجام این کار، باید مقداری را برای پارامتر marker از تابع plot به شکل زیر ارسال کنید:

x = np.linspace(-15, 14, 30)
x = np.linspace(-15, 14, 30)

cube = np.power(x,3)
square = np.power(x,2)

plt.xlabel("input")
plt.ylabel("output")
plt.title("Cube Root")

plt.plot(x, cube, "rebeccapurple", marker = "o", label = "Cube")
plt.plot(x, square , "deepskyblue", marker = "v", label = "Square")
plt.‎legend()‎
plt.‎show()‎

در اسکریپت بالا،  o  را به عنوان مقدار marker تابع مکعب مشخص کردیم. این مقدار، دایره هایی را برای نقاط داده ایجاد می کند. به طور مشابه، برای تابع مربع،  v  را به عنوان مقدار marker مشخص کردیم. این نماد، از یک مثلث وارونه برای نقاط استفاده می کند:

نمودار

کدهای تولید انواع مختلف نشانگرها در matplotlib را می‌توانید در اینجا پیدا کنید .

هیستوگرام ها

یک هیستوگرام توزیع داده ها را در قالب فواصل داده ای به نام «bin» نشان می دهد. برای رسم هیستوگرام، باید تابع hist از ماژول plt را فراخوانی کنید. آرگومان اول مجموعه داده ها، دومی bin ها و سومی نوع هیستوگرامی است که می خواهید رسم کنید. همچنین می توانید از آرگومان اختیاری rwidth استفاده کنید که عرض هر بازه یا “bin” را در هیستوگرام مشخص می کند. به مثال زیر نگاه کنید:

stock_prices = [23,21,43,32,45,34,56,23,67,89,23,21,43,32,45,34,56,23,67,89,23,21,43,32,45,34,56,23,67,89]
 
bins = [20,40,60,80,100]

plt.hist(stock_prices, bins, color = "rebeccapurple", histtype="bar", rwidth=0.9)
plt.‎show()‎

در اسکریپت بالا، داده های فرضی از میانگین قیمت سهام سی شرکت داریم. پنج bin برای فواصل داده تعریف می کنیم. سپس از تابع hist برای رسم این داده ها استفاده می کنیم. خروجی به شکل زیر است. (15 شرکت داریم که میانگین قیمت سهام آنها بین 20 تا 40 است. و برای بقیه بازه ها نیز به همین شکل توزیع داده ها را محاسبه می کنیم):

هیستوگرام

همچنین می توانید یک هیستوگرام افقی ایجاد کنید . برای انجام این کار، فقط باید مقدار horizontal را به عنوان مقدار پارامتر orientation در تابع hist وارد کنید:

stock_prices = [23,21,43,32,45,34,56,23,67,89,23,21,43,32,45,34,56,23,67,89,23,21,43,32,45,34,56,23,67,89]

bins = [20,40,60,80,100]

plt.hist(stock_prices, bins, color = "deepskyblue", histtype="bar", rwidth=0.9, orientation = "horizontal")
plt.‎show()‎

در خروجی، هیستوگرام افقی را مطابق شکل زیر مشاهده خواهید کرد: هیستوگرام

نکته: چگونه هیستوگرام Matplotlib خود را بهبود بخشید

علاوه بر هیستوگرام های یک بعدی، می توانید هیستوگرام های دو بعدی را نیز ترسیم کنید. برای انجام این کار، به مقادیری برای محور x و y هیستوگرام دو بعدی نیاز دارید. تابع hist2d برای رسم هیستوگرام های دو بعدی استفاده می شود:

stock_prices = [23,21,43,32,45,34,56,23,67,89]
years =[2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018]

plt.hist2d(stock_prices, years)
plt.‎show()‎

این اسکریپت قیمت سهام را در برابر سال‌هایشان به شکل زیر ترسیم می‌کند:

توجه: طول دو مجموعه باید با هم برابر باشد.

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

در مقابل هر سال مقدار آن در بازه bin مشخص شده ترسیم می شود. (در تابع hist2d ویژگی bins به صورت پیش فرض 10 است.)

  • در سال 2009 مقدار معادل در مجموعه stock_prices برابر با 23 است.
  • داده های محور افقی از 21 تا 89 است پس محور افقی از 21 تا 89 به 10 (مقدار bin) قسمت تقسیم می شود. پس اولین بازه بین 21 تا 27.8 است.
  • داده ها محور عمودی از 2009 تا 2018 است. محور عمودی نیز به 10 قسمت تقسیم می شود. یعنی اولین بازه عمودی بین 2009 تا 2009.9 است.
  • در نتیجه داده اول که 23 و در سال 2009 است به صورت یک مربع در بازه 21 تا 27.8 افقی و 2009 تا 2009.9 عمودی رسم خواهد شد. و به همین ترتیب برای بقیه داده ها.
  • نکته: اگر دو بازه مشترک داشته باشیم رنگ آن با رنگ بقیه مستطیل ها متفاوت خواهد شد.

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

backendbaz

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

دیدگاه‌ها

*
*