运用pandas matplotlib进行服务器日志分析
1、导包
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
2、log日志读取
简单分析日志文件,查看日志的数据结构,主要是分隔方法,发现是以\t分隔的
df = pd.read_csv(’./log.txt’, header = None, sep = ‘\t’)
df.head() #查看前5条数据
log日志没有标题行,所以header为空,sep是分隔符的类型
3、数据优化
3.1、查看内存占用
log日志中记录了大量数据,并不是都有用,无用的数据会占用内存,降低运行效率。
使用df.info()查看数据内存占用情况
3.2 为数据增加标题
为了便于阅读,需要给数据增加标题
df.columns = [‘id’, ‘api’, ‘count’, ‘res_time_sum’, ‘res_time_min’, ‘res_time_max’, ‘res_time_avg’, ‘interval’, ‘create_at’]
df.head(2)
查看前2行
3.3、查找无用数据
3.3.1、df.sample()随机采样法
使用sample()方法,进行随机采样,可以查看是否有无用的数据列。
如下可以看到,api和interval两列的数据都是重复且没有意义的,可以进行删除
3.3.2、df.describe()查看详细介绍
使用df.describe()查看某列的,或者整张表的详细介绍
df[‘api’].describe() #查看api这列数据介绍
3.4、无用数据清理
为了减少内存占用,提要运行效率,需要对无用的数据进行清理
df = df.drop[‘id’, ‘api’, ‘interval’, axis = 1]
这里一定要注明axis=1,表示删除一列,否则会删除掉一行
4、将创建时间调整为index时间序列
当前的index没有什么实用价值,为了方便统计分析,我们可以把创建时间作为index,然后对时间进行操作,可以更方便的取值
4.1 调整index
将create_at赋值给index
df.index = df[‘create_at’]
现在的index虽然为时间,但是类型是str字符串,还不能通过时间取值操作
4.2、转换index类型为时间类型
通过pd.to_datetime()进行类型转换
df.index = pd.to_datetime(df.create_at)
下图的index类型就是时间类型
4.3、通过时间序列进行取值
直接输入要查看的时间范围,就可以取出对应的数据
5、通过图表展示log日志中的数据
5.1、查看日志数据的介绍
通过describe()方法查看数据简要分析介绍
5.2、切片取得接口调用数据(count),绘制直方图,初步分析调用次数(count)占比情况
df[‘count’]切取接口调用数据
使用直方图,查看所有的访问中,接口调用次数主要是多少
‘’’
df[‘count’].hist(bins = 30)
plt.show()
‘’’
plt.figure(figsize=(10,3)可以调整画布的大小
通过下图得知,接口主要调用次数平均集中在7次,与describe中的count平均数一致
5.3、切取时间与count数据,绘制折线图,观察哪些时间段访问量比较大
获取时间与count数据,并绘制折线图
df[‘2019-1-5’][‘count’].plot()
plt.show()
从下图中得知,19年1月5日这天,主要的访问集中在下午的3点,和晚上的9点。
plt.figure(figsize=(10,3)可以调整画布的大小
5.4、调整采样时间单位的大小–重采样resample()
每分钟采样绘制的图表数据单位太小,需要使用resample重新采样,调整时间单位。
可以看到时间单位由1分钟,变成了1小时一次。
使用重新采样后的数据,绘制折线图
plt.figure(figsize=(10,3)可以调整画布的大小
如果折线图不够直观,可以画一个条形统计图
plt.figure(figsize = (10, 3))#调整画布的大小,单位是英寸
df2[‘count’].plot(kind = ‘bar’)
plt.show()