小时级实时数据仓库构建方法_A项目

项目描述

天亮舆情是一个简单易用的互联网舆论分析平台。通过对互联网常见的舆论信息传播媒介进行采集分析,提供了实时舆情、情感分析、地域统计及事件脉络等数据与分析能力,助力客户把握时事脉搏。用户只需设置关键词即可实现对全互联网的信息进行检测分析。通过该产品可以满足用户对网络舆情对网络舆情监测和热点事件专题追踪等需求!

项目背景

为了帮助客户全面掌握舆情动态,正确进行舆论引导,为确保我国互联网络大众媒体的舆论导向的正确性起到了一定的辅助作用,实现为政府分忧,对网络舆情进行监控和管理。用舆情系统,宣传部门可以有效的规范互联网信息,引导健康有益的舆论导向。系统对于促进加强互联网信息监管,组织力量展开信息整理和深入分析,应对网络突发的公共事件,全面掌握社情民意起决定性作用。

项目功能

  • 将热点词汇以词云图的形式显示

功能亮点

  • 通过nlp(nature language process)分词处理,将一条一条的博文拆解成一个一个的词序列(Term Sequene)。对词序列中的全部元素做词频统计,对词统统计结果做倒排输出,得到舆情热词。
  • 使用echarts,对echarts进行二次开发,以此来展示出词云图

社会价值-企业价值

  • 迅速捕捉社交网络内热词,可以作为新闻素材、视频推荐、商品推荐等依据。

梳理数据流

zip文件 (原始数据)
-> csv文件(原始数据解压后)(local本地)
-> weibo_origin
-> weibo_product
-> weibo_seg_result-> weibo_seg_wc -> download_weibo_hot_words(hdfs文件)-> download_weibo_hot_words(本地文件) -> upload_to_mysql_table -> web可视化停用词表提前建立和初始化 weibo_stopwords表

代码实现

zip原始数据批量解压

ls weibo/*.zip | xargs -n1 unzip -d weibo_text/

在hive中创建weibo_origin和weibo_product两张同构表

CREATE external TABLE weibo_origin(
mid string,
retweeted_status_mid string,
uid string,
retweeted_uid string,
source string,
image string,
text string,
geo string,
created_at string,
deleted_last_seen string,
permission_denied string
)
comment 'weibo content table'
partitioned by (day_seq string comment 'the day sequence')
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
STORED AS textfile;
CREATE TABLE weibo_product(
mid string,
retweeted_status_mid string,
uid string,
retweeted_uid string,
source string,
image string,
text string,
geo string,
created_at string,
deleted_last_seen string,
permission_denied string
)
comment 'weibo content table'
partitioned by (day_seq string comment 'the day sequence')
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
STORED AS orcfile;

数据按天分区载入weibo_origin表,创建脚本load_to_weibo_origin.sh

#! /bin/bash#1、定义csv文件所在的目录
csv_root_dir_local=/home/zel/corpus_dw_hive/day_csv_data/#2、定义csv上传到hdfs空间的目录
csv_root_dir_hdfs=/user/zel/csv_root_dir/#3、获取csv的文件名称,作为分区表的分区字段值
csv_filename_list=`ls $csv_root_dir_local | cut -d . -f1`#4、进行遍历csv_filename_list集合,逐个处理csv文件的上传
for filename in $csv_filename_list
doecho $filename#嵌入hdfs相关操作#1、将本地csv上传到hdfs指定路径当中hdfs dfs -copyFromLocal -f $csv_root_dir_local""$filename".csv" $csv_root_dir_hdfs  #2、将hdfs的csv文件加载到指定的hive表分区当中hive -e "use zel;load data inpath '$csv_root_dir_hdfs$filename.csv' overwrite into table weibo_origin partition(day_seq='$filename');"   #break
done
#脚本执行完成
//保证shell在断开客户端情况下,依然可以继续执行
nohup ./load_to_weibo_origin.sh &

数据检验与校正

  • 校验导入数据的正确与否

    • 样例数据查是否正常(limit m,查看数据样例数据有无明显异常)
    • 数据量级是否相同(主要是指数据当量,十成级、百万级)
    • 数据完整性是否一致(主要是指别丢数据)
    • 数据格式与字段是否对齐
  • 校正方法
    • 将数据的导入方式与数据表的解析方式保持完全一致

      • 修改weibo_origin表创建脚本
CREATE external TABLE weibo_origin(
mid string,
retweeted_status_mid string,
uid string,
retweeted_uid string,
source string,
image string,
text string,
geo string,
created_at string,
deleted_last_seen string,
permission_denied string
)
comment 'weibo content table'
partitioned by (day_seq string comment 'the day sequence')
row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
STORED AS textfile;

将数据表weibo_origin经过清洗规则处理,按天分区载入weibo_product表

  • 清洗逻辑

    • 将每个表中的第1行字段名称行去掉,属于多余的
//一次查询多次插入
from weibo_origin
insert overwrite table weibo_product partition(day_seq) select * where mid!='mid';

分词UDF编写

  • ansj分词器
<project xmlns="http://maven.apache.org/POM/4.0.0"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd";><modelVersion>4.0.0</modelVersion><!—- 我是谁--><groupId>com.tianliangedu.course</groupId><artifactId>TlHadoopCore</artifactId><version>0.0.1-SNAPSHOT</version><!-- 首先配置仓库的服务器位置,首选阿里云,也可以配置镜像方式,效果雷同 --><repositories><repository><id>nexus-aliyun</id><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></repository></repositories><dependencies><!-- 引入hadoop-cli-2.7.4依赖 --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.7.4</version><scope>provided</scope></dependency><dependency><groupId>org.apache.hive</groupId><artifactId>hive-cli</artifactId><version>1.2.1</version><scope>provided</scope></dependency><!-- ansj依赖jar配置  ==start --><dependency><groupId>org.ansj</groupId><artifactId>ansj_seg</artifactId><version>5.1.1</version></dependency><!-- ansj依赖jar配置  ==end --></dependencies><!-—项目构建配置 --><build><finalName>TlHadoopCore</finalName><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>assembly</goal></goals></execution></executions></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.7</source><target>1.7</target><encoding>UTF-8</encoding></configuration></plugin></plugins></build>
</project>
  • 分词测试用例
import java.util.List;
import org.ansj.domain.Result;
import org.ansj.domain.Term;
import org.ansj.splitWord.analysis.NlpAnalysis;
public class TianLiangAnsjTest {public static void main(String[] args) {// 指定要进行分词的句子String str = "马蓉王宝强事件";// 采用nlp分词,具备(用户自定义词典/数字识别/人名识别/机构名识别/新词发现)功能Result result = NlpAnalysis.parse(str);// 将分词结果集合返回给变量itemListList<Term> termList = result.getTerms();//存储每次分词完成后的词序列集合,词之间以'\001'分隔StringBuilder stringBuilder = new StringBuilder();//循环记数器,当counter>0的时候,每次添加元素前先添加分隔符int counter = 0;//遍历集合,加入结果集中for (Term term : termList) {if (counter > 0) {stringBuilder.append('\001');}//只要分词的名字结果,不要词性部分stringBuilder.append(term.getName());counter++;}//将最后的汇总结果输出System.out.println(stringBuilder.toString());}
}

ansj分词udf编码与测试

package com.tianliangedu.hive.udf;
import java.util.List;
import org.ansj.domain.Result;
import org.ansj.domain.Term;
import org.ansj.splitWord.analysis.NlpAnalysis;
import org.apache.hadoop.hive.ql.exec.UDF;
/** 功能:给定任意一个字符串,输出其分词结果* 输入:"马蓉王宝强事件"* 输出:"马蓉\001王宝强\001事件"*/
public class CwsUDF extends UDF {public String evaluate(String input) {//如果输入为空,则直接返回空即可if(input==null || input.trim().length()==0){return null;}// 采用nlp分词,具备(用户自定义词典/数字识别/人名识别/机构名识别/新词发现)功能Result result = NlpAnalysis.parse(input);//如果处理结果为null,则直接返回一个null即可if (result == null || result.getTerms() == null) {return null;}// 将分词结果集合返回给变量itemListList<Term> termList = result.getTerms();// 存储每次分词完成后的词序列集合,词之间以'\001'分隔StringBuilder stringBuilder = new StringBuilder();// 循环记数器,当counter>0的时候,每次添加元素前先添加分隔符int counter = 0;// 遍历集合,加入结果集中for (Term term : termList) {if (counter > 0) {stringBuilder.append('\001');}// 只要分词的名字结果,不要词性部分stringBuilder.append(term.getName());counter++;}return stringBuilder.toString();}public static void main(String[] args) {System.out.println(new CwsUDF().evaluate("河北省石家庄市高新区万达广场"));}
}

生成分词结果表

CREATE TABLE weibo_seg_result(
mid string,
retweeted_status_mid string,
uid string,
retweeted_uid string,
source string,
text string,
text_seg string,
geo string,
created_at string
)
comment 'weibo seg result table'
partitioned by (day_seq string comment 'the day sequence')
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
STORED AS orcfile;

调用分词udf生成分词结果表

#! /bin/sh
#设置所使用数据库
db_name=tianliangedu
#设置jar包位置
jar_path="hdfs:///user/zel/jars/TlHadoopCore-jar-with-dependencies.jar"
#设置udf classpath
class_path="com.tianliangedu.hive.udf.CwsUDF"
#数据的来源表
from_table=weibo_product
#要生成的数据表
to_table=weibo_seg_result
#发起执行hql脚本
hive -e "use $db_name;add jar $jar_path;create temporary function seg as '$class_path';from $from_table insert overwrite table $to_table partition(day_seq)
select mid,retweeted_status_mid,uid,retweeted_uid,source,text,seg(text) as text_seg,geo,created_at,day_seq;
  • 后台执行脚本
nohup ./produce_weibo_seg_result.sh &

生成wordcount倒排表-按词频降序排列

  • 无任何过滤直接生成倒排表-V0
CREATE TABLE weibo_seg_wc(
word string,
freq int
)
comment 'weibo seg wc'
partitioned by (day_seq string comment 'the day sequence')
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
STORED AS orcfile;

生成wordcount倒排表-先生成一个分区做测试

insert overwrite table weibo_seg_wc partition(day_seq)
select word,count(1) as freq,day_seq from weibo_seg_result lateral view explode(split(text_seg,'\001')) word_table as word where day_seq='20120102' and text_seg is not null group by day_seq,word order by freq desc;

优化生成倒排表-加入按word长度做过滤-V1

insert overwrite table weibo_seg_wc partition(day_seq)
select word,count(1) as freq,day_seq from weibo_seg_result lateral view explode(split(text_seg,'\001')) word_table as word where day_seq='20120102' and text_seg is not null and length(word)>1 group by day_seq,word order by freq desc;

优化生成倒排表-加入按词性过滤-V2

package com.tianliangedu.hive.udf;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.ansj.domain.Result;
import org.ansj.domain.Term;
import org.ansj.splitWord.analysis.NlpAnalysis;
import org.apache.hadoop.hive.ql.exec.UDF;
/*
* 功能:给定任意一个字符串,输出其分词结果
* 输入:"马蓉王宝强事件"
* 输出:"马蓉\001王宝强\001\事件"
*/
public class CwsV2UDF extends UDF {// 用于标记用于去重的natureSet是否已经初始化的标志位public boolean natureSetHaveInitFlag = false;// 用于词性过滤的set集合初始化public Set<String> natureSet = new HashSet<String>();public String evaluate(String input, String natureStr) {// 如果输入为空,则直接返回空即可if (input == null || input.trim().length() == 0) {return null;}//白名单的Set集合初始化,只需要初始化一次即可反复使用if (!natureSetHaveInitFlag && natureStr != null) {String[] natureArray = natureStr.split(",");for (String nature : natureArray) {natureSet.add(nature);}natureSetHaveInitFlag = true;}// 采用nlp分词,具备(用户自定义词典/数字识别/人名识别/机构名识别/新词发现)功能Result result = NlpAnalysis.parse(input);// 如果处理结果为null,则直接返回一个null即可if (result == null || result.getTerms() == null) {return null;}// 将分词结果集合返回给变量itemListList<Term> termList = result.getTerms();// 存储每次分词完成后的词序列集合,词之间以'\001'分隔StringBuilder stringBuilder = new StringBuilder();// 循环记数器,当counter>0的时候,每次添加元素前先添加分隔符int counter = 0;// 遍历集合,加入结果集中for (Term term : termList) {// 判断分词的Term的词性是否包含在词性的白名单中,如果在则加入,否则忽略掉if (natureSet.contains(term.getNatureStr())) {if (counter > 0) {stringBuilder.append('\001');}stringBuilder.append(term.getName());counter++;}}return stringBuilder.toString();}public static void main(String[] args) {String natureList = "n,nr,nr1,nr2,nrj,nrf,ns,nsf,nt,nz,nl,ng,nw,v,vd,vn,vf,vx,vi,vl,vg,a,ad,an,ag,al";System.out.println(new CwsV2UDF().evaluate("河北省石家庄市高新区万达广场,好美啊", natureList));}
}

更新脚本

#! /bin/sh
#设置所使用数据库
db_name=tianliangedu
#设置jar包位置
jar_path=hdfs:///user/zel/jars/TlHadoopCore-jar-with-dependencies.jar
#设置udf classpath
class_path="com.tianliangedu.hive.udf.CwsV2UDF"
#数据的来源表
from_table=weibo_product
#要生成的数据表
to_table=weibo_seg_result
#初始化nature白名单nature_list='n,nr,nr1,nr2,nrj,nrf,ns,nsf,nt,nz,nl,ng,nw,v,vd,vn,vf,vx,vi,vl,vg,a,ad,an,ag,al'
#发起执行hql脚本
hive -e "use $db_name;add jar $jar_path;create temporary function seg as '$class_path';from (select * from $from_table where day_seq='20120102') tempinsert overwrite table $to_table partition(day_seq)
select mid,retweeted_status_mid,uid,retweeted_uid,source,text,seg(text,'$nature_list') as text_seg,geo,created_at,day_seq;
insert overwrite table weibo_seg_wc partition(day_seq)
select word,count(1) as freq,day_seq from weibo_seg_result lateral view explode(split(text_seg,'\001')) word_table as word where day_seq='20120102' and text_seg is not null and length(word)>1 group by day_seq,word order by freq desc;

优化生成倒排表-优化加入按词性过滤-V3

  • 更新词性白名单列表
#! /bin/sh
#设置所使用数据库
db_name=tianliangedu
#设置jar包位置
jar_path=hdfs:///user/zel/jars/TlHadoopCore-jar-with-dependencies.jar
#设置udf classpath
class_path="com.tianliangedu.hive.udf.CwsV2UDF"
#数据的来源表
from_table=weibo_product
#要生成的数据表
to_table=weibo_seg_result
#初始化nature白名单nature_list='n,nr,nr1,nr2,nrj,nrf,ns,nsf,nt,nz,nl,ng,nw'
#发起执行hql脚本
hive -e "use $db_name;add jar $jar_path;create temporary function seg as '$class_path';from (select * from $from_table where day_seq='20120102') tempinsert overwrite table $to_table partition(day_seq)
select mid,retweeted_status_mid,uid,retweeted_uid,source,text,seg(text,'$nature_list') as text_seg,geo,created_at,day_seq;
insert overwrite table weibo_seg_wc partition(day_seq)
select word,count(1) as freq,day_seq from weibo_seg_result lateral view explode(split(text_seg,'\001')) word_table as word where day_seq='20120102' and text_seg is not null and length(word)>1 group by day_seq,word order by freq desc;

优化生成倒排表-加入热词黑名单-V4

  • 创建停用词表
CREATE external TABLE weibo_stopwords(
word string
)
comment 'weibo stopwords'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
STORED AS textfile;
  • 将停用词集合加入到停用词表
LOAD DATA LOCAL INPATH '/home/hive/corpus/stopwords/*' OVERWRITE INTO TABLE weibo_stopwords;
  • 在生成词频倒排表时,过滤停用词表
insert overwrite table weibo_seg_wc partition(day_seq)
select main.word,freq,day_seq from
(select word,count(1) as freq,day_seq from weibo_seg_result lateral view explode(split(text_seg,'\001')) word_table as word where day_seq='20120102' and text_seg is not null and length(word)>1 group by day_seq,word order by freq desc) main
left join (select word from weibo_stopwords) filter
on main.word=filter.word
where filter.word is null

将hive表推送到mysql表中

将hive表数据生成到文件中

insert overwrite directory "/user/zel/corpus/hot_words"
row format delimited fields terminated by '\t'
select * from weibo_seg_wc where day_seq='20120102' order by freq desc limit 100;

拥有一个mysql库,以及相应的读写权限(经典的多用户共享使用关系型数据库操作方法)

通过root帐户创建相应用户,并赋于相应的权限(一般是针对每个用户分配一个数据库,与之相对应,使用户之间互相不影响)

  1. mysql -uroot -p登陆进去。
  2. 创建新用户:CREATE USER ‘name’ IDENTIFIED BY ‘password’;
  3. create database test DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
  4. 为数据库操作赋权-可以从本地访问mysql: GRANT ALL ON database.*TO’username’@‘localhost’ IDENTIFIED BY ‘password’;
  5. 为数据库操作赋权-可以从任意远程访问mysql: GRANT ALL ON database.* TO’username’@‘%’ IDENTIFIED BY ‘password’;
  6. flush privileges ( 重启mysqld服务也可以 );

在mysql中创建词频表weibo_hot_words

CREATE TABLE `weibo_hot_words` (`id` int UNSIGNED NOT NULL AUTO_INCREMENT,`word` varchar(255) DEFAULT NULL,`freq` int DEFAULT NULL,`day_seq` int DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

执行mysql命令将weibo_hot_result.txt导入到weibo_hot_result表中(synchronized_data_to_mysql.sh)

#! /bin/sh
mysql –h host -uroot -p******** -e "use yuqing_oncourse;LOAD DATA LOCAL INFILE './hot_words/000000_0' INTO TABLE weibo_hot_words FIELDS TERMINATED BY '\t' (word,freq,day_seq);

web展示

  • entity层
package com.tledu.springboot.springboot01.model;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class WeiboHotWord {private int id;private String word;private int freq;private int daySeq;
}
  • mapper层
package com.tledu.springboot.springboot01.mapper;import com.tledu.springboot.springboot01.model.WeiboHotWord;
import com.tledu.springboot.springboot01.model.sourceo;
import org.apache.ibatis.annotations.Mapper;import java.util.List;@Mapper
public interface WeiboHotWordMapper {List<WeiboHotWord> sel();List<WeiboHotWord> sel1(String yearNum);List<WeiboHotWord> sele();List<String> selo();List<sourceo> sel5();
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
namespace 是用于调用的时候的映射
-->
<mapper namespace="com.tledu.springboot.springboot01.mapper.WeiboHotWordMapper"><!--id : 表示调用的SQL的名字,相当于方法名parameterType : 表示传入参数的类型,写类全名,但是由于设置的别名,所以可以写UserresultType : 结果集类型--><select id="sel" resultType="com.tledu.springboot.springboot01.model.WeiboHotWord" >select * from cc_weibo_hot_words order by freq desc limit 100;</select><select id="sel1" parameterType="string" resultType="com.tledu.springboot.springboot01.model.WeiboHotWord" >select * from cc_weibo_hot_words where day_seq=#{yearNum};</select><select id="sele" resultType="com.tledu.springboot.springboot01.model.WeiboHotWord">select day_seq from cc_weibo_hot_words group by day_seq;</select><select id="selo" resultType="String">select sum(sum) from cc_weibo_source;</select><select id="sel5" resultType="com.tledu.springboot.springboot01.model.sourceo">select * from cc_weibo_source limit 5;</select></mapper>
  • dao层
package com.tledu.springboot.springboot01.dao;import com.tledu.springboot.springboot01.model.WeiboHotWord;
import com.tledu.springboot.springboot01.model.sourceo;
import org.springframework.stereotype.Repository;import javax.xml.transform.Source;
import java.util.List;@Repository
public interface WeiboHotWordDao {public List<WeiboHotWord> sel();public List<WeiboHotWord> sel1(String yearNum);public List<WeiboHotWord> sele();public List<sourceo> sel5();
}
package com.tledu.springboot.springboot01.dao.impl;import com.tledu.springboot.springboot01.dao.WeiboHotWordDao;
import com.tledu.springboot.springboot01.mapper.WeiboHotWordMapper;
import com.tledu.springboot.springboot01.model.*;
import lombok.AllArgsConstructor;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;import java.util.List;@Repository
@AllArgsConstructor
public class WeiboHotWordDaoImpl implements WeiboHotWordDao {private WeiboHotWordMapper weiboHotWordMapper;@Overridepublic List<WeiboHotWord> sel() {//        String sql="select * from cc_weibo_hot_words";List<WeiboHotWord> wordList= weiboHotWordMapper.sel();return wordList;}@Overridepublic List<WeiboHotWord> sel1(String yearNum) {//        String sql="select * from cc_weibo_hot_words";List<WeiboHotWord> wordList= weiboHotWordMapper.sel1(yearNum);return wordList;}@Overridepublic List<WeiboHotWord> sele() {List<WeiboHotWord> list= weiboHotWordMapper.sele();return list;}@Overridepublic List<sourceo> sel5() {List<String> list1 = weiboHotWordMapper.selo();List<sourceo> list2 = weiboHotWordMapper.sel5();int num1=0;int num2=0;num2=Integer.valueOf(list1.get(0));for (sourceo so:list2) {num1+=Integer.valueOf(so.getSum());}num1=num2-num1;sourceo s=new sourceo();s.setSource("其他");s.setSum(String.valueOf(num1));list2.add(s);return list2;}}
  • controller层
package com.tledu.springboot.springboot01.controller;
import com.tledu.springboot.springboot01.dao.WeiboHotWordDao;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
@AllArgsConstructor
@RequestMapping("/words")
public class WeiboHotWordController {@Autowiredprivate WeiboHotWordDao weiboHotWordDao;@GetMapping("/hot")public String index(ModelMap modelMap,String daySeq) {System.out.println("1");modelMap.put("yearlist",weiboHotWordDao.sele());if (daySeq=="" || daySeq==null){modelMap.put("list", weiboHotWordDao.sel());}else {modelMap.put("list", weiboHotWordDao.sel1(daySeq));}return "words";}@GetMapping("/pie")public String index1(ModelMap modelMap) {System.out.println("1");modelMap.put("list",weiboHotWordDao.sel5());return "pie";}}
  • web前端页面
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>微博2012热词云图</title><script src="js/echarts.min.js"></script><script src="js/jquery-3.5.1.js"></script><script src="js/echarts-wordcloud.js"></script>
</head>
<body>
<input type="hidden" id="yearid" name="yearid" value="">
<select id="yearnum" name="yearnum"><option value="20120102">2012-01-02</option><option value="20120103">2012-01-03</option><option value="20120103">2012-01-04</option>
</select>
<div id="main" style="width: 800px;height: 800px; "></div><script type="text/javascript">var mycharts = echarts.init(document.getElementById("main"));var jsonlist = [];$(function (){$.ajax({type:"GET",url:"/sysUser/roles",data:"",dataType:"json",success:function(vo){let list=vo.list;for(let i=0;i<list.length;i++){let id=list[i].id;let roleName = list[i].roleName;$("#yearnum").append('option value="'+ id +'">'+roleName+'</option>');}}});$("#yearnum").change(function(){var roleId=$("#yearnum option:selected").val();$("#yearid").val(yearid);})})//用来存储数据$.ajax({type:"post",url:"/word",dataType:"json",async:false,success:function (result) {for (var i = 0; i < result.length; i++){jsonlist.push({"name": result[i].word,"value": result[i].freq,},);}},error :function(errorMsg) {alert("获取后台数据失败!");}});// 人像的base64编码// image1= "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAQmklEQVR4Xu2dCdSuUxXHf7hkjIWEXC6ZQ4ZcM5kryTzUJVaIjJEQZVjIlHnWMs9uIssURciUeapUkqEoSgmZrtv6f8693m94v+993+d53+fZ++y91re+y/c+5+z93+f/nuecs8/eUxBSJwSmAxYBFk0/i6XfCwFvAS8DTwGnAXfVSXGvukzh1bCa2/XJBhI0kmFeoFWfPAIcA1xZc1tNq9eqM0wbWZHyUwELDJgJRAbNCrOUqNNDwEHAz0tsM5pKCARByhkKGvDbAssBeh2aB/gUIJL0Sm4AdgFe7FWHOfQTBCnu5Z2B44CZijdVuIU3gYOBk4APCrcWDbT8vhtQDUZgBuBIYK8agqPXrnHA0zXUzZRKMYMMdtf8aZ0wBlgQWByYFngV+DGwbPr/GwBabNdV3gUOSQv5iXVVsu565U4Q2b8GsDawWlpDzFh3p7Wp3+3AV4G/t/lcfLyNLUVvYI0C9kivR/N5M24Ie14B9gEuycDWUk3McQYZmwaKdptyEx0ungzcDGhBHzICArkRZBvgXGCazEfGe8DDwNvA9MAygGbVRtEa5hngT+nnNuAmYEJO2OVEEL2HX5rxa2UZ41qhLucAZ6awlzLarHUbuRBksxSS0cuDu1o7vqByigvbDzi9YDu1fzwHgnwBuL7Hp9q1d3xJCp4P7AC43Ub2ThBt2eo9eo6SBkQ0MxiBH6ZYMJfYeCfIWYBCQUK6h4BCWlYG7u9eF9W17JkgOvi7szpos+pZofcK1HT3quWZIHLa0lkN02qN3RIYX60K5ffulSDrAreUD1e0OAwCtwLreUPIK0G0a6VgwpDeIaDXK92IdHUfxSNBRgPPxYFg75jR0NO+wPGV9NylTj0S5HuAth5Deo/A1cDmve+2ez16JMjjwJLdgyxaHgaB5wFX0dHeCLJw3KKrnMA6nHUTKeyNILrz4OoduPLh3r4COjS8t/3H6vmEN4JcC2xUT6iz0UpXChQ17UK8EeRvwFwuPGPXiAOBo+yq319zTwSZLSVW8OIbq3YoBH53q8oP1NsTQVaNfLW1GJaXpZRDtVCmqBKeCLIFcFVRQOL5wgjc6CmKwRNBFNau8PaQahHQDpZ2slyIJ4Ic4GlxaHh0PQEsZVj/fqp7IojCSxRmElItAtpJVOJuF+KJIMr3tKcLr9g24p2UqtW2FUl7TwRROpqdXHjFvhFuwk08EeRiQKe4IdUjoIBFBS6aF08EUSkyXfsMqR4BRVM/Wb0axTXwRJCIwyo+HspqwU3AoieCqATZl8rycLRTCAEl63NRM9ETQZSkQckaQqpHYBNAM7p58UQQZR9f07xHfBjwNeByD6Z4IsgdwOoenOLABuXrPc+BHa6KeP4aWMWDUxzYsBtwhgM7XBHkbk9BcsYHl+6DuCiN4OkV6x5gJeMDy4v6Ko19igdjPBFEYdYrenCKAxuUPONEB3a4esUKgtRnRLrJsBgzSH0GlSdN9gZO8mCQJ4LEGqQ+IzLWIPXxxWRN4hykPk6JXaz6+GKyJrcDn6+hXjmqtGOqR2/edk+vWCrgso55j/gwYByg9D/mxRNBbgIURRpSPQKbAtdUr0ZxDTwR5Dpgw+KQRAslILAWoFde8+KJIHGjsD7D8bOA6rSYF08EuRD4unmP+DBAaX+U/se8eCLImcAu5j1i34BI+1NTHyq84bia6paTWg8Dy3kx2NMMsoeXCFLjg+sSYFvjNkxW3xNBLgC28+IYw3ZEfZAaOk9T+n3AqBrqlptKDwFjgQ88GG55BtHdD+23fzFdtbVsi4ex1GiDUv7oC+tZ4CeWq95aHVT7A0d7G1VO7Xk1RThoZjEnFgmyQiozbFF3cwOkJIX/DcwP6LcpsTjILvK0S2JqtBRT9lSL5SmsEUT6vgbMXMxX8XQFCLwJzA68XUHfHXdpjSDLADqICrGJwEaAgkrNiDWCKKXlpWbQDUUHInAk8H1LsFgjiGoQqhZhiE0Ebk7b8ma0t0YQxVop5irEJgJ/ABaxpLo1gpwNfNMSwKFrPwQmAFMDE63gYo0g5wPbWwE39BwSAe1Avm4FG2sEiTMQKyOruZ6mCnxaI0hE7NonyBLAU1bMsEYQ1Zz4lhVwQ88hEdBZ1qNWsLFGkNjFsjKymuupUPgHrJhhjSAHAUdYATf0HBKB5YEHrWBjjSA7A2dZATf0HBKBJYEnrWBjjSDK2He1FXBDzyERWBB4xgo21giiIp0q1hliF4G5gJetqG+NIGPSNU4r+IaegxH4GPCuFWCsEURJGd5K4QpWMA49P0JAd0JmtASINYII298Ci1kCOXSdjIC5pHIWCaJFuhbrIfYQOAw41JLaFgnyI+A7lkAOXfsQeB+YF3jJEh4WCaJoXkX1hthCQFVvVf3WlFgkyNzAi+CqxrupQdOBsqrdouvS5rItWiSI/KOrm+t34Kh4pPcIKLPi1oAuS5kTqwTRtU3F85jaMjQ3Ooop/B9gH+C8Ys1U+7RVggg1lXzWt9Ns1UIYvQ+BwK8AVbo1X2XKMkHkl3lSueHVYpjWAoEXgAO8lIAWotYJMskGRfkeC8xUi2GSnxLKlng4cIK1zIkjucoDQSbZOEvaKdkBWHYkw+PvpSGg+vTKNKOdRXfiiSCNzlGKy2vdeat+Br0HfALQgtyleCWInPXnlHLfpeNqYtR4YMua6NIVNTwTZD/gmK6gFo1OQmBt4DbPcHgmiM5ItKuitUlI+QiYi8ztBALPBBEeihw9pBNg4pkREdgkh3Wed4JMBzwNjB7R3fGBdhB4DFi6nQesftY7QeSXjYFrrDqopnpvCFxfU91KVSsHgggwRZO63m0pdVQM39jtqfx2D7usrqtcCDIr8EdAv0M6R0An5p9JW+idt2LoyVwIIpesA6jA/ZSG/FM3VZXZMqsKXzkRRIMtzkY6p9zvgKXS1dnOWzH2ZG4EkXuuALYy5qeq1VUeK8W3mSlbUBZgORJEict0X2HFskDMoJ1dgTMzsHOQiTkSRCDodF0pTLXgDBkeASXI+EauIOVKEPlbNxHvARbO1fkt2K0vEd3cNHmfvAX7RvxIzgQROMqQop0tlQUL6Y+AIhBWBv6VMzC5E0S+nxY4N122ynksNNquIE+t0czfKS/q0CDIhwjqbOR0YJeigDp4XiWaVwB+78CWwiYEQfpDqLgtzSa5nri/kQ5U7y88spw0EAQZ7EitS1TmTQF5OYmK2igZ3+M5GT2SrUGQ5gjtBSifbA7yRMp+qNISIQ0IBEGaD4c5rWUi73BkKwBR+cX+2eHzrh8LgjR37wyA3sm9i2YPxViFDIFAEKT5sJgqk8C8rO53tPstEAQZHrF3gGnaBdXY51Wxa3NjOvdM3SBIc6h1NqL386l75o1qOtLZz9nVdF3/XoMgw/tI4d2L19+NHWuogjazA6913ILzB4Mgwzv4YmAbx2PgUWAZx/YVNi0IMjyEBwOqzOpVzgGUGT+kCQJBkOGHxh7AKY5Hj74AVLYgJAjS0Rj4NnBiR0/aeCgW6CP4KWaQ4QE6PtXZszHc29cy26u0rUIVBBkeKd2oW6VVMA1+TtnvVTItJF6x2h4DH0+36XSi7lX0BRD1HYfxbswgzcFRkrQjvDIj2TUxFRl6zrmdHZsXBBkaOpUVeyaToqDxmhUzSFtfIAoxUTb4r7T1lN0Pv5WSVjxr14TuaR4zSH9std64EBjXPchr2bIymCwP/LeW2lWoVBDkI/BVbEeVcder0B9Vdv0IsG5cnOrvgiDIh3ioApVqiKxU5QitQd/Pp4JDIksIkDtBpk8HgdqxUn6sEFDt86PSDp7+nbXkShARQ0F6B6Zw76wHQRPjVXBo/9zL1+VEENmqheimKUHczMGKlhBQXRCF/V8GZHde4p0gsm/VdKdDZYt1vhHSOQKqja4t8BsBrVN00OhaPBFEtqicgX4WTT+Ko4oS0N0Zwq8AtwC3AUr84PIcxSpBRgGLpHQ1uhH3OWAsoFQ9IdUgoCzwOk/RjxLQKZ2QsjSaToBthSCaFdYClkuk0H97zzZSzTAvv9dXE1H0SnZfmm3MJKmrK0HmAzZIxVtUwCXWDuUP3Kpa1LpFyTBUBk+vZqrP8mZVyozUb50IovQ6in/aMSVRrpNuI+EYf+8cAaVWugm4CrgOUGxYbaQOg1B5YXX3W3XwlIImJF8ERJafpmvOD9YBhioJovJeuvOtcwnPl5Lq4GeLOmi9onwAIsz7VRlQBUFUvejkVMWoKrujXzsI6ER/vxRI2nOte0mQ+YGjgS17bmV06AGBu4HdASW765n0giDajv1B+haIrdmeudZlR0qVemwaTz157eo2QVQp9SJgIZfuCqOqQkBnKlsBev3qqnSLILq2qgWWdqe61UdXgYnGa4+Adrx0JHBpNzXtxuBVuhwFtOnkOyQQ6DYC+iL+LjChGx2VTZAFgZuBT3dD2WgzEGiCwC8BRWuXfqe+TIIsCfwCmCPcGAhUgICCI9cB/lFm32URRId+mjlmKlO5aCsQaBOBvySSKKdZKVIGQRRhq8CzGUvRKBoJBIoh8ELKp6zfhaUoQRYD7gXi+mphV0QDJSKgmWR1oDBJihBkznTtUr9DAoG6IaC79DqHe72IYp0SREnWFEwWBeiLoB/PdhuBO4C1i2wBd0qQK9JJZrcNjPYDgaIInArs2WkjnRBkJ0DFH0MCASsIbAz8rBNl2yWIaoY/FFkIO4E6nqkQAR0gKrlH29u/7RBEqTmVF0k7VyGBgDUEHkuJA9tKp9oOQc6KmtrWxkToOwCBM4Dd2kGlVYIo8FDxLiGBgHUEtKulZHctSSsEUTI2pWlRKp6QQMA6Ai+m44nXWjGkFYJcAGzXSmPxmUDACAK6vrsmH5Z6GFZGIsgWKV/RSO3E3wMBawgocYiy6nRMEOW+VW6iCEIcCcX4u1UEtk6VxZrq32wGUQiJ0kLOatXy0DsQaAGBd1NdxjubfXYogogUunwydwsdxEcCAesIaLGuKxtDlm8YiiDnA9tbtzr0DwTaQECLdhVaGiQDCaJTcm3pjrR4b6Pv+GggYAKBLwM3DNR0IBEUhKhgxJBAIDcEdCtWW7/9pJEgynqo9zFVgA0JBHJEQIlHnmw0vJEg66aaczkCEzYHAkLgGOCAZgQ5Dtg3cAoEMkbg+YEhVY0zyG9SOHDG+ITpgUBflWQVIe2TSQRRQKIulcTuVYyQ3BFQOLzC4vsRRInftBccEgjkjsD4xho2k2aMXYHTc0cm7A8EUi6teQfOIKe1e9MqoAwEHCOgwrJ/bVyDKOm0blqFBAKBAGyWiodOXpRre2t0IBMIBAJ9CBwOHDxpBhnVys2qAC4QyAgBxWQpNqtvBlmgk3xBGYEVpuaHgJJe9y3URZA1UvmC/GAIiwOB5gio1s0bIoiuHV4eSAUCgUA/BMYCD4ggewMnBDiBQCDQD4FxwGUiyJHAgQFOIBAI9EPgUOAwESRSisbICAQGI3AJsK0IcmVj7EkgFQgEAn0I3KUybiKIqtOuH6AEAoFAPwQUajKPCKIoXkXzhgQCgcBHCEwEphJBlANriUAmEAgEBiEwWgRRwqwxAU4gEAgMQmBFEeQlIEo5x+gIBAYjsLEIolQ/swQ6gUAgMAiBXUWQ/0VRzhgagcCQCBwqgqiIiELeQwKBQKA/AmeIIBOAKQOZQCAQGITAeBFE+70hgUAgMBiBW/8PLAMCa7j6evUAAAAASUVORK5CYII="image1= "data:image/jpeg;base64,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"var maskResource = new Image()maskResource.src=image1;var option ={//设置标题,居中显示title:{text: '微博2012热词云图',left:'center',},//数据可以点击tooltip:{},series:[{maskImage:maskResource,//词的类型type: 'wordCloud',//设置字符大小范围sizeRange:[6,78],rotationRange:[-45,90],textStyle: {normal:{//生成随机的字体颜色color:function () {return 'rgb(' + [Math.round(Math.random() * 160),Math.round(Math.random() * 160),Math.round(Math.random() * 160)].join(',')+')';}}},//不要忘记调用数据data:jsonlist}]};//加载图像,将数据放在图像中maskResource.onload = function(){mycharts.setOption(option)};
</script></body>
</html>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>词云图</title><script th:src="@{/js/echarts.min.js}"></script><script th:src="@{/js/echarts-wordcloud.min.js}"></script><style>#main {height: 500px;}</style>
</head>
<body>
<h1>热点词云图</h1><form><select name="daySeq"><option  th:each="item:${yearlist}" th:value="${item.daySeq}" th:text="${item.daySeq}"></option></select><button onclick="sou()" >搜索</button>
</form><!--<form>-->
<!--  <select>-->
<!--&lt;!&ndash;    <option value="" selected="selected">全部</option>&ndash;&gt;-->
<!--    <option th:each="item:${yearlist}" th:value="${item.daySeq}" th:text="${item.daySeq}"></option>-->
<!--  </select>-->
<!--  <button οnclick="sou()">搜索</button>-->
<!--</form>--><div id="main"></div><script th:inline="javascript">var list = [[${list}]]// 学过map这个api吗?基于当前的数组生成一个新的数组// console.log(list.map(function (item) {//     return {name: item.word, value: item.freq}// }))// 学过箭头函数吗// console.log(list.map((item) => {//     return {name: item.word, value: item.freq}// }))// 箭头函数的简写// console.log(list.map(item => ({name:item.word,value:item.freq})))var chartDom = document.getElementById('main');var myChart = echarts.init(chartDom);var option = {tooltip: {},series: [{type: 'wordCloud',gridSize: 2,sizeRange: [12, 50],rotationRange: [-90, 90],shape: 'pentagon',width: 600,height: 400,drawOutOfBound: true,textStyle: {color: function () {return 'rgb(' + [Math.round(Math.random() * 160),Math.round(Math.random() * 160),Math.round(Math.random() * 160)].join(',') + ')';}},emphasis: {textStyle: {shadowBlur: 10,shadowColor: '#333'}},data: list.map(item => ({name:item.word,value:item.freq}))}]};myChart.setOption(option);</script>
</body>
</html>

离线数据统计及词云图显示相关推荐

  1. 小白都能学会的Python基础 第六讲:综合实战2 - 大数据分词与词云图绘制

    1.华小智系列 - Python基础(案例版) <Python基础>目录 第六讲:综合实战2 - 大数据分词与词云图绘制 1.大数据分词技巧 2.词频统计技巧 3.词云图绘制 4.微博词云 ...

  2. 【实战】词频统计及词云图制作

    写在开头 最近对词云有些兴趣,就自己瞎琢磨研究一些这方面的知识,期间也遇到一些小问题,写下此篇文章留作备注吧. 研究对象 金庸老先生的<天龙八部> 正式开始(微笑脸) 统计字频 (1)先统 ...

  3. Python基于WordCloud词云图的数据可视化分析 词云图的基本使用 政府工作报告分析

    Python基于WordCloud词云图的数据可视化分析 词云图的基本使用 政府工作报告分析 文章目录 1.词云图简介 2.wordcloud库的安装 3.WordCloud的主要参数说明 4.绘制词 ...

  4. 评论数据获取、词频统计、词云图

    # coding: utf-8 # In[2]: import urllib.request import re import requests import time import random i ...

  5. python 仪表盘 ppt_Python之pyecharts数据可视化,词云图,仪表盘!

    一.词云图 词云就是通过形成关键词云层或关键词渲染,过滤掉大量的文本信息,对网络文本中出现频率较高的关键词的视觉上的突出. import jieba import collections import ...

  6. python文本词频统计是字典吗_Python文本挖掘: 词频统计,词云图

    在中文的文本挖掘中,对海量文本进行准确分词是其中至关重要一步.当前的Python语言下存在多种开源文本分析包,其中jieba这个包能够提供相对高效的分词方案. 结合jieba代码和一些相关资料,基本得 ...

  7. python数据可视化—WordCloud词云图

    WordCloud词云图 简介 准备工作 代码 运行效果 生成背景图片 设置停止词 按照背景图片颜色生成字体颜色 简介 "词云"是通过形成"关键词云层"或&qu ...

  8. 易数云数据抓取词云图制作

    "文字云"就是对文本数据中出现频率较高的"关键词"予以视觉上的突出,形成"关键词云层"或"关键词渲染".文字云本身对分析 ...

  9. 5.2 数据可视化分析——词云图绘制

    5.2.1 用jieba库实现中文分词 要从中文文本中提取高频词汇,需要使用中文分词(Chinese Word Segmentation)技术.分词是指将一个文本序列切分成一个个单独的词.我们知道,在 ...

最新文章

  1. win定时关机_如何将电脑设置为定时关机?
  2. python打印出指定目录下的所有文件夹和文件名(递归实现)
  3. mxnet参数初始化,查看
  4. Android开发环境——模拟器AVD相关内容汇总
  5. 【pmcaff】O2O的背后价值:数据将成为O2O真正核心
  6. 【ABAP增强】基于函数的出口CMOD
  7. 在VS中创建多个项目
  8. jquery.uploadify flash IE6上传无效
  9. 一键安装zabbix监控redis
  10. oppo手机快速截屏的方法
  11. WORD排版视频教程
  12. python 视频培训
  13. memcached 详解
  14. HTML的head,头头头头!!!
  15. 优秀的第二外语学习网站:Lang-8
  16. Git reset --hard commit_id 和 git reset --soft commit_id
  17. SParC: Cross-Domain Semantic Parsing in Context 论文解读
  18. word文档保存的时候,就会出现“文件许可权错误,word 无法完成保存文件”的提示
  19. 一影碎念,一场风花,浅吟低唱成悲曲:伤感日志
  20. PS--怎么取消之前选择的工具?

热门文章

  1. gnome桌面 kde_GNOME和KDE在Linux桌面上合作,为Nvidia GPU打开文档,这是一种强大的扫描固件漏洞的新方法,还有更多新闻...
  2. 微盟WOS正式发布,打造去中心化商业操作系统
  3. 极客窝技术交流会-0930
  4. html支付宝移动端,jQuery仿移动端支付宝键盘的实现代码
  5. View系列:硬件加速,从理论到实践
  6. vue-video-player 点击播放自动全屏及安卓端样式兼容问题
  7. 修复Recast导航折返问题
  8. android 自定义加载动画效果,Android自定义View实现loading动画加载效果
  9. 【通俗易懂的通信】马尔可夫过程Ⅰ:马尔可夫链、齐次马尔可夫链、CK方程
  10. 单木分割实验之距离聚类(实验五)