Python 专题

Python数据可视化-使用Python绘制词云图

2020-09-28  本文已影响0人  5cb608806559

经常有朋友问怎么使用Python绘制词云图?今天我们展示一个简单的demo,有兴趣的朋友可以尝试跟着DIY哦~

1. 前期准备

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

2. 准备需要分析的内容

这里你可以直接使用你已经准备好的内容,在这个demo中,我们通过获取pubmed上以lung cancer为关键词搜索的前10页的文章题目作为分析的内容。这里我们采用requests获取网页信息,然后使用beautiful soup进行网页结构分析。

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 = ('https://pubmed.ncbi.nlm.nih.gov/?term=lung+cancer') # 设置搜索网址与关键词lung cancer
# 循换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'(</a>|<b>|</b>)', '', name).strip()
        all_content += title + '\n'
        with open('title.txt', 'a', encoding='utf-8') as out_file:
            out_file.write(title.lower() + '\n')

3. 词频统计

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

在这个简单的demo中,我们处理的内容是全英文的,大家都知道英文单词之间是以空格来间隔的,所以对计算机很友好,它可以很容易识别出每个英文单词。但是,我们要知道,我们的中文的词组间是没有空格间隔的。所有,大家要注意如果你要处理的内容是中文的,你需要先进行中文分词处理,中文分词就是要告诉计算机哪些内容是一个词组。比如,“我是学生”这句话,通过分词处理就变成了“我 | 是 | 学生”。如果大家有中文分词的需求,可以进一步参考jiba官方文档

接着,我们要剔除停用词(stop words)。什么是停用词呢?简单的说,就是处理词频的时候我们不需要统计的的词汇,字符。比如英文中的“a,an,and,or...”;又比如中文中的“的、地、了...”。

在这个例子中,我们通过统计,筛选了出现频率最高的前100个单词进行下一步词云图的绘制。

#载入停用词数据
stopwords = [line.strip() for line in codecs.open('stopwords.txt', 'r', 'utf-8').readlines()]

#词频统计
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.WordCloud(font_path="msyh.ttc", width=1000, height= 700,background_color="white", max_words=100)  
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()

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


image.png
上一篇下一篇

猜你喜欢

热点阅读