1.使用python实现文本数据的词云可视化,阐述词云原理,数据源可以自行选定; 2.实现文本数据的one-hot编码、Bag-of-word模型,将过程阐述清楚,数据源可以自行选定;

词云可视化

随着大量的数据被产生,收集和存储,如何帮助用户理解和分析这些数据一直是一个研究热点。可视分析是一种借助交互式可视化界面对数据进行分析推理的方法。

1、何为词云?

词云又称标签云或者文字云。

标签云或文字云是关键词的视觉化描述,用于汇总用户生成的标签或一个网站的文字内容。标签一般是独立的词汇,常常按字母顺序排列,其重要程度又能通过改变字体大小或颜色来表现,所以标签云可以灵活地依照字序或热门程度来检索一个标签。大多数标签本身就是超级链接,直接指向与标签相联的一系列条目。

简而言之,就是把需要的关键词绘制成图片,通过改变字体大小或颜色来表现其重要程度。

2、词云能用来做什么?

** 数据分析是一种工具和手段,一种生产过程,那么分析结果的呈现就可以说最终的产品,也就是报告。从我们大多数人的阅读习惯来说,图像永远比文字来的更有力度。所以如何能把数据可视化呈现给读者,就是整个数据分析工作最后的,也是最重要的一环。

简而言之,字不如表,表不如图。是愿意看一堆关键词还是一目了然的云图?**

3、制作词云的步骤有哪些?

云图的制作分为:分词——统计词频——绘图

4、如何分词

** 分词就是把文章中每一句话都炸成单独的词语,分成单蹦的字就没意思了……

对于英文,分词很简单,以空格和标点进行分词就可以了**

5、如何获取专业词库?

学科专业语料库是依据某一学科或专业而建立的独具特色的专门用途语料库,其在专业词表制定、专科词典编纂以及机辅翻译等领域应用十分广泛。近年来,国内学科专业语料库呈现快速发展的趋势,数量越来越多,规模也越来越大;但同时也暴露出一系列问题,如总体发展不平衡、理论研究滞后、资源难以共享等。随着大型通用语料库建设速度放缓,规模较小的学科专业语料库将是未来语料库语言学发展的一大趋势。

使用python实现文本数据的词云可视化

pip install wordcloud

from wordcloud import WordCloud
import matplotlib.pyplot as plt# 打开文件 读取
strt = open('1.txt').read()
print(strt)# 生成对象
wc = WordCloud().generate(text=strt)# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()# # 保存文件
wc.to_file('happybirthday.png')

#wordcloud模块用于生成词云图
from wordcloud import WordCloud,ImageColorGenerator
#matplotlib是一个Python的第三方库,里面的pyplot可以用来作图
import jieba
import matplotlib.pyplot as plt
from imageio import imread#读取一个txt文件
text = open('词云可视化.txt','r',encoding="utf-8").read()#读入背景图片
bg_pic = imread('bg.png')
#生成词云图片
'''参数说明:
mask:设置背景图片   background_color:设置背景颜色
scale:按照比例进行放大画布,此处指长和宽都是原来画布的1.5倍
generate(text):根据文本生成词云 '''
wordcloud = WordCloud(mask=bg_pic,background_color='white',
font_path='msyh.ttc',
scale=1.5).generate(text)%matplotlib inline
#产生背景图片,基于彩色图像的颜色生成器
image_colors = ImageColorGenerator(bg_pic)
#绘制词云图片
plt.imshow(wordcloud)
#显示图片时不显示坐标尺寸
plt.axis('off')
#显示词云图片
plt.show()
#保存图片
wordcloud.to_file('词云可视化.jpg')

​​​​​​​

利用python实现文本数据的one-hot编码、Bag-of-word模型

1、onehot编码的优势

onehot独热编码(是因为大部分算法是基于向量空间中的度量来进行计算的,为了使非偏序关系的变量取值不具有偏序性,并且到原点是等距的。使用one-hot编码,将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点。将离散型特征使用one-hot编码,会让特征之间的距离计算更加合理。离散特征进行one-hot编码后,编码后的特征,其实每一维度的特征都可以看做是连续的特征。就可以跟对连续型特征的归一化方法一样,对每一维特征进行归一化。比如归一化到[-1,1]或归一化到均值为0,方差为1。

再贴出某位大佬的解释:使用one-hot的直接原因是现在多分类cnn网络的输出通常是softmax层,而它的输出是一个概率分布,从而要求输入的标签也以概率分布的形式出现,进而计算交叉熵之类。one-hot其实就是给出了真实样本的真实概率分布,其中一个样本数据概率为1,其他全为0.。计算损失交叉熵时,直接用1*log(1/概率),就直接算出了交叉熵,作为损失。

为什么特征向量要映射到欧式空间?

将离散特征通过one-hot编码映射到欧式空间,是因为,在回归,分类,聚类等机器学习算法中,特征之间距离的计算或相似度的计算是非常重要的,而我们常用的距离或相似度的计算都是在欧式空间的相似度计算,计算余弦相似性,基于的就是欧式空间。

使用onehot编码可以解决分类问题中的标签之间的距离问题。举个例子,假设有三个完全独立的类别,比如:胡桃:1,刻晴:2,心海:3。如果我们只赋予他们这种数值的标签,那么将导致胡桃与刻晴之间的距离<胡桃到心海之间的距离,这是有问题的,另外如果我们平均两个分类为1和3的模型,最后得到的结果却是刻晴,这也是有问题的,平均的结果应该是胡桃与心海五五开。这时我们使用onehot编码就不会出现这种问题,例如:胡桃:(1,0,0),刻晴:(0,1,0),心海:(0,0,1),这样他们三者彼此到彼此的距离都是一致的,而且这种onehot编码也更适宜于交叉熵损失函数。

2、onehot编码的缺陷

(1)忽略了真实数据之间的相关性

onehot编码的一个缺陷就是,它使得标签中的所有类别彼此之间距离或相似度都是一致的,因此,在自然语言处理中,我们还要把单词做一下word2vec做一下编码,使得语义相近的词,他们的编码向量也比较一致。在视觉模型分类中,一般使用onehot即可,因为我们的类别数不会像单词那么多。

(2)类别数量很多时,onehot向量会过长

当类别的数量很多时,特征空间会变得非常大,成为一个高维稀疏矩阵。在这种情况下,一般可以用PCA来减少维度。而且one hot encoding+PCA这种组合在实际中也非常有用。

单词编码,在该实验中,我们用2行文字进行实验,也可以选用文章

import numpy as npsamples = ['Today is Friday it is Sunny','and yesterday is Thursday it was cloudy']  # 初始数据,本例中是一个句子,当然也可以是一篇文章token_index = {}   # 构建数据中所有标记的索引
for sample in samples:for word in sample.split():   # 用split方法对样本进行分词,实际应用中,可能还需要考虑到标点符号if word not in token_index:token_index[word] = len(token_index) + 1  #为每个唯一单词指定唯一索引,注意我们没有为索引编号0指定单词max_length = 10  # 对样本进行分词,只考虑样本前max_length单词results = np.zeros((len(samples), max_length, max(token_index.values()) + 1))    # 将结果保存到results中
for i, sample in enumerate(samples):for j, word in list(enumerate(sample.split()))[:max_length]:index = token_index.get(word)results[i, j, index] = 1.print(token_index)#输出纵向的单词字典
print(results) #输出两行文字的单词分布情况
print(results.shape)#输出矩阵的规模,可以从结果看出输出了2个矩阵,纵向10行,横向11行,纵向代表单词,横向代表第i元素时,该单词是否出现,出现则设置为“1”,否则为“0”
{'Today': 1, 'is': 2, 'Friday': 3, 'it': 4, 'Sunny': 5, 'and': 6, 'yesterday': 7, 'Thursday': 8, 'was': 9, 'cloudy': 10}
[[[0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.][0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.][0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0.][0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]][[0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0.][0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.][0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0.][0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.][0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]]
(2, 10, 11)

字符编码,和单词编码的方式相似,使用ASCII字符的方式进行

import stringsamples = ['The cat sat on the mat.', 'The dog ate my homework.']
characters = string.printable   # 所有可打印的ASCII字符
token_index = dict(zip(characters, range(1, len(characters) + 1)))max_length = 50
results = np.zeros((len(samples), max_length, max(token_index.values()) + 1))
for i, sample in enumerate(samples):for j, character in enumerate(sample[:max_length]):index = token_index.get(character)results[i, j, index] = 1.print(token_index)
print(results)
print(results.shape)
{'0': 1, '1': 2, '2': 3, '3': 4, '4': 5, '5': 6, '6': 7, '7': 8, '8': 9, '9': 10, 'a': 11, 'b': 12, 'c': 13, 'd': 14, 'e': 15, 'f': 16, 'g': 17, 'h': 18, 'i': 19, 'j': 20, 'k': 21, 'l': 22, 'm': 23, 'n': 24, 'o': 25, 'p': 26, 'q': 27, 'r': 28, 's': 29, 't': 30, 'u': 31, 'v': 32, 'w': 33, 'x': 34, 'y': 35, 'z': 36, 'A': 37, 'B': 38, 'C': 39, 'D': 40, 'E': 41, 'F': 42, 'G': 43, 'H': 44, 'I': 45, 'J': 46, 'K': 47, 'L': 48, 'M': 49, 'N': 50, 'O': 51, 'P': 52, 'Q': 53, 'R': 54, 'S': 55, 'T': 56, 'U': 57, 'V': 58, 'W': 59, 'X': 60, 'Y': 61, 'Z': 62, '!': 63, '"': 64, '#': 65, '$': 66, '%': 67, '&': 68, "'": 69, '(': 70, ')': 71, '*': 72, '+': 73, ',': 74, '-': 75, '.': 76, '/': 77, ':': 78, ';': 79, '<': 80, '=': 81, '>': 82, '?': 83, '@': 84, '[': 85, '\\': 86, ']': 87, '^': 88, '_': 89, '`': 90, '{': 91, '|': 92, '}': 93, '~': 94, ' ': 95, '\t': 96, '\n': 97, '\r': 98, '\x0b': 99, '\x0c': 100}
[[[0. 0. 0. ... 0. 0. 0.][0. 0. 0. ... 0. 0. 0.][0. 0. 0. ... 0. 0. 0.]...[0. 0. 0. ... 0. 0. 0.][0. 0. 0. ... 0. 0. 0.][0. 0. 0. ... 0. 0. 0.]][[0. 0. 0. ... 0. 0. 0.][0. 0. 0. ... 0. 0. 0.][0. 0. 0. ... 0. 0. 0.]...[0. 0. 0. ... 0. 0. 0.][0. 0. 0. ... 0. 0. 0.][0. 0. 0. ... 0. 0. 0.]]]
(2, 50, 101)

Bag-of-word模型

如下图所示,bag-of-word即将text即文本表述按单词拆分,组成词典,然后将文本描述按词按是否在词典出现进行编码,组成词语向量。图中’she loves pizza is … are the best’即是词典,下方的编码即某一描述的词向量编码。 在这里插入图片描述

基于keras Tokenizer实现

pip install keras
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting kerasDownloading https://pypi.tuna.tsinghua.edu.cn/packages/f9/4d/dc255a437c9616b155e5bd55e325e092b7cdcb4652361d733ae051d40853/keras-2.10.0-py2.py3-none-any.whl (1.7 MB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 2.5 MB/s eta 0:00:0000:0100:01
Installing collected packages: keras
Successfully installed keras-2.10.0[notice] A new release of pip available: 22.1.2 -> 22.3
[notice] To update, run: pip install --upgrade pip
Note: you may need to restart the kernel to use updated packages.
pip install tensorflow

from keras.preprocessing.text import Tokenizertext = ['There was a man','The man had a dog','The dog and the man walked',
]
#using tokenizer
model = Tokenizer()
model.fit_on_texts(text)#print keys
print(model.word_index.keys())#create bag of words representation
rep = model.texts_to_matrix(text, mode='count')
print(rep)vector= model.texts_to_sequences(text)
print(vector)

其中texts_to_matrix后的mode参数为count表示统计出的是词频向量,并没有把文本转成需要的向量表示,所以科学使用Tokenizer的方法是,首先用Tokenizer的 fit_on_texts 方法学习出文本的字典,然后word_index 就是对应的单词和数字的映射关系dict,通过这个dict可以将每个string的每个词转成数字,可以用texts_to_sequences,这是我们需要的,然后通过padding的方法补成同样长度,再用keras中自带的embedding层进行向量化。

dict_keys(['man', 'the', 'a', 'dog', 'there', 'was', 'had', 'and', 'walked'])#单词字典
[[0. 1. 0. 1. 0. 1. 1. 0. 0. 0.]#矩阵,每一行文字每个单词出现的次数[0. 1. 1. 1. 1. 0. 0. 1. 0. 0.][0. 1. 2. 0. 1. 0. 0. 0. 1. 1.]]
[[5, 6, 3, 1], [2, 1, 7, 3, 4], [2, 4, 8, 2, 1, 9]]#词典xiang

文本数据的词云可视化相关推荐

  1. 数据代码分享|PYTHON用NLP自然语言处理LSTM神经网络TWITTER推特灾难文本数据、词云可视化...

    全文下载链接:http://tecdat.cn/?p=28877 作者:Yunfan Zhang Twitter是一家美国社交网络及微博客服务的网站,致力于服务公众对话.迄今为止,Twitter的日活 ...

  2. 数据代码分享|Python用NLP自然语言处理LSTM神经网络Twitter推特灾难文本数据、词云可视化与SVM,KNN,多层感知器,朴素贝叶斯,随机森林,GBDT对比

    作者:Yunfan Zhang Twitter是一家美国社交网络及微博客服务的网站,致力于服务公众对话.迄今为止,Twitter的日活跃用户达1.86亿.与此同时,Twitter也已成为突发紧急情况时 ...

  3. 下c语言实现wc_用 Python 实现词云可视化

    词云是一种非常漂亮的可视化展示方式,正所谓一图胜过千言万语,词云在之前的项目中我也有过很多的使用,可能对于我来说,一种很好的自我介绍方式就是词云吧,就像下面这样的: 个人觉还是会比枯燥的文字语言描述性 ...

  4. D3临摹作业_分词与词云可视化(西安交大国家艺术基金数据可视化培训第28天)

    第十二章  分词与词云可视化 第一节 词云图 概念:一种富文本信息可视化技术,通过布局算法用文字大小表示词频,辅以多种颜色,直观的反映词组重要性差异,展示文本关键摘要信息.完整的词云分析包括:分词.词 ...

  5. R语言对耐克NIKEID新浪微博数据K均值(K-MEANS)聚类文本挖掘和词云可视化

    全文链接:http://tecdat.cn/?p=31048 2009年8月,新浪微博(micro-blog)开始服务,随后各家微博服务在国内得到广泛传播和应用"(点击文末"阅读原 ...

  6. Rstudio 实现 爬虫 文本分词 个性化词云设计--我爱中国我爱党

    Rstudio 爬虫 文本分词个性化词云设计 目录 1.环境准备,加载依赖 2.rvest 爬虫,数据爬取 3.jiebaR用于分词,词频统计 4.wordcloud2 结果可视化 ========= ...

  7. 手把手:R语言文本挖掘和词云可视化实践

    互联网时代,大量的新闻信息.网络交互.舆情信息以文本形式存储在数据库中,如何利用数据分析和文本挖掘的算法,将海量文本的价值挖掘出来,成为我们团队近期的一个研究方向,本案例就是我们的一个初步尝试.飞信群 ...

  8. NLP实现文本分词+在线词云实现工具

    实现文本分词+在线词云实现工具 词云是NLP中比较简单而且效果较好的一种表达方式,说到可视化,R语言当仍不让,可见R语言︱文本挖掘--词云wordcloud2包 当然用代码写词云还是比较费劲的,网上也 ...

  9. python生成文章标题_利用简书首页文章标题数据生成词云

    原标题:利用简书首页文章标题数据生成词云 感谢关注天善智能,走好数据之路↑↑↑ 欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答.求职一站式搞定! ...

最新文章

  1. 每日记载内容总结50
  2. java高并发(五)并发模拟
  3. jQuery对select操作(2)
  4. [BZOJ4698][SDOI2008]Sandy的卡片(后缀自动机)
  5. Java --- 基础学习Ⅱ
  6. 【转】DICOM通信 - PDU数据包(2)
  7. 通过Net Manager 配置Oracle 11g本地监听服务(listener service)
  8. linux每日命令(11):cat命令
  9. linuxamp;amp;shell学习(积累中。。。)
  10. 物流软件之Microcity介绍
  11. Python使用python-snap7实现西门子PLC通讯
  12. www.icourse163.org中国大学MOOC网页端无法打开或显示不全的解决方法
  13. EPLAN史上最全部件库,官网下载,部件宏,EDZ格式,239G,导入后一劳永逸
  14. noi2017滚粗记
  15. vmware应用程序无法正常启动0xc000007b
  16. 09SpringBoot web 错误处理
  17. php当下前景怎么样,最适合当下的趋势策略,详细写给你看(7月13日 指数分位点)...
  18. python实现淘宝自动登录秒杀功能
  19. telegram 新增 删除 联系人
  20. teamlab什么意思_不好意思,我们的2019毕业季聚会,和前辈的不一样

热门文章

  1. SQL中DATEADD和DATEDIFF的使用方法
  2. python01python的基础知识点(一)
  3. 下血本买的!Android开发者出路在哪?先收藏了
  4. IT“战疫”,企业级远程支持方案集锦
  5. zabbix配置步骤、操作及使用个人邮箱、企业微信、钉钉报警的配置
  6. 大数据 客户标签体系_基于大数据的用户标签体系建设思路和应用
  7. 电商用户标签体系建设基础步骤
  8. FW:平凡(trivial)和非平凡(non-trivial)_拔剑-浆糊的传说_新浪博客
  9. R中gRain包的加载和使用
  10. Node.js 的安装(电脑win7支持的版本)