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.
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
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")
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