Advertisement

python画二维温度云图_Python数据可视化-使用Python绘制词云图

阅读量:

很多朋友们会问如何操作Python来绘制词云图?今天我们将分享一个简单的演示文稿作为参考,请对技术感兴趣的朋友不妨自行实践一下!

1. 前期准备

在绘制词云图之前,我们要先安装所需的第三方库。

安装jieba:conda install -c conda-forge jieba

安装wordcloud:conda install -c conda-forge wordcloud

2. 准备需要分析的内容

此处提供给你现成的资源。
在本次演示中,请访问PubMed网站并筛选出标题中含有‘肺癌’关键词的前十篇文章作为研究依据。
为此部分,请使用requests库来获取所需网页的信息。
随后应用beautifulsoup库解析网页结构以便完成后续分析工作。

import re

import jieba

import jieba.analyse

import codecs

import wordcloud

import requests

from bs4 import BeautifulSoup

import matplotlib.pyplot as plt

page = 10 # 设置获取前10页的内容

start_url = (\text{https://pubmed.ncbi.nlm.nih.gov/?term=lung+cancer}) # 指定用于搜索的PubMed链接及研究关键词

循换10页内容,获取页面所有文章的题目

all_content = ''

for i in range(int(page)):

url = start_url + "&page=" + str(int(i)+1)

#爬取网页

r = requests.get(url, headers= {'user-agent':'Mozilla/5.0'})

r.raise_for_status()

r.encoding = r.apparent_encoding

html = r.text

#提取题目信息

soup = BeautifulSoup(html, 'html.parser')

for paper in soup.find_all(attrs={'class':'docsum-content'}):

name = str(paper.a).split('">')[1]

title = re.sub(r'(||)', '', name).strip()

all_content += title + '\n'

with open('title.txt', 'a', encoding='utf-8') as out_file:

out_file.write(title.lower() + '\n')

3. 词频统计

在我们进行词频统计之前,我们还需要做一些准备工作。

在本简单的演示案例中进行内容处理时,请注意以下几点:我们处理的所有内容都是用英文表示的,并且我们知道,在英文中单词之间通常会用空格分隔。因此对计算机来说非常友好——它能够轻松识别每一个英文单词。然而我们需要清楚的是:而我们中国的词语通常是连在一起没有空格间隔的情况——这与英语写作习惯不同!所有大家要注意:如果你要处理的内容是中文的话,请先进行中文分词处理——这其实就是告诉计算机哪些内容是一个完整的词语!比如将‘我是学生’变成‘我 | 是 | 学生’这样的形式。如果大家有中文分词的需求,请进一步参考jiba官方文档获取详细指导信息

接下来,在数据预处理阶段中我们需要去除(stop words)一些不会对文本分析产生实质影响的一类词汇和字符。所谓停用词(stop words),是指在自然语言处理中通常被排除掉的一类词语和符号,在统计词语频率时我们通常会选择性地忽略这些词语以减少计算复杂度并提高分析效率。其主要目的是降低语义重复率和消除无意义信息。例如,在英文文本中常见的停用词有'a', 'an', 'and', 'or'等;而在中文文本中则包括'的'、'地'、'了'等符号与词语

在这一实例中,在线用户通过采用先进的数据分析方法进行了数据统计,并从中提取出现频率最高的前100个单词作为关键词数据源;随后依据这些关键词数据源生成并绘制了相应的词云图。

#载入停用词数据

生成一个包含停用词列表的列表:通过逐行读取文件内容,并调用strip()方法去除每行两端空白。

#词频统计

segments = {}

words = jieba.cut(all_content)

for word in words:

if word not in stopwords:

segments[word] = segments.get(word, 0) + 1

#按照词频排序

sort_segments = sorted(segments.items(), key=lambda item:item[1], reverse=True)

words_on_list = []

for word, count in sort_segments[:99]:

words_on_list.append(word)

4. 绘制词云图

通过WordCloud生成词云图,并随后利用Matplotlib库来展示图片并进行题目设置

#生成词云

word_show = ' '.join(words_on_list)

w等于WordCloud对象,
其font_path参数设置为'MS 楷体',
width设定为1千,
height设定为七五,
bg_color属性设为'white',
max_n属性设为一二三。

w.generate(word_show)

w.to_file("hot_word.jpg")

plt.figure(figsize=(8,8.5))

plt.imshow(w, interpolation='bilinear')

plt.axis('off')

plt.title('Most Popular Words in Title', fontsize=30)

plt.show()

最后就得到了我们想要的词云图:

5311d0d604ef

image.png

全部评论 (0)

还没有任何评论哟~