Python入门之生成海贼王云图

写的样式在简书上显示有问题,可去我的网站查看Python入门之生成海贼王云图

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

涉及的Python基础包括:

* 变量和函数的定义和使用

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

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

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

需要安装以下依赖库:

* jupyter - 交互式笔记本

* matplotlib - Python2D绘图库

* jieba - Python中文分词组件

* pillow - Python图像处理库

* wordcloud - Python词云库

目标

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


1.准备数据

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

```python

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

```

�[31mBON VOYAGE.txt�[m�[m*      �[31mfree will.txt�[m�[m*      �[31m向著阳光.txt�[m�[m*

�[31mJungle P.txt�[m�[m*        �[31mmemories.txt�[m�[m*        �[31m心的地图.txt�[m�[m*

�[31mRun!Run!Run!.txt�[m�[m*    �[31mshare the world.txt�[m�[m* �[31m未来航海.txt�[m�[m*

�[31mShining Ray.txt�[m�[m*    �[31m全新世界.txt�[m�[m*        �[31m永久指针.txt�[m�[m*

�[31mbelieve.txt�[m�[m*        �[31m冒险世界.txt�[m�[m*        �[31m疯狂彩虹.txt�[m�[m*

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

```python

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

```

```python

# 读取文件夹内容

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提取出关键词

```python

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, '我会': ...}

**2.使用wordcloud生成云图**

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


```python

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)

```

```python

# 显示图片

plt.imshow(wc)

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

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

plt.show()

```


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 代码: import matplotlib.pyplot as plt from wordcloud import...
    吴强_71b2阅读 1,384评论 0 1
  • 很少记录自己的学习历程,无奈太健忘,而且刚入手Python,还是写下来供以后参考和思考。 本篇主要利用python...
    夏林的每个蓝天阅读 1,380评论 0 2
  • 题记:一直觉得好记性不如烂笔头, 加上有整理东西的习惯, 这些小东西,想想也随手整理下吧. .pch文件 也是一个...
    sunmumu1222阅读 759评论 0 0
  • 城市灯火辉煌 明月洒光伴亮夜幕 美景向往追寻 今日奔波劳累 以后生活安适幸福 舒心自由欢畅
    六月天气阅读 240评论 3 30
  • 熙熙攘攘的街道, 川流不息的车辆。 一杯酒,一本书, 一首歌,一盏灯。 在黑暗中漫步, 在心脏中殉葬, 流过街道的...
    吥喧阅读 207评论 0 1