赞
踩
Python是进行数据分析的好工具,今天就是借助一个案例给大家进行数据分析讲解。
本例设计一个log.txt⽂件,该文件记录了某个项⽬中某个 api 的调⽤情况,采样时间为每分钟⼀次,包括调⽤次数、响应时间等信息,⼤约18万条数据。下⾯进⾏探索性数据分析。
import numpy as np import pandas as pd import matplotlib.pyplot as plt plt.rc('font', **{'family':'SimHei'}) # 从log.txt导⼊数据 data = pd.read_table('log.txt', header=None,names=['id', 'api', 'count', 'res_time_sum', 'res_time_min','res_time_max', 'res_time_avg', 'interval', 'created_at']) # 检查是否有重复值 print( data.duplicated().sum() ) # 0 # 检查是否有空值 print( data.isnull().sum() ) # 分析 api 和 interval 这两列的数据是否对分析有⽤ print( len(data) ) # 得到 179496 print( len(data[data['interval'] == 60]) ) # 得到 179496 print( len(data[data['api'] == '/front-api/bill/create']) ) # 得到 179496 # 查看api字段信息,可以发现unique=1,也就是说只有⼀个值,所以是没有意义的 print( data['api'].describe() ) # 删除api⼀列 data = data.drop('api', axis=1) # 还发现 interval 的值全是60 print( data.interval.unique() ) # [60] # 把 id 字段都删掉 data = data.drop(['id'], axis=1) # 发现数据中每⼀⾏的 interval 字段的值都⼀样,所以丢弃这列 data2 = data.drop(columns=['interval']) print( data2.head() ) # 查看维度信息 print( data2.shape ) # (179496, 6) # 查看字段类型 print( data2.dtypes ) print( data2.info() ) print( data2.describe() ) print( "------------------------------------------" ) # 查看时间字段,会发现count=unique=179496,说明没有重复值 data2['created_at'].describe() # 选取 2018-05-01 的数据,但是没有显⽰ print( data2[data2.created_at == '2018-05-01'] ) # 这样就可以,但是这样选取毕竟挺⿇烦的 print( data2[(data2.created_at >= '2018-05-01') & (data2.created_at < '2018-05-01')] ) # 所以,将时间序列作为索引 data2.index = data2['created_at'] # 为了能 data['2018-05-01'] 这样选取数据,我们还要将时间序列由字符串转为时间索引 data2.index = pd.to_datetime(data2['created_at']) # 有了时间索引,后⾯的操作就⽅便多了 print( data2['2018-05-01'] ) print( "------------------------------------------" ) print( "------------------------------------------" ) # 分析 api 调⽤次数情况 # 下⾯直⽅图表⽰单位时间调⽤api的次数,最⼤值为31,所以就分31组 data['count'].hist(bins=31, rwidth=0.8) plt.show()
# 相同代码省略
print( "------------------------------------------" )
print( "------------------------------------------" )
# 分析 api 调⽤次数情况,例如,在2018-5-1这⼀天中,哪些时间是访问⾼峰,哪些时间段访问⽐较少
# 如下图所⽰,从凌晨2点到11点访问少,业务⾼峰出现在下午两三点,晚上⼋九点。
data2['2018-5-1']['count'].plot()
plt.show()
# 相同代码省略
print( "------------------------------------------" )
print( "------------------------------------------" )
data2['2018-5-1'].describe()
# 分析⼀天中 api 响应时间
data2['2018-5-1']['res_time_avg'].plot()
plt.show()
# 相同代码省略
print( "------------------------------------------" )
print( "------------------------------------------" )
data2['2018-5-1'][['res_time_avg']].boxplot()
plt.show()
# 相同代码省略
print( "------------------------------------------" )
print( "------------------------------------------" )
data2['2018-5-1'][['res_time_avg']].boxplot()
plt.show()
# 相同代码省略
print( "------------------------------------------" )
print( "------------------------------------------" )
# 以20分钟为单位重新采样,可以看到在业务⾼峰时间段,最⼤响应时间和平均响应时间都有所上升
# data2['2018-5-1'].resample('20T').mean()
# data2[['res_time_avg','res_time_max','res_time_min','res_time_sum']].plot()
data2['2018-5-1'].resample('20T').mean()
data2[['res_time_avg','res_time_max','res_time_min']].plot()
plt.show()
# 相同代码省略
print( "------------------------------------------" )
print( "------------------------------------------" )
# 分析连续的⼏天数据,可以发现,每天的业务⾼峰时段都⽐较相似
data2['2018-5-1':'2018-5-10']['count'].plot()
plt.show()
# 相同代码省略 print( "------------------------------------------" ) print( "------------------------------------------" ) # 分析周末访问量是否有增加 data2['weekday'] = data2.index.weekday data2.head() # weekday从0开始,5和6表⽰星期六和星期天 data2['weekend'] = data2['weekday'].isin({5,6}) data2.head() data2.groupby('weekend')['count'].mean() data2.head() #data2.groupby(['weekend', data2.index.hour])['count'].mean().plot() #plt.show() data2.groupby(['weekend', data2.index.hour])['count'].mean().unstack(level=0).plot() plt.show()
根据上面的代码分析案例,进行数据分析,首先根据之前文章讲到的数据清洗,对数据进行导入、重复值检查、空值检测、数据精简处理……
通过对数据的分析、处理,我们可以清楚可视化观察到数据的变化走向,更好的通过数据分析得到结论。
python分析数据绘制图片注意的问题我们后续再讲,感谢!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。