簡體   English   中英

python - 如何以timedelta格式繪制帶有天數和時間的時間分布直方圖?

[英]How to plot a time distribution histogram with days and time in timedelta format - python?

我有一個數據框,顯示唯一 ID 和它們活動時的持續時間(即 ID 1821 顯示活動 170 天 12 小時 34 分 12 秒):

     ID      Duration

0  1821      170 days 12:34:12
1  1245       30 days 11:11:23
2  1345      110 days 15:12:01 
3  8782       22 days 22:01:11 
4  8123       21 days 01:13:42
5  9292        0 days 12:12:14
6  1921       11 days 22:11:41
7  1920       12 days 02:12:58
8  9182      160 days 21:11:04

有沒有辦法可以使用這些數據創建直方圖來顯示所有 ID 的時間分布(原始數據包含 100 萬行)? 因為持續時間不是日期格式,所以我不確定是否仍然可以使用天、小時或分鍾來創建直方圖?

謝謝

我將所有的天數和小時數轉換為一個數字,但我將它們全部轉換為秒數以可視化它們的頻率。

import pandas as pd
import numpy as np
import datetime
import io

data = '''
 ID Duration
0  1821 "170 days 12:34:12"
1  1245 "30 days 11:11:23"
2  1345 "110 days 15:12:01" 
3  8782 "22 days 22:01:11" 
4  8123 "21 days 01:13:42"
5  9292 "0 days 12:12:14"
6  1921 "11 days 22:11:41"
7  1920  "2 days 02:12:58"
8  9182 "160 days 21:11:04"
'''

df = pd.read_csv(io.StringIO(data), sep='\s+')

df1 = pd.concat([df['ID'], df['Duration'].str.split(' days ', expand=True)], axis=1)
df1.rename(columns={0:'days',1:'time'}, inplace=True)
df1['time'] = pd.to_datetime(df1['time'])
df1['days'] = df1['days'].astype(int)
df1['total_seconds'] = (df1['days'] * 24 * 60 * 60) + (df1['time'].dt.hour * 60 * 60) + (df1['time'].dt.minute * 60) + df1['time'].dt.second
df1[['total_seconds']].plot.hist(bins=12)

在此處輸入圖片說明

使用pd.cut將列Duration值合並到離散的天數間隔中,然后在這個分類系列上使用Series.value_counts + Series.sort_index來獲取每個間隔中的頻率分布,然后使用帶有可選參數kind='bar' Series.plot kind='bar' :

bins = range(0, df['Duration'].max().days + 10, 10)
data = pd.cut(df['Duration'].dt.days, bins, include_lowest=True)
data.value_counts().sort_index().plot(kind='bar')

plt.xlabel('Days Active')
plt.ylabel('Number of Users Active')
plt.title('Distribution of Active users')

結果:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM