Визуализация репозиториев с использованием Pygal

We use cookies. Read the Privacy and Cookie Policy

Теперь, с появлением интересных данных, мы построим визуализацию, демонстрирующую относительную популярность проектов Python в GitHub. Мы построим интерактивную столбцовую диаграмму: высота каждого столбца будет представлять количество звезд у проекта. Щелчок на столбце будет открывать домашнюю страницу проекта на GitHub. Первая попытка выглядит так:

python_repos.py

import requests

import pygal

from pygal.style import LightColorizedStyle as LCS, LightenStyle as LS

# Создание вызова API и сохранение ответа.

URL = 'https://api.github.com/search/repositories?q=language:python&sort=star'

r = requests.get(URL)

print("Status code:", r.status_code)

# Сохранение ответа API в переменной.

response_dict = r.json()

print("Total repositories:", response_dict['total_count'])

# Анализ информации о репозиториях.

repo_dicts = response_dict['items']

(1) names, stars = [], []

for repo_dict in repo_dicts:

(2) . .names.append(repo_dict['name'])

. .stars.append(repo_dict['stargazers_count'])

# Построение визуализации.

(3)my_style = LS('#333366', base_style=LCS)

(4)chart = pygal.Bar(style=my_style, x_label_rotation=45, show_ legend=False)

chart.title = 'Most-Starred Python Projects on GitHub'

chart.x_labels = names

(5)chart.add('', stars)

chart.render_to_file('python_repos.svg')

Сначала импортируется модуль pygal и стили Pygal, необходимые для оформления диаграммы. Затем выводится статус ответа на вызов API и общее количество обнаруженных репозиториев, чтобы мы сразу узнали о возможной проблеме с вызовом API. Информация о конкретных возвращенных проектах уже не выводится, потому что эта информация будет включена в визуализацию.

В точке (1) создаются два пустых списка для хранения данных, включаемых в диаграмму. Нам понадобится имя каждого проекта (для пометки столбцов) и количество звезд, определяющее высоту столбцов. В цикле имя каждого проекта и количество звезд присоединяются к соответствующему списку (2).

Затем программа определяет стиль с использованием класса LightenStyle (псевдоним LS) на базе темного оттенка синего цвета (3). Также передается аргумент base_style для использования класса LightColorizedStyle (псевдоним LCS). Метод Bar() создает простую столбцовую диаграмму, которой передается стиль my_style (4). Также передаются еще два стилевых аргумента: метки пово­рачиваются под 45 градусов к оси x (x_label_rotation=45), а условные обозначения скрываются, потому что на диаграмму наносится только одна серия данных (show_legend=False). Затем назначается заголовок диаграммы, а атрибуту x_labels присваивается список names.

Так как метки для этой серии данных не нужны, при добавлении данных (5) вместо метки передается пустая строка. Полученная диаграмма изображена на рис. 17.1. Мы видим, что несколько первых проектов существенно популярнее остальных, но все эти проекты занимают важное место в экосистеме Python.

Рис. 17.1. Проекты Python на GitHub с наибольшим количеством звезд