嘉明的云计算与大数据学习之大数据综合实验案例

1.实验环境

(1)Linux:Ubuntu 16.04。
虚拟机镜像下载链接:https://pan.baidu.com/s/1i_B-2rAfPM53jf7Besi0tw
提取码:WZJM

(2)MySQL:5.7.16。
(3)Hadoop:2.7.1。
(4)HBase:1.1.5。
(5)Hive:1.2.1。
(6)Sqoop:1.4.6。
(7)R:4.1.2。
(8)Eclipse:3.8。

2.实验步骤概述

本案例共包含4个实验步骤。
(1)本地数据集上传到数据仓库Hive。
(2)Hive数据分析。
(3)Hive,MySQL、HBase数据互导。
(4)利用R进行数据可视化分析。

实验整体的流程如下:
将数据源抽取到HDFS存储;
通过Hive清洗、处理和计算原始数据;
HIve清洗处理后的结果,可以存入Hbase或者其它数据库中例如MySQL
在这里插入图片描述

2.1.本地数据集上传到数据仓库Hive

数据集的下载链接
链接:https://pan.baidu.com/s/1wsHq9BlbNb-291UWnDduJg
提取码:WZJM

登录Linux系统,并在Linux系统中打开浏览器火狐浏览器;然后在Linux系统的浏览器中下载user. zip到本地。,因为采用的是hadoop用户名登录了Linux系统,所以,下载后的文件会被浏览器默认保存到“/home/ hadoop/下载/”目录下面。
在这里插入图片描述

打开终端输入如下命令:

cd home/hadoop/下载
Ls

在这里插入图片描述
出现uer.zip后证明下载成功

下面需要把user. zip进行解压缩,首先建立一个用于运行的目录bigdatacase,执行以下命令:

cd /usr/local
ls
sudo mkdir bigdatacase#这里会提示你输入当前用户(本教程是hadoop用户名)的密码#下面给hadoop用户赋予针对bigdatacase目录的各种操作权限
sudo chown -R hadoop:hadoop ./bigdatacasecd bigdatacase#下面创建一个dataset目录,用于保存数据集
mkdir dataset#下面就可以解压缩user.zip文件cd ~  //表示进入hadoop用户的目录cd 下载
ls
unzip user.zip -d /usr/local/bigdatacase/datasetcd /usr/local/bigdatacase/dataset
ls

在这里插入图片描述

现在就可以看到在 dataset目录下有两个文件:raw_user,csv和 small_user.csv。执行下面命令取出前面5条记录看一下:

head -5 raw_user.csv

在这里插入图片描述

可以看出,每行记录都包含5个字段,数据集中的字段及其含义如下。
(1) user_id(用户id)。
(2) item_id(商品id)。
(3) behaviour_type(包括浏览﹑收藏,加购物车、购买,对应取值分别是1、2、3、4)。
(4) user_geohash(用户地理位置哈希值,有些记录中没有这个字段值,所以后面会用脚本做数据预处理时把这个字段全部删除)。
(5) item_category(商品分类)。
(6) time(该记录产生时间)。

2.2.Hive数据分析

2.2.1.数据集的预处理

2.2.1.1.删除第一行文件的记录
cd /usr/local/bigdatacase/dataset#下面删除raw_user中的第1行
sed -i '1d' raw_user#上面的1d表示删除第1行,同理,3d表示删除第3行,nd表示删除第n行#下面删除small_user中的第1行
sed -i '1d' small_user#下面再用head命令去查看文件的前5行记录,就看不到字段名称这一行了	
head -5 raw_user.csv
head -5 small_user.csv

在这里插入图片描述

2.2.1.2.对字段进行预处理

下面对数据集进行预处理,包括为每行记录增加一个id字段(让记录具有唯一性)、增加一个省份字段(用来后续进行可视化分析),并且丢弃user_geohash字段(后面分析不需要这个字段)。

下面要建一个脚本文件 pre_deal.sh,把这个脚本文件放在 dataset目录下﹐和数据集small_user.csv放在同一个目录下:

cd /usr/local/bigdatacase/dataset
vim pre_deal.sh

在这里插入图片描述

上面使用vim编辑器新建了一个pre_deal.sh脚本文件,在这个脚本文件下加入下面代码:

#!/bin/bash#下面设置输入文件,把用户执行pre_deal.sh命令时提供的第一个参数作为输入文件名称
infile=$1#下面设置输出文件,把用户执行pre_deal.sh命令时提供的第二个参数作为输出文件名称
outfile=$2#注意,最后的$infile> $outfile必须跟在}’这两个字符的后面
awk -F "," 'BEGIN{
srand();
        id=0;
        Province[0]="山东";Province[1]="山西";Province[2]="河南";Province[3]="河北";Province[4]="陕西";Province[5]="内蒙古";Province[6]="上海市";
        Province[7]="北京市";Province[8]="重庆市";Province[9]="天津市";Province[10]="福建";Province[11]="广东";Province[12]="广西";Province[13]="云南"; 
        Province[14]="浙江";Province[15]="贵州";Province[16]="新疆";Province[17]="西藏";Province[18]="江西";Province[19]="湖南";Province[20]="湖北";
        Province[21]="黑龙江";Province[22]="吉林";Province[23]="辽宁"; Province[24]="江苏";Province[25]="甘肃";Province[26]="青海";Province[27]="四川";
        Province[28]="安徽"; Province[29]="宁夏";Province[30]="海南";Province[31]="香港";Province[32]="澳门";Province[33]="台湾";
    }
    {
        id=id+1;
        value=int(rand()*34);       
        print id"\t"$1"\t"$2"\t"$3"\t"$5"\t"substr($6,1,10)"\t"Province[value]
    }' $infile> $outfile

在这里插入图片描述

执行pre_deal.sh脚本文件,对small_user.csv进行数据预处理,命令如下:

cd /usr/local/bigdatacase/dataset
bash ./pre_deal.sh small_user.csv user_table.txt

在这里插入图片描述

可以查看生成的user_table.txt,但是,不要直接打开。因为文件过大,直接打开会出错,可以使用head命令查看前10行数据:

head -10 user_table.txt

执行上面命令以后,可以得到如下结果:
在这里插入图片描述

2.2.2.导入数据库

下面把user_table.txt中的数据导入到数据仓库 Hive中。为了完成这个操作,首先需要把user_table.txt 上传到分布式文件系统HDFS中;然后在Hive中创建一个外部表,完成数据的导入。

2.2.2.1.启动HDFS

下面登录Linux系统,打开一个终端,执行下面命令启动Hadoop:

cd /usr/local/hadoop
./sbin/start-all.sh

在这里插入图片描述

查看当前运行的进程
jps
在这里插入图片描述

2.2.2.2.把user_table.txt上传到HDFS中

现在需要把Linux本地文件系统中的user_table.txt上传到分布式文件系统HDFS中,并存放在HDFS中的/bigdatacase/ dataset目录下。
首先需要在 HDFS的根目录下面创建一个新的目录 bigdatacase,并在这个目录下创建一个子目录dataset,具体命令如下:

cd /usr/local/hadoop ./bin/hdfs dfs –mkdir -p /bigdatacase/dataset ./bin/hdfs dfs –mkdir -ls /bigdatacase

在这里插入图片描述
在这里插入图片描述

然后把Linux本地文件系统的user_table.txt上传到分布式文件系统HDFS的/bigdatacase/dataset目录下:

./bin/hdfs dfs -put /usr/local/bigdatacase/dataset/user_table.txt /bigdatacase/dataset

在这里插入图片描述

查看HDFS中user_table.txt的前10条记录,命令如下:

./bin/hdfs dfs-cat /bigdatacase/dataset/user_table.txt | head -10

在这里插入图片描述

2.2.3.在Hive下创建数据库

下面在Linux系统中再新建一个终端(可以在刚才已经建好的终端界面的左上角,单击“终端”菜单,在弹出的子菜单中选择“新建终端”)。因为需要借助于MySQL保存 Hive的元数据﹐所以,先启动MySQL数据库,可以在终端中输人如下命令:

service mysql start  #可以在Linux的任何目录下执行该命令

在这里插入图片描述

进入Hive,命令如下:

cd /usr/local/hive
./bin/hive   #启动Hive

在这里插入图片描述

启动成功后,就进入了hive>命令提示符状态。在Hive中创建一个数据库dblab,命令如下:

hive> create database dblab;
hive> use dblab;

在这里插入图片描述

2.2.3.1.创建外部表

在数据库dblab中创建一个外部表bigdata_user,它包含字段(id , uid, item_id, behavior_type, item_category , date, province),在 hive命令提示符下输入如下命令:

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 xmudblab!' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION '/bigdatacase/dataset';

在这里插入图片描述

2.2.3.2.查询数据

上面已经成功把 HDFS中的/bigdatacase/dataset目录下的数据加载到了数据仓库Hive 中;然后在hive>命令提示符状态下执行下面命令查看表的信息:

hive> use dblab; //使用dblab数据库
hive> show tables; //显示数据库中所有表
hive> show create table bigdata_user; //查看bigdata_user表的各种属性

在这里插入图片描述

查看表的简单结构:

hive> desc bigdata_user;

在这里插入图片描述

查询相关数据:

hive> select * from bigdata_user limit 10;
hive> select behavior_type from bigdata_user limit 10;

在这里插入图片描述
在这里插入图片描述

2.2.4.Hive进行数据分析

查看前10位用户对商品的行为:

hive> select behavior_type from bigdata_user limit 10; #查看前10位用户对商品的行为

在这里插入图片描述

查询前20位用户购买商品的时间和商品的种类:

hive> select visit_date, item_category from bigdata_user limit 20;

在这里插入图片描述

有时在表中查询可以利用嵌套语句,如果列名太复杂可以设置该列的别名,以简化操作的难度,举例如下:

hive> select e.bh, e.it from (select behavior_type as bh, item_category as it from bigdata_user) as e  limit 20;

上面语句中,“behavior_type as bh,item_category as it”是为behavior_type设置别名bh,为 item_category设置别名it,FROM的括号里的内容,也设置了别名e,这样调用时就可以使用e.bh和e.it,可以简化代码。
在这里插入图片描述

2.2.4.1.查询条数统计分析

用聚合函数 count()计算出表内有多少行数据:

hive> select count(*) from bigdata_user;

在这里插入图片描述

在函数内部加上distinct,查出uid不重复的数据有多少条:

hive> select count(distinct uid) from bigdata_user;

在这里插入图片描述

查询不重复的数据有多少条(排除客户刷单情况):

hive>select count(*) from (select uid,item_id,behavior_type,item_category,visit_date,province from bigdata_user groupby uid,item_id,behavior_type,item_category,visit_date,province having count(*)=1)a;

在这里插入图片描述

2.2.4.2.关键字条件查询分析

以关键字的存在区间为条件的查询
查询2014年12月10日到2014年12月13日有多少人浏览了商品。:

hive> select count(*) from bigdata_user where behavior_type='1' and visit_date<'2014-12-13' and visit_date>'2014-12-10';

在这里插入图片描述

以月的第n天为统计单位,依次显示第n天网站卖出去的商品的个数:

hive> select count(distinct uid), day(visit_date) from bigdata_user where behavior_type='4' group by day(visit_date);

在这里插入图片描述

关键字赋予定值为条件,对其他数据进行分析
取给定时间和给定地点,求当天发出到该地点的货物的数量:

hive> select count(*) from bigdata_user where province='江西' and visit_date='2014-12-12' and behavior_type='4';

在这里插入图片描述

2.2.4.3.根据用户行为分析

查询一件商品在某天的购买比例或者浏览比例:

hive> select count(*) from bigdata_user where visit_date='2014-12-11'and behavior_type='4';#查询有多少用户在2014-12-11购

在这里插入图片描述

hive> select count(*) from bigdata_user where visit_date ='2014-12-11';#查询有多少用户在2014-12-11点击了该店

在这里插入图片描述

查询某个用户在某一天点击网站占改天所有点击行为的比例:

hive> select count(*) from bigdata_user where uid=10001082 and visit_date='2014-12-12';#查询用户10001082在2014-12-12点击网站的次数

在这里插入图片描述

hive> select count(*) from bigdata_user where visit_date='2014-12-12';#查询所有用户在这一天点击该网站的次数

在这里插入图片描述

给定购买商品的数量范围,查询某一天在该网站的购买该数量商品的用户id:

hive> select uid from bigdata_user where behavior_type='4' and visit_date='2014-12-12' group by uid having count(behavior_type='4')>5;#查询某一天在该网站购买商品超过5次的用户id

在这里插入图片描述

2.2.4.4.用户实时查询分析

查询某个地区的用户当天浏览网站的次数,语句如下:

hive> create table scan(province STRING,scan INT) COMMENT 'This is the search of bigdataday' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;#创建新的数据表进行存储
hive> insert overwrite table scan select province,count(behavior_type) from bigdata_user where behavior_type='1' group by province;#导入数据
hive> select * from scan;#显示结果

在这里插入图片描述

2.3.Hive,MySQL,HBase数据互导

2.3.1.Hive预操作

2.3.1.1.创建临时表user_action
进入Hive与hadoop,命令如下:
cd /usr/local/hadoop
./sbin/start-all.sh #启动Hadoop
cd /usr/local/hive
./bin/hive   #启动Hive

在这里插入图片描述

命令如下:

hive> create table dblab.user_action(id STRING,uid STRING, item_id STRING, behavior_type STRING, item_category STRING, visit_date DATE, province STRING) COMMENT 'Welcome to XMU dblab! ' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;

在这里插入图片描述

确认这个数据文件在HDFS中确实已经被创建

cd /usr/local/hadoop
./bin/hdfs dfs -ls /user/hive/warehouse/dblab.db/user_action

在这里插入图片描述

2.3.1.2.将bigdata_user表中的数据插入到user_action

1.将bigdata_user表中的数据插入到user_action命令如下:

hive> INSERT OVERWRITE TABLE dblab.user_action select * from dblab.bigdata_user;

在这里插入图片描述

2.查询上面的插入命令是否成功

hive> select * from user_action limit 10;

在这里插入图片描述

2.3.2.使用Sqoop将数据从Hive导入MySQL

2.3.2.1.安装sqoop

1.访问Sqoop官网(http:// sqoop.apache. org/),下载Sqoop安装文件sqoop-1.4.6.bin_hadoop-2.0.4-alpha.tar. Gz,sqoop-1.4.6.bin_hadoop-2.0.4-alpha.tar. gz文件会被保存到“/home/hadoop/下载/”目录下。
在这里插入图片描述

2.执行如下命令,完成安装文件解压缩:

cd ~/下载
sudo tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /usr/local

在这里插入图片描述

3.将解压的文件的名称修改为sqoop,以简化操作,不用每次都输入很长的文件名,命令如下:

cd /usr/local
sudo mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop

在这里插入图片描述

4.接下来把sqoop文件夹的权限赋予当前的hadoop用户,命令如下:

sudo chown -R hadoop:hadoop sqoop

在这里插入图片描述

修改配置文件
1.执行如下命令把/usr/local/sqoop/conf目录下的配置文件 sqoop-env-template.sh 复制一份,并命名为sqoop-env.sh

cd sqoop/conf/
cat sqoop-env-template.sh >> sqoop-env.sh

在这里插入图片描述

2.使用vim 编辑器打开sqoop-env.sh文件进行编辑:

cd /usr/local/sqoop/conf/
vim sqoop-env.sh

在这里插入图片描述

3.在sqoop-env.sh文件中添加如下配置信息:

export HADOOP_COMMON_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=/usr/local/hadoop
export HBASE_HOME=/usr/local/hbase
export HIVE_HOME=/usr/local/hive
#export ZOOCFGDIR= #如果读者配置了ZooKeeper,也需要在此配置ZooKeeper的路径

在这里插入图片描述

配置环境变量
1.使用vim编辑器打开~/.bashrc文件,命令如下:

vim ~/.bashrc

在这里插入图片描述

2.在该文件开头加入如下代码:

export SQOOP_HOME=/usr/local/sqoop
export PATH=$PATH:$SBT_HOME/bin:$SQOOP_HOME/bin
export CLASSPATH=$CLASSPATH:$SQOOP_HOME/lib

在这里插入图片描述
3.保存该文件,并退出 vim编辑器。接下来执行如下命令使得环境变量立即生效:

source ~/.bashrc

在这里插入图片描述

添加Mysql驱动程序
把已经下载了MySQL驱动程序mysql-connector-java-5.1.40. tar.gz,并且被放入到"“/home/hadoop/下载”目录中。执行如下命令解压缩文件并复制到 Sqoop安装目录下:

cd ~/下载
sudo tar -zxvf  mysql-connector-java-5.1.40.tar.gz  #解压MySQL驱动包
ls #这时就可以看到解压缩后得到的目录mysql-connector-java-5.1.40
cp ./mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar /usr/local/sqoop/lib

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试MySql的连接
1.首先要确保 MySQL服务已经启动,如果没有启动,执行下面命令启动:

service mysql start

在这里插入图片描述

2.然后就可以测试 Sqoop 与 MySQL之间的连接是否成功,命令如下:

sqoop list-databases --connect jdbc:mysql://127.0.0.1:3306/ --username root -P hadoop

在这里插入图片描述

3.如果能够看到 MySQL数据库中的数据库列表,就表示 Sqoop安装成功。
在这里插入图片描述

2.3.2.2.将前面生成的临时表数据从Hive导入到MySQL中

1.登录MySQL,命令如下:

mysql –u root -p hadoop

在这里插入图片描述

2.进入mysql后,创建数据库

mysql> show databases; #显示所有数据库
mysql> create database dblab; #创建dblab数据库
mysql> use dblab; #使用数据库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.查看数据库编码,mysql命令如下:

mysql>show variables like "char%";

确认编码格式为utf-8,否则无法导入中文。
在这里插入图片描述

4.创建表,mysql命令如下:

mysql> CREATE TABLE `dblab`.`user_action` (`id` varchar(50),`uid` varchar(50),`item_id` varchar(50),`behavior_type` varchar(10),`item_category` varchar(50), `visit_date` DATE,`province` varchar(20)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> exit #创建成功后退出

在这里插入图片描述
在这里插入图片描述

5.导入数据,命令如下:

cd /usr/local/sqoop
./bin/sqoop export --connect jdbc:mysql://localhost:3306/dblab --username root --password hadoop --table user_action --export-dir '/user/hive/warehouse/dblab.db/user_action' --fields-terminated-by '\t'; #导入命令

在这里插入图片描述
在这里插入图片描述

6.查看MySQL中user_action表数据,命令如下:

mysql -u root -p
mysql> use dblab;
mysql> select * from user_action limit 10;

在这里插入图片描述
在这里插入图片描述

从Hive导入数据到MySQL中的操作完成。

2.3.3.使用Sqoop将数据从MySQL导入HBase

1.使用Hadoop集群、MySQL服务、HBase服务,在终端中执行如下命令:

cd /usr/local/hbase
./bin/start-hbase.sh

在这里插入图片描述

2.启动HBase shell

cd /usr/local/hbase
./bin/hbase shell

在这里插入图片描述

3.创建表user_action,命令如下:

hbase> create 'user_action', { NAME => 'f1', VERSIONS => 5}

在这里插入图片描述

4.导入数据(终端中进行),命令如下:

cd /usr/local/sqoop
./bin/sqoop  import  --connect jdbc:mysql://localhost:3306/dblab --username root --password hadoop --table user_action --hbase-table user_action --column-family f1 --hbase-row-key id --hbase-create-table -m 1

在这里插入图片描述
在这里插入图片描述

5.查看HBase中user_action表数据,hbase命令如下:

hbase> scan 'user_action',{LIMIT=>10}  #只查询前面10行

在这里插入图片描述

2.3.4.使用HBaseJava API把数据从本地导入到HBase中

1.启动 Hadoop集群、HBase服务,命令如下:

cd /usr/local/hadoop
./sbin/start-all.shcd /usr/local/hbase
./bin/start-hbase.sh

在这里插入图片描述

2.数据准备,命令如下:

cd /usr/local/bigdatacase/dataset
/usr/local/hadoop/bin/hdfs dfs -get /user/hive/warehouse/dblab.db/user_action .
 #将HDFS上的user_action数据复制到本地当前目录,注意'.'表示当前目录
cat ./user_action/* | head -10   #查看前10行数据
cat ./user_action/00000* > user_action.output #将00000*文件复制一份重命名为user_action.output,*表示通配符
head user_action.output  #查看user_action.output前10行

在这里插入图片描述

3.编写数据导入程序,采用Eclipse编写Java程序实现HBase数据导入功能
为了编写一个能够与HBase交互的Java应用程序,需要在这个界面中加载该Java 工程所需要用到的JAR包,这些JAR包中包含了可以访问HBase的Java API。这些JAR包都位于Linux系统的HBase安装目录的lib目录下,也就是位于/usr/local/hbase/lib目录下。单击界面中的Libraries选项卡,然后单击界面右侧的Add External JARs按钮,导入上述的包。

在这里插入图片描述

4.在 Eclipse中编写上述代码,并打包成可执行 jar包,命名”ImportHBase.jar ;然后在/usr/local/bigdatacase/目录下面新建一个 hbase子目录,用来有放ImportHBase.jar。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.数据导入(再导入前清空uer_action表),命令如下:

cd /usr/lcoal/hbase
./bin/hbase shell 
hbase> truncate 'user_action'

在这里插入图片描述

6.运行hadoop jar命令即刚刚编写的程序,命令如下:

/usr/local/hadoop/bin/hadoop jar /usr/local/bigdatacase/hbase/ImportHBase.jar HBaseImportTest 
/usr/local/bigdatacase/dataset/user_action.output

在这里插入图片描述
在这里插入图片描述

7.查看HBase中user_action表数据,hbase命令如下:

habse> scan 'user_action',{LIMIT=>10}  #只查询前面10行

在这里插入图片描述

2.4.利用R进行数据可视化分析

2.4.1.安装R

登录Linux系统,打开一个终端,并注意保持网络连通,可以访问互联网,因为安装过程要下载各种安装文件。

1.首先利用vim编辑器打开/etc/apt/sources.list 文件,命令如下:

$ sudo vim /etc/apt/sources.list

在这里插入图片描述

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

$ deb http://mirrors.xmu.edu.cn/CRAN/bin/linux/ubuntu/ trusty/

在这里插入图片描述

3.然后,执行如下命令更新软件源列表:

$ sudo apt-get update

在这里插入图片描述

4.如果更新软件源出现“由于没有公钥无法验证签名”的错误,请执行如下命令:

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 51716619E084DAB9

在这里插入图片描述

5.接下来执行如下命令安装R语言:

$ sudo apt-get install r-base

在这里插入图片描述

6.从键盘输人y,按Enter键就可以顺利安装,结束安装结束后,可以执行下面命令启动R,启动后会显示如下信息,并进入>命令提示符状态:

$ R

在这里插入图片描述

7.最后可以执行下面命令退出R:

 >q()

在这里插入图片描述

2.4.2.安装依赖库

1.因为后面的步骤不断报错,就上网找了很久,最后大多数都说是这个R的版本问题,所以就更新了一下R

$ sudo su
$ echo "deb http://www.stats.bris.ac.uk/R/bin/linux/ubuntu xenial-cran40/" >> /etc/apt/sources.list
$ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9
$ apt-get update
$ apt-get upgrade
$ sudo apt-get install r-base

从2.3.2更新到4.1.2版本
在这里插入图片描述

为了完成可视化分析功能,需要为R安装一些依赖库,包括 RMySQL、ggplot2,devtools和 recharts。其中,RMySQL是一个提供了访问 MySQL数据库的R语言接口程序的R语言依赖库, ggplot2和recharts则是R语言中提供绘图可视化功能的依赖库。

2.启动R进入R命令提示符状态,执行如下命令安装RMySQL:

install.packages('RMySQL')

因为我们更新了R,可能自动帮我们选择了下载源,因此不用选择镜像。
在这里插入图片描述
在这里插入图片描述

3.执行如下命令安装绘图包ggplot2,更新之后就不会报错了:

> install.packages('ggplot2')

在这里插入图片描述
在这里插入图片描述

4.执行如下命令安装绘图包devtools:

> install.packages('devtools')

在这里插入图片描述
在这里插入图片描述

5.在 Ubuntul6.04上执行devtools安装时,可能会出现3次错误,根据每次错误的英文提示信息﹐就需要3个软件: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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.最后在R命令提示符下,再执行如下命令安装taiyun/recharts :

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

在这里插入图片描述

2.4.3.可视化分析

2.4.3.1.连接MySQL并获取数据

1.进入mysql,命令如下:

$ service mysql start
$ mysql -u root -p

在这里插入图片描述
在这里插入图片描述

2.查询数据,命令如下:

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

在这里插入图片描述

3.切换到刚才已经打开的R命令提示符终端窗口,使用如下命令让R连接到 MySQL数据库:

>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')

在这里插入图片描述

2.4.3.2.分析消费者对商品的行为

summary()函数可以得到样本数据类型和长度,如果样本是数值型,还能得到样本数据的最小值、最大值,四分位数和均值信息。
1.首先使用summary()函数查看MySQL数据库中表user_action的字段behavior_type的类型,命令如下:

>summary(user_action$behavior_type)

在这里插入图片描述

2.可以看出,原来的MySQL数据中,表user_action的字段behavior_type的类型是字符型。这样不方便做比较,需要把 behavior_type的字段类型转换为数值型,命令如下:

>summary(as.numeric(user_action$behavior_type))

在这里插入图片描述

3.用柱状图展示消费者的行为类型的分布情况,命令如下:

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

在这里插入图片描述

2.4.3.3.分析销量排行前十的商品及其销量

1.分析销量排名前十的商品及其销量,可以采用如下命令:

>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()用来完成排序,返回排序后的数值向量。上述命令执行结果如下:
在这里插入图片描述

上面的执行结果中,第一行表示商品分类,第二行表示该类的销量。

2.用散点图展示上面的分析结果,命令如下:

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

在这里插入图片描述

2.4.3.4.分析每年的哪个月份销量最大

1.从 MySQL直接获取的数据中, visit_date变量都是2014年份,并没有划分出具体的月份,因此,需要在数据集中增加一列关于月份的数据,命令如下:

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

在这里插入图片描述

2.用柱状图展示消费者在一年的不同月份的购买量情况,命令如下:

>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月份的数据,所以,执行结果中只会显示两个表格。上面命令的具体执行结果如下图所示。
在这里插入图片描述

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

可以使用如下语句来分析国内各个省份的消费者的购买情况:

library(recharts)
rel <- as.data.frame(table(temp p r o v i n c e ) ) p r o v i n c e s < − r e l province)) provinces <- rel province))provinces<relVar1
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()用来计算数据集的行数。
在这里插入图片描述

3.出现的问题以及解决方案

问题1:install.packages(‘devtools’)安装失败的解决方法

没有更新版本之前,选择任何表中的资源都会出现如下报错,显示证书问题和显示devtools不可用。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

**解决方法:**后面试了很多方法,都没有用,直到看到一个帖子是反应版本问题
原因就在于我的R版本过低导致与依赖不兼
https://zhuanlan.zhihu.com/p/129331377
已解决R包:dependencies * are not available for package - 知乎 (zhihu.com)

于是后面就找了个升级R的方法
https://blog.csdn.net/weixin_41929524/article/details/108470515
Ubuntu上更新R版本(完全攻略)_Kanny-CSDN博客_ubuntu升级r

把R升级后,完美解决问题。
因为后面的步骤不断报错,就上网找了很久,最后大多数都说是这个R的版本问题,所以就更新了一下R

$ sudo su
$ echo "deb http://www.stats.bris.ac.uk/R/bin/linux/ubuntu xenial-cran40/" >> /etc/apt/sources.list
$ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9
$ apt-get update
$ apt-get upgrade
$ sudo apt-get install r-base
下面简单解释一下上述代码。sudo su 表示直接使用最高的权限;echo ... >> ... 表示将一行语句写到 >> 所指的后面的文件中的最后一行;apt-get update 表示重载 sources.list 文件, apt-get upgrade 则表示对 sources.list 里面的内容进行更新升级(这样就自然将我们最新添加的内容进行升级)。

从3.2.3更新到4.1.2版本
在这里插入图片描述

问题2:安装devtools出现的问题以及解决方法

在安装devtools依赖的时候,出现了如下图的error,显示xml2文件依赖有错误。
在这里插入图片描述

**解决方法:**根据错误提示,系统提示尝试安装libxml2-dev的包

$ sudo apt-get install libxml2-dev

在这里插入图片描述
在这里插入图片描述

安装完毕后,错误就解决了devtools也顺利安装成功。

  • 2
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值