使用python统计前十访问量并以柱状图显示(windows下)

1、环境

windows下安装好
python3.6.2
nginx的访问日志access.log

2、安装图片库 matlotlib

使用清华镜像 pip安装matplotlib图库,它的依赖包也会自动安装好,我的环境python3是和python2共存的,所以3以pyhton3和pip3区别

pip3 install matplotlib==3.1.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/

3、完全代码如下

top10.py

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
# 定义存放日志地址
nginx_file = 'E:\\doc\\access.log'
# 定义空字典,后面要存放IP:数量键对值
ip = {}
# 筛选nginx日志中的目标IP
with open(nginx_file) as f:
    for i in f.readlines():
        s_ip = i.strip().split()[0]
        lengh = len(ip.keys())
        if s_ip in ip.keys():
            ip[s_ip] = ip[s_ip] + 1
        else:
            ip[s_ip] = 1
# 以IP出现的次数排序返回对象为list
ip = sorted(ip.items(), key=lambda s:s[1], reverse=True)
# 排序好了截取前10数目的键值,0:10:1的意思是从0开始,以1单位增量去总共10个值
newip = ip[0:10:1]
# 转换成字典
tu = dict(newip)
# 定义 x和 y的空列表,用于分别存放tu字典的键和值
x = []
y = []
# 列车键和分别追加到x和y列表
for k in tu:
    x.append(k)
    y.append(tu[k])
# 打印标题
plt.title('ip access')
# 打印x标签
plt.xlabel('ip address')
# 打印y标签
plt.ylabel('PV')

# x标签旋转45°
plt.xticks(rotation=45)
# 输出图表中间的文字各种格式的定义
for a, b in zip(x, y):
    plt.text(a, b, '%.0f' % b, ha='center', va='bottom', fontsize=12,)
# 以柱状形式打印图表,并打印标签名,还有其他图表格式的如饼图等,需要的text格式不同
plt.bar(x, y, label='nginx access top 10')
plt.legend()
# 图表展示
plt.show()

以上是个人理解。

4、效果图如下

python3

使用python统计前十访问量并以柱状图显示(windows下)_第1张图片

你可能感兴趣的:(python)