R词云--wordcloud2
2017-08-26 21:45
183 查看
wordcloud2是基于wordcloud2.js封装的一个R包,使用HTML5的canvas绘制。浏览器的可视化具有动态和交互效果,相对于曾经的R包worldcoud,wordcloud2还支持任意形状的词云绘制.
颜色包括背景色和词语颜色,分别对应backgroundColor和color两个参数。这两个参数可以接受CSS认可的任意的参数值,如’red’,’blue’或者’rgb(0,0,0)’以及十六进制的’#ff2fe9’等。
另外color参数有更多可接受的参数:
内置的随机色生成方案:random-light和random-dark,在javasript里定制了相应的随机函数
javasript回调函数: 用js撰写任意的颜色生成函数,如
此处需要使用htmlwidgets的JS函数把字符形式的参数值解析成js函数。
R中的函数向量:
js回调函数想必让很多纯R语言用户懵逼,最简单的方式是传入一个定制后的颜色向量。wordcloud2(demoFreqC, color=ifelse(demoFreqC[, 2] > 2000, ‘#f02222’, ‘#c09292’)这行代码R语言函数代替了js回调函数,效果相同。
2、定制形状
定制形状,最简单的方式就是定义shape参数,如wordcloud2(demoFreqC,shape=’star’)。还支持’diamond’,’cardioid’等参数(都是在js脚本中预定义好的对应的函数),更多请看函数帮助文档。
内置的几个参数并不十分有趣。wordcloud2允许你传入一张图片,把词云填充在图中的黑色区域。这样,找到一头牛和一匹马,你的云就可以变换了。
另外,如果想画成字符形状,你可能需要先画出字符,再使用wordcloud2函数绘制。贴心的作者郎老师早已定制好了相应的接口letterCloud函数,试试运行letterCloud(demoFreqC, word = ‘R’)。
该函数背后的逻辑如上所述,先画出图片再传入figPath参数。到这里,不禁想起cos一篇文章:showtext:字体,好玩的字体和好玩的图形,文中使用showtext包调用神奇的字体画出好玩的图形。
A、
B、
C、
一个完整的例子:
此处也可以如法炮制,下载wmpeople1.TTF字体绘制出男人和女人的图案,再调用wordcloud2绘制相应形状的词云。
1.下载字体,画黑色图像
2.接下来在淘宝首页搜索’男’和’女’两个关键词。对搜索结果的网页做处理,分词和词频统计。计算TF-IDF指标并用词云展示。绘制词云的数据应当是长尾分布的,即大量低频词和少数高频词。高频词刻画特点,低频词填充剩余位置,达到醒目和美观的效果。因此处理过程中对TF-IDF为0或者缺失的值都填充为1,以便让这些低频词显示出来。
3、 分词 -> 计算tf-idf
4.绘制词云
交互
默认生成的词云是自带交互效果的。鼠标悬浮某个词上会显示相应的词频,这是内置的js回调函数效果。可以自编js函数覆盖,比如下边的代码传入一个空函数,画出的词云就没有交互效果了。
wordcloud2.js的API文档。
感谢wordcloud2作者郎大为老师和wordcloud2.js的作者timdream。
转自:http://www.xueqing.tv/cms/article/226
一、
安装好以后,包内含有两份data.frame格式的词频数据:英文版的demoFreq和中文版的demoFreqC,使用wordcloud2直接绘制即可。library(wordcloud2) wordcloud2(demoFreq) wordcloud2(demoFreqC) ##自己构造的 #rpois(26,20) 随机生成的泊松分布:数量 mean df = data.frame(letters, rpois(26, 20)) wordcloud2(df)
二、两个重要方法
1、定制颜色颜色包括背景色和词语颜色,分别对应backgroundColor和color两个参数。这两个参数可以接受CSS认可的任意的参数值,如’red’,’blue’或者’rgb(0,0,0)’以及十六进制的’#ff2fe9’等。
另外color参数有更多可接受的参数:
内置的随机色生成方案:random-light和random-dark,在javasript里定制了相应的随机函数
javasript回调函数: 用js撰写任意的颜色生成函数,如
js_color_fun = "function (word, weight) { return (weight > 2000) ? '#f02222' : '#c09292'; }" wordcloud2(demoFreqC, color = htmlwidgets::JS(js_color_fun), backgroundColor = 'black')
此处需要使用htmlwidgets的JS函数把字符形式的参数值解析成js函数。
R中的函数向量:
js回调函数想必让很多纯R语言用户懵逼,最简单的方式是传入一个定制后的颜色向量。wordcloud2(demoFreqC, color=ifelse(demoFreqC[, 2] > 2000, ‘#f02222’, ‘#c09292’)这行代码R语言函数代替了js回调函数,效果相同。
#定制颜色两种方式 ###直接传递 wordcloud2(demoFreqC, color = ifelse(demoFreqC[, 2] > 2000, 'red', 'blue')) # js回调 js_color_fun = "function (word, weight) { return (weight > 2000) ? 'red' : 'blue'; }" wordcloud2(demoFreqC, color = htmlwidgets::JS(js_color_fun), backgroundColor = 'black')
2、定制形状
定制形状,最简单的方式就是定义shape参数,如wordcloud2(demoFreqC,shape=’star’)。还支持’diamond’,’cardioid’等参数(都是在js脚本中预定义好的对应的函数),更多请看函数帮助文档。
内置的几个参数并不十分有趣。wordcloud2允许你传入一张图片,把词云填充在图中的黑色区域。这样,找到一头牛和一匹马,你的云就可以变换了。
另外,如果想画成字符形状,你可能需要先画出字符,再使用wordcloud2函数绘制。贴心的作者郎老师早已定制好了相应的接口letterCloud函数,试试运行letterCloud(demoFreqC, word = ‘R’)。
该函数背后的逻辑如上所述,先画出图片再传入figPath参数。到这里,不禁想起cos一篇文章:showtext:字体,好玩的字体和好玩的图形,文中使用showtext包调用神奇的字体画出好玩的图形。
######例子 定制形状 #A、提供的形状 wordcloud2(demoFreqC,shape='star') #B\\ziji 造型,传图片 wordcloud2(demoFreqC, figPath='F:/niu.jpg') #C\ 画成文字模样 letterCloud(demoFreqC, word = 'w')
A、
B、
C、
一个完整的例子:
此处也可以如法炮制,下载wmpeople1.TTF字体绘制出男人和女人的图案,再调用wordcloud2绘制相应形状的词云。
1.下载字体,画黑色图像
link = "http://img.dafont.com/dl/?f=wm_people_1"; download.file(link, "wmpeople1.zip", mode = "wb"); unzip("wmpeople1.zip"); font.add("wmpeople1", "wmpeople1.TTF"); plot_shape <- function(filename, char){ CairoPNG(filename, 500, 400) ##名,宽,高 showtext.begin(); # plot.new() offset = par(mar = par()$mar) par()$mar#The default is c(5, 4, 4, 2) + 0.1. op = par(mar = c(0,0,0,0)) text(0.6, 0.5, char, family='wmpeople1', cex=32) #text(0.6, 0.8, 'u', family='wmpeople1', cex=32) # x,y 位置 cex大小 par(offset) showtext.end(); dev.off(); } plot_shape('female.png', 'u') plot_shape('male.png', 'p')
2.接下来在淘宝首页搜索’男’和’女’两个关键词。对搜索结果的网页做处理,分词和词频统计。计算TF-IDF指标并用词云展示。绘制词云的数据应当是长尾分布的,即大量低频词和少数高频词。高频词刻画特点,低频词填充剩余位置,达到醒目和美观的效果。因此处理过程中对TF-IDF为0或者缺失的值都填充为1,以便让这些低频词显示出来。
##########读取网页内容 readChineseWords <- function (path) { # 读取网页或文件去除标点和英文,在windows则需设置encoding为'UTF-8' rawstring = readLines(path, encoding = 'UTF-8') rawstring = paste0(rawstring, collapse = ' ') s = gsub('\\w', '', rawstring, perl=TRUE) ####按照perl语言规则 s = gsub('[[:punct:]]', ' ', s) ##删除标点 return(s) } # 淘宝首页搜索'男'和'女'对应的网页链接 male_link = 'https://s.taobao.com/search?q=%E7%94%B7&search_type=item&sourceId=tb.index' female_link = 'https://s.taobao.com/search?q=%E5%A5%B3&search_type=item&sourceId=tb.index' male_str = readChineseWords(male_link) female_str = readChineseWords(female_link)
3、 分词 -> 计算tf-idf
###分词 [jiebaR中文帮助文档](http://qinwenfeng.com/jiebaR/section-3.html#-new_user_word) ## [我的博客](http://blog.csdn.net/wqh_jingsong/article/details/77587479) library(jiebaR) cc = worker() ##添加新词到词库中 new_user_word(cc,'打底裤','ddk') ##分词 male_words = cc[male_str] female_words = cc[female_str] # 计算idf idf = get_idf(list(male_words, female_words)) #ft-idf get_tf_idf <- function(words){ words_freq = table(words) df = data.frame(name=names(words_freq), freq=as.numeric(words_freq)) df = merge(df, idf, all.x = TRUE) wc_df = data.frame(words=df$name, freq=ceiling(df$count * df$freq * 10)) #ceiling 返回不大于 值 的最小整数 # 缺失和0值替换成1 wc_df$freq[wc_df$freq == 0 | is.na(wc_df$freq)] = 1 return(wc_df) }
4.绘制词云
male_df = get_tf_idf(male_words) female_df = get_tf_idf(female_words) wordcloud2(male_df, figPath = 'male.png', backgroundColor = 'black', color = 'random-light') wordcloud2(female_df, figPath = 'female.png', backgroundColor = 'black', color = 'random-light')
交互
默认生成的词云是自带交互效果的。鼠标悬浮某个词上会显示相应的词频,这是内置的js回调函数效果。可以自编js函数覆盖,比如下边的代码传入一个空函数,画出的词云就没有交互效果了。
hoverFunction = htmlwidgets::JS("function hover() {}") wordcloud2(demoFreq,hoverFunction = hoverFunction)
wordcloud2.js的API文档。
感谢wordcloud2作者郎大为老师和wordcloud2.js的作者timdream。
转自:http://www.xueqing.tv/cms/article/226
相关文章推荐
- R语言文本挖掘之jieba分词与wordcloud展现
- word_cloud
- 利用python画词云图(wordcloud)
- Word Cloud Python
- python3 云词(wordcloud)安装失败解决方案
- 【学习笔记】wordCloud的基本使用
- Python wordcloud之中文词云
- Python3网络爬虫:requests+mongodb+wordcloud 爬取豆瓣影评并生成词云
- python wordcloud 对电影《我不是潘金莲》制作词云
- Python爬取糗事百科,并利用Wordcloud进行展示
- tm/wordcloud合并变形词
- Python Word Cloud -在anaconda中把玩一下wordcloud
- Python实现中文词云(wordcloud),根据背景图片生成词云
- SolrCloud Hello Word
- echarts-wordcloud绘制词云图之空串问题。
- Python中文分词_使用介绍(wordcloud+jieba)
- Python实现微信好友签名词云的构建(itchat、jieba、wordcloud)
- Java爬取B站弹幕 —— Python云图Wordcloud生成弹幕词云
- 利用wordcloud生成云图
- Python +wordcloud 生成词云