本教程适合于有一定编程经验的同学,使用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()

python海贼王logo_Python入门之生成海贼王云图相关推荐

  1. Python最简单的方法生成词云图

    用Python怎么生成词云图呢? 网上有很多教程,这里给大家介绍一种比较简单易懂的方式方法. 首先请自主下载worldcloud, jieba, imageio三个库. 如何有效下载详见:https: ...

  2. python 网页爬取数据生成文字云图

    1. 需要的三个包: from wordcloud import WordCloud #词云库 import matplotlib.pyplot as plt #数学绘图库 import jieba; ...

  3. python爬取歌词并生成词云图

    第一部分:爬取数据 # 第一部分:爬取数据 import requests import re import os import json from bs4 import BeautifulSoup# ...

  4. python image stiching_Python自然语言处理,词云图生成

    自然语言处理 本节介绍如何使用Python中的库,生成词云图,涉及自然语言处理的相关问题,自然语言处理是计算机科学领域与人工智能领域中的一个重要方向.它研究能实现人与计算机之间用自然语言进行有效通信的 ...

  5. python爬取微博数据词云_用Python爬取微博数据生成词云图片

    原标题:用Python爬取微博数据生成词云图片 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业智能BI.大数 ...

  6. 爬虫——爬取人民网数据生成词云图

    1.以人民网的新闻数据为例,简单介绍的利用python进行爬虫,并生成词云图的过程. 首先介绍python的requests库,它就好像是一个"爬手",负责到用户指定的网页上将所需 ...

  7. Python实现Wordcloud生成词云图的示例

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

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

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

  9. python爬音乐评论生成词云图_python爬虫+词云图,爬取网易云音乐评论

    又到了清明时节,用python爬取了网易云音乐<清明雨上>的评论,统计词频和绘制词云图,记录过程中遇到一些问题 爬取网易云音乐的评论 一开始是按照常规思路,分析网页ajax的传参情况.看到 ...

  10. python爬虫学习:爬虫QQ说说并生成词云图,回忆满满

    自学过一段时间的python,用django自己做了个 网站,也用requests+BeautifulSoup爬虫过些简单的网站,周末研究学习了一波,准备爬取QQ空间的说说,并把内容存在txt中,读取 ...

最新文章

  1. 获取局域网内服务器信息,使用Java代码获取服务器性能信息及局域网内主机名.pdf...
  2. django-配置静态文件路径
  3. 计算机在矿山企业中的应用,计算机在矿山工业中的应用与发展
  4. MYSQL中group_concat有长度限制!默认1024(转载)
  5. swagger里面显示的示例参数格式错误
  6. android java service_[Java教程]Android四大组件之Service浅见
  7. 解决耳机插入电脑没声音问题
  8. 什么是CDN加速服务器?
  9. ubuntu 12.04中搭建nfs服务器
  10. 中科大计算机学院推免拟录取,中科大2019年录取177所高校推免生2109人,外校985生源不足三成...
  11. [RK3588 Android12]修改开机logo和播放开机视频
  12. 基于OpenCASCADE自制三维建模软件(六)瓶子模型例程
  13. buctoj-2022寒假集训4
  14. 中科院大牛博士是如何进行文献检索和阅读(好习惯受益终生)
  15. C++/C++11中头文件sstream介绍
  16. python 求pi_python下利用无穷级数计算pi值
  17. 挑战程序设计竞赛 3.6 与平面和空间打交道的计算几何
  18. pip 安装keystone_基于Ubuntu12.04下的Keystone源码安装
  19. 开放接口API(开发者的福利)
  20. 使用Logistic回归预测贷款违约

热门文章

  1. 谁爱谁都没有错... ...
  2. 6. 标准 I/O 库
  3. css3中的background的新特性background-origin,background-clip,background-size详解
  4. python入门之排序,文件操作
  5. 第十一篇:Mysql系列
  6. SPFA - Luogu 3385 【模板】负环
  7. 实现异步加载js文件及加载完成后回调
  8. Alpha版本发布说明
  9. .NET 实现异步处理的集中方式
  10. SharePoint 设置Library中文档的默认打开方式