如何根据服务器日志绘制一天 24 小时内的用户活动?
How can I plot a user activities during 24 hour on a day based on server logs?
我有每个用户的服务器日志,格式如下:
DateTime
Event
2021-02-10 13:25:44
login
2021-02-10 13:26:08
Run Script
我为每个用户准备了单独的日志,因此所有事件都由一个用户进行。上面的示例不包括所有列,这是 formatted/cleaned 向上的数据。这些事件不感兴趣,我想绘制的是用户 X 在给定的一天按小时计算的 activity,即
图表(x 轴:日期,y 轴:24 小时)显示用户 X 在下午 1-2 点之间有 2 次活动。
感谢任何帮助。
您可能想要使用 seaborn
。可以通过以下命令安装:
pip install seaborn
代码:
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
# Create the sample dataframe
import io
df = pd.read_csv(io.StringIO('DateTime,Event\n2021-02-10 13:25:44,login\n2021-02-10 13:26:08,Run Script\n'))
# Ensure that DateTime column is the proper datetime type
df['DateTime'] = pd.to_datetime(df['DateTime'])
# Assign date and hour columns
df = df.assign(Date=df['DateTime'].dt.date, Hour=df['DateTime'].dt.hour)
# Make a pivot table and reindex
df = df.pivot_table('Event', 'Hour', 'Date', aggfunc='count').reindex(range(24)).fillna(0)
# Visualize the data as heatmap
fig, ax = plt.subplots(1, 1, figsize=(16, 9))
sns.heatmap(df, annot=True, cmap="Blues", ax=ax, cbar_kws={'label': 'The number of events'})
ax.set_xlabel('Date')
ax.set_ylabel('Hour')
ax.set_yticks([i for i in range(25)], [i for i in range(25)])
# Save the figure
fig.savefig('out.png', bbox_inches='tight', facecolor='white')
输出:
如果数据点比您提供的多,则输出如下所示:
# Another dataset with more data points
df = pd.DataFrame({'DateTime': pd.date_range('2022-02-12', periods=10080, freq='T'), 'Event': ['some event' for _ in range(10080)]}).sample(1000, random_state=23)
我有每个用户的服务器日志,格式如下:
DateTime | Event |
---|---|
2021-02-10 13:25:44 | login |
2021-02-10 13:26:08 | Run Script |
我为每个用户准备了单独的日志,因此所有事件都由一个用户进行。上面的示例不包括所有列,这是 formatted/cleaned 向上的数据。这些事件不感兴趣,我想绘制的是用户 X 在给定的一天按小时计算的 activity,即
图表(x 轴:日期,y 轴:24 小时)显示用户 X 在下午 1-2 点之间有 2 次活动。
感谢任何帮助。
您可能想要使用 seaborn
。可以通过以下命令安装:
pip install seaborn
代码:
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
# Create the sample dataframe
import io
df = pd.read_csv(io.StringIO('DateTime,Event\n2021-02-10 13:25:44,login\n2021-02-10 13:26:08,Run Script\n'))
# Ensure that DateTime column is the proper datetime type
df['DateTime'] = pd.to_datetime(df['DateTime'])
# Assign date and hour columns
df = df.assign(Date=df['DateTime'].dt.date, Hour=df['DateTime'].dt.hour)
# Make a pivot table and reindex
df = df.pivot_table('Event', 'Hour', 'Date', aggfunc='count').reindex(range(24)).fillna(0)
# Visualize the data as heatmap
fig, ax = plt.subplots(1, 1, figsize=(16, 9))
sns.heatmap(df, annot=True, cmap="Blues", ax=ax, cbar_kws={'label': 'The number of events'})
ax.set_xlabel('Date')
ax.set_ylabel('Hour')
ax.set_yticks([i for i in range(25)], [i for i in range(25)])
# Save the figure
fig.savefig('out.png', bbox_inches='tight', facecolor='white')
输出:
如果数据点比您提供的多,则输出如下所示:
# Another dataset with more data points
df = pd.DataFrame({'DateTime': pd.date_range('2022-02-12', periods=10080, freq='T'), 'Event': ['some event' for _ in range(10080)]}).sample(1000, random_state=23)