精华内容
下载资源
问答
  • 我们知道,用户浏览页面时,会从浏览器向网络服务器发出一个请求(Request),网络服务器接到这个请求后,会将该请求对应的一个网页(Page)发送给浏览器,从而产生了一个 PV。所以我们的统计方法,可以是从 we

    数据
    链接:https://pan.baidu.com/s/1InfWoNYUeV1KYyvFS1aXuA
    提取码:z3p4
    衡量网站流量一个最简单的指标,就是网站的页面浏览量(Page View,PV)。用户每次打开一个页面便记录 1 次 PV,多次打开同一页面则浏览量累计。一般来说,PV 与来访者的数量成正比,但是 PV 并不直接决定页面的真实来访者数量,如同一个来访者通过不断的刷新页面,也可以制造出非常高的 PV!
    我们知道,用户浏览页面时,会从浏览器向网络服务器发出一个请求(Request),网络服务器接到这个请求后,会将该请求对应的一个网页(Page)发送给浏览器,从而产生了一个 PV。所以我们的统计方法,可以是从 web 服务器的日志中去提取对应的页面访问然后统计,就向上一节中的做法一样;也可以直接从埋点日志中提取用户发来的页面请求,从而统计出总浏览量。 所以,接下来我们用 UserBehavior.csv 作为数据源,实现一个网站总浏览量的统计。我们可以设置滚动时间窗口,实时统计每小时内的网站 PV。
    代码实现

    import org.apache.flink.api.common.functions.AggregateFunction
    import org.apache.flink.streaming.api.TimeCharacteristic
    import org.apache.flink.streaming.api.scala._
    import org.apache.flink.streaming.api.scala.function.WindowFunction
    import org.apache.flink.streaming.api.windowing.time.Time
    import org.apache.flink.streaming.api.windowing.windows.TimeWindow
    import org.apache.flink.util.Collector
    
    //定义输入输出样例类
    case class UserBehavior(userId:Long,itemId:Long,categoryId:Int,behavior:String,timestamp:Long)
    case class PageViewCount(windowEnd:Long,count:Long)
    
    object PageView {
      def main(args: Array[String]): Unit = {
        val env = StreamExecutionEnvironment.getExecutionEnvironment
        env.setParallelism(1)
        env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
    
        //从文件中读取文件
        val inputStream = env.readTextFile("D:\\idea\\UserBehaviorAnalysis\\NetworkFlowAnalysis\\src\\main\\resources\\UserBehavior.csv")
        val dataStream = inputStream
          .map(data => {
            val dataArray = data.split(",")
            UserBehavior(dataArray(0).toLong, dataArray(1).toLong, dataArray(2).toInt, dataArray(3), dataArray(4).toLong)
          })
          .assignAscendingTimestamps(_.timestamp * 1000L)
    
        //分配key,包装成二元组开窗聚合
        val pvStream = dataStream
          .filter(_.behavior == "pv")
          .map(data => ("pv", 1L))
          .keyBy(_._1)
          .timeWindow(Time.hours(1))
          .aggregate(new PvCountAgg(), new PvCountResult())
        
        pvStream.print()
        env.execute("pv job")
      }
    }
    //自定义聚合函数
    class PvCountAgg() extends AggregateFunction[(String,Long),Long,Long]{
      override def createAccumulator(): Long = 0L
    
      override def add(value: (String, Long), accumulator: Long): Long = accumulator + 1
    
      override def getResult(accumulator: Long): Long = accumulator
    
      override def merge(a: Long, b: Long): Long = a + b
    }
    //自定义窗口函数,把窗口信息包装到样例类类型输出
    class PvCountResult() extends WindowFunction[Long,PageViewCount,String,TimeWindow]{
      override def apply(key: String, window: TimeWindow, input: Iterable[Long], out: Collector[PageViewCount]): Unit = {
        out.collect(PageViewCount(window.getEnd,input.head))
      }
    }
    
    

    在这里插入图片描述
    对于这样有数据倾斜问题!
    我们需要自定义map

    
    import org.apache.flink.api.common.functions.{AggregateFunction, MapFunction, RichMapFunction}
    import org.apache.flink.api.common.state.{ValueState, ValueStateDescriptor}
    import org.apache.flink.streaming.api.TimeCharacteristic
    import org.apache.flink.streaming.api.functions.KeyedProcessFunction
    import org.apache.flink.streaming.api.scala._
    import org.apache.flink.streaming.api.scala.function.WindowFunction
    import org.apache.flink.streaming.api.windowing.time.Time
    import org.apache.flink.streaming.api.windowing.windows.TimeWindow
    import org.apache.flink.util.Collector
    
    import scala.util.Random
    
    //定义输入输出样例类
    case class UserBehavior(userId:Long,itemId:Long,categoryId:Int,behavior:String,timestamp:Long)
    case class PageViewCount(windowEnd:Long,count:Long)
    
    object PageView {
      def main(args: Array[String]): Unit = {
        val env = StreamExecutionEnvironment.getExecutionEnvironment
        env.setParallelism(1)
        env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
    
        //从文件中读取文件
        val inputStream = env.readTextFile("D:\\idea\\UserBehaviorAnalysis\\NetworkFlowAnalysis\\src\\main\\resources\\UserBehavior.csv")
        val dataStream = inputStream
          .map(data => {
            val dataArray = data.split(",")
            UserBehavior(dataArray(0).toLong, dataArray(1).toLong, dataArray(2).toInt, dataArray(3), dataArray(4).toLong)
          })
          .assignAscendingTimestamps(_.timestamp * 1000L)
    
        //分配key,包装成二元组开窗聚合
        val pvStream = dataStream
          .filter(_.behavior == "pv")
         // .map(data => ("pv", 1L))
          .map(new MyMapper())
          .keyBy(_._1)
          .timeWindow(Time.hours(1))
          .aggregate(new PvCountAgg(), new PvCountResult())
    
        //把各个分区的结果汇总起来
        val pvTotalStream = pvStream
            .keyBy(_.windowEnd)
            .process(new TotalPvCountResult())
    
        pvStream.print()
        env.execute("pv job")
      }
    }
    
    /*
    class MyMapper() extends MapFunction[UserBehavior,(String,Long)]{
      override def map(value: UserBehavior): (String, Long) = (Random.nextInt(4).toString,1L)
    }
    */
    //自定义MapFunction,随机生成Key,(输入,输出)
    class MyMapper() extends RichMapFunction[UserBehavior,(String,Long)]{
      lazy val index:Long = getRuntimeContext.getIndexOfThisSubtask
      override def map(value: UserBehavior): (String, Long) = (index.toString,1L)
    }
    
    //自定义聚合函数
    class PvCountAgg() extends AggregateFunction[(String,Long),Long,Long]{
      override def createAccumulator(): Long = 0L
    
      override def add(value: (String, Long), accumulator: Long): Long = accumulator + 1
    
      override def getResult(accumulator: Long): Long = accumulator
    
      override def merge(a: Long, b: Long): Long = a + b
    }
    //自定义窗口函数,把窗口信息包装到样例类类型输出
    class PvCountResult() extends WindowFunction[Long,PageViewCount,String,TimeWindow]{
      override def apply(key: String, window: TimeWindow, input: Iterable[Long], out: Collector[PageViewCount]): Unit = {
        out.collect(PageViewCount(window.getEnd,input.head))
      }
    }
    
    //自定义ProcessFunction,将聚合结果按窗口合并,第一参数就是_.windowEnd
    class TotalPvCountResult() extends KeyedProcessFunction[Long,PageViewCount,PageViewCount]{
      //定义一个状态,用来保存当前所有结果之和
      lazy val totalCountState:ValueState[Long] = getRuntimeContext.getState(new ValueStateDescriptor[Long]
      ("total-count",classOf[Long]))
    
      override def processElement(value: PageViewCount, ctx: KeyedProcessFunction[Long, PageViewCount, PageViewCount]
        #Context, out: Collector[PageViewCount]): Unit = {
        //获取当前的值
        val currentTotalCount = totalCountState.value()
        //加上新的count值,更新状态
        totalCountState.update(currentTotalCount + value.count)
        //注册定时器,windowEnd+1后触发
        ctx.timerService().registerEventTimeTimer(value.windowEnd + 1)
      }
    
      override def onTimer(timestamp: Long, ctx: KeyedProcessFunction[Long, PageViewCount, PageViewCount]
        #OnTimerContext, out: Collector[PageViewCount]): Unit = {
        out.collect(PageViewCount(ctx.getCurrentKey,totalCountState.value()))
        totalCountState.clear()
      }
    }
    
    展开全文
  • hadoop实例-网站用户行为分析

    千次阅读 2019-04-19 00:38:00
    网站用户购物行为数据集2030万条,包括raw_user.csv(2000万条)和small_user.csv(30万条,适合新手) 字段说明: user_id 用户编号,item_id 商品编号,behavior_type 用户操作类型:1(浏览)、2(收藏)、3(加入购物车...

    一、数据集

    网站用户购物行为数据集2030万条,包括raw_user.csv(2000万条)和small_user.csv(30万条,适合新手)

    字段说明:

    user_id 用户编号,item_id 商品编号,behavior_type 用户操作类型:1(浏览)、2(收藏)、3(加入购物车)、4(购买)

    user_geohash 用户地理位置哈希值,在预处理中将其转化为province省份、item_category商品分类,time 用户操作时间

    二、实验任务

    • 安装Linux操作系统
    • 安装关系型数据库MySQL
    • 安装大数据处理框架Hadoop
    • 安装列族数据库HBase
    • 安装数据仓库Hive
    • 安装Sqoop
    • 安装R
    • 安装Eclipse
    • 对文本文件形式的原始数据集进行预处理
    • 把文本文件的数据集导入到数据仓库Hive中
    • 对数据仓库Hive中的数据进行查询分析
    • 使用Sqoop将数据从Hive导入MySQL
    • 使用Sqoop将数据从MySQL导入HBase
    • 使用HBase Java API把数据从本地导入到HBase中
    • 使用R对MySQL中的数据进行可视化分析

    三、实验步骤

     (一)对csv进行预处理

       1.去除csv文件的表头

    cd ~/下载
    sed -i '1d' raw_user.csv # 删除第一行
    sed -i '1d' small_user.csv
    head -5 raw_user.csv # 查看前5行内容
    head -g small-user.csv

       2.将user_geohash转化为province,并将文件格式转化为txt

        具体转化细节不说明,本文注重整个分析过程,详细内容参考林子雨老师的博客。

       转化成功后,在该目录通过pre_deal.sh脚本加载small_user.csv生成user_table.txt文件,使用tree查看该目录结构:

       

    Hive是基于Hadoop的数据仓库,在将user_table中的数据导入的数据仓库之前,需要先把user_table.txt文件上传到HDFS中。然后再Hive中创建外部表,完成数据的导入。

    启动HDFS:由于笔者在安装hadoop时已完成了环境变量的配置,现在在任意目录执行下面的语句开启hadoop:

    将user_table.txt文件上传到HDFS中

    在HDFS中查看该文件的前10行:

    (二)将HDFS中的文件导入到Hive数据仓库中

      1.启动mysql数据库

      mysql用于保存Hive的元数据(在安装Hive时需要配置),因此需先开启mysql服务

     2.启动hive,启动成功后如下图所示

    3.创建数据库,并建立外部表,将HDFS中/bigdatacase/dataset目录下的文件作为该外部表的内容

    hive> create database dblab;
    hive> use dblab;
    hive> CREATE EXTERNAL TABLE dblab.bigdata_user(id INT,
    uid STRING,item_id STRING,behavior_type INT,item_category STRING,
    visit_date DATE,province STRING) COMMENT 'Welcome to xmu dblab!'
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION
    '/bigdatacase/dataset';

     

    4.使用Hive命令进行查询

     (三)用Hive对数据进行简单的分析

    用Hive对数据仓库里的数据进行查询时,需要先开启mysql服务,用于存储Hive的元数据。

    1.查看表的创建过程

    show create table bigdata_user; # 查看该表是如何被创建的

    2.查看表的属性及属性的数据类型

    desc bigdata_user;

    3.对表进行数据分析

     (1)查看前10个网站用户的访问日期和所在身份

    select visit_date,province from bigdata_user limit 10;

     (2)查看bigdata_user表中有多少行数据:30万条

    select count(*) from bigdata_user;

     

    (3)查看bigdata_user表里用户访问网站的时间段,由图可知是2014-11-18到2014-12-18。

    select min(visit_date),max(visit_date) from bigtdata_user;

    (4)查看2014-12-10前多少人买了东西:2027个人

    select count(*)  from bigdata_user where bahavior = 4 and  visit_date<'2014-12-10'

    (5)查看一共有多少用户,去重查询。由图可知,虽然一共有30万条访问记录,但实际上只有270个用户。

     

    select count(distinct uid) from bigdata_user;

     

    (6) 为防止客户刷单,查看有多少不同的数据,由图可知,有284077条数据

    select count(*) 
    from (select uid,item_id,behavior_type,item_category,visit_date,province
    from bigdata_user
    group by uid,item_id,behavior_type,item_category,visit_date,province
    having count(*)=1
    )a; # a是别名

    分析就到这里,等刷爆MySQL8.0再来更新!

    转载于:https://www.cnblogs.com/2sheep2simple/p/10729415.html

    展开全文
  • 用户行为分析思想

    2019-12-12 11:43:07
    用户行为分析思想运用到网站易用性建设中,通常体现为:用户特征分析、用户浏览行为分析、顾客转化行为分析、用户行为数据搜集与分析等主题。 1、用户特征分析 网站定位确定好之后,需要分析网站的潜在客户特征,如...

    原创不易,麻烦点个关注,点个赞,谢谢各位。

    用户行为分析思想

    网站易用性研究的本质问题是潜在客户的网上行为,即在用户行为分析基础上,使得网站建设各项要素达到方便用户浏览及使用的效果。用户行为分析思想运用到网站易用性建设中,通常体现为:用户特征分析、用户浏览行为分析、顾客转化行为分析、用户行为数据搜集与分析等主题。

    1、用户特征分析
    网站定位确定好之后,需要分析网站的潜在客户特征,如主要用户群属于高端还是低端?初级网民还是网络熟手?女性还是男性为主?年龄段及其喜好?等等。用户特征分析是网站易用性建设的基础,为网站的界面设计风格、文案风格、内容和功能策划等提供了依据。

    2、用户浏览行为分析
    用户浏览行为分析研究用户从进入网站、获取信息到退出网站的全部行为。其结论通常实用于大部分网站,主要包括用户进入网站的入口页面分析(通过首页进入网还是/通过内页进入网站)、视线浏览路径(视线关注的版面)、广告浏览习惯(什么样的广告吸引用户浏览)、退出行为(从什么样的页面退出、退出的原因)。通过对用户浏览行为进行分析,对网站在网页布局、顾客转化方面可获得改进的依据和指导。

    3、顾客转化行为分析
    顾客转化根据不同的网站有不同的界定标准,如在线购买、咨询联系、注册会员、下载、点击广告,甚至浏览网页本身,均可能成为顾客转化行为。顾客转化是一个综合性的认知过程所导致,也有用户的主观因素起作用,不过此处所指的转化行为分析,着力于顾客执行“转化”任务前在网站的活动分析,如访问路径等。

    4、用户行为数据搜集与分析
    一切分析与数据为依据。网站访问统计分析系统为用户行为的数据搜集分析提供了基本的技术支持。流量统计工具虽然是一种事后分析工具,但对于改进网站用户体验有直接的指导效果,常见的用户行为指标如回访率、退出页面、所在地区、停留时间、来访路径、使用的搜索引擎及关键词、访问时段、使用的浏览器、操作系统……均为网站的效果改进提供一手数据支持。

    展开全文
  • 目标问题分析: 1)网站用户行为分析,挖掘各种行为特征(针对用户整体,分群),如访问量,访问页面类别,点击次数,停留时间等 2)根据用户访问需求特征(习惯),更加高效,人性化的服务推荐(推荐高相关度的,...

    一、背景以及问题

    主要研究对象是“XXXX官网”的网站访问情况,本网站是公司用于展示信息以及招商加盟的网址。

    目标问题分析:

    1)网站用户行为分析,挖掘各种行为特征(针对用户整体,分群),如访问量,访问页面类别,点击次数,停留时间等

    2)根据用户访问需求特征(习惯),更加高效,人性化的服务推荐(推荐高相关度的,热门的,未浏览过的等)

    二、数据探索性分析

    1、相关库的导入

    import pandas as pd #数据处理包
    from pandas.io.json import json_normalize
    import numpy as np  #科学计算包
    from collections import Counter
    import pymysql
    import warnings
    warnings.filterwarnings("ignore")  #忽略警告信息
    %matplotlib inline
    import matplotlib.pyplot as plt  #可视化包
    import seaborn  
    import re # 正则表达式库
    import collections # 词频统计库
    import jieba # 结巴分词
    import wordcloud # 词云展示库
    from PIL import Image # 图像处理库
    import pyecharts  #地理绘图库
    from pyecharts.charts import Geo,Map
    import json
    import pyecharts as pe

    2、数据导入

    其中第一列数据无字段名,我把他重命名为“序号”

    f=open('实时访客.csv',encoding='gbk')
    data=pd.read_csv(f)
    data=data.rename(columns={"Unnamed: 0":"序号"})
    data.shape

    a44f3631528b7a5652e875ad08c7c392.png

    这段数据的时间周期是2天,有1344条访问记录,共统计了28个字段

    3、字段含义

    data.columns

    d56e2cdd63e70722d407847c9e2e445d.png

    访问时间:格式是‘年月日时分’,表明访问的时间

    地域:访问者所在的区域

    来源:三类,‘网址’,‘渠道’,‘直接访问’,表明用户进入主页的来源是从特定的网址还是通过渠道推广或者是直接输入主页网址进入的

    关键词:匹配到的关键字,一般属于推广来的线索才有关键词记录

    搜索词:访客实际搜索的词

    推广:是和否,判断是否是通过渠道推广来的

    入口页面:需要分类判断

    访问IP:唯一标识

    访客标识码:

    访问时长:在页面停留的时间

    访问页数:进入的页面

    最后停留在:最后访问的页面

    上一次访问时间、访问类型:判断是否为新访客,若不是,显示上次访问的时间,可计算其访问的周期

    访问频次:计算其一共访问的次数,和访问时间对应,可计算其访问的周期

    操作系统、网络服务商、浏览器、语言环境、屏幕分辨率、屏幕颜色、Flash版本、是否支持Cookie、是否支持JAVA:都是访客的访问环境和机型配置等

    打开时间:‘时分秒’,具体的打开时间

    停留时长、页面地址:在具体哪个页面停留多长时间

    3、数据预处理

    data.fillna(0)

    把其中的缺失值用0来填充

    4、访问时间

    data1=data[['序号','访问时间']].dropna()  #只保留用户首次行为记录的时间
    #将脱敏的时间格式化
    data1['访问时间']=pd.to_datetime(data1['访问时间'],format="%Y-%m-%d %H:%M")  
    data1['访问时间'] = data1['访问时间'].astype('str')  
    data1['hour']=data1['访问时间'].str[11:13]  #取小时
    data1['hour']=data1['hour'].astype(int)
    df1=data1['hour'].value_counts()
    df1

    3acef9e0f455047718436ddcc4bf0395.png

    做一个简单的可视化

    df1.plot.barh()  

    0ca05724f9daf264f9c4771b78f019f1.png

    发现上午十点和十一点的访问人数最多,但是看起来感觉比较乱,时间可以重新整理,按照时间顺序作图,考虑分箱

    df2=data1['hour'].value_counts().sort_index(ascending=True)#按照时间小时进行排序计数
    df2.plot()
    x= range(1, 24)   #x 轴数据
    plt.xticks(x,x[::1],color='blue') #x刻度按照一个单位来显示

    231bf9098fe705b10ac74f9372d64390.png

    由此可以发现网站被访问次数的规律,上午七点开始陆续有访客开始访问,十点至十一点到达高峰,接着下午一点和三点又有一个小高潮。

    将时间分桶,探索不同时间段的网站访问情况可视化

    bin=[-1,3,6,9,12,15,18,21,24]
    data1['hour_bin']=pd.cut(data1.hour,bins=bin)
    df2=data1['hour_bin'].value_counts()
    df2

    d464b7444e5ca403a48aa340647b1f3d.png

    可以找到访问人数最多的时间段,可视化后便于观察

    df2.plot.bar()
    plt.title("不同时间用户点击情况",color='red')
    plt.xticks(color='blue',rotation=45) #设置颜色蓝色,倾斜45度
    plt.yticks(color='red')

    5、地域分布

    #删除某列包含特殊字符的行
    data['地域'] =data['地域'][~data['地域'].isin(['其他'])]  
    #data['地域']=data['地域'][ ~ data['地域'].str.contains('其他')]

    对不同地区统计

    p0=data['地域'].value_counts()
    #或者  p0=data.groupby(data['地域']).size()
    p0

    45dc1d630d0f7aba7ecd0da6b46a5c00.png

    能发现在本地推广的效果会好一些,外地的访客也有,并且遍布全国各地,考虑制成地图来查看

    # 把数据处理成地图需要的格式
    [z for z in p0.items()]
    from pyecharts.faker import Faker
    from pyecharts import options as opts
    from pyecharts.charts import Geo
    from pyecharts.globals import ChartType, SymbolType
    # 画出全国分布图
    g0 = Geo()
    g0.add_schema(maptype="china")
    g0.add("全国分布", [z for z in p0.items()])
    #或者: g0.add("geo", [('丽江', 1),('北京', 1)])这样的格式导入数据
    g0.set_series_opts(label_opts=opts.LabelOpts(is_show=False))#去掉标识
    
    g0.set_global_opts(
                visualmap_opts=opts.VisualMapOpts(is_piecewise=True,max_=500), #显示左下角的颜色控制,设置是否自定义分段,设置最大值
                title_opts=opts.TitleOpts(title="地域分布"),
            )
    g0.render_notebook()

    31f4fd3e7596571131468ce253f0bc14.png

    6、来源渠道分析

    通过对来源渠道处理分析判断效果,来源分为直访用户,推广用户和外链用户,但是外链用户的链接分很多,可以将来源进行分类后再进行统计

    data['用户分类']=data['来源']  #复制一列用户分类列用于分类统计
    #data['用户分类'].dropna()
    data['来源']=data['来源'].replace(np.nan,'0')  #之前运行一直有报错cannot index with vector containing NA / NaN values,经过百度帮助查找到原因,来源作为索引列不能为na,
    data['用户分类'][data['来源'].str.contains('(http)|(https)')]= '外链用户'  #将含有http关键字的链接网址归为外链用户
    data['用户分类'][data['来源'].str.contains('(直接访问)')] = '直访用户'  #将直接访问的用户定义为直访用户
    data['用户分类'][data['来源'].str.contains('(站内来源)')] = '站内用户'
    data['用户分类'][data['来源'].str.contains('(百度)|(百度付费推广)|(百度自然搜索)|(Google)|(搜狗)|(Yahoo)|(360搜索)|(搜狗搜索)|(神马搜索)')] = '搜索引擎用户'
    data['用户分类']

    25a5b8eda766422e8592bc589b54a00b.png

    统计

    one_counts=data['用户分类'].value_counts()
    one_counts
    或者使用交叉表的方式
    one_counts1 = pd.crosstab(['访问次数'], data['用户分类'])  #使用交叉表
    one_counts1

    d652c50a997c6136126195172f5d2610.png

    7373353b74f0a0fb63191e6325144680.png

    可视化

    one_counts.plot.bar()
    plt.title("用户分类",color='red')
    plt.xticks(color='blue',rotation=45) #设置颜色蓝色,倾斜45度
    plt.yticks(color='red')

    29b7717e523a92dac629682564c8d0d3.png

    6、关键词排行

    data['搜索词'].replace('--','NaN').dropna()

    分词后统计

    '''下面的去除特殊字符步骤有报错,expected string or bytes-like object,因此需要将数据格式转变,使用str()转化其数据类型'''
    string_data=(str(data['搜索词']))
    """文本预处理"""
    pattern = re.compile(u't|n|.|-|:|;|)|(|?|"|--|,|0|1|2|3|4|5|6|7|8|9') # 定义正则表达式匹配模式
    string_data = re.sub(pattern, '', string_data) # 将符合模式的字符去除
    
    '''文本分词'''
    seg_list_exact = jieba.cut(string_data, cut_all = False) # 精确模式分词
    object_list = []
    remove_words = [u'的', u',',u'和', u'是', u'随着', u'对于', u'对',u'等',u'能',u'都',u'。',u' ',u'、',u'中',u'在',u'了',
                    u'通常',u'如果',u'我们',u'需要'] # 自定义去除词库
    
    for word in seg_list_exact: # 循环读出每个分词
        if word not in remove_words: # 如果不在去除词库中
            object_list.append(word) # 分词追加到列表
            
    '''词频统计'''
    word_counts = collections.Counter(object_list) # 对分词做词频统计
    word_counts_top10 = word_counts.most_common(10) # 获取前10最高频的词
    print (word_counts_top10) # 输出检查

    词云展示

    # 词频展示
    #mask = np.array(Image.open('11.png')) # 定义词频背景
    wc = wordcloud.WordCloud(
        font_path='C:/Windows/Fonts/simhei.ttf', # 设置字体格式
        #mask=mask, # 设置背景图
        max_words=200, # 最多显示词数
        max_font_size=100,# 字体最大值
        width=1000,height=700,background_color='white' #设置宽,高,背景颜色
    )

    画词云

    wc.generate_from_frequencies(word_counts) # 从字典生成词云
    #image_colors = wordcloud.ImageColorGenerator(mask) # 从背景图建立颜色方案
    #wc.recolor(color_func=image_colors) # 将词云颜色设置为背景图方案
    plt.imshow(wc) # 显示词云
    plt.axis('off') # 关闭坐标轴
    plt.show() # 显示图像
    # 将词云图片导出到当前文件夹
    wc.to_file('yr.png')

    7、入口页面

    1),对入口页面进行分类统计 ;2),对具体课程体系进行分类统计

    data['入口页面'].value_counts()
    """对具体课程体系进行分类统计"""
    data['课程体系']=data['入口页面']  #复制一列用户分类列用于课程体系页面统计
    data['入口页面']=data['入口页面'].replace(np.nan,'0') 
    data['课程体系'][data['入口页面'].str.contains('art')]='美术系界面'
    data['课程体系'][data['入口页面'].str.contains('calligraphy')]='书法系界面'
    data['课程体系'][data['入口页面'].str.contains('dance')]='舞蹈系界面'
    data['课程体系'][data['入口页面'].str.contains('music')]='音乐系界面'
    data['课程体系'][data['入口页面'].str.contains('science')]='科艺系界面'
    data['课程体系'][data['入口页面'].str.contains('performance')]='表演系界面'
    #把不是属于课程体系的网站统一归为“其他”类
    data['课程体系'][~ data['入口页面'].str.contains('curriculum|art|calligraphy|dance|music|science|performance')]='其他'
    data['课程体系'].value_counts()

    可视化

    data['课程体系'].value_counts().plot.bar()
    plt.title("课程体系点击情况",color='red')
    plt.xticks(color='blue',rotation=45) #设置颜色蓝色,倾斜45度
    plt.yticks(color='red')

    8、访问时长

    data['访问时长']=data['访问时长'].str.replace('s',' ') #去除时长的后缀 S
    data['访问时长']=data['访问时长'].str.replace("未知","0")#时长未知的用 0 替换
    data = data.dropna(subset=['访问时长'])  #删除NaN行
    data['访问时长']=data['访问时长'].astype(int)
    data['访问时长']

    透视表

    """对访问时长和访问页面做数据透视"""
    data.fillna(0)
    data.pivot_table(index=['界面分类','课程体系'],values=['访问时长'],aggfunc=[np.sum])

    三、相关结论和建议:

    展开全文
  • 一、项目需求 根据给出数据样例统计以下指标 1.统计各商品的浏览数量(PV) 2.统计各商品的访客数(UV) ...第1列 时间:用户访问网站的时间,即当前日志的时间 第2列 IP地址:IP地址,即用户端的IP地址 第3列 访问
  • 关于信息的收集,可参考文章,自行了解一下:网站分析数据(即用户行为数据)的三种收集方式详解 如果有时间,再整理相应的实操教程出来。 目前我们有三份数据 数据一、网站用户点击日志(存储在HDFS),格式如下...
  • 分析用户的网页浏览行为与习惯

    千次阅读 2013-11-12 14:22:29
    事实上,互联网用户浏览网页的习惯和顾客浏览商店中物品的习惯没有多大差别。用户打开一个新的页面,扫视一些文字,并点击第一个引起他兴趣的链接。在这过程中,页面上有大量的区域用户甚至根本没有看过。大部分用户...
  • 用户行为路径分析

    2020-08-21 15:02:14
    主要根据每位用户在APP或网站中的点击行为日志,分析用户在APP或网站中各个末库的流转规律与特点,挖掘用户的访问或点击模式,进而实现一些特定的业务用途,如APP核心模块的到达率提升、特定用户群体的主流路径提取...
  • 用户行为分析

    千次阅读 2016-07-25 16:24:04
    用户行为轨迹 认知------->网站访问-------->IP、PV、人均页面访问量、访问来源 熟悉------->网站浏览网站搜索--------->平均停留时长、跳出率、页面偏好、搜索访问次数占比 试用------->用户注册-...
  • 本项目案例根据某法律咨询服务网站用户浏览记录,把用户划分为训练集的用户和测试集的用户,再根据找出相应用户的浏览记录划分为训练集数据和测试集数据。训练集用于后续构建用户物品矩阵,再根据用户物品矩阵构建...
  • 来源:https://blog.naaln.com/2017/06/eight-ways-heat-maps/网页热图在分析用户行为方面是一种很直观的工具,如果你知道该如何分析的话,能可视化用户行为的热图将是你军火库中必不可少的秘密武器。为了让你更好地...
  • 用户行为日志分析

    千次阅读 2018-05-21 16:23:02
    用户行为日志概述概念定义:用户每次访问网站时,所有的行为数据:访问,浏览,搜索,点击。。。用户行为轨迹,流量日志。。。比如:点课程,有记录,点html css,时间,IP,pc端?对大数据感兴趣为什么1.可以通过...
  • 如何做用户行为路径分析

    万次阅读 2017-12-13 18:13:22
    它主要根据每位用户在App或网站中的点击行为日志,分析用户在App或网站中各个模块的流转规律与特点,挖掘用户的访问或点击模式,进而实现一些特定的业务用途,如App核心模块的到达率提升、特定用户群体的主流路径...
  • 行为分析常用名词 维度 维度描述的是一个事物身上所具备的特征或属性 指标 指标,即具体的数值。比如访客、页面浏览量、停留时长都属于常见的指标 展示和点击 展示,指页面上元素的曝光次数。点击,指页面元素...
  • "问号网址类型统计2.1.4 统计199类型中的具体类型占比2.1.5 统计瞎逛用户中各个类型占比2.2 点击次数分析2.2.1 统计点击次数2.2.2 点击次数与用户数量关系2.2.3 统计1~7次数及7次以上的点击数2.2.4 浏览一次...
  • 目录一、需求分析二、程序编写 ...同一用户完成浏览并关闭该网站时,访客的访问次数算一次 IP:独立IP数 同一IP不管访问了几个页面,独立IP数均为1 2.各个省份PV的统计: 我们的需求分析是统计网站日志文件
  • 基于用户行为的数据分析与挖掘 在进行互联网用户浏览行为的定量研究中,我们采用数据挖掘的方式对网站日志进行分析,用可视化技术展现日志的有效信息
  • 大规模校园网日志的用户行为分析—(理论分析) 思路想法:校园网中存在大量的上网日志,用户的上网日志信息是非常有用的在它里面记录了用户访问网站的行为轨迹、 用户终端信息、位置信息、浏览网页时长等重要信息,...
  • 它主要根据每位用户在App或网站中的点击行为日志,分析用户在App或网站中各个模块的流转规律与特点,挖掘用户的访问或点击模式,进而实现一些特定的业务用途,如App核心模块的到达率提升、特定用户群体的主流路径...
  • 数据仓库设计 网站/APP 流量分析、用户访问分析 网站/APP 流量分析、点击流分析、用户...这个概念更注重用户浏览网站的整个流程。 用户对网站的每次访问包含了一系列的点击动作行为,这些点击行为数据就构成了...
  • 用户行为分析过程 说明 本次数据分析基于阿里云天池数据集(用户行为数据集),使用转化漏斗,对常见电商分析指标,包括转化率,PV,UV,复购率等进行分析,分析过程中使用Python进行数据的清洗,清洗后的数据导入...
  • 它主要根据每位用户在App或网站中的点击行为日志,分析用户在App或网站中各个模块的流转规律与特点,挖掘用户的访问或点击模式,进而实现一些特定的业务用途,如App核心模块的到达率提升、特定用户群体的主流路径...
  • 用户每次访问网站时所有的行为数据(访问、浏览、搜索、点击…) 用户行为轨迹、流量日志 日志数据内容: 访问的系统属性: 操作系统、浏览器等等 访问特征:点击的url、从哪个url跳转过来的(referer)、页面上的...
  • 我想很多网站都在隐式挖掘网站用户行为,从这些数据我们可以发现用户的行为其实和我们的想象很不一样。千鸟说“用户的日常交互行为会产生四类关键数据:鼠标移动轨迹、链接点击分布、页面浏览流、页面停留时间”。那...
  • 了解用户如何导航,交互和浏览您的网站可以提供有关您的用户的新见解。 同情用户并查看功能失败或成功的地方可以帮助改善产品,增加收入并提高用户保留率。 与Microsoft托管的行为分析解决方案相同的代码是: 。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 502
精华内容 200
关键字:

网站用户浏览行为分析