前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:pk哥

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入


前几天,川普又在推特因为宣扬暴力翻车了,不过,对于这位翻车王来说,已经是常规操作了。在推特上指点江山已经成为他新的治国方式。我无意中关注了他的推特,看手机时推特 push 消息一直响个不停,一看,全是川普发的,一位总统一天能发 200 条推特,我服了。

有时,川普会在推特上发表的一些言论和观点,在现实中,把自己在推特上说的全部否定,这是最强的打脸永动机,很魔幻。

我整理了一份川普从 2017 年 1 月份 到 2020 年 5 月 31 号的所有推特消息。这是一份英文 Excel 文档,为了方便中文分词和查看,我把它翻译成了中文。

读取信息并分词

然后直接读取 Excel 文档读取特定列的推特信息并返回结果。

def excel_one_line_to_list():
    data = pd.read_excel('/Users/brucepk/Documents/trump_20200530_中文翻译版.xlsx', header=1, usecols=[0], names=None)
    df_li = data.values.tolist()
    result = []
    for s_li in df_li:
        result.append(s_li[0])
    return result

接下来用中文分词库 jieba 库对这些信息进行分词。

if __name__ == '__main__':
    result = str(excel_one_line_to_list())
    results = re.sub("[A-Za-z0-9\[\`\~\!\@\#\$\^\&\*\(\)\=\|\{\}\'\:\;\'\,\[\]\.\<\>\/\?\~\。\@\#\\\&\*\%]", "", result).replace('谢谢', '').replace('今天', '')
    text = ''
    for line in results:
        text += ' '.join(jieba.cut(line, cut_all=False))
    print('text:', text)
    backgroud_Image = np.array(Image.open('trumppic2.png'))   # 生成词云图的背景图片

配置词云图参数

在把分好词的单词进行统计,通过 WordCloud 库把单词展示在出来生成词云图,出现的次数越多的词字体越大。

    wc = WordCloud(scale=32, background_color='white', mask=backgroud_Image,
                   font_path='/System/Library/Fonts/Supplemental/Songti.ttc',
                   max_words=1000, max_font_size=100, random_state=42, mode='RGB')
    wc.generate_from_text(text)

    process_word = WordCloud.process_text(wc, text)
    sort = sorted(process_word.items(), key=lambda e: e[1], reverse=True)
    print(sort[:50])   # 打印出排名前50的词
    img_colors = ImageColorGenerator(backgroud_Image)
    wc.recolor(color_func=img_colors)
    plt.imshow(wc)
    plt.axis('off')
    wc.to_file("trump20.jpg")  # 保存词云图在代码的的同一目录下
    print('生成词云成功!')

WordCloud 库里面的参数说明下:

  • scale 控制图片的清晰度,最高 64,我设置的 32,已经很高清了,这个值越高,生成图片耗时越长。
  • background_color 词云图背景颜色
  • mask 生成词云图的背景图片
  • font_path 你电脑里的字体,需要给出具体字体的路径
  • max_words 词云图显示的单词数量
  • max_font_size 出现次数最多单词的字体大小
  • random_state 随机生成颜色

我把背景图换成川普的侧脸图。
在这里插入图片描述
参数设置完成后,就可以生成词云图了。

    process_word = WordCloud.process_text(wc, text)
    sort = sorted(process_word.items(), key=lambda e: e[1], reverse=True)
    print(sort[:50])   # 打印出排名前50的词
    img_colors = ImageColorGenerator(backgroud_Image)
    wc.recolor(color_func=img_colors)
    plt.imshow(wc)
    plt.axis('off')
    wc.to_file("trump20.jpg")  # 保存词云图在代码的的同一目录下
    print('生成词云成功!')

川普推特词云图

这次我把川普推特上发的消息做成词云图,看看一天发 200 推特的内容说的都是啥!
在这里插入图片描述

完整代码

import pandas as pd
import csv
from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.pyplot as plt
import jieba
import re
from matplotlib import colors
import numpy as np
from PIL import Image

# 读取Excel表格信息并返回结果
def excel_one_line_to_list():
    data = pd.read_excel('/Users/brucepk/Documents/trump_20200530_中文翻译版.xlsx', header=1, usecols=[0], names=None)
    df_li = data.values.tolist()
    result = []
    for s_li in df_li:
        result.append(s_li[0])
    return result


if __name__ == '__main__':
    result = str(excel_one_line_to_list())
    results = re.sub("[A-Za-z0-9\[\`\~\!\@\#\$\^\&\*\(\)\=\|\{\}\'\:\;\'\,\[\]\.\<\>\/\?\~\。\@\#\\\&\*\%]", "", result).replace('谢谢', '').replace('今天', '')
    text = ''
    for line in results:
        text += ' '.join(jieba.cut(line, cut_all=False))
    print('text:', text)
    backgroud_Image = np.array(Image.open('trumppic2.png'))   # 生成词云图的背景图片

    # 设置生成词云的参数,font_path为电脑里的字体路径,需要改成你电脑的字体路径
    wc = WordCloud(scale=32, background_color='white', mask=backgroud_Image,
                   font_path='/System/Library/Fonts/Supplemental/Songti.ttc',
                   max_words=1000, max_font_size=100, random_state=42, mode='RGB')
    wc.generate_from_text(text)

    process_word = WordCloud.process_text(wc, text)
    sort = sorted(process_word.items(), key=lambda e: e[1], reverse=True)
    print(sort[:50])   # 打印出排名前50的词
    img_colors = ImageColorGenerator(backgroud_Image)
    wc.recolor(color_func=img_colors)
    plt.imshow(wc)
    plt.axis('off')
    wc.to_file("trump20.jpg")  # 保存词云图在代码的的同一目录下
    print('生成词云成功!')

本文转载:CSDN博客