招商银行fintech选拔课题---《基于微博爬虫的舆情分析》下


这一篇,我主要介绍一下对爬虫后的微博数据,根据关键词,进行抽取和分析。


舆情分析思路流程

                         招商银行fintech选拔课题---《基于微博爬虫的舆情分析》下_第1张图片

信息抽取

爬虫得到微博信息存储在weiboData.xls这个EXCEL文件中,我抽取的是5017-05-02开始的最近10天的信息,一共691条微博信息。要想进行舆情分析,就必须对爬虫信息进行抽取。我通关关键词正则匹配的方式,从爬虫得到的信息中抽取了和招行相关相关的服务,黑金卡、信用卡等重点信息。

但是,在实现过程中发现正则表达式对中文汉字并不适用。查资料后,发现可以对汉字进行Unicode编码,经过编码后就可以进行正则匹配了。以关键词“服务”为例,其Unicode编码为\u670d\u52a1,正则表达式为:

pattern= re.compile(u"(\u670d\u52a1)+")


情绪判定


     这个情绪分析算法就比较复杂了,自己在短时间内做不来。我选择了在大连理工情感词汇本体库,但是由于词库,词不够全,以及我自己算法的一些问题,获得的结果很差。后来查资料后,发现,腾讯有腾讯文智情感分析API,新手可以获得免费调用机会。按照官方文档,调用后,成功就算出每条微博的正面情绪和负面情绪。然后对相关微博的情绪值求平均,就可以得到对应微博信息的正面和负面的情绪值。


腾讯文智情感分析API

    腾讯文智情感分析API,初次使用,可以申请免费试用。具体用法,请参考如下官网:
1.https://www.qcloud.com/document/product/271/2072
2.https://www.qcloud.com/document/developer-resource/494/7244


招商银行fintech选拔课题---《基于微博爬虫的舆情分析》下_第2张图片
以招商的服务关键词为例,在已经爬虫得到的和招商银行有关的981条微博中抽取
和“服务”有关的微博,进行情绪分析。代码如下:

微博抽取和情绪值计算程序:
# -*- coding: utf-8 -*-


# 引入云API入口模块
from src.QcloudApi.qcloudapi import QcloudApi
import  xlrd
import  xlwt
import  re
import sys
import json
import requests
reload(sys)  
sys.setdefaultencoding('utf-8')  


#######情感分析,正面的,负面的情感


config = {
    'Region': 'gz',
    'secretId': 'xxxxxxxx',  #####输入你在腾讯文智官网得到的ID
    'secretKey': 'xxxxxxxx', #####输入你在腾讯文智官网得到的秘钥
    'method': 'post'
}


#####计算情绪值的时候取平均值


def printpromotion(word):
	module = 'wenzhi'
	action = 'TextSentiment'
	service = QcloudApi(module, config)
	
	word=word.encode("utf-8")  ####编码
	#weburl='https://api.prprpr.me/emotion/wenzhi?password=DIYgod&text='+word
	params = {
        'content': word, #utf8 only
        'type': 4 #(可选参数,默认为4) 1:电商;2:APP;3:美食;4:酒店和其他。
    }
	#r = requests.get('%s' %weburl)
	json_str = json.loads(service.call(action, params))
	print "positive emotion:",(format(json_str["positive"],'0.1%'))
	print "negative emotion:",(format(json_str["negative"],'0.1%'))
	#ps = json_str["positive"]
	#ne = json_str["negative"]
	return json_str
	
    
data = xlrd.open_workbook(r'weiboData.xls') ##打开文件
rtable = data.sheets()[0]    ##获取sheet1
wbook = xlwt.Workbook(encoding='utf-8',style_compression = 0)  ##ncoding,设置字符编码,style_compression,表示是否压缩。这样设置:w = Workbook(encoding='utf-8'),就可以在excel中输出中文了。默认是ascii。
wtable = wbook.add_sheet('sheet2',cell_overwrite_ok = True)  ##新建一个Excel


servercount = 0
severpos = 0
serverneg = 0
avrseverpos = 0
avrserverneg = 0


keyword0 = unicode('服务','UTF-8')  ###转换为Unicode \u670d\u52a1
keyword1 = unicode('态度','UTF-8')  ##\u6001\u5ea6
keyword2 = unicode('行为','UTF-8')  ## \u884c\u4e3a
keyword3 = unicode('语气','UTF-8')  ## \u8bed\u6c14
##质量   \u8d28\u91cf


#####计算情绪值的时候取平均值
pattern = re.compile(u"(\u670d\u52a1|\u6001\u5ea6|\u884c\u4e3a|\u8bed\u6c14|\u8d28\u91cf)+")


for i in range(0,691):
	search = pattern.search(rtable.cell(i,7).value)
	if search:
		mood = printpromotion(rtable.cell(i,7).value)
		severpos = severpos + mood["positive"]
		serverneg = serverneg + mood["negative"]
		for j in range(0,8):
			wtable.write(i,j,rtable.row_values(i)[j])
		servercount +=1


print  u"和服务有关的微博个数: ",servercount  #输出符合条件的行数
print  u"这些微博总得正面情绪: " ,severpos
print  u"这些微博总得负面情绪: " ,serverneg
avrseverpos = severpos / servercount
avrserverneg = serverneg /	servercount
print  u"平均正面情绪:",  avrseverpos
print  u"平均负面情绪:", avrserverneg
wbook.save(r'server.xls')

画图模块:
 -*- coding: utf-8 -*-

#######对数据分析的结果画饼状图##################
import matplotlib.pyplot as plt
 
 
 
####招商银行服务相关微博情绪分析结果###
plt.figure(1)
labels = 'Positive', 'Negative'
sizes = [0.491148711441,0.508851291405]
colors = ['red', 'lightskyblue']
explode = (0, 0) # only "explode" the 2nd slice (i.e. 'Hogs')
 
plt.pie(sizes, explode=explode, labels=labels, colors=colors,
  autopct='%1.1f%%', shadow=True, startangle=90)
 
# Set aspect ratio to be equal so that pie is drawn as a circle.
plt.axis('equal')
 
plt.title("Service - related microblogging emotional analysis")  

plt.savefig('E:\scrapy\\server.png')
plt.show()

舆情分析结果


招商银行fintech选拔课题---《基于微博爬虫的舆情分析》下_第3张图片

从分析结果来看,顾客对招行服务的正面情绪为49.1%,负面情绪为50.9%,负面情绪比正面情绪多了1.8个百分点,所以,我们招行的服务态度还是有待改善。


我的全部代码:
https://github.com/Yuzhen-Li/Analysis-of-Public-Opinion-Based-on-Microblogging-Reptile

参考
1.https://sanwen8.cn/p/415Cgz9.html
2.http://dataunion.org/24057.html
3.http://blog.csdn.net/amyque/article/details/50933143
4.http://blog.csdn.net/gatieme/article/details/43235791
5.https://www.qcloud.com/document/product/271/2072
6.https://www.qcloud.com/document/developer-resource/494/7244
7.https://www.anotherhome.net/2920
8.http://m.blog.csdn.net/article/details?id=38149451



你可能感兴趣的:(网络爬虫与数据分析)