简介
项目中经常需要对日志文件进行分析,之前使用Shell,常用的是grep, awk, sed等。
使用Shell有一个缺点,就是可视化不友好,经常需要把分析后的文件导出,再用Python/Excel可视化一下。
本文直接使用Python对日志文件进行分析,并使用matplotlib进行可视化。
数据
这里的数据文件选用一个天气数据文件,它存储了某地一个时间段的最高温度、最低温度等数据。
目的是把不同时间点最高温度和最低温度数据进行可视化,用折线图的形式绘制出来。
数据文件引用《Python编程——从入门到实践》的配套资料,可从 http://www.wunderground.com/history/ 下载。
数据头如图所示:
读取文件
使用Python读取文件的方式一般如下:
def read_file():
with open("pi.txt") as file_object:
lines = file_object.readlines()
Python标准库中包含csv模块,可直接分析csv文件行:
import csv
from datetime import datetime
filename = 'sitka_weather_2014.csv'
with open(filename) as f:
reader = csv.reader(f) # 把文件对象关联到阅读器reader对象
header_row = next(reader) # 得到文件第一行
打印文件头及索引的方式如下:
for index, column_header in enumerate(header_row):
print(index, column_header)
获取想要的数据:
dates, highs, lows = [], [], []
for row in reader:
# 异常检查,忽略数据残缺文件
try:
current_date = datetime.strptime(row[0], '%Y-%m-%d') # 转化为指定格式的日期格式
high = int(row[1])
low = int(row[3])
except ValueError:
print(current_date, 'missing date')
else:
dates.append(current_date)
highs.append(high)
lows.append(low)
至此,已经得到了最高温度和最低温度,下面开始可视化。
matplotlib可视化
matplotlib库是功能强大的Python绘图库。
直接上代码:
# 指定分辨率和大小
fig = plt.figure(dpi = 128, figsize = (10, 6))
# 最高温度,红色
plt.plot(dates, highs, c = 'red')
# 最低温度,蓝色
plt.plot(dates, lows, c = 'blue')
# 最高最低温度之间填充浅蓝色,alpha表示透明度
plt.fill_between(dates, highs, lows, facecolor = 'blue', alpha = 0.1)
# 图表标题
plt.title('Daily high and low temperatures, 2014', fontsize = 24)
# x轴,不指定,后续填日期
plt.xlabel('', fontsize = 16)
# 自动绘制日期标签,x轴,避免重叠
fig.autofmt_xdate()
# y轴
plt.ylabel('F', fontsize = 16)
# 轴上标签大小
plt.tick_params(axis = 'both', which = 'major', labelsize = 16)
plt.show()
绘制和效果图如下:
小结
借助Python强大的数据分析包,可以轻松明了地实现数据分析与可视化。
而且,从语法、简洁的角度来看,上手与维护都优于使用Shell编程。
参考资料
《Python编程——从入门到实践》