Toggl API & Pyhon -> Monthly Timeline Report
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.
Ich habe bei Google gesucht und hauptsächlich auf diesen Artikel und diese Referenz verwiesen.
Referenz:
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
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.
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