PythonでAPIの結果を可視化する方法|GitHub APIとPlotlyを使った実践チュートリアル
はじめに
APIを活用する最大のメリットの一つは、常に最新のライブデータを取得できる点です。データが頻繁に更新される場合でも、API経由なら最新の状態を確実に取得できます。APIプログラムは、特定の情報をリクエストするために専用のURLを使用します。たとえば「SpotifyやYouTube Musicで2020年に最も再生された楽曲トップ100」といった具合です。リクエストされたデータは、JSONやCSVなど、プログラムで扱いやすい形式で返却されます。
Pythonを使えば、ほぼあらゆるURLに対してAPI呼び出しを記述できます。本記事では、GitHubのAPIからデータを抽出し、その結果をグラフとして可視化する方法を解説します。
補足: 当初はSpotifyのAPIを題材にする予定でしたが、Spotifyは事前準備(認証設定など)が多く、複数回の記事に分ける必要があるため、今回はGitHubを採用しました。
GitHubは「開発者のSNS」とも呼ばれ、多種多様なデータをAPI経由で取得できます。たとえば「スター数の多いJavaScriptリポジトリを検索したい」というケースを想定してみましょう。GitHubの場合、APIキーは不要ですが、他のサービスでは発行が必要な場合もあります。
実装手順
ステップ1:requestsパッケージのインストール
まず、Pythonのコマンドプロンプトを開き、次のコマンドでrequestsパッケージをインストールします。
pip install requests
続いて、GitHubのAPIを呼び出してレスポンスを受け取ります。
import requests
# リクエスト先のURLを設定
site_url = 'https://api.github.com/search/repositories?q=language:javascript&sort=stars'
# ヘッダーを設定
headers = {'Accept': 'application/vnd.github.v3+json'}
# URLを呼び出してレスポンスを保存
response = requests.get(site_url, headers=headers)
# ステータスコードを確認
print(f"Output \n *** Response from {site_url} is {response.status_code} ")
出力
*** Response from https://api.github.com/search/repositories?q=language:javascript&sort=stars is 200
ステータスコード200が返れば、リクエストは成功しています。
ステップ2:JSONレスポンスをPython辞書へ変換
APIはJSON形式で情報を返すため、json()メソッドを使ってPythonの辞書オブジェクトに変換します。
response_json = response.json()
print(f"Output \n *** keys in the Json file \n {response_json.keys()} \n")
print(f" *** Total javascript repositories in GitHub \n {response_json['total_count']}")
出力
*** keys in the Json file
dict_keys(['total_count', 'incomplete_results', 'items'])
*** Total javascript repositories in GitHub
11199577
3つのキーが存在しますが、incomplete_resultsは無視して構いません。次に、最初のリポジトリの中身を詳しく見てみましょう。
repositories = response_json['items']
first_repo = repositories[0]
print(f"Output \n *** Repository information keys total - {len(first_repo)} - values are -\n")
for keys in sorted(first_repo.keys()):
print(keys)
print(f" *** Repository name - {first_repo['name']}, Owner - {first_repo['owner']['login']}, total watchers - {first_repo['watchers_count']} ")
出力
*** Repository information keys total - 74 - values are -
archive_url
archived
assignees_url
blobs_url
branches_url
clone_url
collaborators_url
comments_url
commits_url
compare_url
contents_url
contributors_url
created_at
default_branch
deployments_url
description
disabled
downloads_url
events_url
fork
forks
forks_count
forks_url
full_name
git_commits_url
git_refs_url
git_tags_url
git_url
has_downloads
has_issues
has_pages
has_projects
has_wiki
homepage
hooks_url
html_url
id
issue_comment_url
issue_events_url
issues_url
keys_url
labels_url
language
languages_url
license
merges_url
milestones_url
mirror_url
name
node_id
notifications_url
open_issues
open_issues_count
owner
private
pulls_url
pushed_at
releases_url
score
size
ssh_url
stargazers_count
stargazers_url
statuses_url
subscribers_url
subscription_url
svn_url
tags_url
teams_url
trees_url
updated_at
url
watchers
watchers_count
*** Repository name - freeCodeCamp, Owner - freeCodeCamp, total watchers - 316079
各リポジトリには74個ものキーが含まれていることがわかります。ここから必要な情報だけを取り出して活用します。
ステップ3:Plotlyによる可視化
取得できる情報は膨大なので、理解しやすくするには可視化が最適です。「百聞は一見に如かず」という言葉の通りですね。
matplotlibについては別の記事で解説済みのため、今回はPlotlyを使ってチャートを作成します。まずはモジュールをインストールし、インポートしましょう。
from plotly.graph_objs import Bar
from plotly import offline
次に、「リポジトリ名 vs スター数」の棒グラフを作成します。スター数が多いほど人気の高いリポジトリということになるため、どのプロジェクトが上位なのかひと目で把握できます。ここでは「リポジトリ名」と「スター数」の2つのリストを用意します。
repo_names, repo_stars = [], []
for repo_info in repositories:
repo_names.append(repo_info['name'])
repo_stars.append(repo_info['stargazers_count'])
可視化の準備として、データリストを作成します。これは辞書を含むリストで、プロットの種類とX軸・Y軸の値を定義します。お察しの通り、X軸にプロジェクト名、Y軸にスター数を割り当てます。
data_plots = [{'type': 'bar', 'x': repo_names, 'y': repo_stars}]さらに、X軸・Y軸のタイトルとチャート全体のタイトルを追加します。
layout = {'title': "GitHub's Most Popular JavaScript Projects",
'xaxis': {'title': 'Repository'},
'yaxis': {'title': 'Stars'}}ステップ4:グラフの描画(完全なコード)
いよいよプロットを実行します。ここまでの手順をすべてまとめた完全なコードがこちらです。
import requests
from plotly.graph_objs import Bar
from plotly import offline
site_url = 'https://api.github.com/search/repositories?q=language:javascript&sort=stars'
headers = {'Accept': 'application/vnd.github.v3+json'}
response = requests.get(site_url, headers=headers)
response_json = response.json()
repositories = response_json['items']
repo_names, repo_stars = [], []
for repo_info in repositories:
repo_names.append(repo_info['name'])
repo_stars.append(repo_info['stargazers_count'])
data_plots = [{'type': 'bar', 'x': repo_names, 'y': repo_stars}]
layout = {'title': "GitHub's Most Popular JavaScript Projects",
'xaxis': {'title': 'Repository'},
'yaxis': {'title': 'Stars'}}
fig = {'data': data_plots, 'layout': layout}
offline.plot(fig, filename='Most_Popular_JavaScript_Repos.html')
出力
実行すると、Most_Popular_JavaScript_Repos.htmlというファイルがコードと同じディレクトリに生成され、ブラウザで開くと以下のようなインタラクティブな棒グラフが表示されます。

まとめ
本記事では、Pythonのrequestsライブラリを使ってGitHub APIからJSONデータを取得し、その中からリポジトリ名とスター数を抽出、Plotlyでインタラクティブな棒グラフとして可視化する流れを学びました。APIキー不要で試せるGitHub APIは、API連携とデータ可視化の練習に最適な題材です。ぜひ、検索言語をPythonやGoなどに変更したり、フォーク数やウォッチャー数を軸にしたりと、さまざまなカスタマイズにも挑戦してみてください。
-
TensorFlowとPythonを使ってトレーニング結果を可視化する方法
TensorFlowで学習したモデルのトレーニング結果は、Pythonの「matplotlib」ライブラリを使うことで簡単に可視化できます。「plot」メソッドを利用して、エポックごとの精度(Accuracy)や損失(Loss)の推移をグラフとして描画します。本記事では、KerasのSequential APIを使用します。Sequential APIは、各レイヤーがちょうど1つの入力テンソルと1つの出力テンソルを持つ、単純な層のスタックからなるシーケンシャルモデルを構築するのに便利なAPIです。少なくとも1つの畳み込み層(Convolutional Layer)を含むニューラルネットワークは
-
PythonのPygalライブラリでツリーマップを可視化する方法を徹底解説
はじめに:データ可視化の重要性データの可視化は、データ分析において非常に重要なステップです。複雑な計算処理や内部構造を直接確認しなくても、データ全体の傾向や特徴をひと目で把握できるようになるためです。適切なグラフを選ぶことで、数値だけでは見えにくいパターンや関係性が明確になります。Pygalとは何かPygalは、オープンソースのPythonパッケージであり、インタラクティブなグラフやSVG(Scalable Vector Graphics)形式の画像を簡単に作成できるライブラリです。SVGは動的にアニメーション付きのグラフを生成する仕組みで、生成された画像は用途に応じて自由にカスタマイズできま