美文网首页Python 专题
Python数据可视化-使用Python绘制词云图

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

作者: 5cb608806559 | 来源:发表于2020-09-28 00:11 被阅读0次

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

    1. 前期准备

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

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

    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

    相关文章

      网友评论

        本文标题:Python数据可视化-使用Python绘制词云图

        本文链接:https://www.haomeiwen.com/subject/ozsruktx.html