مقدمه
در درس قبل، ما با موفقیت دادههای مربوط به محبوبترین ریپازیتوریهای پایتون را از API گیتهاب
دریافت کردیم. اکنون زمان آن است که این دادههای خام را به یک شکل بصری و قابل فهم تبدیل کنیم. ما
یک نمودار میلهای تعاملی با استفاده از کتابخانه Plotly خواهیم ساخت که محبوبترین پروژهها
را بر اساس تعداد ستارههایشان نمایش میدهد.
پردازش دادههای API
قبل از رسم نمودار، باید دادههای مورد نیاز خود را از دیکشنری پاسخ API استخراج کنیم. ما به نام هر
ریپازیتوری (برای محور x) و تعداد ستارههای آن (برای محور y) نیاز داریم.
PYTHON
import requests
response_dict = r.json()
repo_dicts = response_dict['items']
repo_names, stars = [], []
for repo_dict in repo_dicts:
repo_names.append(repo_dict['name'])
stars.append(repo_dict['stargazers_count'])
در این کد، ما روی لیست دیکشنریهای ریپازیتوری پیمایش کرده و مقادیر مربوط به کلیدهای name و
stargazers_count را به ترتیب در لیستهای repo_names و stars ذخیره میکنیم.
رسم نمودار با Plotly
اکنون که دادههای ما آماده است، میتوانیم نمودار میلهای خود را بسازیم.
PYTHON
from plotly.graph_objs import Bar, Layout
from plotly import offline
data = [{
'type': 'bar',
'x': repo_names,
'y': stars,
}]
my_layout = {
'title': 'Most-Starred Python Projects on GitHub',
'xaxis': {'title': 'Repository'},
'yaxis': {'title': 'Stars'},
}
fig = {'data': data, 'layout': my_layout}
offline.plot(fig, filename='python_repos.html')
در این کد، ما دادههای خود را در قالب یک لیست از دیکشنریها تعریف میکنیم. هر دیکشنری یک
«ردیابی» (trace) در نمودار را نشان میدهد. در اینجا، ما یک ردیابی از نوع bar داریم که محورهای
x و y آن به ترتیب لیست نامها و ستارهها هستند.
سپس، یک دیکشنری برای layout تعریف میکنیم تا عنوان و برچسبهای محورهای نمودار را مشخص کنیم. در
نهایت، با استفاده از offline.plot()، نمودار را در یک فایل HTML
ایجاد میکنیم که به صورت خودکار در مرورگر باز میشود.
بهبود نمودار
ما میتوانیم با افزودن لینک به هر ریپازیتوری و نمایش اطلاعات بیشتر هنگام هاور کردن ماوس، نمودار
خود را تعاملیتر و مفیدتر کنیم.
PYTHON
repo_links, stars, hover_texts = [], [], []
for repo_dict in repo_dicts:
repo_name = repo_dict['name']
repo_url = repo_dict['html_url']
repo_link = f"<a href='{repo_url}'>{repo_name}</a>"
repo_links.append(repo_link)
stars.append(repo_dict['stargazers_count'])
owner = repo_dict['owner']['login']
description = repo_dict['description']
hover_text = f"{owner}<br />{description}"
hover_texts.append(hover_text)
data = [{
'type': 'bar',
'x': repo_links,
'y': stars,
'hovertext': hover_texts,
'marker': {
'color': 'rgb(60, 100, 150)',
'line': {'width': 1.5, 'color': 'rgb(25, 25, 25)'}
},
'opacity': 0.6,
}]
در این نسخه نهایی، ما به جای نامهای ساده، لینکهای HTML قابل کلیک برای هر ریپازیتوری ایجاد
کردهایم. همچنین، یک لیست از متنهای هاور (hover_texts) ساختهایم که شامل نام مالک و
توضیحات هر پروژه است.
در دیکشنری داده، ما این لیستها را به کلیدهای x و hovertext اختصاص دادهایم. همچنین با
استفاده از کلید marker، استایل میلههای نمودار را سفارشی کردهایم. نتیجه یک نمودار زیبا و
تعاملی است که اطلاعات غنی را به کاربر ارائه میدهد.
در این درس، ما با موفقیت دادههای دریافتی از یک API وب را به یک مصورسازی داده تعاملی و آموزنده
تبدیل کردیم. این فرآیند (دریافت، پردازش و مصورسازی) هسته اصلی بسیاری از پروژههای تحلیل داده
است. در درس بعدی، به سراغ «کار با Hacker News API» خواهیم رفت و با یک API دیگر کار خواهیم کرد تا
یک پروژه عملی دیگر را به اتمام برسانیم.