利用R绘图分析消费者行为实例

大数据学习路线图

R语言是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。这里使用R的ggplot2绘图工具和recharts的绘图工具来进行可视化分析消费者行为的实例。

环境

操作系统:Ubuntu或Mac(OSX)或Windows
操作环境:R
关于R语言环境的安装,请点击厦门大学开源软件镜像服务根据操作系统选择安装。
以下操作命令,全部都是基于Ubuntu系统。

数据源

提供的数据源有两个文件,分别是small_user_table.csv和user_table.csv。将近1G的user_table.csv文件导入到内存中作数据集,可能需要花费很长的时间。所以这里选用只有13M左右的small_user_table.csv作为测试数据集。
这里使用small_user_table.csv文件作为数据源。该文件请保存到当前系统用户目录~,以便操作跟下面的命令一致。
获取small_user_table.csv的前十行,命令如下:

cd ~
head -10 ./small_user_table.csv

small_user_table.csv前十行数据
如上图所示,small_user_table.csv每行数据分别以\t 制表符间隔。
第一行数据user_id表示用户id,item_id表示商品id,behavior_type表示对商品的行为(包括浏览、收藏、加购物车、购买,对应取值分别是1、2、3、4),item_category表示商品分类,year表示年,month表示月份,day表示日期,province表示消费者所在省份。
第一行数据可以用来当做数据集的变量名称,每一列数据可以作为第一行变量变量的一系列值。

可视化分析

安装依赖库

运行R Console,执行如下命令

install.packages('ggplot2')
install.packages('devtools')
devtools::install_github('taiyun/recharts')

分析

以下分析使用的函数方法,都可以使用如下命令查询函数的相关文档。例如:查询sort()函数如何使用

?sort
  1. 导入csv文件
    # header=True保留csv文件第一行变量名称,sep='\t'表示数据以制表符间隔
    user_table = read.csv('~/user_table.csv',header = TRUE,sep = '\t')
    
  2. 分析消费者对商品的行为
    summary(user_table$behavior_type)
    

    summary()函数可以得到样本数据的最小值、最大值、四分位数以及均值。
    得到结果:

    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
    1.000   1.000   1.000   1.105   1.000   4.000
    

    消费者行为最小值Min为1,最大值Max为4,平均值Mean为1.106.

    summary(user_table$behavior_type==4)
    

    得到结果:

    Mode   FALSE    TRUE    NA's
    logical  296789    3210      0
    

    可以看出整个数据集中,购买行为的消费者仅仅只有3210,远远小于非购买行为的消费者。
    接下来用柱状图表示:

    library(ggplot2)
    ggplot(user_table,aes(behavior_type))+geom_histogram()
    

    在使用ggplot2库的时候,需要使用library导入库。ggplot()绘制时,创建绘图对象,即第一个图层,包含两个参数(数据与变量名称映射).变量名称需要被包含aes函数里面。ggplot2的图层与图层之间用“+”进行连接。ggplot2包中的geom_histogram()可以很方便的实现直方图的绘制。
    分析结果如下图:
    分析用户对商品的行为
    从上图可以得到:大部分消费者行为仅仅只是浏览。只有很少部分的消费者会购买商品。

  3. 分析哪一类商品被购买总量前十的商品和被购买总量

    temp <- subset(user_table,behavior_type==4) # 获取子数据集
    count <- sort(table(temp$item_category),decreasing = T) #排序
    print(count[1:10]) #打印第1到10的排序结果
    

    subset()函数,从某一个数据框中选择出符合某条件的数据或是相关的列.table()对应的就是统计学中的列联表,是一种记录频数的方法.sort()进行排序,返回排序后的数值向量。
    得到结果:

    6344  1863  5232 12189  7957  4370 13230 11537  1838  5894
    79    46    45    42    40    34    33    32    31    30
    

    结果第一行表示商品分类,该类下被消费的数次。
    接下来用散点图表示:

    result <- as.data.frame(count[1:10]) #将count矩阵结果转换成数据框
    ggplot(result,aes(Var1,Freq,col=factor(Var1)))+geom_point()
    

    通过 as.data.frame() 把矩阵等转换成为数据框.
    分析结果如下图:
    分析被购买的总量前10的商品

  4. 分析每年的哪个月份购买商品的量最多
    接下来用柱状图分别表示消费者购买量

    library(ggplot2)
    ggplot(user_table,aes(behavior_type,col=factor(month)))+geom_histogram()+facet_grid(.~month)
    

    aes()函数中的col属性可以用来设置颜色。factor()函数则是把数值变量转换成分类变量,作用是以不同的颜色表示。如果不使用factor()函数,颜色将以同一种颜色渐变的颜色表现。 facet_grid(.~month)表示柱状图按照不同月份进行分区。
    由于small_user_table.csv只有11月份和12月份的数据,所以上图只有显示两个表格。
    分析结果如下图:
    哪个月份购买商品最多

  5. 分析国内哪个省份的消费者最有购买欲望

    rel <- as.data.frame(table(temp$province))
    provinces <- rel$Var1
    x = c()
    for(n in provinces){
    x[length(x)+1] = nrow(subset(temp,(province==n)))
    }
    mapData <- data.frame(province=rel$Var1,
    count=x, stringsAsFactors=F)
    eMap(mapData, namevar=~province, datavar = ~count)
    

    nrow()用来计算数据集的行数。
    分析结果如下图:
    国内省份的消费者购买欲望分析