本教程适合于有一定编程经验的同学,使用Python3,在Jupyter进行调试开发。

涉及的Python基础包括:变量和函数的定义和使用

列表和字典等数据结构的使用

条件和循环语句,if、for等

模块的导入和使用,import语法

需要安装以下依赖库:jupyter - 交互式笔记本

matplotlib - Python2D绘图库

jieba - Python中文分词组件

pillow - Python图像处理库

wordcloud - Python词云库

目标

从海贼王的歌词中提取出关键词,然后生成乔巴形状的云图,最后效果如下:

1.准备数据

a. 事先我已准备好15首海贼王的歌词文本文件, 放在本地的data目录下。

In [1]:

ls data # 使用Linux命令显示data目录下内容

BON VOYAGE.txt* free will.txt* 向著阳光.txt*

Jungle P.txt* memories.txt* 心的地图.txt*

Run!Run!Run!.txt* share the world.txt* 未来航海.txt*

Shining Ray.txt* 全新世界.txt* 永久指针.txt*

believe.txt* 冒险世界.txt* 疯狂彩虹.txt*

b. 原始数据准备OK后,先实现一个函数循环读取data目录下的所有文件

In [2]:

import os

def read_content(content_path):

'''

读取目录下的所有文件并合并成一个内容块返回

'''

# 初始化内容为空

content = ''

# 使用os模块的listdir函数枚举文件夹下所有文件

for f in os.listdir(content_path):

# 拼接文件完整路径

file_fullpath = os.path.join(content_path, f)

# 判断是否是文件

if os.path.isfile(file_fullpath):

print('loading {}'.format(file_fullpath))

# 将文件内容进行拼接

content += open(file_fullpath, 'r').read()

# 每首歌词之间用换行符分隔

content += '\n'

print('done loading')

return content

In [3]:

# 读取文件夹内容

content = read_content('./data')

print('\n显示内容的前面部分...\n')

print(content[:99])

loading ./data/believe.txt

loading ./data/BON VOYAGE.txt

loading ./data/free will.txt

loading ./data/Jungle P.txt

loading ./data/memories.txt

loading ./data/Run!Run!Run!.txt

loading ./data/share the world.txt

loading ./data/Shining Ray.txt

loading ./data/全新世界.txt

loading ./data/冒险世界.txt

loading ./data/向著阳光.txt

loading ./data/心的地图.txt

loading ./data/未来航海.txt

loading ./data/永久指针.txt

loading ./data/疯狂彩虹.txt

done loading

显示内容的前面部分...

世代传承的意志 时代的浪潮 人的梦想

这些都是无法阻挡的

只要人们继续追求自由的解答

这一切都将永不停止

我只相信着未来 就算有人笑我也无所谓

奔驰的热情让你更耀眼

虽然好刺眼 但我仍要继续凝视

c. 使用jieba提取出关键词

In [4]:

import jieba.analyse

# 这里使用jieba的textrank提取出1000个关键词及其比重

result = jieba.analyse.textrank(content, topK=1000, withWeight=True)

# 生成关键词比重字典

keywords = dict()

for i in result:

keywords[i[0]] = i[1]

print(keywords)

Building prefix dict from the default dictionary ...

Loading model from cache /var/folders/5d/mjgsmy7n6vlfrk42v1_jtc7c0000gn/T/jieba.cache

Loading model cost 1.042 seconds.

Prefix dict has been built succesfully.

{'扬起': 0.15365137065823337, '开始': 0.33887155728627016, '解答': 0.0790997113814255, '奇迹': 0.2019238936444467, '留下': 0.15805775202925612, '想像': 0.08987560148767863, '感觉': 0.058819354518174556, '时间': 0.07551208515941268, '天堂': 0.08441183647061005, '无法': 0.287129785071775, '伸出': 0.09256367548351727, '回到': 0.08349124701438736, '背负': 0.14437968256383968, '前路': 0.05312061493282433, '屏息': 0.1531365836936351, '秘密': 0.09965773105020974, '七色': 0.08878413441578677, '朋友': 0.1397662417669881, '初识': 0.0830682006897093, '光芒': 0.13352559090174942, '指示': 0.06934108111132412, '拥有': 0.11544194392460741, '色彩': 0.12409038761092896, '世间': 0.18888249529919593, '欢笑': 0.050377170853215976, '选择': 0.06444326221759296, '沾湿': 0.13352559090174942, '起来': 0.0845180267560427, '经历': 0.12616245714507396, '小时候': 0.044857635061158724, '失去': 0.05236725016973628, '歌唱': 0.09501118261648268, '分享': 0.05812477489419511, '收起': 0.0915149943221848, '誓言': 0.05988821730341018, '我会': 0.057893640349250965, '不变': 0.12622369920668572, '熄灭': 0.0791613178160737, '呐喊': 0.13320154266821363, '看见': 0.0854926451902643, '坚持': 0.08213062695901673, '意志': 0.1188937276195136, '美学': 0.1435834973386806, '浮动': 0.13450943469637847, '填满': 0.06039295853670237, '天使': 0.16317731845659758, '找到': 0.05533519004787966, '微笑': 0.0799090440777227, '怀着': 0.4817498228002652, '丢弃': 0.13322161964784338, '跟随': 0.09197164245106097, '地图': 0.07341861667659995, '倒流': 0.07515309019779545, '心情': 0.40510507626640513, '加速': 0.16020612316413707, '时代': 0.299255975193261, '映出': 0.058190874872291284, '收获': 0.12902702145794429, '飞舞': 0.13454804385716426, '重重障碍': 0.07306626680915267, '脚步': 0.11339400407789377, '相遇': 0.07486958598052014, '延伸': 0.11401423021177887, '就算': 0.23310398624372167, '旋律': 0.19062549166169998, '梦想': 1.0, '拥抱': 0.20056370347498786, '释放': 0.08048707411918865, '分界点': 0.11445040093643048, '超越': 0.08754528438684966, '水平线': 0.12663559447803469, '地平线': 0.1021244005469806, '忘却': 0.13322161964784338, '发展': 0.05521593346271129, '思念': 0.1296081980642235, '中将': 0.1730725099154214, '漫历': 0.14999796242367477, '照耀': 0.13450943469637847, '抓住': 0.1081902273317158, '大海': 0.2191369911522112, '梦幻': 0.08878413441578677, '没错': 0.06908130733179857, '变迁': 0.08388306680969282, '绽开': 0.0970297226758736, '背影': 0.04489925975654794, '响起': 0.09348462612242271, '传承': 0.08343950722719029, '泪水': 0.2043342791423508, '寄托': 0.15140800018240286, '出发': 0.1376622319882071, '安排': 0.09570513284670208, '凝视': 0.09058874193734022, '目标': 0.20253971299175438, '想法': 0.13322161964784338, '盘旋': 0.04653128171301495, '浪花': 0.14292308695167863, '赢得': 0.13454804385716426, '摸索': 0.13352559090174942, '命运': 0.17767531296473504, '要紧': 0.07100381557014668, '同伴': 0.13322161964784338, '相信': 0.06780937693484108, '到达': 0.11990597718546447, '起航': 0.17121317788528045, '伙伴': 0.1021244005469806, '鼓起': 0.08326947015393454, '角逐': 0.13450943469637847, '得到': 0.139130325974439, '热情': 0.16974545588616355, '咒文': 0.0755227913516226, '追逐': 0.12956507425075023, '吝惜': 0.044375524671743924, '旗帜': 0.22318864743628655, '不会': 0.136742080156981, '紧握着': 0.07074596658159177, '传递': 0.08318907791061766, '知道': 0.049014975541075576, '避开': 0.11925067678883694, '失败': 0.19864619215021206, '直到': 0.16170953592115245, '开辟': 0.11502344884527459, '驶向': 0.08949640367673918, '超乎': 0.17571155584916723, '航海图': 0.17530963330220897, '星空': 0.07085050507113418, '足迹': 0.11380925226394865, '憧憬': 0.13136516727228634, '信号': 0.1345775449622126, '停息': 0.14813550567788228, '抑制': 0.0823736383036949, '力争上游': 0.15985443423198126, '希望': 0.3064348996750364, '探求': 0.10037115703978353, '浪潮': 0.11205492596248597, '奔驰': 0.04647451827818632, '迷惑': 0.10853833347078598, '疾速': 0.09289401344883545, '重拾': 0.13450943469637847, '双手': 0.11833008801272633, '继续': 0.26128426151029494, '前进': 0.38049616332706393, '海洋': 0.07764780435427948, '力量': 0.22448970728817977, '迈进': 0.07788425716172835, '海贼王': 0.05988821730341018, '奔向': 0.1050116694918882, '仰望': 0.11375613415335455, '开创': 0.04909483864698758, '忘怀': 0.1178931622715251, '伴随': 0.1881308832052442, '直率': 0.0819811725519203, '迈向': 0.09805414857074332, '等待': 0.05312061493282433, '追赶': 0.23590910145448465, '橙色': 0.19827470012221343, '飞溅': 0.14517190902077373, '填入': 0.10713343097770893, '寻找': 0.341410398721581, '羁绊': 0.13454804385716426, '愿望': 0.11502105997392056, '描绘': 0.04882446831721362, '号角': 0.18892935090190913, '深渊': 0.11341295672924022, '传说': 0.10453681102617361, '胸膛': 0.10826393677032255, '追忆': 0.13454804385716426, '改变': 0.1105923128490412, '起跑': 0.07840202504448608, '成为': 0.2958892859451614, '投入': 0.054739663860643786, '谜题': 0.13450943469637847, '旅途': 0.13166250912547978, '高声': 0.178643850709469, '追求': 0.1715459745440232, '总会': 0.13242770285698083, '遥望': 0.050377170853215976, '畏惧': 0.05048971733869129, '刻下': 0.10563678032609539, '面对': 0.19682389784566295, '流下': 0.10423811536600736, '逃脱': 0.04488557389782134, '奔跑': 0.08204660421218422, '火种': 0.1411150676880229, '冒险': 0.5005306993202343, '世界': 0.5449287709811719, '能够': 0.25882968219047386, '碎片': 0.13709646143068321, '信念': 0.11795116869385924, '未知': 0.08221194482386406, '吹响': 0.1779165442702793, '全部': 0.13392040723985732, '孩子': 0.13811401117842068, '获得': 0.06780937693484108, '预感': 0.16639206740929596, '把握': 0.08675073217837388, '示人': 0.1026344593871126, '听说': 0.05312061493282433, '冲出': 0.13224882644548555, '没有': 0.15159970579125204, '喜宴': 0.17379403916878816, '才能': 0.12972776044573475, '时候': 0.17420500418671414, '人们': 0.10319997520144626, '为止': 0.052150373830141754, '抬头': 0.11467512436536162, '无限': 0.06764346188867, '出航': 0.03865274219069975, '故事': 0.13392040723985732, '可能': 0.07390594415565045, '引导': 0.16732685717721082, '情绪': 0.12968877267733753, '内心': 0.1475787080533443, '单凭': 0.12542873282600936, '仿效': 0.0918818019595783, '方向': 0.1629842877398635, '想象': 0.09265141828602656, '太阳': 0.20931270320049486, '举起': 0.07341861667659995, '熟悉': 0.12327709678857283, '日子': 0.08479628778416956, '回忆': 0.13352559090174942, '来自': 0.09467283342394821, '片长': 0.07540537390616804, '绝望': 0.09314642277073719, '阻挠': 0.07790059908360082, '追梦': 0.09309586423204035, '鼓励': 0.10880965048592321, '阻挡': 0.17223247845464154, '蔓延': 0.17439976351747224, '征途': 0.15601230856847134, '集起': 0.0904380138460612, '航线': 0.12392209071853239, '终能': 0.13392040723985732, '困扰': 0.12606024257520246, '展开': 0.17772773888330856, '带领': 0.07912571036131048, '不了': 0.16113705986038165, '起始': 0.09330731354358968, '地方': 0.16598627575218824, '踏上': 0.13236658985957564, '描述': 0.07626512494851125, '启程': 0.10245516018260722, '放飞': 0.1598542189807057, '双臂': 0.09340867759406857, '心灵': 0.3305662079948827, '眼神': 0.08399973860720229, '笑颜': 0.13085137132492453, '狂欢': 0.11807469241626582, '铭刻': 0.19068475937471777, '看到': 0.054296059984562176, '大家': 0.18077773704285963, '船舵': 0.10845934179932064, '完成': 0.1227002236449499, '驱使': 0.14999738505133325, '出现': 0.13115377751750223, '跨越': 0.1331441398565992, '高涨': 0.136124054847588, '风帆': 0.11119913692251271, '漂浮': 0.1274242316646285, '起飞': 0.10309000992149217, '相识': 0.13352559090174942, '音符': 0.16639206740929596, '迎风': 0.13392040723985732, '勇气': 0.1507813084829896, '空荡': 0.10791710727689573, '跃动': 0.0829313414107292, '天空': 0.5285292408817545}

2.使用wordcloud生成云图

这里还需要一张底图用于生成云图,这里使用海贼王中乔巴的图片

from PIL import Image, ImageSequence

import numpy as np

import matplotlib.pyplot as plt

from wordcloud import WordCloud, ImageColorGenerator

# 初始化图片

image = Image.open('./images/tony_src.png')

graph = np.array(image)

# 生成云图,这里需要注意的是WordCloud默认不支持中文,所以这里需要加载中文黑体字库

wc = WordCloud(font_path='./fonts/simhei.ttf',

background_color='white', max_words=1000, mask=graph)

wc.generate_from_frequencies(keywords)

image_color = ImageColorGenerator(graph)

In [6]:

# 显示图片

plt.imshow(wc)

plt.imshow(wc.recolor(color_func=image_color))

plt.axis("off") # 关闭图像坐标系

plt.show()

作者:Walker Python爱好者社区专栏作者 授权发布,请勿转载,谢谢。

出处:Python入门之生成海贼王云图

推荐免费视频教程:Python3爬虫三大案例实战分享:猫眼电影、今日头条街拍美图、淘宝美食 Python3爬虫三大案例实战分享

公众号:Python爱好者社区(微信ID:python_shequ)

小编个人微信:tsdatajob ,来不急回复的,可以加小编微信沟通,谢谢。

python绘画海贼王_Python入门之生成海贼王云图相关推荐

  1. 利用Python分析文章词频,并生成词云图

    利用Python分析文章词频,并生成词云图 使用request模块获取文章数据 import jieba import requests import csv from bs4 import Beau ...

  2. python 引入同一路径的类_Python实现Wordcloud生成词云图的示例

    wordcloud是Python扩展库中一种将词语用图片表达出来的一种形式,通过词云生成的图片,我们可以更加直观的看出某篇文章的故事梗概. 首先贴出一张词云图(以哈利波特小说为例): 在生成词云图之前 ...

  3. python代码测试_Python入门学习系列——Python代码测试

    Python代码测试 对于编写的代码,可以使用unittest模块中的相关方法进行测试. 测试函数 首先定义一个简单的函数,该函数用来合并名称并返回. name_function.py: def ge ...

  4. python词云图实验报告_Python实现Wordcloud生成词云图的示例

    wordcloud是Python扩展库中一种将词语用图片表达出来的一种形式,通过词云生成的图片,我们可以更加直观的看出某篇文章的故事梗概. 首先贴出一张词云图(以哈利波特小说为例): 在生成词云图之前 ...

  5. 使用Python将《青花瓷》歌词生成词云图

    哈喽大家好,因为上次有小伙伴问我,歌曲的歌词和评论怎么生成词云图,想买代码- 当时我就拒绝了,直接免费送给了他. 所以今天来分享给大家 我们以周董的<青花瓷>为例,要对<青花瓷> ...

  6. python dict遍历_python入门

    python:简洁,优雅,快捷 简洁到变量可以不用定义直接用,可以调用很多函数,方便移植,对数据的处理速度快,但是耗内存 我学习python的时候,感觉这就像是在看小学生的作业,当然只是刚学习到了基础 ...

  7. python教程是什么-Python基础教程_Python入门知识

    Python基础教程频道为编程初学者提供入门前的所有基础知识,必须要掌握的一些PYTHON基础语法语句,基本的数据类型. 让大家可以更快速.更容易理解的的方式掌握Python编程所需要的基础知识,灵活 ...

  8. python保存代码_python入门(5)使用文件编辑器编写代码并保存执行

    原博文 2017-04-21 17:21 − python入门(5)使用文件编辑器编写代码并保存执行 两款文本编辑器: 一个是Sublime Text,免费使用,但是不付费会弹出提示框: 一个是Not ...

  9. python图纸教程_python入门教程 python入门神图一张

    初试牛刀 假设你希望学习Python这门语言,却苦于找不到一个简短而全面的入门教程.那么本教程将花费十分钟的时间带你走入Python的大门.本文的内容介于教程(Toturial)和速查手册(Cheat ...

  10. python基础教程是什么-Python基础教程_Python入门知识

    Python基础教程频道为编程初学者提供入门前的所有基础知识,必须要掌握的一些PYTHON基础语法语句,基本的数据类型. 让大家可以更快速.更容易理解的的方式掌握Python编程所需要的基础知识,灵活 ...

最新文章

  1. IE9(测试版)浏览器实用快捷键使用方法
  2. 通用!Python保存一个对象的方式
  3. 【教女朋友学网络系列1】之OSI与TCP/IP
  4. net以execl做数据库_[原创]Net实现Excel导入导出到数据库(附源码)
  5. JAVA 15发布,越来越像C# ?9月排名,C#增幅狠甩JAVA
  6. Android之ExpandableListView
  7. linux开机自动ZFS,linux – 为什么重新启动导致我的ZFS镜像的一面成为UNAVAIL?
  8. 初中的算术(51Nod-1873)
  9. mysql查询hash分区数据_mysql分区管理 - hash分区
  10. 怎么删除计算机的一个用户名和密码,哪位晓得电脑有两个账户怎么删除一个
  11. 近期团队博客的摘要 5
  12. Spring MVC-学习笔记(5)spring MVC的文件上传、下载、拦截器
  13. 51蜂鸣器播放提示音和音乐(完整代码可附赠Proteus仿真)
  14. 基于VxWorks的VxBus字符设备驱动
  15. sata接口 图解 定义_SATA数据和电源接口定义详解(多图).pdf
  16. php 调用speex解码库,怎么增加speex解码库
  17. native mysql 分区_MySQL-表分区
  18. 163邮箱提示: 535 Error: authentication failed
  19. kasp技术原理_基因型鉴定的多种方法
  20. The Thirty-eighth Of Word-Day

热门文章

  1. openlayers 地图上加图标_OpenLayers学习笔记中级篇(四、地图图标操作)
  2. 基于三层交换技术的校园网设计与实现
  3. 超算优化重在存储,DAOS助力瑞金打造先进的生信大数据平台
  4. Debug Error :abort() has been called 报错原因及解决方法
  5. B2C大点名:国内B2C网站收集
  6. Linux_clustalW安装及使用(部分)
  7. linux输入文件后clustalw,合并提取后的domain序列之后,linux系统中的clustalw不能读出蛋白信息...
  8. 怎样低成本的实现网页在移动端的适配
  9. 阿里云ecs服务器买完后可以更换操作系统么?
  10. Leetcode 1153 字符串转化