[PYTHON] L'histoire de la visualisation des balises Qiita populaires avec Bar Chart Race

Et cet article?

Dans l'article précédent [^ 1], j'ai visualisé mensuellement les balises populaires de Qiita avec Bar Chart Race, donc je publierai la procédure.

1. Obtenez des informations à l'aide de Qiita Api

Comme mentionné dans l'article précédent, nous empruntons essentiellement la sagesse de nos prédécesseurs [^ 2].

Cette méthode récupère les articles écrits dans un demi-mois et tente d'agréger toutes les périodes en décalant les périodes. Mais,

query = "&query=created:>" + start_date  + "+created:<" + end_date

À start_date = ["2018-01-15","2018-01-31",...] end_date = ["2018-01-31","2018-02-15",...]

Parce que c'est le cas, la limite n'est pas incluse. Par conséquent, j'ai fait ce qui suit.

query = "&query=created:>" + start_date  + "+created:<=" + end_date

2. Processus à l'aide de pandas

Comme suit. Voir les commentaires pour plus de détails.

import datetime
from dateutil.relativedelta import relativedelta
import copy

# 1.Chargez tous les fichiers de résultats créés dans
df_all = pd.read_csv("results/summary.csv")

#Date et heure de début
ref_date = datetime.date(2011,9,1)

# created_Trier par à
df_all = df_all.sort_values("created_at")

#Extraire uniquement les informations d'étiquette et les informations de date
tags_list = list(df_all["tags_str"])
date_list = list(df_all["created_at"])
#Convertir en un type qui peut utiliser relativedelta etc.
date_list = [pd.to_datetime(one) for one in date_list]

# key:Nom de la balise, value:Nombre de fois
tags_dict =dict()
#Mis à jour chaque fois que la première année (2011) et l'année à agréger changent
y = date_list[0].year
#Premier mois(9), Mis à jour à chaque fois que le mois à agréger change
m = date_list[0].month
#Pour stocker les résultats
ref_date = datetime.date(y,m,1)

#Liste de stockage des résultats intermédiaires (somme) chaque mois
monthly_result = []
#Liste de stockage chaque mois
month = []

for i,(one_tags, one_date) in tqdm(enumerate(zip(tags_list,date_list))):
    try:
        #Liste du texte séparé par des virgules
        tags = one_tags.split(",")
    except AttributeError:
        #Parfois, NaN est inclus, alors continuez à ce moment-là (lorsque la balise n'est pas définie?)
        continue
    # tags_Si vous regardez le dict et que la balise est déjà dans+1, sinon enregistrez-vous dans dict et stockez 1
    for one_tag in tags:
        try:
            tags_dict[one_tag] += 1
        except KeyError:
            tags_dict[one_tag] = 1
    
    #Traitement lorsque le mois change
    if one_date.year == y and one_date.month == m:
        continue
    else:
        # month, monthly_Stocker la date à ce moment et le dict jusqu'à ce point dans le résultat
        month.append(ref_date)
        monthly_result.append(copy.deepcopy(tags_dict))
        ref_date += relativedelta(months=1)
        y = ref_date.year
        m = ref_date.month
    
#Stocker le dernier état à la sortie
month.append(ref_date)
monthly_result.append(copy.deepcopy(tags_dict))

#Pour le dict de chaque mois, enregistrez les balises qui n'ont pas été publiées ce mois-là dans dict et stockez 0
for one in monthly_result:
    ref_keys = one.keys()
    for one_tag in tags_dict:
        if not one_tag in ref_keys:
            one[one_tag] = 0
    
#Moulage
monthly_result_num = []
for one_dict in monthly_result:
    #De dict à liste pour trier
    tmp_list = [one for one in one_dict.items()]
    #Trier par nom
    tmp_list = sorted(tmp_list, key=lambda x:x[0])
    #Stocker uniquement le nombre de fois
    monthly_result_num.append([one[1] for one in tmp_list ])
    
#Stocker temporairement le nom de la balise dans la valeur de DataFrame
df_align = pd.DataFrame({"tags":sorted(ref_keys)})
#Stocker la valeur cumulée du nombre d'enregistrements de balises jusqu'à chaque mois dans DataFrame
for one_date,one_nums in zip(month,monthly_result_num):
    df_align[one_date.strftime("%Y-%m")] = one_nums
#Exporter vers csv avec le nom de la balise comme index
df_align.set_index('tags').to_csv("all_result.csv")

3. Visualisé en utilisant la course de graphique à barres florissante

https://app.flourish.studio/ Téléchargez le csv qui est sorti dans la course des graphiques à barres. Maintenant, vous pouvez le visualiser! !!

Recommended Posts

L'histoire de la visualisation des balises Qiita populaires avec Bar Chart Race
L'histoire de la mise en œuvre du sujet Facebook Messenger Bot avec python
Une histoire qui visualise le présent de Qiita avec Qiita API + Elasticsearch + Kibana
L'histoire de l'apprentissage profond avec TPU
L'histoire de l'arrêt du service de production avec la commande hostname
L'histoire du partage de l'environnement pyenv avec plusieurs utilisateurs
L'histoire de sys.path.append ()
L'histoire de l'affichage d'images avec OpenCV ou PIL (uniquement)
L'histoire du rubyiste aux prises avec Python :: Dict data with pycall
L'histoire de la création d'un bot de boîte à questions avec discord.py
L'histoire de la construction de Zabbix 4.4
course de graphique à barres en python
J'ai essayé de gratter le classement du calendrier de l'avent Qiita avec Python
L'histoire de ne pas pouvoir exécuter pygame avec pycharm
Obtenez le nombre de PV d'articles Qiita que vous avez publiés avec l'API
Le 14 mars est le jour du rapport de circonférence. L'histoire du calcul du ratio de circonférence avec python
L'histoire de la création d'un pilote standard pour db avec python.
L'histoire de la sortie du maître de planétarium au format pdf avec Pycairo
L'histoire de la création d'un module qui ignore le courrier avec python
L'histoire de Python et l'histoire de NaN
Obtenez le nombre de vues de Qiita
L'histoire de la participation à AtCoder
L'histoire du remontage du serveur d'application
L'histoire de l'exportation d'un programme
L'histoire d'un capteur de stationnement en 10 minutes avec le kit de démarrage GrovePi +
L'histoire de la création d'un robot LINE pour le petit-déjeuner d'une université de 100 yens avec Python
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
L'histoire de la création d'une caméra sonore avec Touch Designer et ReSpeaker
Obtenez des visites d'articles et des likes avec l'API Qiita + Python
L'histoire de la tentative de pousser SSH_AUTH_SOCK obsolète avec LD_PRELOAD à l'écran
L'histoire de l'utilisation de mysqlclient car PyMySQL ne peut pas être utilisé avec Django 2.2