[PYTHON] Die Geschichte der Visualisierung beliebter Qiita-Tags mit Bar Chart Race

Was ist mit diesem Artikel?

Im vorherigen Artikel [^ 1] habe ich Qiitas beliebte Tags monatlich mit Bar Chart Race visualisiert, daher werde ich die Prozedur veröffentlichen.

1. Informationen mit Qiita Api abrufen

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

2. Mit Pandas verarbeiten

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

3. Visualisiert mit Flourish Bar Chart Race

https://app.flourish.studio/ Laden Sie die CSV hoch, die zum Balkendiagramm-Rennen herausgekommen ist. Jetzt können Sie es visualisieren! !!

Recommended Posts

Die Geschichte der Visualisierung beliebter Qiita-Tags mit Bar Chart Race
Die Geschichte der Implementierung des Themas Facebook Messenger Bot mit Python
Eine Geschichte, die die Gegenwart von Qiita mit Qiita API + Elasticsearch + Kibana visualisiert
Die Geschichte des tiefen Lernens mit TPU
Die Geschichte des Stoppens des Produktionsdienstes mit dem Befehl hostname
Die Geschichte des Teilens der Pyenv-Umgebung mit mehreren Benutzern
Die Geschichte von sys.path.append ()
Die Geschichte der Anzeige von Bildern mit OpenCV oder PIL (nur)
Die Geschichte eines Rubinisten, der mit Python :: Dict-Daten mit Pycall kämpft
Die Geschichte, wie man mit discord.py einen Fragenkasten-Bot erstellt
Die Geschichte des Baus von Zabbix 4.4
Balkendiagramm Rennen in Python
Ich habe versucht, das Ranking des Qiita-Adventskalenders mit Python zu kratzen
Die Geschichte, dass man mit Pycharm kein Pygame spielen kann
Ermitteln Sie die Anzahl der PVs von Qiita-Artikeln, die Sie mit API veröffentlicht haben
Der 14. März ist der Tag des Umfangsverhältnisses. Die Geschichte der Berechnung des Umfangsverhältnisses mit Python
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.
Die Geschichte der Ausgabe des Planetarium-Meisters im PDF-Format mit Pycairo
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
Die Geschichte von Python und die Geschichte von NaN
Holen Sie sich die Anzahl der Ansichten von Qiita
Die Geschichte der Teilnahme an AtCoder
Die Geschichte des erneuten Bereitstellens des Anwendungsservers
Die Geschichte des Exportierens eines Programms
Die Geschichte eines Parksensors in 10 Minuten mit dem GrovePi + Starter Kit
Die Geschichte, wie man mit Python einen 100-Yen-Frühstücks-Bot für die Universität macht
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Die Geschichte einer Soundkamera mit Touch Designer und ReSpeaker
Holen Sie sich Artikelbesuche und Likes mit Qiita API + Python
Die Geschichte des Versuchs, SSH_AUTH_SOCK mit LD_PRELOAD auf dem Bildschirm veraltet zu halten
Die Geschichte der Verwendung von mysqlclient, da PyMySQL nicht mit Django 2.2 verwendet werden kann