【问题标题】:count number of rows for a timestamp计算时间戳的行数
【发布时间】:2017-12-07 10:05:17
【问题描述】:

我正在处理数据集

https://pastebin.com/PEFUspiU

我必须对它进行分组并计算在特定时间段内有多少请求,然后很容易为我绘制一张图表时间与请求数量的关系。

举个例子

**timestamp - number of request**

21-06-2016 09:00:00 - 2

21-06-2016 10:00:00 - 1

21-06-2016 11:00:00 - 5

我怎样才能得到这个计数?

谢谢

P.S 我尝试使用 data['timestamp'].value_counts() 但出现错误:

import pandas as pd
import numpy as np
import matplotlib.pylab as plt
from matplotlib.pylab import rcParams
rcParams['figure.figsize'] = 15, 6

dateparse = lambda dates: pd.datetime.strptime(dates, '%d-%m-%Y %H:%M:%S')
data = pd.read_csv('/home/amfirnas/Desktop/localhost_access_log.2016-06-21.csv',
                   parse_dates=['timestamp'], index_col='timestamp',date_parser=dateparse)

print data.head(25)

# print data['time'].value_counts()

# print data.groupby(['time']).groups.keys()

ts = data['timestamp'].value_counts()

# plt.plot(ts)
# plt.show()

【问题讨论】:

  • 你的时间戳数据是否出现在 data["timestamp"] 的列表中?

标签: python machine-learning timestamp time-series


【解决方案1】:

阅读文件:

 df = pd.read_csv('/home/local/sayali/Downloads/dataset-server_logs.csv')

[In]:df

              host            timestamp  status   byte
0  192.168.102.100  21-06-2016 09:54:44     200  17811
1  192.168.102.100  21-06-2016 09:54:44     200  21630
2  192.168.100.160  21-06-2016 10:08:08     404   1098
3  192.168.100.160  21-06-2016 11:20:44     200  17811
4  192.168.100.160  21-06-2016 11:20:44     200  21630
5  192.168.102.100  21-06-2016 11:54:44     200  17811
6  192.168.102.100  21-06-2016 11:54:44     200  21630
7  192.168.102.100  21-06-2016 11:54:44     200  21630

ts = pd.DataFrame(df['timestamp'].value_counts()))

ts
Out[15]: 
                     timestamp
2016-06-21 11:54:44          3
2016-06-21 09:54:44          2
2016-06-21 11:20:44          2
2016-06-21 10:08:08          1

#Convert index to datetime format using pd.to_datetime()
ts.index = pd.to_datetime(ts.index)

# PLOT
plt.title('Number of Requests based on timestamp') 
plt.xlabel('Timestamp')
plt.ylabel('Total number of Requests') 
#Change xticks orientation to vertical 
plt.xticks(rotation='vertical')        
plt.plot(ts)

【讨论】:

  • 嗨,谢谢。如果我这样做 ts = data['timestamp'].value_counts() plt.plot(ts) plt.show() 我得到了空图
  • 请检查已编辑的答案。希望这会有所帮助:) 不要忘记将时间戳转换为日期时间格式,这就是您无法绘制它的原因。
【解决方案2】:

如果您想对它们进行每小时计数,您可以将它们分组然后计数,而不是 value_count(),为此,请确保您的时间戳是 pandas datetime:

df['timestamp'] = pd.to_datetime(df['timestamp'])
df.groupby(pd.Grouper(key='timestamp', freq="1H")).count()

【讨论】:

    猜你喜欢
    • 2015-11-04
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 2015-08-06
    • 2012-08-31
    • 1970-01-01
    相关资源
    最近更新 更多