Plotly یک کتابخانه رسم نمودار متنباز (Open-source) پایتون است که برای ایجاد نمودارهای زیبا و تعاملی (Interactive) بهترین انتخاب است. این کتابخانه یک ابزار عالی برای یافتن الگوها در یک مجموعه داده، قبل از مدلسازی است. در این مقاله، با مثالهای متنوع با این کتابخانه آشنا میشویم و به چگونگی استفاده از آن، نگاهی خواهیم کرد. برخی از نمودارهای کتابخانه Plotly که آموزش داده میشوند شامل موارد زیر است:
- نمودارهای خطی (line plots)
- نمودارهای پراکندگی (scatter plots)
- نمودارهای میلهای (bar charts)
- نمودارهای میلهای مبتنی بر خطا (error bars)
- نمودارهای جعبهای (box plots)
- هیستوگرامها (histograms)
- نقشههای حرارتی (heatmaps)
- زیر نمودارها (subplots)
- و نمودارهای حبابی (bubble charts)
در این مقاله جامع آموزشی، ابتدا در مورد کتابخانه Plotly و دلایل انتخابمان بیشتر صحبت کرده و در ادامه هیستوگرامها، نمودار میلهای، نمودار دایرهای، دوناتی و سایر نمودارها را بررسی میکنیم.
چرا باید کتابخانه Plotly را انتخاب کنیم؟
برای ترسیم و ایجاد انواع نمودارها و بصریسازی در پایتون می توان از کتابخانههای Matplotlib، Seaborn یا Bokeh استفاده کرد. ولی به دلایل زیر بهتر است از کتابخانه Plotly استفاده کنیم:
- نمودارها (نمایشهای بصری) برخلاف Seaborn و Matplotlib تعاملی هستند.
- ساختن نمودارهای پیچیده با استفاده از Express API بسیار ساده است.
- کتابخانه Plotly فریمورکی با عنوان Plotly Dash ارائه می دهد که میتوانیم از آن برای میزبانی نمودارهای خود و همچنین پروژههای یادگیری ماشین استفاده کنیم.
- در صورت تمایل میتوانیم برای نمودارهای خود کد HTML تولید کنیم و بهراحتی این کد را به وبسایت خود اضافه کنیم.
علاوه بر موارد گفته شده، برای ایجاد نمودارها لازم است مجموعهداده را از قبل تمیز کرده باشیم. این کار یک بخش مهم است، در غیر این صورت، نمودارهایی خواهیم داشت که نشاندهنده اطلاعات نادرستی هستند. در این مقاله، از بخش پیشپردازش (Pre-processing) صرفنظر میکنیم تا بر روی خود نمودارها تمرکز کنیم.
همچنین مهم است در زمان ساختن نمودارها اصول زیر را بهخاطر داشته باشیم، برای مثال:
- از رنگهایی استفاده کنیم که چشم را آزار ندهند (eye-friendly).
- مطمئن شویم که عددها درست درمیآیند، برای مثال در نمودار دایرهای (pie chart) درصدها باید در مجموع 100% باشند.
- از مقیاس (طیف) رنگی خوبی استفاده کنیم که برای بیننده واضح باشد که کدام رنگ نشاندهنده عدد بیشتر و کدامیک نشاندهنده کمتر است.
- داده زیادی را در یک نمودار قرار ندهیم، برای مثال، میتوانیم نمونهها را گروهبندی کنیم و بهجای رسم تمام موارد موجود در مجموعهداده، بالاترین موارد را رسم کنیم.
- مطمئن شویم که نمودار زیاد شلوغ نیست.
- همیشه منبع دادهمان را مشخص کنیم، حتی اگر خودمان آن را جمعآوری کردهایم.
به دو روش زیر میتوانیم با کتابخانه Plotly ارتباط برقرار کرده و نمودارهای مدنظر را طراحی کنیم:
- Plotly Graph Objects API سطح پایینتر
- Plotly Express API سطح بالاتر
در این قسمت، هر دو روش را یاد میگیریم. با ما همراه باشید…
در این آموزش، تمامی کدها به زبان برنامهنویسی پایتون هستند. اگر هنوز با پایتون آشنا نیستید و به دنبال دوره آموزشی ویژه علم داده هستید، دوره آموزش رایگان پایتون را در کانال یوتیوب دیتاهاب مشاهده کنید.
هیستوگرام (Histogram) در کتابخانه Plotly
هیستوگرام نمایشی از توزیع دادههای عددی به صورتی است که دادهها در بازههایی گروهبندی شوند. سپس فراوانی هر بازه نمایش داده خواهد شد. در کتابخانه Plotly، دادهها با استفاده از توابعی مثل sum یا average جمع میکنیم. در Plotly دادههایی که در بازهها قرار میگیرند میتوانند بر اساس دسته باشند. بهعنوان مثال:
import plotly.express as px
fig = px.histogram(views, x="views")
fig.show()
نمودار میلهای (bar charts) در پایتون
نمودار میلهای برای نمایش یک ستون کیفی و یک ستون عددی عالی است. این نمودار، یک ستون عددی خاص برای هر دسته را نشان میدهد. Plotly Express رسم یک نمودار از این نوع را بسیار آسان کرده است:
با نمودارهای میلهای هم میتوانیم نمودارهای عمودی رسم کنیم و هم نمودارهای افقی. این کار را با مشخصکردن ‘orientation’ (جهت) انجام میدهیم:
fig = px.bar(views_top, x='views', y='event',orientation='h')
fig.show()
رسم نمودار دایرهای (pie chart)
نمودار دایرهای نوع دیگری از نمودارهایی است که درصد فراوانی هر دسته را نشان میدهد. با این نمودار میتوانیم خیلی سریع، سهم هر مورد (دسته یا گروه) بر روی کل مجموعهداده را تشخیص بدهیم. با استفاده از Graph Object در کتابخانه Plotly یک نمودار دایرهای رسم میکنیم:
import plotly.graph_objects as go
fig = go.Figure(
data=[
go.Pie(labels=labels, values=values)
])
fig.show()
نمودار دوناتی (donut chart) چیست؟
با مشخصکردن پارامتر hole (سوراخ)، به راحتی میتوانیم نمودار بالا را به یک نمودار دوناتی تبدیل کنیم. این پارامتر اندازه سوراخی است که میخواهیم نمودار دوناتی داشته باشد:
fig = go.Figure(
data=[
go.Pie(labels=labels, values=values, hole=0.2)
])
fig.show()
تا اینجای کار در مورد کتابخانه Plotly و دلایل انتخابمان بیشتر صحبت کردیم و رسم هیستوگرام، نمودار میلهای، نمودار دایرهای و دوناتی را به طور جزئی و با مثالهای متنوع یاد گرفتیم. در ادامه در مورد نحوه ایجاد نمودارهای پراکندگی، خطی، پراکندگی سهبعدی، حبابی صحبت میکرد. همچنین نحوه نمایش دیتافریم در قالب یک جدول زیبا را یاد میگیریم. پس از آن، نحوه تبدیل نمودارهای ایجاد شده با Plotly به کد html را می گوییم.
برای یادگیری کار با دیتاستها در پروژههای واقعی یادگیری ماشین و ساخت مدلهای مختلف، آموزش رایگان یادگیری ماشین را در کانال یوتیوب دیتاهاب ببینید.
رسم نمودار پراکندگی (scatter plot) در کتابخانه Plotly
نمودارهای پراکندگی (scatter plots) برای تشخیص اینکه آیا رابطه یا همبستگیای بین دو متغیر عددی وجود دارد (تشخیص استقلال یا وابستگی بین دو یا چند متغیر) مناسب است:
fig = px.scatter(df,x='comments',y='views')
fig.show()
رسم نمودار خطی (line chart)
همگامی از یک نمودار خطی استفاده میکنیم که میخواهیم نشان دهیم یک متغیر عددی خاص چگونه در طول زمان یا در طول یک بازه خاص تغییر میکند:
fig = px.line(talks, x="published_year", y="number_of_events")
fig.show()
نحوه نشانهگذاری در Plotly
اضافهکردن برچسبهای متنی و نشانهگذاری نمودارها در کتابخانه Plotly بسیار ساده است. در یک نمودار پراکندگی این کار را با مشخصکردن مقدار برای پارامتر text انجام میدهیم:
fig = px.scatter(df,x='comments',y='views',color='duration',text="published_day")
fig.show()
پراکندگی سهبعدی (3D scatter)
در کتابخانه Plotly، یک نمودار پراکندگی سهبعدی را با مشخصکردن پارامترهای x، y و z ایجاد میکنیم.
fig = px.scatter_3d(df,x='comments',y='views',z='duration',color='views')
fig.show()
تبدیل خروجی Plotly به HTML
یکی از قابلیتهای جالب کتابخانه Plotly این است که میتوانیم هرکدام از نمودارهایمان را در یک فایل html ذخیره کنیم. این کار به طرز عجیبی آسان است:
fig.write_html("3d.html")
سطح سهبعدی (3D surface) در پایتون با Plotly
برای رسم یک سطح سهبعدی در کتابخانه Plotly، کافیست مشابه نمودار پراکندگی سهبعدی، پارامترهای x، y و z را مشخص کنیم:
fig = go.Figure(data=[go.Surface(z=df[['duration','views','comments']].values)])
fig.update_layout(title='3D Surface', autosize=False,
width=500, height=500,
margin=dict(l=65, r=50, b=65, t=90))
fig.show()
چطور در Plotly نمودار حبابی (bubble chart) رسم کنیم؟
نمودار حبابی بسیار شبیه به نمودار پراکندگی است. در واقع، از یک نمودار پراکندگی ساخته میشود. تنها موردی که به آن اضافه میکنیم، اندازه حباب است.
fig = px.scatter(df,x='comments',y='views',size='duration',color='num_speaker', log_x=True, size_max=60)
fig.show()
رسم جدول (table) با Plotly
میتوانیم از کتابخانه Plotly برای رسم نمودار یک فریم داده به شکل یک جدول استفاده کنیم. برای این کار از تابع Table در Plotly Graph Objects استفاده میکنیم. پارامترهای header و cells را به عنوان ورودی تابع Table مشخص میکنیم. همچنین میتوانیم styling را نیز به شکل زیر مشخص کنیم:
fig = go.Figure(data=[go.Table(header=dict(values=views_top.columns,
fill_color='yellow',
),
cells=dict(values=[views_top['event'],views_top['views']],
fill_color='paleturquoise',
))
])
fig.show()
نقشه حرارتی (heatmap)
density heatmap برای نمایش توزیع دوبعدی یک تابع تجمیع (aggregate function) قابلاستفاده است. تابع تجمیع بر روی متغیر در محور z انجام میگیرد. تابع تجمیع میتواند تابع sum (مجموع)، average (میانگین) یا حتی count (فراوانی) باشد. در شکل زیر تحلیل سهگانه بر اساس سه پارامتر سال انتشار، تعداد بازدیدها و تعداد کامنتها را داریم. این شکل شامل تعدادی مربع است که هرکدام مختصات x و y را دارند که به ترتیب نمایانگر سال انتشار و تعداد بازدیدهاست. برای تشخیص تعداد نظرات کافی است به رنگ مربع و ستون سمت چپ شکل توجه کنیم:
fig = px.density_heatmap(df, x="published_year", y="views",z="comments")
fig.show()
انیمیشن (animations) در Plotly چیست؟
انیمیشنهای Plotly برای نشاندادن تغییرات مقادیر خاص در طول زمان استفاده میشوند. برای رسیدن به این هدف، پارامتر animation-frame را تعریف میکنیم. در کد زیر، این پارامتر سال خواهد بود:
px.scatter(df, x="duration", y="comments",animation_frame="published_year", size="duration", color="published_day")
چطور نمودار جعبهای (box plot) رسم کنیم؟
یک نمودار جعبهای دادهها را در چارکهای مختلف نشان میدهد. مقادیری که خارج از چهارمین چارک قرار میگیرند دادههای پرت در مجموعهداده را نشان میدهند:
fig = px.box(df, x="published_day", y="duration")
fig.show()
زیرنمودارها (subplots)
با کتابخانه Plotly، میتوانیم چندین نمودار را بر روی یک نمودار نمایش بدهیم. این کار را با استفاده از Subplots انجام میدهیم. این نمودارها با تعریف پارامتر facet_col ساخته میشوند. نمودارها به تعداد مقادیر منحصربهفرد ممکن از ستون facet_col تقسیم میشوند:
px.scatter(df, x="duration", y="comments",
animation_frame="published_month", animation_group="event",
facet_col="published_day",width=1500, height=500,
size="views", color="published_day",
)
نمودارهای میلهای مبتنی بر خطا (error bars) چیست؟
اگر بخواهیم تغییرپذیری (Variability) داده در یک نمودار را نشان دهیم، به سراغ error bars میرویم. معمولاً، این نمودارها به نمایش خطای تقریبی یا دقت یک مقدار خاص به ما کمک میکنند. طول میله خطا، میزان عدم قطعیت (Uncertainty) را نشان میدهد. error bar بلندتر نشاندهنده این است که نقاط داده پخشتر (کمتراکمتر) و در نتیجه غیرقطعیتر هستند. میتوان error bar را با نمودارهایی مثل نمودار خطی (line charts)، نمودار میلهای (bar charts) و نمودار پراکندگی (scatter plots) استفاده کرد:
fig = go.Figure(
data=[
go.Bar(
x=views_top['event'], y=views_top['views'],
error_y=dict(type='data', array=views_top['error'].values)
)
])
fig.show()
در این مقاله یاد گرفتیم که چطور از Plotly در پروژههایمان استفاده کنیم. حتی میتوانم از آن برای رسم نمودارهای ماتریسهای عملکرد (Performance matrices) مدلهای یادگیری ماشین استفاده کنیم. برخلاف دیگر ابزارها، نمودارهای کتابخانه Plotly چشمنواز و همینطور تعاملی (Interactive) هستند.
قابلیت تعاملی این امکان را میدهد تا در قسمتهای خاصی از نمودار بزرگنمایی و کوچکنمایی کنیم. بنابراین میتوانیم برای بررسی نمودار با جزئیات بیشتر، کمی عمیقتر به آن نگاه کنیم. در این مقاله دیدیم که چگونه میتوانیم نمودارهای معمول مثل هیستوگرامها (histograms)، نمودار میلهای (bar charts) و نمودارهای پراکندگی (scatter plots) را در کتابخانه Plotly رسم کنیم. همچنین یاد گرفتیم چندین نمودار را بر روی یک نمودار بسازیم.
Notebook استفاده شده را در اینجا ببینید و به کدهای رسم نمودار با کتابخانه Plotly دسترسی داشته باشید.
3 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
ممنون از این مقاله کاربردی
با توجه به اینکه سایت پلاتلی بسته است چه راهکاری هست !؟
سلام
اگر از کولب استفاده کنید که قاعدتا مشکلی برای نصب پلاتلی نخواهید داشت
ولی برای باز کردن خود سایتش و دیدن مستنداتش، به مشکل خواهید خورد، یکی از گزینه های جایگزین، کتابخانه seaborn است.