用 Python 解析李小璐的微博,惊呆了!彩民之家论

2019-10-11 05:47 来源:未知

彩民之家论坛9066777 1image彩民之家论坛9066777 2image彩民之家论坛9066777 3image彩民之家论坛9066777 4image彩民之家论坛9066777 5image彩民之家论坛9066777 6image

十九大召开已过去近一个月,我国社会主要矛盾已经转变,中国特色社会主义进入了新时代,中国人民实现了从站起来,富起来到强起来,我们国家已经走近世界舞台的中央。国家强盛,民族自豪,为了中国梦,戮力前行。

Python开发
原文链接:http://t.cn/RHkrlkW

可以了解整个香港电影史,从早期合拍上海片,到胡金栓的武侠片,到李小龙时代,然后是成龙,接着周星驰

“不忘初心,牢记使命,高举中国特色社会主义伟大旗帜,决胜全面建成小康社会,夺取新时代中国特色社会主义伟大胜利,为实现中华民族伟大复兴的中国梦不懈奋斗。”

2018 年的开始就被娱乐圈李小璐事件刷爆网络,对于这件事我们用数据说话。我们就运用 Python,来看看各大媒体,是怎么谈论这个事情的,运用 Python 抓取新浪微博,根据关键字“李小璐 PGONE”,能够搜索到700 条热门微博(这个并非一切的,而是当前新浪微博可查询的)。

最后,展示一下Python代码:

词云

偶有看到有人实现用词云展示十九大报告关键词,这里就利用自己掌握的技术实现一下词云解读报告。先来看看生成的词云图:

词云图

是不是还是蛮有趣的,报告中的高频词汇都清晰地以徽标的形状映射出来了,词频越高,词汇也就越大。

也许也有很多同学想要学习一下这么酷炫的小技巧,在自己的ppt和汇报中show一下,这里就将具体实现过程分享给大家。

首先要装好python环境,然后装好几个python的常用库,包括词云库wordcloud,绘图库matplotlib,中文分词库jieba,图像处理库PIL和科学计算库numpy。

这么多库一个个装也会麻烦些,其实下载Anaconda就可以了,很多库都直接集成在里面了。装了Anaconda的话,只需再装个词云库就可以了,可以在终端或者cmd输入下面命令安装,如果要在已有python环境安装其他库也可以用这个命令,具体安装过程也可以搜索一下教程。

pip install wordcloud

准备好环境可以开始做词云图了,首先准备好报告全文,另存为纯文本文件如shijiuda.txt。

第一步,导入所需的库和报告全文,path为文本文件路径。

用jieba库对全文分词,分词结果以字符串形式存入alldata中,注意格式为“词语1 词语2 词语3”,词语之间用空格隔开。

import wordcloud as wc
import matplotlib.pyplot as plt
import jieba
from PIL import Image
from numpy import array

path="D:/.../shijiuda.txt"
#从路径读取报告全文,存为data
data=open(path,"r",encoding="UTF-8").read()
#使用jieba分词
cutdata=jieba.cut(data)
alldata=""
for i in cutdata:
    alldata=alldata " " str(i)

第二步,选取生成词云所需的中文字体font,一般为.ttf文件,windos系统在目录C:WINDOWSFonts下,mac在/System/Library/Fonts或/Library/Fonts目录下,这里选了常规简体中文黑体。

然后准备好一张背景图片,如dang.jpg,用轮廓越清晰,质量越高的图片生成的词云图效果越好,对于上面做的词云图我找的背景图是下面这张。

选取底版

用PIL的Image方法读取图片,将图片转为数组,然后用分好的词alladata生成词云图。

font=r"/System/Library/Fonts/STHeiti Medium.ttc"
#读图片
pic=Image.open("D:/.../dang.jpg")
#图片转数组
picarray=array(pic)
#collocations=False表示是否归并词,传入字体路径,图片数组,设置背景颜色为白色,用alldata生成词云
mywc=wc.WordCloud(collocations=False, font_path=font,mask=picarray,background_color="white").generate(alldata)
#画布大小
fig = plt.figure(figsize=(10,10))
#展示图片
plt.imshow(mywc)
#去掉坐标轴
plt.axis('off')
plt.show()

然后就可以换几个图片背景看看其他词云效果了。

其他词云图

可以看到较大较明显的词都是十九大报告中的高频关键词。

下面我们来看新浪微博媒体发布数据截图

用爬虫爬下上万知乎女神照片

考研的同学应该此刻也在对着十九大报告埋头苦背吧,作为一只有中国梦和爱国心的程序猿,这份报告也必须熟读了解啊,万一有机会考研就用到了呢。

就分享到这个。

彩民之家论坛9066777 7image彩民之家论坛9066777 8image

出于对技术的热爱和好奇心,Python大法立时出现在脑海,网上也曾有人用词云解读过报告,人生苦短,何不用Python来自己解读一下这份报告,加深映像呢。

image

彩民之家论坛9066777 9image

词频统计

如果想更深入了解具体词频情况,可以继续做词频统计。比如我想把出现最多的前20个词拿出来比对一下,词云图无法展示哪20个词出现最多,这时可以用条形图对比分析。

词频统计图

这个图也是完全用Python做统计分析后实现的。从这个对比图就非常清楚的看出“社会”、“发展”、“人民”、“中国”、“建设“、社会主义”等词出现频率最高,都出现过150次以上。

首先从分词后的数据中找出出现次数最多的前20个词,以及它们的词频。

from jieba.analyse import extract_tags
import numpy as npy
#extract_tags提取词频前20的关键词存为列表tags中
tags = extract_tags(sentence=alldata, topK=20)
#全切词,分别统计出这20个关键词出现次数,即词频,存为字典words_freq中
words = [word for word in jieba.cut(data, cut_all=True)]  
words_freq = {}  
for tag in tags:
    freq = words.count(tag)  
    words_freq[tag] = freq
#将该字典按词频排序
usedata=sorted(words_freq.items(), key=lambda d:d[1])
#字典转为numpy数组并作矩阵转置,方便画图取用
tmp= npy.array(usedata).T
print(tmp)

tmp即为统计后的前20个数据,存有两个列表,词语和对应的词频,输出如下:

print(tmp)

然后利用统计好的数据作图,作图代码如下:

#导入绘图库
from numpy import arange
import matplotlib
#画布大小
fig,ax = plt.subplots(figsize=(10,10))
#输出中文字体
myfont = matplotlib.font_manager.FontProperties(fname="/System/Library/Fonts/STHeiti Medium.ttc")
#图表标题设置,想要标题居中可以去掉x,y的设置
plt.title(u'十九大报告词频统计',fontproperties=myfont,fontsize=20,x=0.001,y=1.02)
#图表x轴设置
ax.set_xlabel(u'出现次数',fontproperties=myfont,fontsize=20,x=0.06,y=1.02,color="gray")
#边框线设置,去除上方右方的框线,左下框线置灰融入背景
ax.spines['bottom'].set_color('grey')
ax.spines['left'].set_color('grey')
ax.spines['top'].set_color('white')
ax.spines['right'].set_color('white')
#传入词语,y轴显示20个标记位置,设置字体大小,颜色为灰色
tick_positions = range(1,21)
ax.set_yticks(tick_positions)
ax.set_yticklabels(tmp[0],fontproperties=myfont,fontsize=18,color="gray")
#设置数据条的间隔
bar_positions = arange(20)   0.75
#导入数据并做图展示
ax.barh(bar_positions, tmp[1], 0.5,align="edge")
plt.show()

这样就实现了完全用python绘制出上面的词频统计图了。

利用上面的方法就可以画其他文本比如小说、文章、评论的词云或者词频统计图啦。

从词云中,我们能够看出,这个事件中,涉及到的人物有李小璐、PGONE、贾乃亮、王思聪、卓伟、马苏,其中,最无辜的是李小冉同学,由于姓名相似,也被网友火热光临了一把。
涉及的人物词频

彩民之家论坛9066777 10image

李小璐回复该事件的微博
直接抓取转发的 4.5 万用户谈论,然后计算词频绘制词云,如下图所示:

彩民之家论坛9066777 11image彩民之家论坛9066777 12image

网友谈论词云

将《2016年中国政府工作报告》变成词云是这样的

热门微博生成的词云

彩民之家论坛9066777 13用 Python 解析李小璐的微博,惊呆了!彩民之家论坛9066777。image彩民之家论坛9066777 14image彩民之家论坛9066777 15image

能够看到,网友们的态度主要是会集在厌恶、出轨以及相信、喜爱这两种态度上,但是呢,在网友的词频里面,竟然很少提及到 PGONE,也就是说,在李小璐的微博下面,我们都是在讨论李小璐和贾乃亮的爱情啊。
下面给大家讲一个利用 Python实现新浪微博爬虫的例子。第一个模块,模拟登陆 sina 微博,创建 weiboLogin.py 文件,输入以下代码:

以小燕子照片为词云背景

彩民之家论坛9066777 16image彩民之家论坛9066777 17image

彩民之家论坛9066777 18image彩民之家论坛9066777 19image彩民之家论坛9066777 20image彩民之家论坛9066777 21image

然后是《小时代》

彩民之家论坛9066777 22image彩民之家论坛9066777 23image彩民之家论坛9066777 24image

用 Python 解析李小璐的微博,惊呆了!彩民之家论坛9066777。爬知乎女神的代码

对《还珠格格》进行词频统计

对职责要求的词频分析,提炼出必需技能

对《还珠格格》的词频统计生成词云标签

彩民之家论坛9066777 25image

from wordcloud import WordCloudimport jiebaimport PILimport matplotlib.pyplot as pltimport numpy as npdef wordcloudplot: path = 'd:/jieba/msyh.ttf' path = unicode(path, 'utf8').encode('gb18030') alice_mask = np.array(PIL.Image.open('d:/jieba/she.jpg')) wordcloud = WordCloud(font_path=path, background_color="white", margin=5, width=1800, height=800, mask=alice_mask, max_words=2000, max_font_size=60, random_state=42) wordcloud = wordcloud.generate wordcloud.to_file('d:/jieba/she2.jpg') plt.imshow(wordcloud) plt.axis plt.show()def main(): a = [] f = open(r'd:jiebabookshe.txt', 'r').read() words = list(jieba.cut for word in words: if len > 1: a.append txt = r' '.join wordcloudplotif __name__ == '__main__': main()

Python学习群:556370268,有大牛答疑,有资源共享!是一个非常不错的交流基地!欢迎喜欢Python的小伙伴!

词频统计和词云的代码

彩民之家论坛9066777 26image

彩民之家论坛9066777 27image彩民之家论坛9066777 28image彩民之家论坛9066777 29image

import requestsimport urllibimport reimport randomfrom time import sleepdef main(): url = 'xxx' headers = {xxx} i = 925 for x in xrange(1020, 2000, 20): data = {'start': '1000', 'offset': str, '_xsrf': 'a128464ef225a69348cef94c38f4e428'} content = requests.post(url, headers=headers, data=data, timeout=10).text imgs = re.findall('<img src=\\"_m.jpg', content) for img in imgs: try: img = img.replace pic = img   '.jpg' path = 'd:\bs4\zhihu\jpg4\'   str   '.jpg' urllib.urlretrieve(pic, path) print ('下载了第'   str   u'张图片') i  = 1 sleep(random.uniform except: print  pass sleep(random.uniformif __name__ == '__main__': main()

一个Web端的电影数据库交互

有没有满满的即视感?

对《射雕英雄传》进行词频统计并以郭靖剧照作为词云背景

版权声明:本文由彩民之家高手论坛发布于编程技术,转载请注明出处:用 Python 解析李小璐的微博,惊呆了!彩民之家论