通过对厦大开放的大数据教程进行学习,发现软件版本更新,按照教程走,会出现些许问题,故而通过转载和补充的方式记录该实验案例的完整操作流程。
《网站用户购物行为》的综合实验的链接地址:http://dblab.xmu.edu.cn/post/7499/
教程内使用的软件包在该网址内链接,请进入该网址提供的百度云盘链接进行下载:http://dblab.xmu.edu.cn/post/5663/
实验环境准备
1.安装Ubuntu16.04
- 我选择在vbox上安装Ubuntu,此处不赘述安装过程。tip:统一采用hadoop作为用户名
- 安装好Ubuntu后,在vbox上启动“安装增强功能”
- 同时根据需求是否需要设置共享文件夹挂载
sudo mount -t vboxsf share /mnt # share是共享文件夹名称,/mnt是挂载与Ubuntu内具体文件夹
-
安装好“增强功能”,需要重启虚拟机,不然挂载等扩展功能无法生效。
2.安装Hadoop伪分布式
- 安装ssh
sudo apt-get install openssh-server #安装ssh ssh localhost #测试ssh登录本地是否正常,此处需要输入密码登录 exit #退出ssh # 为了避免每次ssh到本地需要输入密码,下面的指令为免密码登录设置 cd ~/.ssh/ ssh-keygen -t rsa #直接一路敲回车键 cat ./id_rsa.pub >> ./authorized_keys #添加授权 ssh localhost #测试免密码登录是否成功 exit #退出ssh
- 安装Java7
cd /usr/lib sudo mkdir jvm #创建/usr/lib/jvm目录用来存放JDK文件 cd ~/Downloads #假设全部安装包都放在Download文件夹内 sudo tar -zxvf ./jdk-7u80-linux-x64.tar.gz -C /usr/lib/jvm #把JDK文件解压到/usr/lib/jvm目录下 gedit ~/.bashrc #初学者不习惯用vim,可以用gedit替换,直接文本操作。
在bashrc文件的最后面添加如下环境变量:
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_80 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH
添加后记得保存,刷新一下使得配置生效。
source ~/.bashrc java -version #查看jdk7是否能识别成功
tip:教程是17年年底出的,里面提供apt下载jdk7,但是Ubuntu16已经不提供jdk7的下载,需要自己手动下载
- 安装Hadoop,配置伪分布式
sudo tar -zxf ~/Downloads/hadoop-2.7.1.tar.gz -C /usr/local # 解压到/usr/local中 cd /usr/local/ sudo mv ./hadoop-2.7.1/ ./hadoop # 重命名 sudo chown -R hadoop ./hadoop # 修改文件权限,我们用户名是hadoop,此处设置权限给hadoop用户 /usr/local/hadoop/bin/hadoop version # 测试hadoop是否成功返回版本信息
此处安装的hadoop是单机版本的。需要进行配置,变成伪分布式。先对core-site.xml进行修改
gedit /usr/local/hadoop/etc/hadoop/core-site.xml
修改为下面配置,然后保存:
<configuration> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>
再对hdfs-site.xml进行配置
gedit /usr/local/hadoop/etc/hadoop/hdfs-site.xml
修改为下面配置,然后保存:
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property> </configuration>
对hadoop-env.sh进行配置
gedit /usr/local/hadoop/etc/hadoop/hadoop-env.sh
此处需要将JAVA_HOME的赋值进行替换
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_80
配置完毕,由于我们将单机版本改成伪分布式,因此需要对namenode进行格式化一下
cd /usr/local/hadoop ./bin/hdfs namenode -format
3.安装Mysql
- 安装MySQL
sudo apt-get update #更新软件源 sudo apt-get install mysql-server #安装mysql,安装过程会提示为root设置密码,请记得设置密码
如果忘记设置密码,请从该帖子内进行学习修改密码。
- 修改配置,便于数据库可以保存中文
service mysql start #启动mysql服务器 sudo netstat -tap | grep mysql #确认是否启动成功 mysql -u root -p #进入mysql shell界面
此时在MySQL的shell界面输入
mysql> show variables like "char%";
会发现character_set_server为latin1,我们需要修改配置使得变成utf8.
sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf #在[mysqld]下添加一行 character_set_server=utf8
修改好配置,我们需要重启MySQL服务
service mysql restart mysql -u root -p
再次进入MySQL,执行查看是否character_set_server变成utf8
mysql> show variables like "char%";
4.安装HBase
- 安装HBase
#新建一个终端 sudo tar -zxf ~/Downloads/hbase-1.1.2-bin.tar.gz -C /usr/local sudo mv /usr/local/hbase-1.1.2 /usr/local/hbase cd /usr/local sudo chown -R hadoop ./hbase /usr/local/hbase/bin/hbase version gedit ~/.bashrc
在bashrc上添加环境变量
export PATH=$PATH:/usr/local/hbase/bin
然后刷新一下bashrc
source ~/.bashrc
- 配置分布式
gedit /usr/local/hbase/conf/hbase-env.sh
首先为hbase-env.sh添加参数,
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_80 export HBASE_CLASSPATH=/usr/local/hadoop/conf export HBASE_MANAGES_ZK=true
然后编辑hbase-site.xml
gedit /usr/local/hbase/conf/hbase-site.xml
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://localhost:9000/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> </configuration>
启动HBase
cd /usr/local/hbase bin/start-hbase.sh
进入HBase的shell界面
bin/hbase shell
5.安装Hive
- 安装Hive
#新建一个终端 sudo tar -zxf ~/Downloads/apache-hive-1.2.1-bin.tar.gz -C /usr/local cd /usr/local/ sudo mv apache-hive-1.2.1-bin hive sudo chown -R hadoop ./hive gedit ~/.bashrc
在bashrc上添加环境变量
export HIVE_HOME=/usr/local/hive export PATH=$PATH:$HIVE_HOME/bin export HADOOP_HOME=/usr/local/hadoop
刷新一下bashrc
source ~/.bashrc
将hive-default.xml.template重命名为hive-default.xml
cd /usr/local/hive/conf mv hive-default.xml.template hive-default.xml
修改hive-site.xml文件
cd /usr/local/hive/conf gedit hive-site.xml
在hive-site.xml中添加如下配置信息:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value> <description>JDBC connect string for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> <description>Driver class name for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> <description>username to use against metastore database</description> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive</value> <description>password to use against metastore database</description> </property> </configuration>
- 连接MySQL,tip:从官网上下载的最新版本的MySQL插件跟跟hive1.2.1版本不兼容,推荐下载mysql-connector-java-5.1.21.jar的包,可以从mvnrepository上去查找下载。
cp ~/Downloads/mysql-connector-java-5.1.21.jar /usr/local/hive/lib
步骤4安装了MySQL,此处我们如果没有关闭MySQL的shell界面直接操作,有则从新打开MySQL的shell
service mysql start #启动mysql服务 mysql -u root -p #登陆shell界面 #下面的指令是在MySQL的shell界面操作的 mysql> create database hive; mysql> grant all on *.* to hive@localhost identified by 'hive'; #将所有数据库的所有表的所有权限赋给hive用户,后面的hive是配置hive-site.xml中配置的连接密码 mysql> flush privileges; #刷新mysql系统权限关系表
- 启动Hive
cd /usr/local/hive ./bin/hive
tip:如果以前曾经安装了Hive或MySQL,重新安装Hive和MySQL以后,导致版本、配置不一致。启动hive会报错,用下面指令统一一下版本即可
schematool -dbType mysql -initSchema
6.安装Sqoop
- 安装Sqoop
#新建一个终端 sudo tar -zxf ~/Downloads/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /usr/local cd /usr/local/ sudo mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop #修改文件名 sudo chown -R hadoop:hadoop sqoop
修改配置文件sqoop-env.sh
cd sqoop/conf/ cat sqoop-env-template.sh >> sqoop-env.sh #将sqoop-env-template.sh复制一份并命名为sqoop-env.sh gedit sqoop-env.sh #编辑sqoop-env.sh
在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
配置环境变量
gedit ~/.bashrc
在bashrc的最后添加如下内容
export SQOOP_HOME=/usr/local/sqoop export PATH=$PATH:$SBT_HOME/bin:$SQOOP_HOME/bin export CLASSPATH=$CLASSPATH:$SQOOP_HOME/lib
刷新一下bashrc
source ~/.bashrc
- 测试与MySQL连接,tip:这里还会需要继续使用MySQL的连接插件
cp ~/Downloads/mysql-connector-java-5.1.21.jar /usr/local/sqoop/lib #拷贝到sqoop sqoop list-databases --connect jdbc:mysql://127.0.0.1:3306/ --username root -P
7.安装R语言
- 安装R语言,tip:由于版本升级,教程里面的R语言安装无效,我们从网上找了其他教程安装R语言
sudo echo "deb http://cran.rstudio.com/bin/linux/ubuntu xenial/" | sudo tee -a /etc/apt/sources.list gpg --keyserver keyserver.ubuntu.com --recv-key 51716619E084DAB9 gpg -a --export 51716619E084DAB9 | sudo apt-key add - sudo apt-get update sudo apt-get install r-base r-base-dev
由于我们在R语言内还有安装其他库,这会涉及其他工具的调用和依赖,这里我们需要先从apt上下载
sudo apt-get install libmariadb-client-lgpl-dev libssl-dev libssh2-1-dev libcurl4-openssl-dev libxml2-dev git
- 启动R语言,在R里面安装相关库,安装好后,退出R语言时,需要选择“y”确定保存本次操作。
#以下指令是在R语言内执行的 > install.packages('RMySQL') > install.packages('ggplot2') > install.packages('devtools') #tip:此处注意一下 > devtools::install_github('taiyun/recharts') #上面的install_github指令可以执行成功,则下面的三条指令则不需要考虑,跳过即可 #如果上面的install_github指令执行不成功,替换成下面的三条指令执行看看 > install_github('ramnathv/htmlwidgets') > install_github('rstudio/htmltools') > install_github('taiyun/recharts@htmlwidgets')
实验操作《网站用户购物行为》
1.本地数据集上传到数据仓库Hive
- 下载user数据集到Downloads,并且解压,网址:https://pan.baidu.com/s/1nuOSo7B
- 创建个文件夹放在/usr/local存放数据集
cd /usr/local sudo mkdir bigdatacase sudo chown -R hadoop:hadoop ./bigdatacase cd bigdatacase mkdir dataset cd ~/Downloads unzip user.zip -d /usr/local/bigdatacase/dataset cd /usr/local/bigdatacase/dataset head -5 raw_user.csv #查看一下数据集的前五行 #数据集的预处理 sed -i '1d' raw_user.csv # 删除raw_user中的第1行 sed -i '1d' small_user.csv # 删除small_user中的第1行 head -5 raw_user.csv head -5 small_user.csv #对字段进行预处理 gedit pre_deal.sh
以下内容是复制到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对数据集进行处理
cd /usr/local/bigdatacase/dataset bash ./pre_deal.sh small_user.csv user_table.txt head -10 user_table.txt
启动hdfs,如果前面启动了,没有关闭则跳过
cd /usr/local/hadoop ./sbin/start-dfs.sh jps ./bin/hdfs dfs -mkdir -p /bigdatacase/dataset ./bin/hdfs dfs -put /usr/local/bigdatacase/dataset/user_table.txt /bigdatacase/dataset ./bin/hdfs dfs -cat /bigdatacase/dataset/user_table.txt | head -10
-
在Hive上创建数据库
#如果前面启动MySQL没有关闭则跳过 service mysql start
启动Hive
cd /usr/local/hive ./bin/hive
下面的指令是在Hive中进行操作
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'; hive> select * from bigdata_user limit 10; hive> select behavior_type from bigdata_user limit 10;
2.Hive数据分析
- Hive的查询操作,在教程内没有出现任何错误,此处给链接,自行当官网教程学习,网址:http://dblab.xmu.edu.cn/blog/1005/
-
用户实时查询分析,以下的指令是在Hive的shell执行的
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;//显示结果
3.Hive、MySQL、HBase数据互导
- 在Hive里面创建临时表user_action
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; hive>select * from user_action limit 10; #空的,没有任何数据
该创建数据表指令与先去相似,差异在于没有指定HDFS上的文件路径,所以不会从hdfs上把数据导入到表中
hive> INSERT OVERWRITE TABLE dblab.user_action select * from dblab.bigdata_user; #导入数据 hive>select * from user_action limit 10; #显示前十行数据成功
-
MySQL创建数据库和数据表
mysql –u root –p mysql> show databases; #显示所有数据库 mysql> create database dblab; #创建dblab数据库 mysql> use dblab; #使用数据库 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;
-
使用Sqoop将数据从Hive导入MySQL
#新建一个终端窗口 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'; #导入命令
在MySQL的shell界面查看数据表是否成功导入数据
mysql> use dblab; mysql> select * from user_action limit 10;
-
启动HBase,在启动HBase前,先确认启动了HDFS方可执行
#启动hdfs cd /usr/local/hbase ./bin/start-hbase.sh #启动HBase cd /usr/local/hbase ./bin/hbase shell
在HBase内创建数据表
hbase> create 'user_action', { NAME => 'f1', VERSIONS => 5}
-
使用Sqoop将数据从MySQL导入HBase
这里需要注意以下,MySQL的root用户的密码要根据自身设置修改
cd /usr/local/sqoop ./bin/sqoop import --connect jdbc:mysql://localhost:3306/dblab --username root --password 123 --table user_action --hbase-table user_action --column-family f1 --hbase-row-key id --hbase-create-table -m 1
导入成功了,在HBase内查询数据是否成功导入
habse> scan 'user_action',{LIMIT=>10}
-
安装eclipse
sudo apt-get update sudo apt-get install eclipse #往eclipse添加Hadoop插件 unzip -qo ~/Downloads/hadoop2x-eclipse-plugin-master.zip -d ~/下载 # 解压到 ~/下载 中 sudo cp ~/Downloads/hadoop2x-eclipse-plugin-master/release/hadoop-eclipse-plugin-2.6.0.jar /usr/lib/eclipse/plugins/ # 复制到 eclipse 安装目录的 plugins 目录下 /usr/lib/eclipse/eclipse -clean # 添加插件后需要用这种方式使插件生效
安装Hadoop插件后,会在Project Explorer中看到 DFS Locations,eclipse的插件安装和配置跟着教程走即可。
当创建的项目使用的是jdk8的话,需要切换一下库部分代码在jdk8环境下运行会报错,兼容性问题,在jdk7下不会报错。
-
使用HBase Java API把数据从本地导入到HBase中
eclipse创建Java project,名字叫ImportHBase,新建一个类,名字叫HBaseImportTest,注意观察jdk版本是否是jdk7,源代码如下:
import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.util.Bytes; public class HBaseImportTest extends Thread { public Configuration config; public HTable table; public HBaseAdmin admin; public HBaseImportTest() { config = HBaseConfiguration.create(); // config.set("hbase.master", "master:60000"); // config.set("hbase.zookeeper.quorum", "master"); try { table = new HTable(config, Bytes.toBytes("user_action")); admin = new HBaseAdmin(config); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { if (args.length == 0) { //第一个参数是该jar所使用的类,第二个参数是数据集所存放的路径 throw new Exception("You must set input path!"); } String fileName = args[args.length-1]; //输入的文件路径是最后一个参数 HBaseImportTest test = new HBaseImportTest(); test.importLocalFileToHBase(fileName); } public void importLocalFileToHBase(String fileName) { long st = System.currentTimeMillis(); BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(new FileInputStream( fileName))); String line = null; int count = 0; while ((line = br.readLine()) != null) { count++; put(line); if (count % 10000 == 0) System.out.println(count); } } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } try { table.flushCommits(); table.close(); // must close the client } catch (IOException e) { e.printStackTrace(); } } long en2 = System.currentTimeMillis(); System.out.println("Total Time: " + (en2 - st) + " ms"); } @SuppressWarnings("deprecation") public void put(String line) throws IOException { String[] arr = line.split("\t", -1); String[] column = {"id","uid","item_id","behavior_type","item_category","date","province"}; if (arr.length == 7) { Put put = new Put(Bytes.toBytes(arr[0]));// rowkey for(int i=1;i<arr.length;i++){ put.add(Bytes.toBytes("f1"), Bytes.toBytes(column[i]),Bytes.toBytes(arr[i])); } table.put(put); // put to server } } public void get(String rowkey, String columnFamily, String column, int versions) throws IOException { long st = System.currentTimeMillis(); Get get = new Get(Bytes.toBytes(rowkey)); get.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column)); Scan scanner = new Scan(get); scanner.setMaxVersions(versions); ResultScanner rsScanner = table.getScanner(scanner); for (Result result : rsScanner) { final List<KeyValue> list = result.list(); for (final KeyValue kv : list) { System.out.println(Bytes.toStringBinary(kv.getValue()) + "\t" + kv.getTimestamp()); // mid + time } } rsScanner.close(); long en2 = System.currentTimeMillis(); System.out.println("Total Time: " + (en2 - st) + " ms"); } }
可以在eclipse里面添加run config参数为/usr/local/bigdatacase/dataset/user_action.output,也把Java程序导出来执行,
/usr/local/hadoop/bin/hadoop jar /usr/local/bigdatacase/hbase/ImportHBase.jar HBaseImportTest /usr/local/bigdatacase/dataset/user_action.output
4.利用R进行数据可视化分析
- 使用eclipse查看数据
mysql -u root -p # 以下指令在MySQL的shell执行 mysql> use dblab; mysql> select * from user_action limit 10;
-
使用R语言连接MySQL,注意MySQL的密码需要改成自身设置的
library(RMySQL) conn <- dbConnect(MySQL(),dbname='dblab',username='root',password='123',host="127.0.0.1",port=3306) user_action <- dbGetQuery(conn,'select * from user_action')
-
在R语言里面分析消费者对商品的行为
#统计 summary(user_action$behavior_type) summary(as.numeric(user_action$behavior_type)) #画柱状图 library(ggplot2) ggplot(user_action,aes(as.numeric(behavior_type)))+geom_histogram() #分析哪一类商品被购买总量前十的商品和被购买总量 temp <- subset(user_action,as.numeric(behavior_type)==4) # 获取子数据集 count <- sort(table(temp$item_category),decreasing = T) #排序 print(count[1:10]) # 获取第1到10个排序结果 #散点图表示 result <- as.data.frame(count[1:10]) #将count矩阵结果转换成数据框 ggplot(result,aes(Var1,Freq,col=factor(Var1)))+geom_point() #分析每年的哪个月份购买商品的量最多 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) #分析国内哪个省份的消费者最有购买欲望 #此处采用emap绘制全国地图,并嵌入数据 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) #画出中国地图