Défi pour créer un rapport de liste de l'axe des temps avec l'API Toggl et Python

Toggl API & Pyhon -> Monthly Timeline Report

Ki: Début

Toggl est utilisé pour l'auto-analyse de l'efficacité commerciale. Le projet est créé de manière appropriée sur la base de Getting Things Done, et la classification de client qui lui est associée est Eisenhower Matrix. / eisenhower-matrix /) est classé dans le 1er au 4e quadrant.

Le rapport du chef de famille est également bon, mais je voulais voir les résultats par jour et heure dans une liste mensuelle. Et je viens de commencer à étudier Python.

L'environnement est le suivant.

Maintenant, essayez de créer un rapport avec l'API Toggl et Python.

Accepté: utilisé

J'ai cherché sur Google et j'ai principalement fait référence à cet article et à cette référence.

Référence:

Transfert: ce que j'ai fait

C'est un travail difficile basé sur le code de référence.

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

#Préparation de Dataframe
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 = '{Clé}' # ここにAPICléを入れる

for pagenumber in range(1000):
    pn = np.str(pagenumber + 1)
    _params = {
        'user_agent': '{adresse mail}',       # ここにTogglに登録しているadresse mailを入れる
        'workspace_id': '{ID}',         #Entrez votre identifiant d'espace de travail ici
        'since': '2016-11-01',                  #Premier rendez-vous
        'until': '2016-11-30',                  #Dernier rendez-vous
        'page': pn}
    r = requests.get('https://toggl.com/reports/api/v2/details', auth=HTTPBasicAuth(_api_token, 'api_token'), params=_params)

#L'acquisition des données
    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

#Quantifier les heures de début et de fin
        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')
#Convertir en minutes
        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']
#Quantifier la date
        DayV = datetime.datetime.strptime(str(tdatetime.day), '%d')
        y = DayV.day

#Séparez les couleurs avec le client
        for i in range(TimeVal_s, TimeVal_e):
            if ClientV == 'Quadrant_4':     #Quatrième quadrant(Not Importand & Not Urgent)Est bleu
                ColorV = 'b'
            elif ClientV == 'Quadrant_3':   #Troisième quadrant(Not Importand & Urgent)Est vert
                ColorV = 'g'
            elif ClientV == 'Quadrant_2':   #Deuxième quadrant(Importand & Not Urgent)Est jaune
                ColorV = 'y'
            elif ClientV == 'Quadrant_1':   #Premier quadrant(Importand & Urgent)Est rouge
                ColorV = 'r'
            else:
                Client = 'k'                #Noir sans réglage
#dessin
            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
#Supprimer la ligne factice
df = df.drop(0)

plt.grid(True)
#l'axe des x correspond à 1 jour(0~60*24)Étiqueter toutes les heures
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")
#L'axe des y est étiqueté quotidiennement pendant un mois
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()

#Résumé de sortie
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


Conclusion: ce qui a été fait

Pour le moment, j'ai obtenu le résultat que j'avais imaginé. De la couleur, vous pouvez voir qu'il n'y a pas de place. Ou plutôt, je saute l'enregistrement du milieu.

Toggl-API_Monthly_Report.png

I: A partir de maintenant

Pour le moment, les bases de ce que je voulais faire étaient terminées. Cependant, le contenu et l'apparence sont toujours sales. Ce n'est pas beau car il y a beaucoup de gaspillage et d'inefficacité. Cela prend trop de temps à courir. (Probablement parce que les données sont dessinées une par une dans un diagramme de dispersion) Étudiera.

Si vous connaissez une méthode plus cool et plus intelligente, j'apprécierais que vous puissiez m'apprendre.

Merci de votre collaboration.

[END]

Recommended Posts

Défi pour créer un rapport de liste de l'axe des temps avec l'API Toggl et Python
[Python] Créer une liste de dates et d'heures pour une période spécifiée
Créer Awaitable avec l'API Python / C
Convertir la liste en DataFrame avec python
[Python] Créer une API pour envoyer Gmail
Faites fonctionner Jupyter avec l'API REST pour extraire et enregistrer le code Python
Obtenez des conversions et des revenus avec l'API Google Analytics et faites un rapport à Slack
J'ai essayé de créer une liste de nombres premiers avec python
Créer une API REST qui renvoie l'heure actuelle avec Python3 + Falcon
Créer une liste d'utilisateurs Cognito dans S3 avec SQS Déployer des fonctions de traitement de file d'attente et des API sur Lambda avec SAM
Créez automatiquement la documentation de l'API Python avec Sphinx
Fractal pour faire et jouer avec Python
Créer et décrypter du code César avec python
[Python] Créez rapidement une API avec Flask
Comment obtenir la différence de date et d'heure en secondes avec Python
Essayez de créer foldl et foldr avec Python: lambda. Aussi mesure du temps
[Outlook] J'ai essayé de créer automatiquement un e-mail de rapport quotidien avec Python
[Python] Comment créer une liste de types de dictionnaire, ajouter / modifier / supprimer des éléments et extraire avec une instruction for
[Python] Compréhension de liste Différentes façons de créer une liste
Grattage de la nourriture avec python et sortie en CSV
MessagePack-Try pour lier Java et Python avec RPC
[Python] Créer une liste de date et d'heure (type datetime) pour une certaine période
Créez une API pour convertir des fichiers PDF en images TIF avec FastAPI et Docker
Comment utiliser OAuth et API de compte de service avec le client API Google pour python
Étapes pour créer un bot Twitter avec Python
Comment mesurer le temps d'exécution avec Python Partie 1
Obtenez l'objet et le corps de Gmail avec Python et l'API Gmail
Liste de code Python à déplacer et à mémoriser
[Python] Mention à plusieurs personnes avec l'API de Slack
Créez rapidement un serveur API avec Python + Falcon
Pour représenter la date, l'heure, l'heure et les secondes en Python
Comment mesurer le temps d'exécution avec Python, partie 2
Convertir une chaîne au format de liste caractère par caractère avec python
[Python] Comment créer un environnement de serveur Web local avec SimpleHTTPServer et CGIHTTPServer
[Python] J'ai essayé de créer automatiquement un rapport quotidien de YWT avec la messagerie Outlook
Créez rapidement un tableau de bord d'analyse de données Python avec Streamlit et déployez-le sur AWS
Créez une API simple juste pour entrer et sortir des fichiers JSON ~ Édition Python / Flask ~
Mémo pour créer votre propre Box avec le Python de Pepper
Procédure pour charger MNIST avec python et sortie en png
Je veux gérer l'optimisation avec python et cplex
Essayez le fonctionnement de la base de données avec Python et visualisez avec d3
Comment mesurer le temps de lecture d'un fichier mp3 avec python
Pour éviter de passer du temps à colorier des personnages dessinés avec du python
Exploration avec Python et Twitter API 1 - Fonction de recherche simple
[Python] Comment trier un dict dans une liste et une instance dans une liste
[Python] Comment créer une matrice de corrélation et une carte thermique
[Python] Comment créer un histogramme bidimensionnel avec Matplotlib
[Python] Obtenez des informations sur les utilisateurs et des articles sur l'API de Qiita
Comment faire fonctionner l'API Discord avec Python (enregistrement de bot)
[LINE Messaging API] Créer un BOT de retour de perroquet avec Python
Liste des API Python pour OpenCV3
Initialiser la liste avec python
J'ai essayé de publier automatiquement sur ChatWork au moment du déploiement avec Fabric et ChatWork Api
Obtenez de manière récursive la liste Excel dans un dossier spécifique avec python et écrivez-la dans Excel.
Analysez l'API Researchmap avec Python et créez automatiquement un fichier Word pour la liste des succès