当前位置:   article > 正文

python实现词云图_python实现词云图

numpy连接数据库热门电影词云图

引言

最近再参加网页设计大赛,任务量都在网页设计和网页修改,以至于落了好多天学习大数据的知识。今天比赛结束,正好写一篇网页大赛用到的技术

正文

我们做的是一个豆瓣top250数据分析的一个网页,其中有一项技术是用到了词云,今天正好把这项技术说说。

具体怎么做的呢,首先我们先爬取了豆瓣top250 220条关于某个电影的短评,然后将短评存到数据库,读取数据库,将关于该部电影的短评组成一句话,进行jieba分词,然后再过滤掉停用词,制作词云图,最后保存词云图.

步骤

1、导包

## 包的作用

import jieba #分词

from wordcloud import WordCloud #词云

from PIL import Image #图片处理

import numpy as np #将图片变成数组

import collections #计数器

from matplotlib import pyplot as plt #绘图

import sqlite3 #数据库

2、读取数据,并返回数据

def get_data(db_name,sql):

#连接数据库

conn = sqlite3.connect(db_name)

#获取游标

cursor = conn.cursor()

#执行sql语句

data = cursor.execute(sql)

text = ""

#拼接信息

for item in data:

text += item[0]+" "

cursor.close()

#关闭数据库

conn.close()

return text

3、进行分词,并返回字典。(name:对应的单词,value:单词出现的个数)

def cut_word(text):

#分词:cut_all=False:精确模式 HMM=True:使用隐式马尔科夫

cut = jieba.cut(text,cut_all=False,HMM=True)

object_list = []

#读取停用词

with open("stop_word.txt", 'r', encoding='UTF-8') as meaninglessFile:

stopwords = set(meaninglessFile.read().split('\n'))

stopwords.add(' ')

#如果单词不在停用词里,则添加

for word in cut:

if word not in stopwords:

object_list.append(word)

#collections.Counter 计数器,统计单词个数

word_counts = collections.Counter(object_list)

print(word_counts)

return word_counts

4、生成词云图并保存

def get_cloud(word_counts,i):

#遮罩图:必须是白底的

img = Image.open(r'./img/tree.jpg')

img_array = np.array(img) #将图片变为数组

wc = WordCloud(

background_color = 'white', # 背景颜色

mask = img_array, #遮罩图片

font_path = 'msyh.ttc' #字体样式

)

wc.generate_from_frequencies(word_counts) #生成词云图

fig = plt.figure(1)

plt.imshow(wc) # 显示词云

plt.axis('off') # 关闭保存

#plt.show()

#调整边框

plt.subplots_adjust(top=0.99, bottom=0.01, right=0.99, left=0.01, hspace=0, wspace=0)

#保存图片

plt.savefig(r'./movie_img/movie{0}.jpg'.format(i),dpi = 500)

5、总的代码

#-*- codeing = utf-8 -*-

#@Time : 2020/11/14 22:16

#@Author : 杨晓

#@File : testCloud.py

#@Software: PyCharm

## 包的作用

import jieba #分词

from wordcloud import WordCloud #词云

from PIL import Image #图片处理

import numpy as np #将图片变成数组

import collections #计数器

from matplotlib import pyplot as plt #绘图

import sqlite3 #数据库

# 获取短评信息

def get_data(db_name,sql):

#连接数据库

conn = sqlite3.connect(db_name)

#获取游标

cursor = conn.cursor()

#执行sql语句

data = cursor.execute(sql)

text = ""

for item in data:

text += item[0]+" "

cursor.close()

#关闭数据库

conn.close()

return text

def cut_word(text):

#分词:cut_all=False:精确模式 HMM=True:使用隐式马尔科夫

cut = jieba.cut(text,cut_all=False,HMM=True)

object_list = []

#读取停用词

with open("stop_word.txt", 'r', encoding='UTF-8') as meaninglessFile:

stopwords = set(meaninglessFile.read().split('\n'))

stopwords.add(' ')

#如果单词不在停用词里,则添加

for word in cut:

if word not in stopwords:

object_list.append(word)

#collections.Counter 计数器,统计单词个数

word_counts = collections.Counter(object_list)

print(word_counts)

return word_counts

def get_cloud(word_counts,i):

#遮罩图:必须是白底的

img = Image.open(r'./img/tree.jpg')

img_array = np.array(img) #将图片变为数组

wc = WordCloud(

background_color = 'white', # 背景颜色

mask = img_array, #遮罩图片

font_path = 'msyh.ttc' #字体样式

)

wc.generate_from_frequencies(word_counts) #生成词云图

fig = plt.figure(1)

plt.imshow(wc) # 显示词云

plt.axis('off') # 关闭保存

#plt.show()

#调整边框

plt.subplots_adjust(top=0.99, bottom=0.01, right=0.99, left=0.01, hspace=0, wspace=0)

#保存图片

plt.savefig(r'./movie_img/movie{0}.jpg'.format(i),dpi = 500)

if __name__ == '__main__':

for i in range(1,251):

#编写查询语句

sql = "select info from movie"+str(i)

text = get_data('duanping',sql)

word_counts = cut_word(text)

get_cloud(word_counts,i)

因为要生成250个词云图,所有才有for循环。具体要求请读者按照自己的需求更改main函数代码

运行结果:

肖申克的救赎:

王霸别姬

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/301510
推荐阅读
相关标签
  

闽ICP备14008679号