مقدمه

در درس قبل، ما با موفقیت داده‌های مربوط به محبوب‌ترین ریپازیتوری‌های پایتون را از API گیت‌هاب دریافت کردیم. اکنون زمان آن است که این داده‌های خام را به یک شکل بصری و قابل فهم تبدیل کنیم. ما یک نمودار میله‌ای تعاملی با استفاده از کتابخانه Plotly خواهیم ساخت که محبوب‌ترین پروژه‌ها را بر اساس تعداد ستاره‌هایشان نمایش می‌دهد.

پردازش داده‌های API

قبل از رسم نمودار، باید داده‌های مورد نیاز خود را از دیکشنری پاسخ API استخراج کنیم. ما به نام هر ریپازیتوری (برای محور x) و تعداد ستاره‌های آن (برای محور y) نیاز داریم.

Copy Icon PYTHON
import requests

# ... (API call code from previous lesson) ...
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

اکنون که داده‌های ما آماده است، می‌توانیم نمودار میله‌ای خود را بسازیم.

Copy Icon PYTHON
from plotly.graph_objs import Bar, Layout
from plotly import offline

# Make visualization.
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 ایجاد می‌کنیم که به صورت خودکار در مرورگر باز می‌شود.

بهبود نمودار

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

Copy Icon 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'])
    
    # Build hover texts.
    owner = repo_dict['owner']['login']
    description = repo_dict['description']
    hover_text = f"{owner}<br />{description}"
    hover_texts.append(hover_text)

# Make visualization.
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,
}]
# ... (layout and plotting code) ...

در این نسخه نهایی، ما به جای نام‌های ساده، لینک‌های HTML قابل کلیک برای هر ریپازیتوری ایجاد کرده‌ایم. همچنین، یک لیست از متن‌های هاور (hover_texts) ساخته‌ایم که شامل نام مالک و توضیحات هر پروژه است.

در دیکشنری داده، ما این لیست‌ها را به کلیدهای x و hovertext اختصاص داده‌ایم. همچنین با استفاده از کلید marker، استایل میله‌های نمودار را سفارشی کرده‌ایم. نتیجه یک نمودار زیبا و تعاملی است که اطلاعات غنی را به کاربر ارائه می‌دهد.

در این درس، ما با موفقیت داده‌های دریافتی از یک API وب را به یک مصورسازی داده تعاملی و آموزنده تبدیل کردیم. این فرآیند (دریافت، پردازش و مصورسازی) هسته اصلی بسیاری از پروژه‌های تحلیل داده است. در درس بعدی، به سراغ «کار با Hacker News API» خواهیم رفت و با یک API دیگر کار خواهیم کرد تا یک پروژه عملی دیگر را به اتمام برسانیم.