Herausforderung beim Erstellen eines Zeitachsenlistenberichts mit der Toggl-API und Python

Toggl API & Pyhon -> Monthly Timeline Report

Ki: Anfang

Toggl wird zur Selbstanalyse der Geschäftseffizienz verwendet. Das Projekt wird entsprechend basierend auf Getting Things Done erstellt. Die damit verbundene Client-Klassifizierung lautet Eisenhower Matrix. / eisenhower-matrix /) wird im 1. bis 4. Quadranten klassifiziert.

Der Bericht der Oberfamilie ist ebenfalls gut, aber ich wollte die Ergebnisse nach Tag und Stunde in einer monatlichen Liste sehen. Und ich habe gerade angefangen, Python zu studieren.

Die Umgebung ist wie folgt.

Versuchen Sie nun, einen Bericht mit der Toggl-API und Python zu erstellen.

Akzeptiert: Gebraucht

Ich habe bei Google gesucht und hauptsächlich auf diesen Artikel und diese Referenz verwiesen.

Referenz:

Transfer: Was ich gemacht habe

Es ist harte Arbeit basierend auf dem Referenzcode.

Toggl_API+Python.py



# -*- coding: utf-8 -*-
import requests
from requests.auth import HTTPBasicAuth
import json
import datetime
from datetime import datetime as dt
from dateutil.parser import parse
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

#Vorbereitung des Datenrahmens
pd.set_option('display.max_colwidth', 20)
df = pd.DataFrame([[0], [0], [0], [0], [0], [0]]).T
df.columns = ["description", "category", "client", "date", "month", "duration"]

_api_token = '{Schlüssel}' # ここにAPISchlüsselを入れる

for pagenumber in range(1000):
    pn = np.str(pagenumber + 1)
    _params = {
        'user_agent': '{Mail Adresse}',       # ここにTogglに登録しているMail Adresseを入れる
        'workspace_id': '{ICH WÜRDE}',         #Geben Sie hier Ihre Arbeitsbereich-ID ein
        'since': '2016-11-01',                  #Erste Verabredung
        'until': '2016-11-30',                  #Letztes Datum
        'page': pn}
    r = requests.get('https://toggl.com/reports/api/v2/details', auth=HTTPBasicAuth(_api_token, 'api_token'), params=_params)

#Datenerfassung
    data = r.json()
    Data = data['data']

    if len(Data) == 0:
        break
    row = 0
    for i in Data:
        dataset = Data[row]
        data01 = dataset['description']
        data02 = dataset['project']
        data03 = dataset['client']

        start = dataset['start']
        sd = start[0:10]        # Start Date
        st = start[11:19]       # Start Time
        s = sd + ' ' + st

        tdatetime = dt.strptime(s, '%Y-%m-%d %H:%M:%S')
        date_s = dt.strptime(s, '%Y-%m-%d %H:%M:%S')

        end = dataset['end']
        ed = end[0:10]          # End Date
        et = end[11:19]         # End Time
        e = ed + ' ' + et

        date_e = dt.strptime(e, '%Y-%m-%d %H:%M:%S')

        dur = date_e - date_s   # Duration

        data04 = sd
        data05 = tdatetime.month
        data06 = dur

#Start- und Endzeiten quantifizieren
        data_s_h = datetime.datetime.strptime(str(date_s.hour), '%H')
        data_s_m = datetime.datetime.strptime(str(date_s.minute), '%M')
        data_e_h = datetime.datetime.strptime(str(date_e.hour), '%H')
        data_e_m = datetime.datetime.strptime(str(date_e.minute), '%M')
#In Minuten umrechnen
        TimeVal_s = (data_s_h.hour * 60) + data_s_m.minute
        TimeVal_e = (data_e_h.hour * 60) + data_e_m.minute

        ClientV = dataset['client']
#Quantifizieren Sie das Datum
        DayV = datetime.datetime.strptime(str(tdatetime.day), '%d')
        y = DayV.day

#Separate Farben mit Client
        for i in range(TimeVal_s, TimeVal_e):
            if ClientV == 'Quadrant_4':     #Vierter Quadrant(Not Importand & Not Urgent)Ist blau
                ColorV = 'b'
            elif ClientV == 'Quadrant_3':   #Dritter Quadrant(Not Importand & Urgent)Ist grün
                ColorV = 'g'
            elif ClientV == 'Quadrant_2':   #Zweiter Quadrant(Importand & Not Urgent)Ist gelb
                ColorV = 'y'
            elif ClientV == 'Quadrant_1':   #Erster Quadrant(Importand & Urgent)Ist rot
                ColorV = 'r'
            else:
                Client = 'k'                #Schwarz ohne Einstellung
#Zeichnung
            plt.plot(i, y)
            plt.scatter(i, y, c=ColorV, alpha = 0.2, marker = "s")

        TMPtime1 = (str(tdatetime.hour) + ":" + str(tdatetime.minute) + ":" + str(tdatetime.second))
        TMPtime2 = datetime.datetime.strptime(TMPtime1, '%H:%M:%S')

        series_add = pd.Series([data01, data02, data03, data04, data05, data06], index=["description", "category", "client", "date", "month", "duration"], name=row + 1)
        df = df.append(series_add)
        row += 1
#Dummy-Zeile löschen
df = df.drop(0)

plt.grid(True)
#Die x-Achse beträgt 1 Tag(0~60*24)Beschriften Sie jede Stunde
plt.xlim([0,1440])
plt.xticks([60,120,180,240,300,360,420,480,540,600,660,720,780,840,900,960,1020,1080,1140,1200,1260,1320,1380,1440], ["1:00","2:00","3:00","4:00","5:00","6:00","7:00","8:00","9:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00","22:00","23:00","24:00"],rotation =90,fontsize ="small")
#Die y-Achse ist einen Monat lang täglich beschriftet
plt.ylim([0,30])
plt.yticks([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31], ["31","30","29","28","27","26","25","24","23","22","21","20","19","18","17","16","15","14","13","12","11","10","9","8","7","6","5","4","3","2","1"], fontsize="small")

plt.style.use('ggplot') 
plt.title("Monthly Timeline from Toggl")
plt.show()

#Ausgabeübersicht
monthly_sheet = df.pivot_table("duration", aggfunc="sum", fill_value=0, index="category", columns="date").T
monthly_sheet.to_csv("Summary.csv", sep=",")
print monthly_sheet


Fazit: Was wurde gemacht?

Vorerst bekam ich das Ergebnis, das ich mir vorgestellt hatte. An der Farbe können Sie erkennen, dass kein Platz vorhanden ist. Oder besser gesagt, ich überspringe die Aufzeichnung von der Mitte.

Toggl-API_Monthly_Report.png

Ich: Von jetzt an

Vorerst waren die Grundlagen für das, was ich tun wollte, abgeschlossen. Inhalt und Aussehen sind jedoch immer noch verschmutzt. Es ist nicht schön, weil es viel Verschwendung und Ineffizienz hat. Das Laufen dauert zu lange. (Wahrscheinlich, weil die Daten einzeln in einem Streudiagramm gezeichnet werden.) Wird studieren.

Wenn Sie eine coolere und intelligentere Methode kennen, würde ich es begrüßen, wenn Sie mich unterrichten könnten.

Danke für Ihre Kooperation.

[END]

Recommended Posts

Herausforderung beim Erstellen eines Zeitachsenlistenberichts mit der Toggl-API und Python
[Python] Erstellen Sie eine Datums- und Zeitliste für einen bestimmten Zeitraum
Erstellen Sie Awaitable mit der Python / C-API
Konvertieren Sie die Liste mit Python in DataFrame
[Python] API zum Senden von Google Mail erstellen
Führen Sie Jupyter mit der REST-API aus, um Python-Code zu extrahieren und zu speichern
Erhalten Sie Conversions und Einnahmen mit der Google Analytics-API und melden Sie sich bei Slack
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Erstellen Sie mit Python3 + Falcon eine REST-API, die die aktuelle Uhrzeit zurückgibt
Erstellen einer Cognito-Benutzerliste in S3 mit SQS Stellen Sie mit SAM Warteschlangenverarbeitungsfunktionen und APIs für Lambda bereit
Erstellen Sie automatisch eine Python-API-Dokumentation mit Sphinx
Fraktal zum Erstellen und Spielen mit Python
Erstellen und entschlüsseln Sie Caesar-Code mit Python
[Python] Erstellen Sie schnell eine API mit Flask
So ermitteln Sie mit Python den Unterschied zwischen Datum und Uhrzeit in Sekunden
Versuchen Sie, Foldl und Foldr mit Python: Lambda zu machen. Auch Zeitmessung
[Outlook] Ich habe versucht, mit Python automatisch eine tägliche Berichtsmail zu erstellen
[Python] Erstellen einer Wörterbuchtypliste, Hinzufügen / Ändern / Löschen von Elementen und Extrahieren mit einer for-Anweisung
[Python] Listenverständnis Verschiedene Möglichkeiten zum Erstellen einer Liste
Kratzen Sie das Essen mit Python und geben Sie es an CSV aus
MessagePack-Versuchen Sie, Java und Python mit RPC zu verbinden
[Python] Erstellen Sie eine Liste mit Datum und Uhrzeit (Datum / Uhrzeit-Typ) für einen bestimmten Zeitraum
Erstellen Sie eine API zum Konvertieren von PDF-Dateien in TIF-Bilder mit FastAPI und Docker
Verwendung von OAuth und API für Dienstkonten mit Google API Client für Python
Schritte zum Erstellen eines Twitter-Bots mit Python
So messen Sie die Ausführungszeit mit Python Teil 1
Holen Sie sich den Betreff und den Text von Google Mail mit der Python- und Google Mail-API
Liste des zu verschiebenden und zu merkenden Python-Codes
[Python] Erwähnen Sie mit der Slack-API mehrere Personen
Erstellen Sie schnell einen API-Server mit Python + Falcon
Zur Darstellung von Datum, Uhrzeit, Uhrzeit und Sekunden in Python
So messen Sie die Ausführungszeit mit Python Part 2
Konvertieren Sie die Zeichenfolge mit Python in ein zeichenweises Listenformat
[Python] So erstellen Sie eine lokale Webserverumgebung mit SimpleHTTPServer und CGIHTTPServer
[Python] Ich habe versucht, automatisch einen täglichen Bericht über YWT mit Outlook-Mail zu erstellen
Erstellen Sie mit Streamlit schnell ein Python-Datenanalyse-Dashboard und stellen Sie es in AWS bereit
Erstellen Sie eine einfache API, um JSON-Dateien einzugeben und auszugeben ~ Python / Flask Edition ~
Memo zum Erstellen einer eigenen Box mit Peppers Python
Prozedur zum Laden von MNIST mit Python und zur Ausgabe an png
Ich möchte die Optimierung mit Python und CPlex behandeln
Probieren Sie die DB-Operation mit Python aus und visualisieren Sie sie mit d3
So messen Sie die Wiedergabezeit von MP3-Dateien mit Python
Um Zeit damit zu verbringen, mit Python gezeichnete Figuren zu färben
Crawlen mit Python und Twitter API 1-Einfache Suchfunktion
[Python] So sortieren Sie Diktate in Listen und Instanzen in Listen
[Python] So erstellen Sie eine Korrelationsmatrix und eine Heatmap
[Python] So erstellen Sie mit Matplotlib ein zweidimensionales Histogramm
[Python] Mit der API von Qiita erhalten Sie Benutzer- und Artikelinformationen
So bedienen Sie die Discord API mit Python (Bot-Registrierung)
[LINE Messaging API] Erstellen Sie einen Papageienrückgabe-BOT mit Python
Liste der Python-APIs für OpenCV3
Liste mit Python initialisieren
Ich habe versucht, zum Zeitpunkt der Bereitstellung mit Fabric und ChatWork Api automatisch in ChatWork zu posten
Rufen Sie die Excel-Liste rekursiv in einem bestimmten Ordner mit Python ab und schreiben Sie sie in Excel.
Analysieren Sie die Researchmap-API mit Python und erstellen Sie automatisch eine Word-Datei für die Leistungsliste