美文网首页技术学习图表工具
如何用Python做词云?

如何用Python做词云?

作者: 王树义 | 来源:发表于2017-06-01 22:29 被阅读28870次

    临渊羡鱼,不如退而结网。我们步步为营,从头开始帮助你用Python做出第一张词云图来。欢迎尝试哦!

    需求

    在大数据时代,你经常可以在媒体或者网站上看到一些非常漂亮的信息图。

    例如这个样子。

    或是这个样子的。

    看过之后你有什么感觉?想不想自己做一张出来?

    如果你的答案是肯定的,我们就不要拖延了,今天就来一步步从零开始做个词云分析图。当然,做为基础的词云图,肯定比不上刚才那两张信息图酷炫。不过不要紧,好的开始是成功的一半嘛。食髓知味,后面你就可以自己升级技能,进入你开挂的成功之路。

    网上教你做信息图的教程很多。许多都是利用了专用工具。这些工具好是好,便捷而强大。只是它们功能都太过专一,适用范围有限。今天我们要尝试的,是用通用的编程语言Python来做词云。

    Python是一种时下很流行的编程语言。你不仅可以用它做数据分析和可视化,还能用来做网站、爬取数据、做数学题、写脚本替你偷懒……

    知道豆瓣吗?它一开始就是用Python写的。

    在目前的编程语言热度排序里,Python屈居第四(当然,很多人不同意,所以编程语言的排行榜有许多,你懂的)。但看问题要用发展眼光。随着数据科学的发展,Python有爆发的趋势。早点儿站上风口,很有益处。

    如果你之前没有编程基础,没关系。从零开始,意味着我会教你如何安装Python运行环境,一步步完成词云图。希望你不要限于浏览,而是亲自动手尝试一番。到完成的那一步,你不仅可以做出第一张词云图,而且这还将是你的第一个有用的编程作品。

    心动了?那咱们就开始吧。

    安装

    首先,我们需要安装Python运行环境。

    如果你用的是macOS,那么你的系统里面实际已经预装好了Python。

    然而我们要使用到许多扩展包的功能。因此最好安装一个Python工具套装。只需要一次安装,以后大部分的功能就都已集成了。不必每次使用新功能,都去零敲碎打地安装新包了。

    Python的套装有许多种,这里推荐给大家anaconda。因为经过我4年多的尝试与对比,感觉这款软件包的安装更为便捷,扩展包的涵盖范围与结构更合理。

    请你到 这个网址 下载anaconda套装。下拉网页找到下载位置。根据你的操作系统类型选择合适的版本。

    因为我的系统是macOS,所以网站直接给我推荐的就是macOS系统版本。但如果你用的是Windows或Linux,请切换到相应的标签页上面。

    不管你用的是哪个操作系统,请注意右侧的两个按钮,分别对应Python 2.X和3.X版本。有人一定很纳闷,既然有新的版本,我凭什么用旧的?

    不是这样的。到2020年之前,Python的两个版本会一直并存。Python的开发者确实希望大家升级切换到3.X版本。可惜目前3.X版本兼容的扩展包数量比2.X版本要少,尤其是涉及到数据科学类的软件包,就尤其明显。所以如果你是初学者,我建议你下载2.X(目前是2.7)版本,这样在以后的使用中,可能遇到的问题会少一些。等你运用熟练了,再迁移到3.X版本不迟。相信我,到那时你会很快适应新版本的。

    下载后,执行安装文件就行了。

    根据你的电脑运行速度不同,安装的时间长短不等。耐心点儿,只需要等这一次嘛。

    安装完毕之后,请你安装一个“现代化”浏览器。如果你用的是macOS,那么系统自带的Safari就挺好。其他的选择包括Firefox和Google Chrome。

    请安装上述浏览器之一,然后将其设置为系统默认的浏览器。

    好了,下面请进入命令行模式。

    在macOS和Linux下,你需要开启一个终端(terminal)。

    如果是Windows,请打开“开始”-“附件”-“命令提示符”。

    键入以下命令:

    mkdir demo
    cd demo
    

    好了,你现在有一个专用的目录,叫做demo了。请到macOS的Finder或者Windows的“我的电脑”里面,找到这个目录并且打开它。

    回到终端下面,macOS或者Linux用户请键入以下命令:

    pip install wordcloud
    

    macOS会提示你先安装XCode命令行工具,你按照默认设置一步步进行就可以了。但是请注意,务必在WiFi环境下安装。如果你用的是4G流量,那你可要破费一笔了。

    如果你用的是Windows,那么为了使用这个词云包,就稍微麻烦一些,你需要到 这里 下载 wordcloud‑1.3.1‑cp27‑cp27m‑win32.whl 这个文件。下载后将它拖拽到你的demo目录里。

    在命令行下,先执行:

    pip install wheel
    

    然后,再执行:

    pip install wordcloud‑1.3.1‑cp27‑cp27m‑win32.whl
    

    好了,我们需要的全部Python运行环境终于装好了。

    请务必按照上述步骤执行,确保每一步都已经顺利完成。否则一旦遗漏,后面运行程序会报错。

    数据

    词云分析的对象,是文本。

    理论上讲,文本可以是各种语言的。英文、中文、法文、阿拉伯文……

    为了简便,我们这里以英文文本为例。你可以随意到网上找一篇英文文章作为分析对象。我特别喜欢英剧"Yes, minister",所以到维基百科上找到了这部剧的介绍词条。

    我把其中的正文文字部分拷贝了下来,存储为一个文本文件,叫做yes-minister.txt。

    把这个文件挪动到我们的工作目录demo里。

    好了,文本数据已经准备好了。开始进入编程的魔幻世界吧!

    代码

    在命令行下,执行:

    jupyter notebook
    

    浏览器会自动开启,并且显示如下界面。

    这就是咱们刚才的劳动成果——安装好的运行环境了。我们还没有编写程序,目录下只有一个刚才生成的文本文件。

    打开这个文件,浏览一下内容。

    回到Jupyter笔记本的主页面。我们点击New按钮,新建一个笔记本(Notebook)。在Notebooks里面,请选择Python 2选项。

    系统会提示我们输入Notebook的名称。程序代码文件的名称,你可以随便起。但是我建议你起一个有意义的名字,将来好方便查找。由于我们要尝试词云,就叫它wordcloud好了。

    然后就出现了一个空白的笔记本,供我们使用了。我们在网页里唯一的代码文本框里,输入以下3条语句。请务必逐字根据示例代码输入,空格数量都不可以有差别。尤其注意第三行,用4个空格,或者1个Tab开始。输入后,按Shift+Enter键,就可以执行了。

    filename = "yes-minister.txt"
    with open(filename) as f:
     mytext = f.read()
    

    没有任何结果啊。

    对,因为我们这里没有任何输出动作,程序只是打开了你的yes-minister.txt文本文件,把里面的内容都读了出来,存储到了一个叫做mytext的变量里面。

    然后我们尝试显示mytext的内容。输入以下语句之后,还是得按Shift+Enter键,系统才会实际执行该语句。

    mytext
    

    之后的步骤里,也千万不要忘了这一确认执行动作。

    显示的结果如下图所示。

    嗯,看来mytext变量里存储的文本就是我们从网上摘来的文字。到目前为止,一切正常。

    然后我们呼唤(import)词云包,利用mytext中存储的文本内容来制造词云。

    from wordcloud import WordCloud
    wordcloud = WordCloud().generate(mytext)
    

    这时程序可能会报警。别担心。警告(warning)不影响程序的正常运行。

    此时词云分析已经完成了。你没看错,制作词云的核心步骤只需要这2行语句,而且第一条还只是从扩展包里找外援。但是程序并不会给我们显示任何东西。

    说好了的词云呢?折腾了这么半天,却啥也没有,你蒙人吗?!

    别激动。输入下面4行语句后,就是见证奇迹发生的时刻了。

    %pylab inline
    import matplotlib.pyplot as plt
    plt.imshow(wordcloud, interpolation='bilinear')
    plt.axis("off")
    

    运行结果如图所示:

    不用那么兴奋嘛。

    你可以在词云图片上单机鼠标右键,用“图片另存为”功能导出。

    通过这张词云图,我们可以看到不同单词和词组出现的频率高低差别。高频词的字体明显更大,而且颜色也很醒目。值得说明的是,最显眼的单词Hacker并不是指黑客,而是指这部剧的主角之一——哈克首相。

    包含程序完整代码的ipynb文件,我也分享了出来,你可以从 这里 下载。

    希望你在尝试过程中一切顺利。对自己生成的词云图满意吗?如果你不满意,也不要紧,可以挖掘wordcloud软件包的其他高级功能。尝试一下,看自己能不能做出这样的词云图来?

    讨论

    学完了本方法后,你做出了一张什么样的词云图?除了本文介绍的方法以外,你还知道哪些便捷地制作词云或其他信息图的方式?欢迎留言,分享给大家。我们共同交流讨论。

    如果你对我的文章感兴趣,欢迎点赞,并且微信关注和置顶我的公众号“玉树芝兰”(nkwangshuyi)。

    如果本文可能对你身边的亲友有帮助,也欢迎你把本文通过微博或朋友圈分享给他们。让他们一起参与到我们的讨论中来。

    延伸阅读

    如何用《玉树芝兰》入门数据科学?

    数据科学相关文章合集(玉树芝兰)

    作者信息

    王树义,大学教师,终身学习者。稍微懂一点儿写作、演讲、Python和机器学习。欢迎微信关注并置顶我的公众号“玉树芝兰”(nkwangshuyi)。

    相关文章

      网友评论

      • Ramon_qi:棒棒
      • Tony的随笔:按照作者的步骤昨晚之后,我自己做了一个中文的TXT,但是打开文档老是显示 file is not UTF-8 encoded ,请问是怎么回事?
        奢华欧巴:打开txt文件另存为, 选择utf-8格式, 在打开是这个文件.
        以前的文件可能是unicode
      • 金哥数据分析:大神,我也在学大数据 wx 35816146 可以交流吗
        我建了个Q群给自学者: 829163554 培训勿扰!
      • 与西:我一直会报这个错误,想知道原因~

        RuntimeError: In FT2Font: Can not load face.

        <matplotlib.figure.Figure at 0x108267780>
      • taoza:您好,请问您的文章下面的目录,前一篇和后一篇是如何生成的?谢谢。
      • 3f31023436c0:使用win10的同学需要注意,安装完anaconda3以后,需要配置环境变量。
        否则在cmd中,使用pip命令,会出现以下提示:
        'pip' 不是内部或外部命令,也不是可运行的程序

        具体解决方案如下:

        1.找到python的安装目录(即有python.exe的文件夹,默认在C:\Users\你的用户名\Anaconda3这个文件夹里面),再找到Scripts文件夹,打开并查看有没有pip.exe

        2.将python安装目录以及pip的目录分别添加至环境变量的path,即,右击我的电脑-属性-高级系统设置-环境变量,在下面的系统变量里面,找到path。打开,新建,添加C:\Users\你的用户名\Anaconda3,和C:\Users\你的用户名\Anaconda3\Scripts

        3.应用、确定,重新打开cmd窗口,在有whl文件的文件夹里面,选择文件-打开命令提示符,安装whl文件即可
      • a1a880bc8802:非常有用,谢谢老师!
        王树义:@iamskye 不客气
      • 大力SAMA:跟着老师的步骤完成啦!不过有些命令还不懂,继续学习
        和英文比起来发现处理中文有点吃亏啊,还要多一个分词的工作
      • 闵喽喽带着GoDo看天下:你这个在window下没有配置环境变量,会造成CMD无法识别Python ,后面用pip安装包也会有问题。
      • 711a8cd250bf:老师,我按照您教程操作之后出来的wordcloud总是一些七彩的空框
        求解!
        711a8cd250bf:@王树义 原因就在于中文词云
        711a8cd250bf:@王树义 谢谢您,已经弄明白了!非常感谢您的教程,已经向我的朋友们推广了
        王树义:@队长给我球_98f0 中文词云?看下一篇文章。
      • 2171cf8faaf6:赞👍,非常喜欢老师的文章,简明扼要一看就懂。
        王树义:@cevoly 谢谢关注和鼓励!
      • 一代大傻:@Ra_冷眸 没有安装wordcloud模块?
        b3149d2bde3a:@一代大傻 我也不清楚,没用过了:cold_sweat:
      • b3149d2bde3a:我想说我这个怎么就不同呢?
        都是python2或python3 我的怎么是python[Root]
      • b3149d2bde3a:各位大神,这个报错这么解决?还有遇到过这种问题的神级队友们 你们解决了么?求解!win7系统。ImportError Traceback (most recent call last)
        <ipython-input-4-f24e9fffb9fc> in <module>()
        3 mytext = f.read()
        4 mytext
        ----> 5 from wordcloud import WordCloud
        6 wordcloud = WordCloud().generate(mytext)

        ImportError: No module named 'wordcloud'

        一直显示,没有命名为' wordcloud'的模块
        土豪晴:层主解决没
        我也是这个问题
        dc7ef163b379:重新安装下wordcloud即可
      • 2830d3330c84:wordcloud-1.3.2-cp36-cp36m-win_amd64.whl is not a supported wheel on this platform,请问各位大神怎么解决这个问题,试了好久一样无法解决,跪请各位帮忙啊!!!
        b3149d2bde3a:使用cp27试试,我的cp36也装不上
      • 陈玉路:pip install wheel
        File "<ipython-input-7-a3c7ac6b0681>", line 1
        pip install wheel
        ^
        SyntaxError: invalid syntax
        请问这是什么原因?
        注:使用的是spyder 2.7
      • 听风阁:现在都用jupyter notebook吗,pycharm呢
      • A7TuG3:推荐一个工具,应该是目前最好用的:http://cloud.niucodata.com/
      • 30db8648d8af:Mac上已经按照步骤建demo目录了,在哪里找到呢
      • 小丰丰_72a2:请问如果是win7系统,下载词云是不是得下载这个呢wordcloud‑1.3.2‑cp27‑cp27m‑win_amd64.whl
        41383a6b25ad:@earlyan 解决了,哈哈,是ipython要配置指向python的package的路径,环境各种问题啊,亲自试一遍才知道,,附上链接
        https://www.lucypark.kr/blog/2013/02/10/when-python-imports-and-ipython-does-not/
        41383a6b25ad:词云包也装成功了,为啥用jupyter notebook做词云的过程中
        from wordcloud import WordCloud 这行代码报错啦,错误信息如下:
        ImportError Traceback (most recent call last)
        <ipython-input-6-43b51af57160> in <module>()
        3 mytext = f.read()
        4 #mytext
        ----> 5 from wordcloud import WordCloud
        6 #wordcloud = WordCloud().generate(mytext)

        ImportError: No module named wordcloud

        用IDLE (Python GUI)环境加载并没有报错哇,如下
        >>> from wordcloud import WordCloud
        >>>

        词云没做成功,不高兴啊。。:worried:
        X北辰北:@小丰丰_72a2 对,要下载这个,不然安装不成功
      • jackPan:中文乱码。。
        王树义:@jackPan 系列文章,往后看
      • 如那_a44f:请问有没有iOS 使用的
      • 逍遥无忌:pip安装wordcloud的时候报错了:
        wordcloud-1.3.1-cp27-cp27m-win_amd64.whl is not a supported wheel on this platform.
        Storing debug log for failure in C:\Users\NM-082\pip\pip.log
        pip.log里显示的是一样的:C:\Python27\Scripts\pip run on 06/07/17 18:42:40
        wordcloud-1.3.1-cp27-cp27m-win_amd64.whl is not a supported wheel on this platform.
        Exception information:
        Traceback (most recent call last):
        File "C:\Python27\lib\site-packages\pip\basecommand.py", line 122, in main
        status = self.run(options, args)
        File "C:\Python27\lib\site-packages\pip\commands\install.py", line 257, in run
        InstallRequirement.from_line(name, None))
        File "C:\Python27\lib\site-packages\pip\req.py", line 167, in from_line
        raise UnsupportedWheel("%s is not a supported wheel on this platform." % wheel.filename)
        UnsupportedWheel: wordcloud-1.3.1-cp27-cp27m-win_amd64.whl is not a supported wheel on this platform.
        我的系统是win10 家庭版64位,python是2.7
        逍遥无忌:@逍遥无忌 如果还报那个错,试试这个命令>>import pip; print(pip.pep425tags.get_supported()) 。可能是那个文件的命名规则有问题。
        逍遥无忌:@逍遥无忌 我特么的知道了,是因为我再64位系统上装了32位python的原因
        逍遥无忌:C:\Users\NM-082\demo>pip install wheel
        Requirement already satisfied (use --upgrade to upgrade): wheel in c:\python27\lib\site-packages
        Cleaning up...

        C:\Users\NM-082\demo>pip freeze
        wheel==0.29.0
      • 迷恋你的脸1314:模仿实验了下,真的做出来啦,高兴。😀
      • ouou4516:很基础很详细的教程!非常适合想搞一搞这个的初学者。另外加一句,如果是中文的话还需要装个jieba来做分词(没用过wordcloud 但看起来确实是需要的)
      • 不_一:感谢老师,有个问题想问一下,怎么让新建notebook可以选择python2,还是python3?用conda create --name python36 python=3.6创建了一个新的环境
        谢谢
        不_一:@王树义 谢谢老师
        王树义:http://www.jianshu.com/p/8b90c2f12856
      • 郑屹:在网络上突然偶遇王老师也是一种神奇的体验啊,哈哈
      • 陈码工:没法做中文的词云啊用这个...
      • 谁说我是小小云:以前只知道用tagul.com做词云,缺点是没有中文字体(要自己导入)以及图案固定,原来还能自给自足(⁎⁍̴̛ᴗ⁍̴̛⁎)一颗赛艇~:sparkles:
      • LastStartDust:写的还可以,但是我自己使用Python3.6操作以后,发现该文章有所欠缺,
        1.说明一下不同的Python版本下载对应的词云版本
        2.没有安装jupyter的说明,
        41383a6b25ad:@治电小白菜 python安装目录下, Python27\Lib\site-packages 也有 wordcloud 的相关包,为啥加载不了呢。。
        41383a6b25ad:@治电小白菜 要配置系统环境变量才可以用jupyter,目前我遇到的问题是,from wordcloud import WordCloud ,无法加载词云包,报错了
        ImportError Traceback (most recent call last)
        <ipython-input-6-43b51af57160> in <module>()
        3 mytext = f.read()
        4 #mytext
        ----> 5 from wordcloud import WordCloud
        6 #wordcloud = WordCloud().generate(mytext)

        ImportError: No module named wordcloud

        但是 用python IDLE环境加载就没有报错,我用的是python2.7版本
        >>> from wordcloud import WordCloud
        >>>
        ZZES_ZCDC:这些工具在anaconda套装里都有
      • 9e7198cf9c68:哈哈,这比Ps好用多了
      • 闻勤行:豆瓣用Python写的???找时间试试词云
      • Rokkia:使用教学详细,一直在想词云是怎么做的。
      • jllin:赞👍
      • SY羽蒙:炫酷!之前还以为那些是p出来的,原来是通过频率来改变大小。好棒,改天试试

      本文标题:如何用Python做词云?

      本文链接:https://www.haomeiwen.com/subject/llhyfxtx.html