Im vorherigen Artikel [^ 1] habe ich Qiitas beliebte Tags monatlich mit Bar Chart Race visualisiert, daher werde ich die Prozedur veröffentlichen.
Wie im vorherigen Artikel erwähnt, leihen wir uns grundsätzlich die Weisheit unserer Vorgänger aus [^ 2].
Diese Methode ruft Artikel ab, die innerhalb eines halben Monats geschrieben wurden, und versucht, alle Perioden durch Verschieben der Perioden zu aggregieren. Aber,
query = "&query=created:>" + start_date + "+created:<" + end_date
Zu start_date = ["2018-01-15","2018-01-31",...] end_date = ["2018-01-31","2018-02-15",...]
Weil es so ist, ist die Grenze nicht enthalten. Deshalb habe ich folgendes getan.
query = "&query=created:>" + start_date + "+created:<=" + end_date
Wie folgt. Siehe Kommentare für Details.
import datetime
from dateutil.relativedelta import relativedelta
import copy
# 1.Laden Sie alle in erstellten Ergebnisdateien
df_all = pd.read_csv("results/summary.csv")
#Startdatum und -zeit
ref_date = datetime.date(2011,9,1)
# created_Sortieren nach um
df_all = df_all.sort_values("created_at")
#Extrahieren Sie nur Tag- und Datumsinformationen
tags_list = list(df_all["tags_str"])
date_list = list(df_all["created_at"])
#Konvertieren Sie in einen Typ, der relativedelta usw. verwenden kann.
date_list = [pd.to_datetime(one) for one in date_list]
# key:Verlinke den Namen, value:Anzahl
tags_dict =dict()
#Wird jedes Mal aktualisiert, wenn sich das erste Jahr (2011) und das zu aggregierende Jahr ändern
y = date_list[0].year
#Erster Monat(9), Wird jedes Mal aktualisiert, wenn sich der zu aggregierende Monat ändert
m = date_list[0].month
#Zum Speichern von Ergebnissen
ref_date = datetime.date(y,m,1)
#Liste zum Speichern von Zwischenergebnissen (Summe) in jedem Monat
monthly_result = []
#Liste zur monatlichen Speicherung
month = []
for i,(one_tags, one_date) in tqdm(enumerate(zip(tags_list,date_list))):
try:
#Kommagetrennten Text auflisten
tags = one_tags.split(",")
except AttributeError:
#Manchmal ist NaN enthalten, also fahren Sie zu diesem Zeitpunkt fort (wenn das Tag nicht gesetzt ist?)
continue
# tags_Wenn Sie sich das Diktat ansehen und das Tag bereits vorhanden ist+1, sonst in dikt registrieren und speichern 1
for one_tag in tags:
try:
tags_dict[one_tag] += 1
except KeyError:
tags_dict[one_tag] = 1
#Verarbeitung, wenn sich der Monat ändert
if one_date.year == y and one_date.month == m:
continue
else:
# month, monthly_Speichern Sie das Datum zu diesem Zeitpunkt und das Diktat bis zu diesem Zeitpunkt im Ergebnis
month.append(ref_date)
monthly_result.append(copy.deepcopy(tags_dict))
ref_date += relativedelta(months=1)
y = ref_date.year
m = ref_date.month
#Speichern Sie den letzten Status beim Beenden
month.append(ref_date)
monthly_result.append(copy.deepcopy(tags_dict))
#Registrieren Sie für jedes Monats-Diktat Tags, die bis zu diesem Monat nicht veröffentlicht wurden, in Diktat und speichern Sie 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
#Formen
monthly_result_num = []
for one_dict in monthly_result:
#Vom Diktat über die Liste bis zur Sortierung
tmp_list = [one for one in one_dict.items()]
#Nach Name sortieren
tmp_list = sorted(tmp_list, key=lambda x:x[0])
#Nur so oft speichern
monthly_result_num.append([one[1] for one in tmp_list ])
#Speichern Sie den Tag-Namen vorübergehend im Wert von DataFrame
df_align = pd.DataFrame({"tags":sorted(ref_keys)})
#Speichern Sie den kumulierten Wert der Anzahl der Tag-Registrierungen bis zu jedem Monat in DataFrame
for one_date,one_nums in zip(month,monthly_result_num):
df_align[one_date.strftime("%Y-%m")] = one_nums
#Export nach CSV mit dem Tag-Namen als Index
df_align.set_index('tags').to_csv("all_result.csv")
https://app.flourish.studio/ Laden Sie die CSV hoch, die zum Balkendiagramm-Rennen herausgekommen ist. Jetzt können Sie es visualisieren! !!
Recommended Posts