مصورسازی داده ها نمایش بصری (یا گرافیکی) داده ها برای بدست آوردن دیدهای مفید (به عنوان مثال روندها و الگوها) در داده ها و ساده تر کردن روند تجزیه و تحلیل داده ها است. مصورسازی و ساخت نمودارهای آماری با کیفیت بالا ، جذاب ، تعاملی و آموزنده (2 بعدی و ۳ بعدی) توسط کتابخانه های مختلف پایتون همچون matplotlib, pandas, numpy , seaborn به راحتی پذیر است .که ما تمامی موارد را در چندین بخش بررسی خواهیم کرد در این قسمت به مصورسازی در matplotlib می پردازیم.
هدف از مصورسازی داده ها ، درک سریع و واضح داده ها در نگاه اول و نمایان ساختن آنها برای درک اطلاعات است.
برخی از کتابخانه های مشهور مصورسازی موجود در پایتون
Matplotlib : مصور سازی با matplotlib که یکی از کتابخانه های محبوب مصورسازی است که به ما امکان می دهد گرافیکی با کیفیت بالا با طیف وسیعی از نمودارها مانند نمودارهای پراکندگی ، نمودارهای خطی ، نمودارهای میله ای ، هیستوگرام ها و نمودارهای دایره ای ایجاد کنیم.
Seaborn : یکی دیگر از کتابخانه های مصورسازی داده با طراحی های جذاب است که برپایه Matplotlib ساخته شده است . علاوه بر این ، تعداد خطوط کد مورد نیاز برای تولید نتیجه مشابه Matplotlib را کاهش می دهد.
Pandas : کتابخانه عالی دیگری است که برای تجزیه و تحلیل داده ها (دستکاری داده ها ، تجزیه و تحلیل سری های زمانی و غیره) در پایتون موجود است. Pandas Visualization (ساخته شده برمبنای Matplotlib) ابزاری از کتابخانه Pandas است که به ما امکان می دهد تا نمایشی بصری از دیتا فریم ها (داده های تراز شده به شکل جدول ستون ها و ردیف ها) و سری ها (آرایه ای یک بعدی با برچسب با قابلیت نگهداری داده ها از هر نوعی) را خیلی سریعتر و راحت تر داشته باشیم.
Plotly : کتابخانه ای برای ایجاد نمودارهای تعاملی و چند بعدی است که روند تجزیه و تحلیل داده ها را با ارائه مصورسازی بهتر داده ها آسان می کند.
درک اصول Matplotlib
Figure: کل منطقه ای که همه چیز در آن ترسیم می شود. که می تواند شامل چندین نمودار باشد.
Axes: ناحیه ای که در آن نمودار کشیده می شود در هر figure می توان چند axes داشت.
Axis: محور های هر نمودار را نشان می دهد (محور X و محور Y در شکل بالا ذکر شده است) در نمودار چند بعدی می توان بیش از دو محور در نمودار وجود داشته باشد.
Plot title: عنوان در مرکز بالای نمودار(axes) قرار می گیرد.
وارد کردن مجموعه داده
در این مقاله ، ما از مجموعه داده های Iris (به عنوان مثال) استفاده خواهیم کرد ، که رایگان است و معمولاً مورد استفاده قرار می گیرد.
ما می توانیم این مجموعه داده را به دو روش وارد کنیم:
1. استفاده از کتابخانه Scikit-learn:
import matplotlib.pyplot as plt from sklearn import datasets iris = datasets.load_iris() #print(iris)
بدون دانلود فایل csv ، می توانیم مستقیماً مجموعه داده ها را در فضای کار با استفاده از کتابخانه sci-kit learn موجود در پایتون وارد کنیم.
2. استفاده از کتابخانه Pandas:
import pandas as pd iris = pd.read_csv('iris.csv') print(iris.head())
با استفاده از کد فوق (با وارد کردن کتابخانه Pandas) و دانلود csv مجموعه داده می توانیم داده ها را در فضای کاری خود وارد کنیم. تصویر زیر پنج نمونه اول مجموعه داده iris است:
از هر دو روش فوق می توان برای وارد کردن مجموعه داده و ساخت نمودار استفاده کرد ، اما ما به دلیل خوانایی بهتر داده ها از روش دوم استفاده خواهیم کرد (همانطور که تفاوت نتایج خروجی هر دو روش را مشاهده می کنید) .
ما با وارد کردن کتابخانه با استفاده از کد زیر شروع می کنیم:
کار با Matplotlib
import matplotlib.pyplot as plt
در این کتابخانه انواع مختلفی برای ترسیم نمودار موجود است.
نمودار خطی
نمودارهای خطی یکی از متداول ترین ابزارهای مصورسازی در matplotlib است ،که از نقاط داده که بصورت مستقیم به هم متصل شدهاند تشکیل میشود تا به ایجاد یک تصویر از اطلاعات کمک کند. این یکی از ساده ترین نمودارهایی است که می توانیم با استفاده از پایتون بسازیم.
import matplotlib.pyplot as plt import numpy as np x = np.linspace(0,20,30) y= x**2 plt.plot(x, y) plt.show()
در اینجا ، با استفاده از تابع() linspace نامپای (numpy) نقاط داده ای تولید می کنیم و آنها را در متغیر x ذخیره می کنیم و مربع مقادیر x را محاسبه می کنیم و آنها را در متغیر y دیگر ذخیره می کنیم.
برای مصورسازی توسط نمودار خطی از تابع () plt.plot و از () plt.show در matplotlib استفاده خواهیم کرد.
ما می توانیم برخی از توابع دیگر را به نمودار خود اضافه کنیم تا تفسیر آن بسیار ساده تر شود.
برای افزودن برچسب: برچسب محور x و برچسب محور y به ترتیب از توابع () plt.xlabel و () plt.ylabel استفاده خواهیم کرد.
همچنین می توانیم با استفاده از تابع () plt.title عنوانی به نمودار خود بدهیم.
نمودار را می توان با فراخوانی تابع plt.grid (True) مشبک کرد (تفسیر داده ها را آسان تر می کند).
import matplotlib.pyplot as plt import numpy as np x = np.linspace(0,20,30) y= x**2 plt.plot(x, y) plt.xlabel('x-values') plt.ylabel('x^2-values') plt.title('line plot') plt.grid(True) plt.show()
با افزودن این توابع ، نمودار بسیار خواناتر شده و تجزیه و تحلیل آن آسان تر می شود.
ما می توانیم بیش از یک خط به نمودار خود اضافه کنیم و آنها را با استفاده از رنگ های مختلف و برخی ویژگی های دیگر متمایز کنیم:
import matplotlib.pyplot as plt import numpy as np x = np.linspace(-10,10,30) y= x**2 z= x**3 plt.plot(x,z,color='red') plt.plot(x, y, '*') plt.xlabel('x-values') plt.ylabel('y-values') plt.title('line plot') plt.grid(True) plt.show()
در کد بالا ، ما متغیر دیگری z = x ** 3 (z = x³) اضافه کرده و سبک و رنگ خط را تغییر داده ایم.
برای تغییر رنگ یک خط در نمودار خطی ، باید پارامتر “”= color را در تابع () plt.plot اضافه کنیم.
برای تغییر سبک یک خط در نمودار خطی ، باید پارامتر “”= linestyle را در تابع ()plt.plot اضافه کنیم (یا به سادگی می توانیم “*” یا “- -” و غیره را اضافه کنیم).
این امر استخراج اطلاعات و مقایسه متغیرها را آسان تر می کند.
به همین ترتیب ، ما می توانیم نمودارهایی برای توابع ریاضی نیز ایجاد کنیم:
import numpy as np plt.plot(np.sin(x),label='sin(x)',color='orange') plt.plot(np.cos(x),label='cos(x)',color='green') plt.xlim(10,100) plt.legend() plt.title('math functions') plt.show()
در اینجا ، ما یک نمودار برای (x)sin و cos (x) ایجاد کرده ایم.
ما می توانیم با استفاده از توابع plt.xlim (lower_limit ، upper_limit) برای محور x و plt.ylim (lower_limit ، upper_limit) برای محور y محدودیت محورها را تنظیم کنیم.
ما می توانیم با تابع () plt.legend برچسب اضافه کنیم ، این برچسب به شما کمک می کند تا مشخص کنید کدام خط برای کدام تابع است.
نمودارهای چندگانه
برای ایجاد نمودارهای جداگانه در همان شکل(figure) می توان از تابع plt.subplots (num_rows ، num_cols) استفاده کرد. در اینجا جزئیات هر نمودار می تواند متفاوت باشد.
fig, axs = plt.subplots(2, 2 ,gridspec_kw={'hspace': 0.5, 'wspace': 0.4}) x = np.linspace(0, 20, 400) y = np.sin(x) z=np.cos(x) m = (x**3) n=(x**2) axs[0, 0].plot(x, y) axs[0, 0].set_title('sin(x)') axs[0, 1].plot(x, z, 'tab:orange') axs[0, 1].set_title('cos(x)') axs[1, 0].plot(x, m, 'tab:green') axs[1, 0].set_title('x**3') axs[1, 1].plot(x,n, 'tab:red') axs[1, 1].set_title('x**2') plt.show()
تابع () plt.sublots یک figureو تعداد نمودارهای آن را مشخص می کند که با پارامتر اول و دوم می توانیم تعداد ستون ها و ردیف ها را مشخص کنیم. همچنین می توانیم با استفاده از آرگومان gridspec_kw = {‘hspace’:، ‘wspace’:} فاصله بین نمودارها را تغییر دهیم. پس از آن ، به سادگی با استفاده از شماره index برای نمودار می توان نمودارها را به راحتی رسم کرد.
نمودار پراکندگی
این نوع نمودار از “نقطه” برای نشان دادن داده های عددی متغیرهای مختلف استفاده می کند.
از نمودارهای پراکندگی می توان برای تحلیل تأثیر یک متغیر بر متغیرهای دیگر استفاده کرد. (ما می توانیم از هر تعداد متغیر که می خواهیم برای رسم استفاده کنیم.)
ما برای ایجاد نمودار از تابع() dataset_name.plot در matplotlib استفاده خواهیم کرد و در پارامترها ، “kind = “scatter همراه با برچسب برای محور x و محور y اعمال خواهیم کرد. نمونه ذکر شده در مصورسازی زیر (مجموعه داده iris) را بررسی کنید.
iris.plot(kind='scatter', x='petal.length', y='petal.width') plt.show()
در اینجا ، ما در حال مقایسه طول و عرض گلبرگ گونه های مختلف گل های موجود در مجموعه داده ها هستیم.
اما ، در اینجا تجزیه و تحلیل و استخراج اطلاعات از این نمودار برای ما بسیار دشوار است زیرا ما نمی توانیم بین گروه های حاضر تفاوت قائل شویم.
بنابراین اکنون ، ما روش دیگری را امتحان خواهیم کرد که مشکل ما را حل خواهد کرد. در این روش از() plt.scatter برای ایجاد نمودار پراکندگی استفاده خواهیم کرد.
برای تغییر رنگ نقاط بر اساس گونه های گل ، می توانیم یک دیکشنری با ذخیره رنگ های مربوط به نام گونه ها ایجاد کنیم. با استفاده از حلقه for یک نمودار پراکندگی از سه گونه مختلف (هر یک با رنگ متفاوت نشان داده می شود) ایجاد می کنیم.
colours = {'Setosa':'orange', 'Versicolor':'lightgreen', 'Virginica':'lightblue'} for i in range(len(iris['sepal.length'])): plt.scatter(iris['petal.length'][i],iris['petal.width'][i], color = colours[iris['variety'][i]]) plt.title('Iris') plt.xlabel('petal length') plt.ylabel('petal width') plt.grid(True) plt.show()
این نمودار ایجاد شده بسیار بهتر از نمودار قبلی است. تشخیص گونه ها آسان تر شده و برای تجزیه و تحلیل آسانتر اطلاعات خوبی می دهد.
نمودار میله ای
از نمودارهای میله ای matplotlib می توان برای مقایسه متغیرهای کیفی در مصورسازی استفاده کرد.
a= iris['variety'].value_counts() species = a.index count = a.values plt.bar(species,count,color = 'lightgreen') plt.xlabel('species') plt.ylabel('count') plt.show()
در اینجا ما از مجموعه iris برای مقایسه تعداد گونه های مختلف گل استفاده می کنیم (با اینکه می دانیم برابر با پنجاه هستند). برای یافتن تعداد هر گونه منحصر به فرد در مجموعه داده ، از تابع() value_counts استفاده می کنیم. species و count در کد ما نام هر گونه منحصر به فرد (تابعindex.) و فراوانی هر گونه را ذخیره می کند (تابع values.)
این ابتدایی ترین نوع نمودار میله ای است ، شما می توانید عرض میله ها را تغییر دهید (با استفاده از =width) یا یک نمودار میله ای تجمعی ایجاد کنید (با استفاده از پارامتر bottom).
نمودار جعبه ای
نمودارهای جعبه ای توزیع داده ها را بر اساس کوچکترین مقدار، چهارک اول ، میانه ، چهارم سوم و بزرگترین مقدار نمونه ترسیم می کند. این نمودار در مصورسازی می تواند به ما کمک کند داده ها را تجزیه و تحلیل کنیم تا نقاط دور افتاده را پیدا کنیم.
length_width = iris[['petal.length','petal.width','sepal.length','sepal.width']] #excluding species column length_width.boxplot() plt.xlabel('Flower measurements') plt.ylabel('values') plt.title("Iris dataset analysis") plt.show()
ما ستون گونه (species) را در اینجا حذف کرده ایم زیرا فقط طول گلبرگ ، عرض گلبرگ ، طول کاسبرگ ، عرض کاسبرگ گلهای مجموعه داده Iris را مقایسه می کنیم. نمودار جعبه ای را با استفاده از تابع ()boxplot ایجاد می کنیم.
نمودار هیستوگرام
برای نمایش توزیع فراوانی (یا می توان گفت توزیع احتمال) داده ها از هیستوگرام استفاده می شود. برای ساخت نمودار هیستوگرام در matplotlib باید از تابع() plt.hist استفاده کنیم و همچنین می توان بازه ها (bins) را برای نمودار تعریف کرد (یعنی شکستن کل دامنه به یک سری بازه ها و محاسبه تعداد مقادیر افتاده در هر بازه).
هیستوگرام ها نوع خاصی از نمودار میله ای هستند.
import numpy as np data_ = np.random.randn(1000) plt.hist(data_,bins = 40,color='gold') plt.grid(True) plt.xlabel('points') plt.title("Histogram") plt.show()
نمودار میله خطا
نوار خطا ابزاری عالی برای کشف تفاوت آماری بین گروه داده ها با ارائه تصویری از تغییر در داده ها است. این ابزار matplotlib در مصورسازی کمک می کند تا خطا و دقت در روند تجزیه و تحلیل داده (و تعیین کیفیت مدل) مشخص شود.
import numpy as np x = np.linspace(0,10,19) data_ = np.cos(x) yerr = 0.5 #xerr = 0.5 plt.errorbar(x,data_,yerr=yerr,fmt='o',color = 'gold',ecolor='silver',label = 'cos(x)') plt.xlabel('cos(x)') plt.title('Error bars - cos(x)') plt.legend(loc='upper right') plt.show()
برای ترسیم میله های خطا ، ما باید از تابع() errorbar استفاده می کنیم که x و y مکان نقطه داده هستند ، yerr و xerr اندازه میله های خطا را تعریف می کنند (در این کد ما فقط از yerr استفاده می کنیم).
ما همچنین می توانیم سبک و رنگ میله های خطا را با استفاده از پارامتر fmt تغییر دهیم (مانند اینکه سبک را روی نقطه ها ’o’ در این مثال خاص قرار می دهیم) ، ecolor برای تغییر رنگ نقاط و پارامتر color برای تغییر رنگ خطوط عمودی .
با افزودن پارامتر “”=loc در تابع () plt.legend می توانیم موقعیت برچسب legend را در نمودار تعیین کنیم.
نمودار حرارتی
از نمودار حرارتی برای نشان دادن داده های کیفی در قالب “نمودار تصویری کدگذاری شده با رنگ” (مقادیر موجود در داده ها به عنوان رنگ نشان داده می شوند) استفاده می شود تا ارتباط ویژگی های داده ها (تجزیه و تحلیل خوشه ای) پیدا شود. با کمک ساخت نمودار های حرارتی در matplotlib ، می توانیم یک تجزیه و تحلیل سریع و عمیق از نظر بصری داشته باشیم.
correlation = iris.corr() fig ,ax = plt.subplots() k = ax.imshow(correlation, cmap = 'magma_r') ax.set_xticks(np.arange(len(correlation.columns))) ax.set_yticks(np.arange(len(correlation.columns))) ax.set_xticklabels(correlation.columns) ax.set_yticklabels(correlation.columns) cbar = ax.figure.colorbar(k, ax=ax) cbar.ax.set_ylabel('color bar', rotation=-90, va="bottom") plt.setp(ax.get_xticklabels(), rotation=45, ha="right",rotation_mode="anchor") for i in range(len(correlation.columns)): for j in range(len(correlation.columns)): text = ax.text(j, i, np.around(correlation.iloc[i, j], decimals=2),ha="center", va="center", color="lightgreen") plt.show()
در این مثال ، ما از مجموعه داده iris برای ایجاد نمودار حرارتی استفاده می کنیم. تابع ()corr یک تابع دیتافریم pandas است که برای یافتن همبستگی در مجموعه داده استفاده می شود. نمودار حرارتی با استفاده از تابع ()imshow ایجاد می شود ، cmap (برای تنظیم سبک و رنگ طرح)، برای افزودن میله رنگی از تابع ()figure.colorbar استفاده می کنیم. و سرانجام برای افزودن حاشیه نویسی (مقادیری که می توانید در بلوک های رنگی مشاهده کنید) از دو حلقه for استفاده کرده ایم.
نمودارهای دایره ای (پای)
نمودار دایره ای عموما برای نمایش سهم ها، بصورت عددی و درصدی استفاده می شود. مثلا نمایش میزان سهم هر یک از گل ها در مجموعه داده iris
a= iris['variety'].value_counts() species = a.index count = a.values colors= ['lightblue','lightgreen','gold'] explode = (0,0.2,0) plt.pie(count, labels=species,shadow=True, colors=colors,explode = explode, autopct='%1.1f%%') plt.xlabel('species') plt.axis('equal') plt.show()
برای ترسیم نمودار دایره ای باید از تابع () plt.pie استفاده کنیم. برای دادن جلوه سه بعدی به نمودار از پارامتر shadow = True استفاده کرده ایم ، پارامتر explode برای جدا کردن یک دسته و برای نمایش درصد هر دسته باید از پارامتر autopct استفاده کنیم. برای متناسب بودن دایره می توان از تابع plt.axis(‘equal’) استفاده کرد.
در صورتی که می خواهید در این زمینه بیشتر مطالعه کنید ما به شما سایت اصلی matplotlib را پیشنهاد میکنیم تا بتوانید با انواع نمودار به تفصیل آشنا شوید. همچینین در صفحه گروه مطالب مصورسازی در علم داده در سایت ما می توانید مصور سازی با ابزار های مختلف آشنا شوید
در صورتی که در مورد هر یک از این نمودارها سوالی دارید در قسمت نظرات با ما در تماس باشید.
منبع :towarddatascience
عالی بود ممنون
سلام وقت بخیر
امکان این هست که با دیتاهایی که روی لپتاپ داریم نمودار رسم کرد؟
یعنی برای مثال من یه پوشه شامل ۱۰۰۰ تا دیتا دارم میشه با این دیتا ها نمودار رسم کرد یا حتما باید تبدیل به csv بشن؟
سلام. بله این امکان وجود دارد. باید اطلاعات شامل تمام داده ها خوانده شود و در هر مرحله داخل دیتا یک دیتا فریم ذخیره شود. به این ترتیب کل داده ها در یک جدول قرار می گیرند و بعد از آن می شود برای رسم این داده ها اقدان مرد.
سلام ،
بدون اینکه صفحه رو ببندیم چطور یه نمودارو تو پایتون پاک کنیم؟
سلام وقت به خیر
با داده های فایل جیسون هم میتوان نمودار رسم کرد؟
سلام. بله مشکلی نیست برای رسم نمودار. همون مستقیم میشه فایل جیسون رو نمودار کشید هم اینکه فایل رو تبدیل به دیتا فریم یا لیست کنیم.