安装wordcloud_COVID19数据分析实战:WordCloud 词云分析

↑↑点击上方蓝字,回复资料,N个G的惊喜

前言

上一篇文章(链接)我们对COVID19_line_list数据集进行了清洗以及初步分析。本文中我们将分析如何用词云来展示文本信息的概要。

比如我们从词云百度百科截取文字,制作词云。简单来说,词云就是重要单词的可视化,如下图。

1248525a2d42bdee47f6892875e643de.png

line list 数据集中有两列很重要的文本信息,symptoms (症状) 以及summary(摘要)。我们可以轻易的提出两个问题:

  • COVID19 的主要症状是什么
  • 文本摘要的内容主要是什么

我们将用词云回答这两个问题。

python 作为一个万能胶水语言,各种有用的轮子自然不胜枚举。wordcloud 便是专门用于制作词云的包。安装方式很简单,pip即可。

33e5823f1dd8f3be0fff0b154631a927.png

准备数据

数据我们采用上篇中清理好的数据,这里我将清理好的数据保存为新的csv文件(COVID19_line_list_data_cleaned.csv)。

第一步,导入必要的库。

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from PIL import Image
from wordcloud import ImageColorGenerator
from wordcloud import WordCloud
import jieba
# read the data
line_list_data_cleaned_file = 'data/COVID19_line_list_data_cleaned.csv'
line_list_data_raw_df = pd.read_csv(line_list_data_cleaned_file)

我们需要分析的是symptom 和summary 两列的信息。wordcloud 分析的文本为str 格式,因此我们需要将dataframe 每一行的数据组合成一个str 格式。

# prepare the text by using str.cat
all_symptoms = line_list_data_raw_df['symptom'].str.cat(sep=',')
print(type(all_symptoms))

可以看到all_symptoms 已经是str 格式。我们先分析symptom 列,后续会处理summary列的信息。

快速做经典词云

借用经典的案例代码,我们先用默认的参数制作词云。

# fast show wordcloud
wordcloud = WordCloud().generate(all_symptoms)
plt.figure()
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()
65efe44e06af5c7228b003b8e0d1538d.png

很不错,已经有了初步的模样,不过我们还是发现一些问题:

  • 有些词太小了,几乎看不见
  • 两个fever 是个什么东西?
  • 字体好模糊,不能更清楚吗?

当然能解决,wordCould 类带有一些初始化参数,比如min_font_size控制最小的词字体大小,像素大小通过width和height 来调节。默认的collocations 为True,用于合并重要性/频次相当的文本。设定这些参数,我们可以轻而易举的改善的词云画面。

# change the resolution and cancel the collocations
wordcloud = WordCloud(
min_font_size=10,
width=800,
height=400,
collocations=False).generate(all_symptoms)
plt.figure()
plt.imshow(wordcloud)
plt.axis("off")
plt.show()

一款经典版的词云就出炉了,看上去很不错。我们的第一个问题也有了答案:fever 和cough 是最常见的症状。

a1ca54465b667eb519466af5dbfacee9.png

更modern的词云

这里有一幅人类体形图,我们也可以将这些症状的词条作为tag 刻画在人物肖像上。这里需要用到wordcloud的mask 参数。mask 顾名思义就是用于掩盖一些像素。

df8622462fbbd3ffcea06cefebf7a210.png

加载图像,并且转化为array作为mask。print mask的信息,我们可以看到大批量的255 255 255。这是一个好的mask,因为这个代表着白色,白色的区域我们将不会用于填写词条,仅仅对有色区域进行填写。

# modern wordcloud
mask = np.array(Image.open('data/human_body_shape.png'))
print(mask)
 [[255 255 255   0]
[255 255 255 0]
[255 255 255 0]
...
[255 255 255 0]
[255 255 255 0]
[255 255 255 0]]
[[255 255 255 0]
[255 255 255 0]
[255 255 255 0]
...
[255 255 255 0]
[255 255 255 0]
[255 255 255 0]]
[[255 255 255 0]
[255 255 255 0]
[255 255 255 0]
...
[255 255 255 0]
[255 255 255 0]
[255 255 255 0]]]

再次创建wordcloud,代码几乎和上次雷同,仅仅是添加一个mask参数,以及设定图像的线条宽度contour_width 以及颜色contour_color。

wordcloud = WordCloud(
background_color="white",
min_font_size=10,
width=800,
height=400,
mask=mask,
collocations=False,
contour_width=2,
contour_color='black').generate(all_symptoms)
plt.figure()
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
50dc00c2e029d1f0ebcc7f9a92dc6d0f.png

效果看起来比经典款的要好一些,但是还有一些瑕疵。我们可以看到body 轮廓中很多空白处,这是因为symptom 统计的词条类数目比较少,无法填满图像。

彩色图像词云

很明显,summary 列的信息量要远远大于symptom,下面我们可以分析该列数据。这次我们选择一幅彩色图像,我把human换成robot。几乎同样的代码,再次运行。

37c8c2c727817ddf07b80ee0cd25a310.png
mask = np.array(Image.open('data/robot.png'))
all_summary = line_list_data_raw_df['summary'].str.cat(sep=',')
image_colors = ImageColorGenerator(mask)
wordcloud = WordCloud(
background_color="white",
min_font_size=10,
width=800,
height=400,
mask=mask,
collocations=False,
contour_width=1,
contour_color='black').generate(all_summary)
plt.figure()
plt.imshow(
wordcloud.recolor(
color_func=image_colors),
interpolation="bilinear")
plt.axis("off")
plt.show()

结果。。。oops, 说好的机器人呢?怎么只有两个眼睛和几个大门牙,一定是mask出了问题。

babc746c659aa7dd7ac7a5b5f0ba3edb.png

我们打印一下创建的mask矩阵。一堆堆零,边框明明是白色的,为什么是零呢?datacamp 博客给出了一定的解释(https://www.datacamp.com/community/tutorials/wordcloud-python)。总之,零不是我们想要的。

[[[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]]
...
[[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]]]

解决方案也很简单,替换0为255,然后重新制作词云。

mask[mask == 0] = 255

可爱的机器人终于出现了。

回到我们开始提到的问题,我们可以看到summary主要是关于新确认的(new confirmed)一些COVID 案例,病人(patient)可能和Wuhan相关。而且我们可以看到样本中male 似乎比female 多一些。

ee2ac41a5b9be757c0e36e5800ef4ff5.png

到此我们的两个问题都圆满的通过词云回答了。

bonus: 中文词云

回到开篇的词云图,我们展示了一份中文词云。如果直接借用我们今天的代码可能会出现一些问题。这里我们仅仅贴出中文词云制作的代码,以及一点注意事项。

  • 处理画面出现显示异常,可能是字体的问题。
  • 画面中词分割不好?用jieba

ciyun.csv 就是从百度词条随便截取的,你可以换成任意的文章。

ciyun = 'data/ciyun.csv'
with open(ciyun) as f:
ciyun_str = f.read()

def jieba_processing_txt(text):
mywordlist = []
seg_list = jieba.cut(text, cut_all=False)
liststr = "/ ".join(seg_list)
for myword in liststr.split('/'):
if len(myword.strip()) > 1:
mywordlist.append(myword)
return ' '.join(mywordlist)
font = 'data/SourceHanSerifCN-Light.otf' # 可以下载或者用电脑的自带的字体
wordcloud = WordCloud(
min_font_size=10,
width=800,
height=400,
collocations=False,font_path=font).generate(jieba_processing_txt(ciyun_str))
plt.figure()
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()

总结

本文介绍了经典版以及画面嵌套版的词云制作。使用词云可以一目了然的获取海量文本内容的关键信息。词云制作过程中的一些坑我们也进行了掩埋:

  • 画面分辨率问题
  • 叠词问题
  • 彩色画面的嵌套问题
  • 中文乱码的问题

作者:琥珀里有波罗的海

https://juejin.im/post/5ebe85185188255fd54df565

5d425ec80cddc9cde13e8108fe1d1097.gif

加入机器学习微信群请后台回复【入群】

24fac3d5ee3ed8435ff6dc464c01f21b.png

推荐阅读:

彻底搞懂机器学习中的正则化

机器学习数学基础与理论(书单)机器学习中需要了解的 5 种采样方法Pandas切片操作:一个很容易忽视的错误欢迎挑战!14个数据分析和机器学习项目!附数据集复旦大学机器学习、深度学习视频公开课,附PDF课件下载“为沉迷学习点赞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514265.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

到达率99.9%:闲鱼消息在高速上换引擎(集大成)

简介: 记录这一年闲鱼消息的优化之路 1. 背景 在2020年年初的时候接手了闲鱼的消息,当时的消息存在各种问题,网上的舆情也是接连不断:“闲鱼消息经常丢失”、“消息用户头像乱了”、“订单状态不对”(相信现在看文章的…

1小时打造HaaS版小小蛮驴智能车

1、认识一下小小蛮驴真面目 1.1、组件部分 HaaS100核心板 HaaS100是一款物联网场景中的标准硬件,并配套嵌入到硬件中的软件驱动及功能模块,为用户提供物联网设备高效开发服务。 HaaS100核心板有着丰富的外设接口,如下所示: 智…

Spring Boot Admin 集成诊断利器 Arthas 实践

简介: Arthas 是 Alibaba 开源的 Java 诊断工具,具有实时查看系统的运行状况;查看函数调用参数、返回值和异常;在线热更新代码;秒解决类冲突问题;定位类加载路径;生成热点;通过网页诊…

设计方案,拿来吧你!

作者:零一来源:前端印象前言大家好,我是零一,今天要跟大家聊聊开发流程中不起眼的环节——设计方案。你们可能没听过,也可能只是简单得走过过场,别划走,这非常重要!在字节&#xff0…

借力阿里云存储产品 延锋彼欧加速数字化重塑

简介: 延锋彼欧作为汽车外饰件生产的领航企业,通过基于业务和数据驱动的数字化管理,释放工业设备数据潜能提升产能。依托阿里云“稳定、安全、可靠、易用”的存储服务,延锋彼欧的发展步伐将更为稳健。 “一日骋千里,无…

英雄帖!移动云首批最有价值专家(MVP)招募开始了!

这是开发者的时代,这是价值重塑的时代。站在科技的潮头,我们期待去引领、去挖掘、去创造……移动云已迎来飞速发展的黄金期,移动云开发者社区将成为业界优秀开发者的聚集地。今天,移动云开发者社区正式开启移动云MVP首批招募&…

无责任畅想:云原生中间件的下一站

简介: 本文源自 2020 年 12 月 20 日作者在云原生社区 meetup 第二期北京站演讲 《Apache Dubbo-go 在云原生时代的实践与探索》的部分内容 自从以 2013 年开源的 docker 为代表的的容器技术和以 2014 年开源的 K8s 为代表的容器编排技术登上舞台之后,相…

深度剖析:Redis 分布式锁到底安全吗?看完这篇文章彻底懂了!

作者 | Kaito 来源 | 水滴与银弹阅读本文大约需要 20 分钟。大家好,我是 Kaito。这篇文章我想和你聊一聊,关于 Redis 分布式锁的「安全性」问题。Redis 分布式锁的话题,很多文章已经写烂了,我为什么还要写这篇文章呢?因…

Spring Boot 微服务性能下降九成!使用 Arthas 定位根因

简介: 接收到公司业务部门的开发反馈,应用在升级公司内部框架后,UAT(预生产)环境接口性能压测不达标。 背景 接收到公司业务部门的开发反馈,应用在升级公司内部框架后,UAT(预生产&a…

阿里研究员:线下环境为何不稳定?怎么破

简介: 为什么线下环境的不稳定是必然的?我们怎么办?怎么让它尽量稳定一点? 这篇文章想讲两件事: 为什么线下环境[1]的不稳定是必然的?我们怎么办?怎么让它尽量稳定一点? 此外&#…

谁说技术男不浪漫!90后程序员2天做出猫咪情绪识别软件

整理 | 王晓曼出品 | CSDN(ID:CSDNnews)9月1日,一则关于#程序员2天做出猫咪情绪识别软件#的话题登上微博热搜,参与阅读的人数达到了8218.1万,讨论次数1.3万,引发网友们的热议。高手在民间&#…

闲鱼如何一招保证推荐流稳如泰山

简介: 风雨不动安如山 背景 近几年互联网的快速发展中,互联网业务发展越来越复杂,业务也被拆分得越来越细,阿里内部业务也发生着翻天覆地的变化,从最初的单体应用,到后面的分布式集群,再到最近…

电商直播平台如何借助容器与中间件实现研发效率提升100%?

简介: 经过实际场景验证及用户的综合评估,电商直播平台借助全面的云原生容器化能力和中间件产品能力,大幅提升开发部署运维效率达50%~100%,极大地提升了用户体验,为业务持续发展打下了坚实的基础。 前言 直播带货是近…

在游戏运营行业,Serverless 如何解决数据采集分析痛点?

简介: 众所周知,游戏行业在当今的互联网行业中算是一棵常青树。在疫情之前的 2019 年,中国游戏市场营收规模约 2884.8 亿元,同比增长 17.1%。2020 年因为疫情,游戏行业更是突飞猛进。玩游戏本就是中国网民最普遍的娱乐…

字节大战腾讯元宇宙;Docker 自己定制镜像;VMware 云桌面助力秦皇岛市第一医院;微软开源 Cloud Katana;...

NEWS本周新闻回顾字节大战腾讯元宇宙:布局社交产品Pixsoul,上线游戏“重启世界”字节投资的代码乾坤,已于近日正式上线了元宇宙游戏《重启世界》。就在两个月前,被称为“元宇宙第一股”的Roblox登陆国内,由腾讯改名为《…

从 RxJS 到 Flink:如何处理数据流?

简介: 前端开发的本质是什么?响应式编程相对于 MVVM 或者 Redux 有什么优点?响应式编程的思想是否可以应用到后端开发中?本文以一个新闻网站为例,阐述在前端开发中如何使用响应式编程思想;再以计算电商平台…

Spring RSocket:基于服务注册发现的 RSocket 负载均衡

简介: RSocket 作为通讯协议的后起之秀,核心是二进制异步化消息通讯,是否也能和 Spring Cloud 技术栈结合,实现服务注册发现、客户端负载均衡,从而更高效地实现面向服务的架构?这篇文章我们就讨论一下 Spri…

双非院校计算机系毕业的学生能进大厂吗?

谈到大厂,我们常常会主动匹配与之对应的高学历。其实不论是大厂还是小公司,都是会筛简历的,这个毋庸置疑。从大厂招聘的结果上看,高学历人才的数量占据大头,而那些成功进入BAT、网易等大厂的专科生、二本三本学生&…

Python - 深夜数据结构与算法之 Heap Binary Heap

目录 一.引言 二.堆与二叉堆介绍 1.Heap 堆 2.Binary Heap 二叉堆 3.HeapifyUp 添加节点 4.HeapifyDown 删除节点 5.Heap 时间复杂度 6.Insert & Delete 代码实现 三.经典算法实战 1.Smallest-K [M14] 2.Sliding-Window-Max [239] 3.Ugly-Number [264] 4.Top-…

如何 0 改造,让单体/微服务应用成为 Serverless Application

简介: 随着 2013 年以 Docker 为代表的容器技术、CNCF 基金会以及 K8s 的发展等,云原生开始被广大开发者所熟知。云原生时代之前还有两个阶段:一是自建 IDC 机房,二是简单地把原有的应用搬迁到云上。自建 IDC 机房很难获得高可用、…