当前位置: 首页 > 科技观察

10行Python代码的词云

时间:2023-03-19 19:07:15 科技观察

什么是词云?词云又叫词云,是将文本数据中频繁出现的“关键词”在视觉上突出呈现,形成关键词的渲染和形成云状彩色图片,让你领略文本数据的主要含义乍看上去。现在,你可以在互联网上找到各种各样的词云。下图来自沈浩老师的微博:您还可以从百度图片中看到更多准备好的词云。部分截图如下:词云制作工具很多.....从技术上讲,词云是一种有趣的数据可视化方法,网上有很多现成的工具:Wordle是一款生成词云的游戏工具从文本。Tagxedo在线可用制作个性化的词云Tagul是一个网络服务,也可以制作华丽的词云Tagcrowd。也可以输入网址直接生成网页词云。。。十行代码但是作为一个老码农,还是喜欢用代码生成自己的词云。复杂吗?需要很长时间吗?很多课文介绍了各种方法,但实际上只需要10行python代码。importmatplotlib.pyplotaspltfromwordcloudimportWordCloudimportjiebatext_from_file_with_apath=open('/Users/hecom/23tips.txt').read()wordlist_after_jieba=jieba.cut(text_from_file_with_apath,cut_all=True)wl_space_split="".join(wordlist_genba=word)(wl_space_split)plt.imshow(my_wordcloud)plt.axis("off")plt.show()就这样,一个生成的词云是这样的:读这10行代码:第1到3行,分别导入绘图库matplotlib,词云生成库wordcloud和jieba的分词库;4行,读取本地文件,代码中用到的文本在这个公众号中是?。第5~6行,使用jieba进行分词,分词结果用空格隔开;第7行,将切分后的文本生成词云;第8到10行,使用pyplot展示词云图。这也是我喜欢python的原因之一,简洁明了。执行环境如果这十行代码没有运行,需要检查自己的执行环境。完整的开发学习环境,可以参考这个公众号《老曹眼中的开发学习环境》。对于面向python的数据分析,我个人比较喜欢Anaconda。您可以在https://www.continuum.io/downloads/下载并安装它。安装成功后,运行界面如下:anaconda是python数据爱好者的福音。安装wordcloud和jieba库也很简单:pipinstallwordcloudpipinstalljieba遇到一个小坑。十行代码第一次运行时,只显示了几个彩色的小矩形框,并没有显示中文。我认为这是邪恶的。UTF8的问题,调试了一下,发现打印结巴分词的结果可以显示中文,就是wordcloud生成词的字库问题。开源的好处来了,直接进入wordcloud.py的源码,找到字体库相关的代码FONT_PATH=os.environ.get("FONT_PATH",os.path.join(os.path.dirname(__file__),"DroidSansMono.ttf"))wordcloud默认使用DroidSansMono.ttf字体库,改成支持中文的ttf字体库,再次运行十行代码,就可以了。当然,解码后还有更优雅的方式。看看源码既然已经进入了源码,不禁好奇,下面我们就来看看wordcloud的实现过程和方法吧。wordcloud.py一共只有600多行,里面有很多注释,阅读起来很方便。其中用到了很多库,比如常见的random、os、sys、re(regular)和可爱的numpy,也用到了PIL绘图。估计有些人会遇到安装PIL的那些坑。生成词云的原理其实并不复杂,大致可以分为5个步骤:对文本数据进行切分也是很多NLP文本处理的第一步。对于wordcloud中的process_text()方法,主要是停止词处理,计算每个词在文本中出现的频率,生成哈希表。词频计算相当于wordcount,各种分布式计算平台的第一个案例,和各种语言的helloworld程序地位一样,呵呵。根据词频值,按比例生成图片布局。IntegralOccupancyMap类是词云的算法,是词云数据可视化方法的核心。根据对应的词频在词云布局上生成图片。核心方法是generate_from_frequencies,无论是generate()还是generate_from_text(),最终都会去generate_from_frequencies完成词云上每个词的着色。默认为单词的各个词随机着色,大部分增强功能可以通过wordcloud构造函数实现,它提供22个参数,也可以自行扩展。更多的小例子,看一张准文言文的词云。文来自本公众号去年的旧文——《妻》。在构造函数中,传入了几个关于屏幕和字体大小的参数:width=800,height=400,max_font_size=84,min_font_size=16得到这样一张词云图:惭愧,看不到颜色满满的文言文和对老婆的感情,不是好文!可能是词云的局限吧!矩形词云确实太粗糙了。直接用图片上的词云填充就有趣多了。Wordcloud可以通过mask来实现。放一张自己的照片,用《再谈<全栈架构师>一文》中的词,词云会是这样的:还是很难看清人像的轮廓,还好可以遮丑。添加了3行代码来自PILimportImageimportnumpyasnpabel_mask=np.array(Image.open("/Users/hecom/chw.png"))构造函数时,只要传入mask:background_color="black",mask=abel_mask这些词云自己做的图还是太粗糙了。这是因为原型很简单,但做好产品很难!想要做出漂亮的词云图,还是需要在很多细节上下功夫的。比如:分词处理,像“is”这样无意义的词不应该出现在词云中?有目的地选择显示的关键字?如何选择合适的字体?如何更好地自色?图片预处理,如何让图片和词云表达原图的主要特征?......词云背后词云背后其实就是一个典型的数据集成处理过程,就是我们熟悉的6C,如下图所示:Connect:Goal是从多种数据中选择数据源,数据源将提供API、输入格式、数据收集率和提供者限制。Correct:关注数据传输以便进一步处理,同时保证数据质量和一致性的维护Collect:数据存储在什么地方,以什么格式,方便后期组装和消费Compose:关注如何混合搭配各种收集的数据集,并丰富这些信息以构建有吸引力的数据驱动产品。Consume:关注数据的消费、渲染,以及如何让正确的数据在正确的时间达到正确的效果。控制:这是随着数据、组织和参与者的增长而需要的第六个额外步骤,以确保数据控制。这十行代码构建的词云并不是直接通过API从公众号(wireless_com)获取的。简化和抽象是典型的工程方法。至此,词云就复制粘贴到这里,甚至省略了纠错的过程,直接将数据存储在纯文本文件中,通过jieba分词处理compose,利用词云生成可视化图片供消费,将自己生成的词云整理到不同的文件目录中方便检索是初步的把控。【本文来自专栏作家“老曹”原创文章,作者微信公众号:哦家ArchiSelf,id:wrieless-com】点此阅读更多本作者好文

猜你喜欢