Akashic Records

REST API 데이터 시각화 본문

Python for Beginners

REST API 데이터 시각화

Andrew's Akashic Records 2024. 6. 18. 14:03
728x90

이 파이썬 코드는 GitHub API를 통해 가장 많은 별을 받은 Python 프로젝트를 찾아 그 결과를 시각화합니다. 

 

pip install requests # 라이브러리 추가

 

python_repos_visual.py

import requests
import plotly.express as px


def call_api():
    url = "https://api.github.com/search/repositories"
    url += "?q=language:python+stars&sort=stars&order=desc&page=1&per_page=10"

    headers = {"Accept": "application/vnd.github.v3+json"}
    r = requests.get(url, headers=headers)
    print(f"Status code: {r.status_code}")

    response_dict = r.json()

    print(f"Total repositories: {response_dict['total_count']}")
    print(f"complete results: {not response_dict['incomplete_results']}")

    # 저장소 정보를 탐색합니다.
    repo_dicts = response_dict['items']
    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)

    title = "Most-Starred Python Projects on GitHub"
    labels = {'x': 'Repository', 'y': 'Stars'}
    fig = px.bar(x=repo_links, y=stars,
                 title=title, labels=labels,
                 hover_name=hover_texts)
    fig.update_layout(title_font_size=28, xaxis_title_font_size=20,
                      yaxis_title_font_size=20)
    fig.update_traces(marker_color='SteelBlue', marker_opacity=0.6)
    fig.show()


if __name__ == '__main__':
    call_api()

1. 라이브러리 임포트

import requests
import plotly.express as px
  • requests: 웹 서버와의 HTTP 요청을 보내기 위해 사용되는 라이브러리입니다.
  • plotly.express: 데이터 시각화를 위한 라이브러리입니다. 이 코드에서는 막대 그래프를 그리는데 사용됩니다.

2. API 호출 함수 정의

def call_api():

이 함수는 GitHub API를 호출하고 응답을 처리하여 시각화합니다.

3. API 요청

url = "https://api.github.com/search/repositories"
url += "?q=language:python+stars&sort=stars&order=desc&page=1&per_page=10"

headers = {"Accept": "application/vnd.github.v3+json"}
r = requests.get(url, headers=headers)
print(f"Status code: {r.status_code}")
  • GitHub의 검색 API 엔드포인트로 요청을 보냅니다.
  • 요청 매개변수로 Python 언어로 작성된 저장소 중 별이 많은 순으로 최대 10개의 저장소를 반환하도록 지정합니다.
  • 요청 헤더에는 GitHub API 버전을 명시합니다.
  • 응답의 상태 코드를 출력하여 API 호출 성공 여부를 확인합니다.

4. 응답 데이터 처리

response_dict = r.json()
print(f"Total repositories: {response_dict['total_count']}")
print(f"complete results: {not response_dict['incomplete_results']}")

repo_dicts = response_dict['items']
repo_links, stars, hover_texts = [], [], []
  • API 응답을 JSON 형태로 파싱합니다.
  • 전체 저장소 수와 완전한 결과 여부를 출력합니다.
  • 각 저장소에 대한 정보를 추출하고 이를 시각화에 사용할 데이터 구조에 저장합니다.

5. 저장소 정보 추출 및 링크 생성

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)
  • 각 저장소의 이름, URL, 별의 수, 소유자, 설명을 추출합니다.
  • 막대 그래프의 x축에 표시될 HTML 링크를 생성합니다.
  • 호버 텍스트에 저장소 소유자와 설명을 추가하여 시각적 정보를 풍부하게 합니다.

6. 데이터 시각화

title = "Most-Starred Python Projects on GitHub"
labels = {'x': 'Repository', 'y': 'Stars'}
fig = px.bar(x=repo_links, y=stars,
             title=title, labels=labels,
             hover_name=hover_texts)
fig.update_layout(title_font_size=28, xaxis_title_font_size=20,
                  yaxis_title_font_size=20)
fig.update_traces(marker_color='SteelBlue', marker_opacity=0.6)
fig.show()
  • plotly.express를 사용하여 막대 그래프를 생성합니다.
  • 그래프의 제목, 라벨, 호버 텍스트를 설정합니다.
  • 그래프의 레이아웃과 트레이스 스타일을 업데이트합니다.
  • 마지막으로 그래프를 화면에 표시합니다.

7. 메인 실행

if __name__ == '__main__':
    call_api()
  • 스크립트가 직접 실행될 때 `call_api` 함수를 호출합니다.
728x90
Comments