2017-07-28 1 views
2

Je dois analyser l'activité des utilisateurs qui utilisent une application pendant une période donnée, les périodes sont des horodatages de début et de fin. J'ai essayé avec un graphique à barres, mais je ne sais pas comment inclure des heures dans l'intervalle. Ex: utilisateur uid = 2 utiliser l'application à [18, 19, 20, 21]Pandas: Comment analyser les données avec horodatage de début et de fin?

Mon dataframe est comme:

uid   sex   start     end 
1    0  2000-01-28 16:47:00 2000-01-28 17:47:00 
2    1  2000-01-28 18:07:00 2000-01-28 21:47:00 
3    1  2000-01-28 18:47:00 2000-01-28 20:17:00 
4    0  2000-01-28 08:00:00 2000-01-28 10:00:00 
5    1  2000-01-28 02:05:00 2000-01-28 02:30:00 
6    0  2000-01-28 15:10:00 2000-01-28 18:04:00 
7    0  2000-01-28 01:50:00 2000-01-28 03:00:00 


df['hour_s'] = pd.to_datetime(df['start']).apply(lambda x: x.hour) 
df['hour_e'] = pd.to_datetime(df['end']).apply(lambda x: x.hour) 

uid   sex   start     end    hour_s  hour_e 
1    0  2000-01-28 16:47:00 2000-01-28 17:47:00 16   17 
2    1  2000-01-28 18:07:00 2000-01-28 21:47:00 18   21 
3    1  2000-01-28 18:47:00 2000-01-28 20:17:00 18   20 
4    0  2000-01-28 08:00:00 2000-01-28 10:00:00 08   10 
5    1  2000-01-28 02:05:00 2000-01-28 02:30:00 02   02 
6    0  2000-01-28 15:10:00 2000-01-28 18:04:00 15   18 
7    0  2000-01-28 01:50:00 2000-01-28 03:00:00 01   03 

Je dois trouver nombre d'utilisateurs dans une heure specifc

+0

[Ce blog] (http://www.clowersresearch.com/main/gantt-charts-in-matplotlib/) donne un exemple détaillé de ce que vous voulez, s'il vous plaît jeter un oeil –

+0

Et encore mieux, [ici] (https : //stackoverflow.com/questions/43367690/how-to-get-gantt-p lot-using-matplotlib) –

Répondre

1

Je ne sais pas si vous êtes à la recherche d'un diagramme de Gantt. Si oui, vos conseils par @ Vinícius Aguiar, sont dans les commentaires.

Depuis votre dernière ligne

Je dois trouver nombre d'utilisateurs en quelques heures specifc

Il semble que vous avez besoin d'un histogramme montrant quantité d'utilisateur (freqeuncy) pivotée par heure de la journée. Si tel est le cas, vous pouvez faire quelque chose comme ceci:

#! /usr/bin/python3 

import matplotlib.pyplot as plt 
import pandas as pd 
import numpy as np 

# Read the data 
df=pd.read_csv("data.csv") 

# Get all hours per user (per observation) 
def sum_hours(obs): 
    return(list(range(obs['hour_s'],obs['hour_e']+1,1))) 

# Get all existing activity hours (No matter which user) 
Hours2D=list(df.apply(sum_hours,axis=1)) 
# Get all existing hours 
HoursFlat=[hour for sublist in Hours2D for hour in sublist] 

plt.hist(HoursFlat,rwidth=0.5,range=(0,24)) 
plt.xticks(np.arange(0,24, 1.0)) 
plt.xlabel('Hour of day') 
plt.ylabel('Users') 
plt.show() 

Où data.csv est l'exemple que vous avez fourni:

uid, sex,start,end,hour_s,hour_e 
1,0,2000-01-28 16:47:00,2000-01-28 17:47:00,16,17 
2,1,2000-01-28 18:07:00,2000-01-28 21:47:00,18,21 
3,1,2000-01-28 18:47:00,2000-01-28 20:17:00,18,20 
4,0,2000-01-28 08:00:00,2000-01-28 10:00:00,08,10 
5,1,2000-01-28 02:05:00,2000-01-28 02:30:00,02,02 
6,0,2000-01-28 15:10:00,2000-01-28 18:04:00,15,18 
7,0,2000-01-28 01:50:00,2000-01-28 03:00:00,01,03 

Vous devriez obtenir le graphique suivant: Data pivoted showing user amounts by hour

+0

Vous pouvez également prendre des variables Hours2D et HoursFlat et exécuter des analyses supplémentaires, pas seulement la visualisation. (Valeurs aberrantes, regroupement par jour, etc.) – AChervony

+0

Notez qu'il ne s'agit que d'un exemple directionnel et qu'il ne fonctionnera que si vos observations sont uniques par utilisateur et par jour, comme dans votre exemple de jeu de données. – AChervony

+0

Je vous remercie, il résout mon problème –