파이썬 프로그래밍 : Qiita 기사 태그에서 Treemap을 그려 보았습니다.

소개



이전 기사( Qiita 기사 태그에서 WordCloud를 그려 보았습니다. )에서는 Qiita 기사에 부여된 태그를 취득하여 WordCloud를 만들었습니다.

이번에는 보여주는 방법을 바꾸고 Treemap 을 그립니다.

궁극적으로 다음과 같은 물건을 만듭니다.


본고에서 소개하는 것


  • Qiita API에서 기사 정보 얻기
  • Treemap 그리기

  • Qiita API v2 문서
    TREEMAP - The Python Graph Gallery

    본고에서 소개하지 않는 것


  • Python 라이브러리 사용법
  • requests
  • json
  • collections
  • pathlib
  • matplotlib
  • squarify ※ Treemap 묘화 용의 Python 라이브러리


  • 샘플 코드



    Code량도 많지 않기 때문에, 전체의 Code를 소개.
    포인트는 3개.

    1. GET 요청을 실행할 때 액세스 토큰 지정

    Qiita API v2 문서 에 다음의 기재가 있도록(듯이), 액세스 토큰을 취득해, Code에 묻는 것이 베터.

    이용 제한
    인증하는 상태에서는 사용자당 1시간에 1000회까지, 인증하지 않은 상태에서는 IP 주소당 1시간에 60회까지 요청을 수락합니다.

    2. 이미지를 그릴 때 일본어 대응 글꼴 지정

    Text properties and layout - Matplotlib 3.3.0 documentation 에 이하의 항이 있도록(듯이), 일본어 대응 폰트를 (적절하게 인스톨 해) 지정하는 것이 베터.

    Default Font
    The base default font is controlled by a set of rcParams. To set the font for mathematical expressions, use the rcParams beginning with mathtext (see mathtext).

    3. 출현 빈도가 낮은 (화제성이나 중요성 등의 작은) 태그를 전처리로 제외

    이전 기사( Qiita 기사 태그에서 WordCloud를 그려 보았습니다. )에서는 Qiita 기사에 부여된 태그의 출현 빈도를 감안하여 그렸습니다.
    그 때문에, 극단적인 이야기, 출현 빈도가 1회의 태그도 묘화하게 되어, 묘화 결과가 엉망인 느낌이 되어 있었습니다.
    (전체를 부감한다는 관점에서는 출현 빈도가 낮은 태그도 파악할 수 있어요.)

    그래서 이번에는 출현 빈도가 낮은 태그를 자르고 깔끔한 그리기를 목표로합니다.

    우선은 #200 Basic Treemap with python 의 샘플 코드를 참고로 간단하게 묘화.

    analyzeQiita_TreeMap1
    import requests
    import json
    
    url = 'https://qiita.com/api/v2/items?per_page=100&page='
    headers = {'Authorization': 'Bearer ${YOUR ACCESS-TOKEN}'}
    
    tags = []
    for i in range(5):
        print('=====')
        print('Downloading ... ' + url + str(i+1))
        print('-----')
        #response = requests.get(url + str(i+1))
        response = requests.get(url + str(i+1), headers=headers)
    
        for article in json.loads(response.text):
            print(article['title'])
            tags.extend([tag['name'].lower() for tag in article['tags']])
        print('=====')
    
    from collections import Counter
    
    c = Counter(tags)
    #print(c)
    
    # 出現回数が多いものから順にTop10を列挙(重複なし)
    tagSurface, tagCount = zip(*c.most_common(10))
    print(tagSurface)
    print(tagCount)
    
    from pathlib import Path
    import matplotlib.pyplot as plt
    import squarify
    
    result_dir_path = Path('..').joinpath('result')
    plt.rcParams["font.family"] = 'Yu Gothic'
    squarify.plot(sizes=list(tagCount), label=list(tagSurface), alpha=0.7)
    plt.axis('off')
    plt.savefig(result_dir_path.joinpath('trends_of_qiita_treemap1.png'), format="png", dpi=300)
    plt.show()
    



    그런 다음 #202 Treemap with colors mapped on values 샘플 코드를 참조하여 파란색 계통 그라데이션으로 그립니다.

    analyzeQiita_TreeMap2
    from pathlib import Path
    import matplotlib
    import matplotlib.pyplot as plt
    import squarify
    
    cmap = matplotlib.cm.Blues
    mini = min(tagCount)
    maxi = max(tagCount)
    norm = matplotlib.colors.Normalize(vmin=mini, vmax=maxi)
    colors = [cmap(norm(value)) for value in tagCount]
    
    result_dir_path = Path('..').joinpath('result')
    plt.rcParams["font.family"] = 'Yu Gothic'
    squarify.plot(sizes=list(tagCount), label=list(tagSurface), alpha=0.7, color=colors)
    plt.axis('off')
    plt.savefig(result_dir_path.joinpath('trends_of_qiita_treemap2.png'), format="png", dpi=300)
    plt.show()
    



    역시 Python과 JavaScript가 크게 그려지는 것은 전회( Qiita 기사 태그에서 WordCloud를 그려 보았습니다. )와 변함없이.

    요약



    Qiita 기사의 태그를 사용하여 Treemap을 그리는 방법을 소개합니다.

    좋은 웹페이지 즐겨찾기