前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:一粒米饭

喜欢的朋友欢迎关注小编,除了分享技术文章之外还有很多福利,私信“学习资料”可以领取包括不限于Python实战演练、PDF电子文档、面试集锦、学习资料等。

本教程基于Python3,使用Jupyter上进行调试开发。

涉及的Python基础包括:

  • 变量和函数的定义和使用
  • 列表和字典等数据结构的使用
  • 条件和循环语句,if、for等
  • 模块的导入和使用,import语法

需要安装以下依赖库:

  • jupyter - 交互式笔记本
  • matplotlib - Python2D绘图库
  • jieba - Python中文分词组件
  • pillow - Python图像处理库
  • wordcloud - Python词云库

目标

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

1.准备数据

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

ls 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

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

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
# 读取文件夹内容
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 显示内容的前面部分... 世代传承的意志 时代的浪潮 人的梦想
这些都是无法阻挡的
只要人们继续追求自由的解答
这一切都将永不停止 我只相信着未来 就算有人笑我也无所谓
奔驰的热情让你更耀眼
虽然好刺眼 但我仍要继续凝视

3. 使用jieba提取出关键词

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)
# 显示图片
plt.imshow(wc)
plt.imshow(wc.recolor(color_func=image_color))
plt.axis("off") # 关闭图像坐标系
plt.show()

Python实现海贼王的歌词组成词云图的更多相关文章

  1. 小白学Python(12)——pyecharts ,生成词云图 WordCloud

    WordCloud(词云图) from pyecharts import options as opts from pyecharts.charts import Page, WordCloud fr ...

  2. Excel催化剂开源第27波-Excel离线生成词云图

    在数据分析领域,词云图已经成为在文本分析中装逼的首选图表,大家热烈地讨论如何在Python上做数据分析.做词云图. 数据分析从来都是Excel的主战场,能够让普通用户使用上的技术才是最有价值的技术,一 ...

  3. python 数据分析--词云图,图形可视化美国竞选辩论

    这篇博客从用python实现分析数据的一个完整过程.以下着重几个python的moudle的运用"pandas",""wordcloud"," ...

  4. 特朗普退出《巴黎协定》:python词云图舆情分析

    1 前言 2017年6月1日,美国特朗普总统正式宣布美国退出<巴黎协定>.宣布退出<巴黎协定>后,特朗普似乎成了“全球公敌”. 特斯拉总裁马斯克宣布退出总统顾问团队 迪士尼董事 ...

  5. python绘制中文词云图

    准备工作 主要用到Python的两个第三方库 jieba:中文分词工具 wordcloud:python下的词云生成工具 步骤 准备语料库,词云图需要的背景图片 使用jieba进行分词,去停用词,词频 ...

  6. 词云wordcloud类介绍&python制作词云图&词云图乱码问题等小坑

    词云图,大家一定见过,大数据时代大家经常见,我们今天就来用python的第三方库wordcloud,来制作一个大数据词云图,同时会降到这个过程中遇到的各种坑, 举个例子,下面是我从自己的微信上抓的微信 ...

  7. python爬虫+词云图,爬取网易云音乐评论

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

  8. (数据科学学习手札71)在Python中制作个性化词云图

    本文对应脚本及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 词云图是文本挖掘中用来表征词频的数据可视化 ...

  9. 【Python成长之路】词云图制作

    [写在前面] 以前看到过一些大神制作的词云图 ,觉得效果很有意思.如果有朋友不了解词云图的效果,可以看下面的几张图(图片都是网上找到的): 网上找了找相关的软件,有些软件制作 还要付费.结果前几天在大 ...

随机推荐

  1. 【python(deap库)实现】GEAP 遗传算法/遗传编程 genetic programming +

    目录 前言 1.优化问题的定义 单目标优化 多目标优化 2.个体编码 实数编码 二进制编码 序列编码(Permutation encoding) 粒子(Particles) 3 初始种群建立 一般族群 ...

  2. redis的参数解释

    include /path/to/local.conf 当有公用配置时,可以采用独立出公共配置文件然后引入的方式达到公共配置unixsocket /tmp/redis.sock 通过socket文件进 ...

  3. CF918C The Monster

    题目链接:http://codeforces.com/contest/918/problem/C 知识点: 贪心 解题思路: 枚举起点(当起点就是\(')'\)时直接跳过)并在此基础上遍历字符串,用一 ...

  4. sobel( ) 算子

    只是简单的使用方面的记录 sobel()算子是图像处理中用于边缘检测的 opencv-python 中的函数形式为 def Sobel(src, ddepth, dx, dy, dst=None, k ...

  5. 【C++】表达式中各类数值型数据间的混合运算

    注意:以下内容摘自文献[1],修改了部分内容. 1.运算中各类型数据转换方向如下: 高 double    ←  float   ↑  ↑     | long     | ↑     | unsig ...

  6. [PHP学习教程 - 数字]001.数字补0(Num padding)

    引言:在日常工作中,经常要用到数字前后补0的操作,如:日期格式yyyy-MM-dd等等. 在php中有多种前后填充函数——今天,我们就介绍常用的两种,实现数字补零: str_pad sprintf 大 ...

  7. neo4j-jdbc driver

    https://github.com/neo4j-contrib/neo4j-jdbc/releases/tag/3.3.1

  8. 突发!HashiCorp禁止在中国使用企业版VAULT软件

    目录 前言 HashiCorp公司介绍 HashiCorp旗下的软件 Provision Secure Connect Run 总结 前言 昨天HashiCorp突然发布一则消息,禁止在中国使用Vau ...

  9. Docker 笔记一相关命令

    Centos 7 : Service network restart 重启网络 Ip addr 查看ip地址 Uname -r 查看内核版本 Yum install docker 安装docker 命 ...

  10. Python装饰器的一点解读

    版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/12977127.html 作者:窗户 ...