آموزش کامل کتابخانه Plotly در پایتون

کتابخانه plotly پایتون
فهرست مطالب

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 ارتباط برقرار کرده و نمودارهای مدنظر را طراحی کنیم:

در این قسمت، هر دو روش را یاد می‌گیریم. با ما همراه باشید…

در این آموزش، تمامی کدها به زبان برنامه‌نویسی پایتون هستند. اگر هنوز با پایتون آشنا نیستید و به دنبال دوره آموزشی ویژه علم داده هستید، دوره آموزش رایگان پایتون را در کانال یوتیوب دیتاهاب مشاهده کنید.

هیستوگرام (Histogram) در کتابخانه Plotly

هیستوگرام نمایشی از توزیع داده‌های عددی به صورتی است که داده‌ها در بازه‌هایی گروه‌بندی شوند. سپس فراوانی هر بازه نمایش داده خواهد شد. در کتابخانه Plotly، داده‌ها با استفاده از توابعی مثل sum یا average جمع می‌کنیم. در Plotly داده‌هایی که در بازه‌ها قرار می‌گیرند می‌توانند بر اساس دسته باشند. به‌عنوان‌ مثال:

				
					import plotly.express as px
fig = px.histogram(views, x="views")
fig.show()

				
			

هیستوگرام در کتابخانه plotly پایتون

نمودار میله‌ای (bar charts) در پایتون

نمودار میله‌ای برای نمایش یک ستون کیفی و یک ستون عددی عالی است. این نمودار، یک ستون عددی خاص برای هر دسته را نشان می‌دهد. Plotly Express رسم یک نمودار از این نوع را بسیار آسان کرده است:

رسم نمودار میله ای کتابخانه plotly

با نمودارهای میله‌ای هم می‌توانیم نمودارهای عمودی رسم کنیم و هم نمودارهای افقی. این کار را با مشخص‌کردن ‘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()

				
			

نمودار دایره ای در plotly پایتون

نمودار دوناتی (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

اضافه‌کردن برچسب‌های متنی و نشانه‌گذاری نمودارها در کتابخانه Plotly بسیار ساده است. در یک نمودار پراکندگی این کار را با مشخص‌کردن مقدار برای پارامتر text انجام می‌دهیم:

				
					fig = px.scatter(df,x='comments',y='views',color='duration',text="published_day")
fig.show()
				
			

نشانه‌گذاری در Plotly

پراکندگی سه‌بعدی (3D scatter)

در کتابخانه Plotly، یک نمودار پراکندگی سه‌بعدی را با مشخص‌کردن پارامترهای x، y و z ایجاد می‌کنیم.

				
					fig = px.scatter_3d(df,x='comments',y='views',z='duration',color='views')
fig.show()
				
			

پراکندگی سه بعدی در plotly پایتون

تبدیل خروجی Plotly به HTML

یکی از قابلیت‌های جالب کتابخانه Plotly این است که می‌توانیم هرکدام از نمودارهایمان را در یک فایل html ذخیره کنیم. این کار به طرز عجیبی آسان است:

				
					fig.write_html("3d.html")
				
			

تبدیل خروجی Plotly به 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()

				
			

رسم heat map در پایتون با کتابخانه plotly

انیمیشن (animations) در Plotly چیست؟

انیمیشن‌های Plotly برای نشان‌دادن تغییرات مقادیر خاص در طول زمان استفاده می‌شوند. برای رسیدن به این هدف، پارامتر animation-frame را تعریف می‌کنیم. در کد زیر، این پارامتر سال خواهد بود:

				
					px.scatter(df, x="duration", y="comments",animation_frame="published_year", size="duration", color="published_day")
				
			

انیمیشن‌های Plotly

چطور نمودار جعبه‌ای (box plot) رسم کنیم؟

یک نمودار جعبه‌ای داده‌ها را در چارک‌های مختلف نشان می‌دهد. مقادیری که خارج از چهارمین چارک قرار می‌گیرند داده‌های پرت در مجموعه‌داده‌ را نشان می‌دهند:

				
					fig = px.box(df, x="published_day", y="duration")
fig.show()

				
			

نمودار جعبه‌ای در پایتون با plotly

زیرنمودارها (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",
)
				
			

زیر نمودارها در کتابخانه plotly

نمودارهای میله‌ای مبتنی بر خطا (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()

				
			

نمودار میله ای error bar در پایتون با plotly

در این مقاله یاد گرفتیم که چطور از Plotly در پروژه‌هایمان استفاده کنیم. حتی می‌توانم از آن برای رسم نمودارهای ماتریس‌های عملکرد (Performance matrices) مدل‌های یادگیری ماشین استفاده کنیم. برخلاف دیگر ابزارها، نمودارهای کتابخانه Plotly چشم‌نواز و همین‌طور تعاملی (Interactive) هستند.

قابلیت تعاملی این امکان را می‌دهد تا در قسمت‌های خاصی از نمودار بزرگ‌نمایی و کوچک‌نمایی کنیم. بنابراین می‌توانیم برای بررسی نمودار با جزئیات بیشتر، کمی عمیق‌تر به آن نگاه کنیم. در این مقاله دیدیم که چگونه می‌توانیم نمودارهای معمول مثل هیستوگرام‌ها (histograms)، نمودار میله‌ای (bar charts) و نمودارهای پراکندگی (scatter plots) را در کتابخانه Plotly رسم کنیم. همچنین یاد گرفتیم چندین نمودار را بر روی یک نمودار بسازیم.

Notebook استفاده شده را در اینجا ببینید و به کدهای رسم نمودار با کتابخانه Plotly دسترسی داشته باشید.

مطالب بیشتر

3 دیدگاه

به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.

دیدگاهتان را بنویسید