本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者:pk哥
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun
前几天,川普又在推特因为宣扬暴力翻车了,不过,对于这位翻车王来说,已经是常规操作了。在推特上指点江山已经成为他新的治国方式。我无意中关注了他的推特,看手机时推特 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('生成词云成功!')
我把背景图换成川普的侧脸图。
参数设置完成后,就可以生成词云图了。
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('生成词云成功!')