上海股票配资-网站流量日志分析
栏目:金源最新资讯 发布时间:2024-07-26
文章浏览阅读1.1k次,点赞19次,收藏22次。

网站流量日志分析

通过分析用户行为数据,可以让更多的用户安顿下来并成为会员,从而赚取更多的钱。

流量分析

质量分析:在注重数量的同时,也要注重流量的质量,也就是流量能带来的价值

多维度切分:维度指定了分析问题的角度,不同的维度下,问题的特征也不同。

例如:

2.内容导航分析

从页面角度分析用户行为

3.转化分析(漏斗模型分析)

从转化目标分析的角度,我们可以分析所谓的流失率或者转化率青海股票配资,描述出层层递减的流失模型。

遵循数据流动过程,即数据从哪里来,到哪里去

数据采集

数据从无到有的过程:通过技术手段(传感器采集、服务器日志采集)将客观事件量化为数据

数据传输过程:将数据从一个存储介质传输到另一个存储介质(Flume) 数据预处理

目的:确保后续正式处理的数据是格式统一、结构整洁、规则的结构化数据

技术:任何可以接受数据处理和输出数据的语言都可以使用

我们之所以选择MR,是因为它是Java程序,语言比较熟练,可以无缝调用Java现有的开源库进行数据处理。而且MR本身是一个分布式程序,在预处理过程中,如果数据量较大,可以采用分布式计算的方式对数据进行处理福州股票配资,提高数据存储的效率。

库:分析型数据库,数据仓库Hive

数据存储:将来自不同数据源的数据通过ETL(提取、转换、加载)加载到数据仓库的分析主题中 数据分析

根据业务需求,通过hive sql进行各项指标计算统计,数据分析是一个持续的过程。数据可视化

尽量用图表的方式把分析出来的数据展示给别人,也叫数据报告、数据收集。

页面嵌入采集(Nginx);开源框架数据传输数据预处理

程序数据仓库

Hive 数据导出

Sqoop数据导出工具数据可视化

web程序定制开发()全流程的JS进程调度

工具

1.如何实现数据采集功能1.数据采集2.使用js代码实现自定义采集用户数据

js和html页面耦合在一起,不利于后续js维护

将js提取到单独的文件中,然后通过src属性引入到页面中,实现所谓的解耦

一台服务器承担多项职责,压力太大。减少服务器请求压力。

使用单独的部署服务器来收集数据请求响应

可能出现跨域问题(限制js跨域数据传输)

以请求图片的形式,将采集到的数据拼接成图片参数发送到指定服务器,绕过js跨域问题

3. 确定收集的信息

通常在进行数据采集之前,我们都会进行业务需求分析,确定所要采集信息的字段以及采集方式。

4. 嵌入代码的编写

本来,追踪代码的逻辑就是实际采集数据的逻辑。但是为了方便后续维护,把真正采集数据的js抽出来,变成一个js文件。这样一来宁夏股票配资,追踪代码就变成了如何把这个js文件引入到页面中。

1.直接通过src属性导入

5.前端数据采集js依然是匿名函数自调用的形式,保证引入到​​页面执行一次后可以自己调用执行。通过页面内置对象获取一些属性信息,通过解析全局数据获取一些信息,将采集到的属性信息按照URL格式进行拼接,并对URL进行编码。页面创建图片标签,并将标签的src属性指向后端数据采集服务器,将采集数据的拼接参数放置其中,请求图片URL传递给后端。6.后端脚本

所谓后端,就是接受并分析前端发送来的采集数据的服务器

接受请求解析参数保存数据响应图片log.gif 1*1响应

注意nginx中该模块的具体职责:用于匹配请求URL资源路径

7. 日志格式

考虑日志中字段之间的分隔符,这将有助于程序将来处理数据

常用分隔符 制表符 特殊符号 \001

8. 日志分割

nginx默认将日志写入单个文件,这样不利于后续的维护和移动端操作处理。

通过shell脚本向nginx进程发送usr1信号,通知其重新加载配置文件,重新加载配置文件时重新打开一个新的日志文件,配合定时器,通过时间间接完成配置文件的回滚。

注:发布服务默认路径为/var/www/html

nginx 默认的 URL 路径是 /usr/local/nginx/html/

二、数据预处理功能 1、在正式处理数据之前对采集到的数据进行预处理的操作 2、预处理编程思路

在使用mr编程时,要牢牢把握key是什么,因为mr中key有很多默认的属性

分区-->键哈希%

分组 --> 将相同的键分组为一组

排序 --> 按键按字典顺序排序

3.编程技巧3.数据仓库设计3.1维度建模

根据维度进行数据分析

适用于分析领域的理论,如分析数据库、数据仓库和数据集市

事实表

分析专题的客观事件度量是分析专题的数据聚合,表中的一条记录往往对应一个客观时间长春股票配资,往往是一堆主键的聚合。

维度表

所谓维度表,就是看问题的视角,从不同的维度来分析事实表,会得到不同的分析结果,维度表可以和事实表进行关联查询。

问:点击流模型数据是什么类型的表?

点击流模型数据既不是事实表,也不是维度表,它是一个业务模型数据,可以称为事实表的业务扩展。

3.2 多维数据分析

所谓多维数据分析,是指通过不同维度的聚合来计算某个度量值。

常见指标:max min count sum avg topN

例如:北京24岁及近三年购物金额最多的未婚女性统计。

维度可分为:地域 性别 年龄 结婚时间

指标:sum(订单金额)--->top3

3.3 维度建模的三种模式

事实表:对应于数据预处理后的原始网站日志

维度表:通常用于业务决策分析的维度应该与事实表进行关联,以涵盖事实表的基本标准。

3.4 数据存储ETL 4.指标分析 基础指标分析: 1.页面访问量(pv):网站一天内被访问的总次数

分析依据: 2.独立访客(UV):一天的独立访客数量 3.访问次数:一天的会话次数 4.IP:一天的独立IP数量,与UV独立访客类似 2.复杂指标分析 1.平均访问频率:一天每个访客的会话次数 2.平均访问时长:一天每个会话用户在网站上停留的平均时间

总时长/课程次数

3.跳出率计算/--跳出率3.多维数据分析,

多维数据分析

时间维度统计:

计算一天中每个小时处理批次的pv

计算每日 pv

方法一:day 统计每小时的 pvs

从第 t 天开始的总和(pvs)北京股票配资,其中“”;

方法二:直接根据宽表计算每日PVS

count(*) 从哪里开始="";

方法三:如果数据不是分区表,直接按天分组

t.month,t.day,count(*) 作为 pvs

t 其中 t。=“” 按 t.month,t.day 分组;

关联查询的关键点在于join字段和时间相关。

查询语句:

insert into table dw_pvs_everyday
select count(*) as pvs,a.month as month,a.day as day from (select distinct month, day from t_dim_time) a
join dw_weblog_detail b 
on a.month=b.month and a.day=b.day
group by a.month,a.day;

扩展:利用维表关联计算每小时pvs

查询语句:

insert into table dw_pvs_everyhour
select count(*) as pvs,a.month as month,a.day as day,a.hour as hour from (select distinct month, day,hour from t_dim_time) a
join dw_weblog_detail b 
on a.month=b.month and a.day=b.day and a.hour=b.hour
group by a.month,a.day,a.hour;

按访问维度和时间维度进行分析

统计每个访问URL每小时产生的PV数量

统计每个访问主机每小时产生的PV数量并排序

select ref_host,month,day,hour,count(1) as ref_host_cnts
from dw_weblog_detail 
group by ref_host,month,day,hour 
having ref_host is not null
order by hour asc,day asc,month asc,ref_host_cnts desc;

TopN问题

统计每小时生成 PVS 最多的前 N ​​个主机

5. SQL 扩展

例如:

SELECT 
count(sex) as nums
FROM (SELECT
      a.*,b.*
	  FROM a join b on a.id=b.id
	  where ...
)t 
where t.city="beijing" 
group by t.sex
HAVING t.sex is not NULL 
order by nums DESC limit 10 ;
-- 在编写select查询语句时 select确定之后要立马去寻找from关键字 因为后面跟的急速操作的表
--表可能是真实存在的表 如果是真实存在的表 那么直接使用
--表也可能不存在 设法通过查询把这个表查询出来 基于这个虚拟的表进行操作
--只有表确定之后 在结合业务确定返回的字段或者表达式
-- 嵌套子查询,先执行里面的查询语句 后执行外面的查询语句

6.分组窗口功能 *统计每天最受欢迎的前10个页面* 按时间(按小时)统计独立访客及其产生的PV 每天新老访客

--今天 (根据今天收集的数据进行去重统计)
select
distinct t.remote_addr as ip
from dw_weblog_detail t where t.datestr="20181101";
--历史
create table dw_user_dsct_history(
day string,
ip string
) 
partitioned by(datestr string);
--框架
select
今天.ip
from 今天 left join 历史 on 今天.ip = 历史.ip
where 历史.ip is null;--新访客
select
今天.ip
from 今天 left join 历史 on 今天.ip = 历史.ip
where 历史.ip is not null;--老访客

查询所有回访访客及今日访客数量,以及单个访客

访问次数大于一次的访问者被称为回访者。

hive中join总结:7.导出全量和增量数据

完整数据:全部数据

增量数据:从上次到当前时间添加的数据

1. 全量数据导出

配置单元—> HDFS

insert overwrite directory '/weblog/export/dw_pvs_referer_everyhour' row format delimited fields terminated by ',' STORED AS textfile select referer_url,hour,pv_referer_cnt from dw_pvs_referer_everyhour where datestr = "20181101";

hdfs----->mysql

bin/sqoop export \
--connect jdbc:mysql://node03:3306/weblog \
--username root --password 123456 \
--table dw_pvs_referer_everyhour \
--fields-terminated-by '\001' \
--columns referer_url,hour,pv_referer_cnt \
--export-dir /weblog/export/dw_pvs_referer_everyhour

2.增量数据导出

hdfs----->mysql

bin/sqoop export \
--connect jdbc:mysql://node03:3306/weblog \
--username root \
--password 123456 \
--table dw_webflow_basic_info \
--fields-terminated-by '\001' \
--update-key monthstr,daystr \
--update-mode allowinsert \
--export-dir /user/hive/warehouse/itheima.db/dw_webflow_basic_info/datestr=20181103/

3. 计划增量导出

手动导入增量数据方法

insert into table dw_webflow_basic_info partition(datestr="20181104") values("201811","04",10137,1129,1129,103);

Shell脚本定时增量导入

#!/bin/bash
export SQOOP_HOME=/export/servers/sqoop
if [ $# -eq 1 ]
then
    execute_date=`date --date="${1}" +%Y%m%d`
else
    execute_date=`date -d'-1 day' +%Y%m%d`
fi
echo "execute_date:"${execute_date}
table_name="dw_webflow_basic_info"
hdfs_dir=/user/hive/warehouse/itheima.db/dw_webflow_basic_info/datestr=${execute_date}
mysql_db_pwd=123456
mysql_db_name=root
echo 'sqoop start'
$SQOOP_HOME/bin/sqoop export \
--connect "jdbc:mysql://node03:3306/weblog" \
--username $mysql_db_name \
--password $mysql_db_pwd \
--table $table_name \
--fields-terminated-by '\001' \
--update-key monthstr,daystr \
--update-mode allowinsert \
--export-dir $hdfs_dir
echo 'sqoop end'

4. 工作流调度

业务目标的完成涉及到各个步骤,步骤之间或者步骤内往往存在依赖关系,甚至需要周期性的重复执行,此时就需要设置工作流,保证工作按照设定的流程进行。

预处理模块任务调度

数据输入安排

Shell 脚本

如何使用调度配置单元

数据可视化

我们需要思考如何从后端动态加载数据并返回到前端页面进行可视化展示。

数据可视化后端Web工程

职责: 将从MySQL导出的数据按照前端需要的格式返回给前端。

技术:php java 本项目使用SSm做数据查询

逆向工程

你可以根据对应的数据库表生成对应的sql

最重要的是提供一个所谓的类,用于有条件地封装符合SQL的增删改查操作

当业务简单,多表操作不切实际时,可以直接使用逆向工程,将DAO层代码量降为零。

文章原创于金源网络科技有限公司:http://haimianbeibei.com/