导包
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from snownlp import SnowNLP
import matplotlib.ticker as ticker
图片适应中文
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
sns.set_style('whitegrid',{'font.sans-serif':['simhei','Arial']})
导入消息队列表格
comments = pd.read_csv('stocktextming.csv')
comments.head()
删除日期时间这一列
comments.drop("日期时间", axis = 1, inplace = True)
comments.head()
![python分析股评情绪_第1张图片](http://img.e-com-net.com/image/info8/014fadaf382b4d90bcb7423487330d9c.jpg)
根据SnowNLP包计算股票情绪
comments['情绪'] = None
lencom = len(comments)
i=0
while(i<lencom):
s=SnowNLP(comments.iloc[i,0]).sentiments
comments.iloc[i,2]=s
i+=1
comments.head()
![python分析股评情绪_第2张图片](http://img.e-com-net.com/image/info8/83efbb81028447698f6a1dc2485d125b.jpg)
计算每日平均情绪
numbyday = comments['情绪'].groupby(comments['日期']).count()
emobyday = comments['情绪'].groupby(comments['日期']).sum()
markbyday = pd.DataFrame()
markbyday['情绪']=emobyday
markbyday['计数']=numbyday
markbyday['情绪平均']=markbyday['情绪']/markbyday['计数']*5
markbyday.head()
![python分析股评情绪_第3张图片](http://img.e-com-net.com/image/info8/0d4b8d68f49a4caea1639421fac3cb9e.jpg)
修改日期格式使得与sh和sz表匹配
markbyday['order']=markbyday.index
markbyday['日期']=None
lenMBD=len(markbyday)
i=0
while(i<lenMBD):
str1=markbyday.iloc[i,3]
str2='2018-'+str1[0:2]+'-'+str1[3:5]
markbyday.iloc[i,4]=str2
i=i+1
markbyday.head()
![python分析股评情绪_第4张图片](http://img.e-com-net.com/image/info8/859177c774b54f7c9ea5131e81347bc7.jpg)
导入sh和sz表
sh=pd.read_csv('sh.csv',encoding='utf-8')
sz=pd.read_csv('sz.csv',encoding='utf-8')
新建表格
Market=pd.DataFrame()
Market['日期']=sh['date']
按日期读取每日估价变动百分比price_change并左连接情绪表
Market['上证波动']=sh['p_change']
Market['深证波动']=sz['p_change']
markbyday.set_index('日期',inplace=True)
Market.set_index('日期',inplace=True)
result=Market.join(markbyday)
result.head()
![python分析股评情绪_第5张图片](http://img.e-com-net.com/image/info8/8dfc807771c64d3face718ce95793f39.jpg)
上证和深证大盘股市波动与情绪变化的比较图
fig, ax = plt.subplots(1,1)
ax.plot(result['上证波动'], label='上证波动' )
ax.plot(result['深证波动'], label='深证波动')
ax.plot(result['情绪平均'], label='情绪平均')
plt.title('三种波动对比',fontsize=20)
plt.xlabel('交易日期',fontsize=15)
plt.ylabel('波动率',fontsize=15)
ax.xaxis.set_major_locator(ticker.MultipleLocator(base=10))
plt.legend()
plt.xticks(rotation=15)
plt.savefig('stockTextMing.png',dpi=300,bbox_inches='tight')
plt.show()
![python分析股评情绪_第6张图片](http://img.e-com-net.com/image/info8/71ec87d93a464f8ea3d1412a227aeba4.jpg)