大数据案例-步骤四:利用R进行数据可视化分析

大数据学习路线图

返回大数据案例首页
《大数据课程实验案例:网站用户行为分析—-步骤四:利用R进行数据可视化分析》
开发团队:厦门大学数据库实验室 联系人:林子雨老师 ziyulin@xmu.edu.cn
版权声明:版权归厦门大学数据库实验室所有,请勿用于商业用途;未经授权,其他网站请勿转载

本教程介绍大数据课程实验案例“网站用户行为分析”的第四个步骤,利用R进行数据可视化分析。在实践本步骤之前,请先完成该实验案例的第一个步骤——本地数据集上传到数据仓库Hive,第二个步骤——Hive数据分析,和第三个步骤:Hive、MySQL、HBase数据互导。这里假设你已经完成了前面的这三个步骤。
R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。在实际的案例中,更多的是跟其他数据分析工具结合起来,如:MySQL,Hive等。这里使用R的ggplot2绘图工具和recharts的绘图工具来进行可视化分析消费者行为的实例。

环境

本步骤需要涉及以下环境:
操作系统:Linux系统(比如Ubuntu16.04)
可视化:R(安装在Linux系统下)
数据库:MySQL(安装在Linux系统下)

R语言包的安装方式如下:
Ubuntu自带的APT包管理器中的R安装包总是落后于标准版,因此需要添加新的镜像源把APT包管理中的R安装包更新到最新版。
请登录Linux系统,打开一个终端,然后执行下面命令(并注意保持网络连通,可以访问互联网,因为安装过程要下载各种安装文件):
利用vim打开/etc/apt/sources.list文件

sudo vim /etc/apt/sources.list

在文件的最后一行添加厦门大学的镜像源:

deb http://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/linux/ubuntu/ trusty/

退出vim,更新软件源列表

sudo apt-get update

如果更新软件源出现由于没有公钥,无法验证下列签名的错误,请执行如下命令: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 51716619E084DAB9

安装R语言

sudo apt-get install r-base

会提示“您希望继续执行吗?[Y/n]”,可以直接键盘输入“Y”,就可以顺利安装结束。
安装结束后,可以执行下面命令启动R:

R

启动后,会显示如下信息,并进入“>”命令提示符状态:

R version 3.3.2 (2016-10-31) -- "Sincere Pumpkin Patch"
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R是自由软件,不带任何担保。
在某些条件下你可以将其自由散布。
用'license()'或'licence()'来看散布的详细条件。

R是个合作计划,有许多人为之做出了贡献.
用'contributors()'来看合作者的详细情况
用'citation()'会告诉你如何在出版物中正确地引用R或R程序包。

用'demo()'来看一些示范程序,用'help()'来阅读在线帮助文件,或
用'help.start()'通过HTML浏览器来看帮助文件。
用'q()'退出R.

> 

“>”就是R的命令提示符,你可以在后面输入R语言命令。
可以执行下面命令退出R:

>q()

可视化分析MySQL中的数据

安装依赖库

为了完成可视化功能,我们需要为R安装一些依赖库,包括:RMySQL、ggplot2、devtools和recharts。
RMySQL是一个提供了访问MySQL数据库的R语言接口程序的R语言依赖库。
ggplot2和recharts则是R语言中提供绘图可视化功能的依赖库。
请启动R进入R命令提示符状态,执行如下命令安装RMySQL:

> install.packages('RMySQL')

上面命令执行后, 屏幕会提示"Would you like to user a personal library instead?(y/n)"等问题,只要遇到提问,都在键盘输入y后回车即可。然后,屏幕会显示“---在此连线阶段时请选用CRAN的镜子---”,并会弹出一个白色背景的竖条形窗口,窗口标题是“HTTPS CRAN mirros”,标题下面列出了很多国家的镜像列表,我们可以选择位于China的镜像,比如,选择“China(Beijing)[https]”,然后点击“ok”按钮,就开始安装了。安装过程需要几分钟(当然,也和当前网络速度有关系)。
由于不同用户的Ubuntu开发环境不一样,安装有很大可能因为缺少组件导致失败,如果出现如下错误信息:

Configuration failed because libmysqlclient was not found. Try installing:
 * deb: libmariadb-client-lgpl-dev (Debian, Ubuntu 16.04)
        libmariadbclient-dev (Ubuntu 14.04)
 * rpm: mariadb-devel | mysql-devel (Fedora, CentOS, RHEL)
 * csw: mysql56_dev (Solaris)
 * brew: mariadb-connector-c (OSX)
.................
ERROR: configuration failed for package ‘RMySQL’
* removing ‘/home/hadoop/R/x86_64-pc-linux-gnu-library/3.3/RMySQL’

下载的程序包在
    ‘/tmp/RtmpvEArxz/downloaded_packages’里
Warning message:
In install.packages("RMySQL") : 安装程序包‘RMySQL’时退出狀態的值不是0

只要根据错误给出的错误信息,进行操作即可。q()退出R命令提示符状态,回到Shell状态,笔者的系统是Ubuntu 16.04,那么,根据上面的英文错误信息,就需要在Shell命令提示符状态下执行下面命令安装libmariadb-client-lgpl-dev:

sudo apt-get install libmariadb-client-lgpl-dev

然后,再次输入下面命令进入R命令提示符状态:

R

启动后,并进入“>”命令提示符状态。然后,执行如下命令安装绘图包ggplot2,如果还出现缺少组件的错误,请按照上面的解决方案解决!

> install.packages('ggplot2')

然后,屏幕会显示“---在此连线阶段时请选用CRAN的镜子---”,并会弹出一个白色背景的竖条形窗口,窗口标题是“HTTPS CRAN mirros”,标题下面列出了很多国家的镜像列表,我们可以选择位于China的镜像,比如,选择“China(Beijing)[https]”,然后点击“ok”按钮,就开始安装了。这个命令运行后,大概需要安装10分钟时间(当然,也和当前网络速度有关系)。
下面继续运行下面命令安装devtools:

> install.packages('devtools')

如果在上面安装devtools的过程中,又出现了错误,处理方法很简单,还是按照上面介绍的方法,根据屏幕上给出的英文错误信息,缺少什么软件,就用sudo apt-get install命令安装该软件就可以了。笔者在Ubuntu16.04上执行devtools安装时,出现了三次错误,笔者根据每次错误的英文提示信息,安装了三个软件libssl-dev、libssh2-1-dev、libcurl4-openssl-dev,安装命令如下:

sudo apt-get install libssl-dev
sudo apt-get install libssh2-1-dev
sudo apt-get install libcurl4-openssl-dev

读者在安装过程中,可能会出现不同的错误,按照同样的处理方法可以顺利解决。

下面在R命令提示符下再执行如下命令安装taiyun/recharts:

> devtools::install_github('taiyun/recharts')

分析

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

?sort

这时,就会进入冒号“:”提示符状态(也就是帮助文档状态),在冒号后面输入q即可退出帮助文档状态,返回到R提示符状态!

  1. 连接MySQL,并获取数据

请在Linux系统中新建另外一个终端,然后执行下面命令启动MySQL数据库:

service mysql start

屏幕上会弹出窗口提示你输入密码,本教程的MySQL数据库的用户名是root,密码是hadoop,所以,直接输入密码hadoop,这样就成功启动了MySQL数据库。
下面,让我们查看一下MySQL数据库中的数据,请执行下面命令进入MySQL命令提示符状态:

mysql -u root -p

会提示你输入密码,我们输入密码hadoop,就进入了“mysql>”提示符状态,下面就可以输入一些SQL语句查询数据:

mysql> use dblab;
mysql> select * from user_action limit 10;

这样,就可以查看到数据库dblab中的user_action表的前10行记录,如下:

+--------+-----------+-----------+---------------+---------------+------------+-----------+
| id     | uid       | item_id   | behavior_type | item_category | visit_date | province  |
+--------+-----------+-----------+---------------+---------------+------------+-----------+
| 225653 | 102865660 | 164310319 | 1             | 5027          | 2014-12-08 | 香港      |
| 225654 | 102865660 | 72511722  | 1             | 1121          | 2014-12-13 | 天津市    |
| 225655 | 102865660 | 334372932 | 1             | 5027          | 2014-11-30 | 江苏      |
| 225656 | 102865660 | 323237439 | 1             | 5027          | 2014-12-02 | 广东      |
| 225657 | 102865660 | 323237439 | 1             | 5027          | 2014-12-07 | 山西      |
| 225658 | 102865660 | 34102362  | 1             | 1863          | 2014-12-13 | 内蒙古    |
| 225659 | 102865660 | 373499226 | 1             | 12388         | 2014-11-26 | 湖北      |
| 225660 | 102865660 | 271583890 | 1             | 5027          | 2014-12-06 | 山西      |
| 225661 | 102865660 | 384764083 | 1             | 5399          | 2014-11-26 | 澳门      |
| 225662 | 102865660 | 139671483 | 1             | 5027          | 2014-12-03 | 广东      |
+--------+-----------+-----------+---------------+---------------+------------+-----------+
10 rows in set (0.00 sec)

然后切换到刚才已经打开的R命令提示符终端窗口:

library(RMySQL)
conn <- dbConnect(MySQL(),dbname='dblab',username='root',password='hadoop',host="127.0.0.1",port=3306)
user_action <- dbGetQuery(conn,'select * from user_action')
  1. 分析消费者对商品的行为
    summary(user_action$behavior_type)
    

    summary() 函数可以得到样本数据类型和长度,如果样本是数值型,我们还能得到样本数据的最小值、最大值、四分位数以及均值信息。
    得到结果:

    Length     Class      Mode
    300000 character character
    

    可以看出原来的MySQL数据中,消费者行为变量的类型是字符型。这样不好做比较,需要把消费者行为变量转换为数值型变量

    summary(as.numeric(user_action$behavior_type))
    

    得到结果:

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

    接下来用柱状图表示:

    library(ggplot2)
    ggplot(user_action,aes(as.numeric(behavior_type)))+geom_histogram()
    

    在使用ggplot2库的时候,需要使用library导入库。ggplot()绘制时,创建绘图对象,即第一个图层,包含两个参数(数据与变量名称映射).变量名称需要被包含aes函数里面。ggplot2的图层与图层之间用“+”进行连接。ggplot2包中的geom_histogram()可以很方便的实现直方图的绘制。

    分析结果如下图:
    分析用户对商品的行为
    从上图可以得到:大部分消费者行为仅仅只是浏览。只有很少部分的消费者会购买商品。

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

    temp <- subset(user_action,as.numeric(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的商品

  3. 分析每年的哪个月份购买商品的量最多
    从MySQL直接获取的数据中visit_date变量都是2014年份,并没有划分出具体的月份,那么可以在数据集增加一列月份数据。

    month <- substr(user_action$visit_date,6,7) # visit_date变量中截取月份
    user_action <- cbind(user_action,month) # user_action增加一列月份数据
    

    接下来用柱状图分别表示消费者购买量

    ggplot(user_action,aes(as.numeric(behavior_type),col=factor(month)))+geom_histogram()+facet_grid(.~month)
    

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

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

    library(recharts)
    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()用来计算数据集的行数。
    分析结果如下图:
    分析国内哪个省份的消费者最有购买欲望

    大数据案例网站用户购物行为分析所有实验步骤到此结束!

    返回大数据案例首页