前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

以下文章来源于大话数据分析,作者:尚天强

网站的日志数据记录了所有Web对服务器的访问活动,本节通过Python第三方库解析网站日志,利用pandas对网站日志数据进行预处理,并用可视化技术,对于网站日志数据进行分析。

PS:如有需要Python学习资料的小伙伴可以加下方的群去找免费管理员领取

可以免费领取源码、项目实战视频、PDF文件等

数据来源

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import apache_log_parser        # 首先通过 pip install apache_log_parser 安装库
%matplotlib inline
fformat = '%V %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T'  # 创建解析器
p = apache_log_parser.make_parser(fformat)
sample_string = 'koldunov.net 85.26.235.202 - - [16/Mar/2013:00:19:43 +0400] "GET /?p=364 HTTP/1.0" 200 65237 "http://koldunov.net/?p=364" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11" 0'
data = p(sample_string) #解析后的数据为字典结构
data

datas = open(r'H:\python数据分析\数据\apache_access_log').readlines()  #逐行读取log数据
log_list = []  # 逐行读取并解析为字典
for line in datas:
data = p(line)
data['time_received'] = data['time_received'][1:12]+' '+data['time_received'][13:21]+' '+data['time_received'][22:27] #时间数据整理
log_list.append(data)    #传入列表
log = pd.DataFrame(log_list)   #构造DataFrame
log = log[['status','response_bytes_clf','remote_host','request_first_line','time_received']]   #提取感兴趣的字段
log.head()
#status 状态码 response_bytes_clf 返回的字节数(流量)remote_host 远端主机IP地址 request_first_line 请求内容t ime_received 时间数据

日志数据清洗

log.isnull().sum() # 查看缺失值

log['time_received'] = pd.to_datetime(log['time_received']) #把time_received字段转换为时间数据类型,并设置为索引
log = log.set_index('time_received')
log.head()

log.dtypes # 查看类型

log['status'] = log['status'].astype('int') # 转换为int类型
log['response_bytes_clf'].unique()
array(['26126', '10532', '1853', ..., '66386', '47413', '48212'], dtype=object)
log[log['response_bytes_clf'] == '-'].head() #对response_bytes_clf字段进行转换时报错,查找原因发现其中含有“-”

def dash2nan(x):    # 定义转换函数,当为“-”字符时,将其替换为空格,并将字节数据转化为M数据if x == '-':
x = np.nanelse:
x = float(x)/1048576return x
log['response_bytes_clf'] = log['response_bytes_clf'].map(dash2nan)
log.head()

log.dtypes

日志数据分析

log['response_bytes_clf'].plot()

流量起伏不大,但有一个极大的峰值超过了20MB。

log[log['response_bytes_clf']>20] #查看流量峰值

t_log = log['response_bytes_clf'].resample('30t').count()
t_log.plot()

对时间重采样(30min),并计数 ,可看出每个时间段访问的次数,早上8点访问次数最多,其余时间处于上下波动中。

h_log = log['response_bytes_clf'].resample('H').count()
h_log.plot()

当继续转换频率到低频率时,上下波动不明显。

d_log = pd.DataFrame({'count':log['response_bytes_clf'].resample('10t').count(),'sum':log['response_bytes_clf'].resample('10t').sum()})
d_log.head()

构造访问次数和访问流量的 DataFrame。

plt.figure(figsize=(10,6))   #设置图表大小
ax1 = plt.subplot(111)    #一个subplot
ax2 = ax1.twinx()     #公用x轴
ax1.plot(d_log['count'],color='r',label='count')
ax1.legend(loc=2)
ax2.plot(d_log['sum'],label='sum')
ax2.legend(loc=0)

绘制折线图,有图可看出,访问次数与访问流量存在相关性。

IP地址分析

ip_count = log['remote_host'].value_counts()[0:10] #对remote_host计数,并取前10位
ip_count

ip_count.plot(kind='barh') #IP前十位柱状图

import pygeoip # pip install pygeoip 安装库
# 同时需要在网站上(http://dev.maxmind.com/geoip/legacy/geolite)下载DAT文件才能解析IP地址
gi = pygeoip.GeoIP(r'H:\python数据分析\数据\GeoLiteCity.dat', pygeoip.MEMORY_CACHE)
info = gi.record_by_addr('64.233.161.99')
info #解析IP地址

ips = log.groupby('remote_host')['status'].agg(['count']) # 对IP地址分组统计
ips.head()

ips.drop('91.224.246.183',inplace=True)ips['country'] = [gi.record_by_addr(i)['country_code3'] for i in ips.index] # 将IP解析的国家和经纬度写入DataFrame
ips['latitude'] = [gi.record_by_addr(i)['latitude'] for i in ips.index]
ips['longitude'] = [gi.record_by_addr(i)['longitude'] for i in ips.index]ips.head()

country = ips.groupby('country')['count'].sum() #对country字段分组统计
country = country.sort_values(ascending=False)[0:10] # 筛选出前10位的国家
country

country.plot(kind='bar')

俄罗斯的访问量最多,可推断该网站来源于俄罗斯。

from mpl_toolkits.basemap import Basemapplt.style.use('ggplot')
plt.figure(figsize=(10,6))map1 = Basemap(projection='robin', lat_0=39.9, lon_0=116.3,
resolution = 'l', area_thresh = 1000.0)map1.drawcoastlines()
map1.drawcountries()
map1.drawmapboundary()map1.drawmeridians(np.arange(0, 360, 30))
map1.drawparallels(np.arange(-90, 90, 30))size = 0.03
for lon, lat, mag in zip(list(ips['longitude']), list(ips['latitude']), list(ips['count'])):
x,y = map1(lon, lat)
msize = mag * size
map1.plot(x, y, 'ro', markersize=msize)

本文首发于python黑洞网,csdn同步更新

Python网页分析,分析网站的日志数据相关推荐

  1. 服务器网站访问日志分析,服务器日志分析与流量统计_直观快捷分析每个网站的日志...

    本帖最后由 软程科技 于 2019-9-9 19:13 编辑 应用名称:日志分析与流量统计 价格:1元 作者:软程科技 版本: 2.1.9 提示(使用前必读): 1. 此插件未在超大(超过1G)的日志 ...

  2. 网站流量日志数据自定义采集

    1. 原理分析 首先,用户的行为会触发浏览器对被统计页面的一个http请求,比如打开某网页.当网页被打开,页面中的埋点javascript代码会被执行. 埋点是指:在网页中预先加入小段javascri ...

  3. 网站流量日志分析系统

    网站流量日志分析系统 网站流量日志分析-01 网站流量日志分析的意义 通过分析用户的行为数据 让更多的用户沉淀下来变成会员 赚取更多的钱. 如何进行网站分析 流量分析 质量分析 在看重数量的同时 需要 ...

  4. 大数据综合项目--网站流量日志数据分析系统(详细步骤和代码)

    文章目录 前言: 基本概述 Sqoop概述 什么是Sqoop Flume概述 什么是Flume 为什么需要flume HIve概述 什么是Hive 系统背景: 模块开发 数据采集 使用Flume搭建日 ...

  5. 学霸用 Python 分析相亲网站数据,在两万异性中找到真爱!

    微信搜 "GitHubDaily" 点关注 设为 "星标",每天带你逛 GitHub! 转自大数据文摘 来源:Wired 编译:啤酒泡泡.张大笔茹.张睿毅.牛婉 ...

  6. 哈佛学霸用Python分析相亲网站数据后,写了份完美约会经验贴

    本文转自大数据文摘 来源:Wired 编译:啤酒泡泡.张大笔茹.张睿毅.牛婉杨 想脱单?那还不容易! 如果身在美国,就像其余四千万单身男人一样,注册一下Match.com, J-Date和OkCupi ...

  7. 只需五步!哈佛学霸教你用Python分析相亲网站数据,在两万异性中找到真爱

    大数据文摘出品 来源:Wired 编译:啤酒泡泡.张大笔茹.张睿毅.牛婉杨 想脱单?那还不容易! 如果身在美国,就像其余四千万单身男人一样,注册一下Match.com, J-Date和OkCupid等 ...

  8. python网站访问日志分析_python分析apache网站日志web日志的代码

    python分析apache网站日志的代码 1.分析日志的python框架awk.py 代码示例: # # Custom awk.py module # class controller: def _ ...

  9. Python爬虫笔记——分析AJAX传递的JSON获取数据-初步分析动态网页

    转载文章链接: Python爬虫:分析AJAX传递的JSON获取数据-初步分析动态网页(1) [4]实战:爬取动态网页的两种思路爬取新浪趣图(1) [5]实战:爬取动态网页的两种思路爬取新浪趣图(2) ...

最新文章

  1. 点击头像单独把图片拉取出来.然后再次点击回到初始效果
  2. svnserve.conf - snvserve 的仓库配置文件
  3. create-react-app部署到GitHub Pages时报错:Failed to get remote。origin.url
  4. Xcode缓存数据清除
  5. mysql devel 编译_mysql编译安装
  6. for update 和 for update nowait
  7. TreeView 之间节点拖动 /移动
  8. 静态HTML模板渲染
  9. 一、JAVA基础(数据类型、运算符、变量常量)
  10. MySQL错误号码1862:your password has expired
  11. WEB打印插件Lodop
  12. vivo android 6.0 root,vivo手机怎么获取root权限?vivo手机一键ROOT教程
  13. 计算机分盘介质受写入保护,“介质受写入保护”的解决(适用于U盘或移动硬盘)...
  14. SSM车辆综合管理系统J2EE(包含车辆驾驶员油耗年检以及维修保养百度echarts统计图表)JAVAWEB网站
  15. 04_从啤酒与尿布,聊关联规则推荐
  16. 矩阵中的旋转(Rotation)
  17. 微生物恒化器中的进化压力----进化模型推导与分析
  18. K近邻模型、KNN算法1-构建预测模型
  19. SSM+天山产业园访客与疫情防控系统 毕业设计-附源码191123
  20. Python网络爬虫-xpath模块

热门文章

  1. c#中怎么禁用和开启无线网卡?
  2. ModelCoder中的代数环问题
  3. Spark源码分析之Master状态改变处理机制原理
  4. (14)Verilog数据类型-基本语法(二)(第3天)
  5. (13)FPGA面试技能提升篇(Shell脚本)
  6. FPGA复位激励编写(方法二)
  7. java64 离线_Java调用人脸识别离线sdk-windows版
  8. java中用new创建一个对象的过程解析_【漫画】Java对象的创建和访问全过程详解...
  9. boost::filesystem 库的简单使用
  10. python 角点检测_opencv python Shi-Tomasi角点检测