内容来自:微信公众号:python金融量化
关注可了解更多的金融与Python干货。
引言

“80%的商业信息来自非结构化数据,主要是文本数据”(Seth
Grimes),这一说法可能夸大了文本数据在商业数据中的占比,但是文本数据所蕴含的信息价值是毋庸置疑的。在信息爆炸的社会,文本数据量如此庞大,我们能做什么呢?事实上,能做的有很多,主要取决于你的目标是什么。
自然语言处理(NLP)是人工智能(AI)一个重要的子领域,目前比较流行的语言模型包括有限状态机、马尔可夫模型、词义的向量空间建模;机器学习分类器:朴素贝叶斯、逻辑回归、决策树、支持向量机、神经网络;序列模型:隐藏马尔可夫模型、循环神经网络(RNN)、长短期记忆神经网络(LSTMs)。Python金融量化分析进入到高阶阶段后,将进一步探索这些模型方法在金融市场或金融场景上的运用。
本文试图通过词云和情绪判断,对财经新闻进行基本的文本分析和数据挖掘,以起到抛砖引玉的效果。

财经新闻文本分析

本文用的是Python 3.6版本,直接在Jupyter Notebook上写code和交互运行,需要用到的package包括pandas、tushare、matplotlib、jieba、wordcloud,如果没有安装这些包,需要先安装,在cmd(命令提示符)上运行命令“pip install xxx(如tushare)”

数据获取

tushare是目前比较好用的数据开源包,可以免费获取股票、期货、宏观、基本面等数据,之后的金融量化分析实践基本上都会使用该包来获取数据,具体使用方法,可以到tushare的官网查看。

#注意:黑色方框背景里的代码可以左右滑动查看
#引入需要用到的包
#金融量化分析常用到的有:pandas(数据结构)、
#numpy(数组)、matplotlib(可视化)、scipy(统计)
import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import jieba
import jieba.analyse
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator#正常显示画图时出现的中文和负号
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
df=ts.get_latest_news(show_content=True)
#获取当前即时财经新闻(如本文是2018年11月17日)
#默认是80条,可以通过参数“top= ”来设置
#保存数据到本地
#df.to_csv("D:/CuteHand/news.csv",encoding='gbk')
#加encoding='gbk'才不会中文乱码,如果存在“非法字符”,可能也会报错
#数据清洗,保留需要的字段
df=df[['time','title','content']]
#查看前三条数据
df.head(3)


新闻词云分析

新浪财经新闻频率非常高,基本上几秒中就可以刷出几条新的新闻,面对如此多的信息,如何快速地通过关键词过滤掉不必要的信息呢?“词云”是当下比较流行的文本关键词可视化分析手段,即通过对新闻文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,过滤掉大量的文本信息,使大家只要一眼扫过文本就可以领略财经新闻的梗概。

#提取新闻标题内容并转化为列表(list)
#注意原来是pandas的数据格式
mylist = list(df.title.values)
#对标题内容进行分词(即切割为一个个关键词)
word_list = [" ".join(jieba.cut(sentence)) for sentence in mylist]
new_text = ' '.join(word_list)
#图片可以根据需要更改,这里使用了中国地图.jpg
#读取图片img = plt.imread("中国地图.jpg")
#设置词云格式
wc = WordCloud(background_color="white", mask=img,#设置背景图片max_font_size=120, #字体最大值random_state=42,  #颜色随机性font_path="c:\windows\fonts\simsun.ttc")
#font_path显示中文字体,这里使用黑体#生成词云
wc.generate(new_text)
image_colors = ImageColorGenerator(img)
#设置图片大小plt.figure(figsize=(14,12))
plt.imshow(wc)
plt.title('新浪财经新闻标题词云\n(2018年11月17日)',fontsize=18)
plt.axis("off")
plt.show()
#将图片保存到本地
#wc.to_file("财经新闻标题词云.jpg")


从上面新闻的标题词云图可以看出,今晚(22:00运行程序,不同时间得到结果不一样)新闻关键词主要有:美国、中国、科技、券商、比特币、退市、暴跌…光看标题,可能又隐藏了比较多的信息,我们可以进一步分析新闻文本的内容。

#以第一条新闻内容为例(比特币暴跌新闻)
#数据清洗
#将titles列专门提取出来,并转化为列表形式
d=list(df.content[0])
content=''.join(d) #设置分词黑名单,手动暴力解决
#以后探索使用机器学习和深度学习进行分词blacklist = ['责任编辑', '\n','\t', '也', '上', '后', '前','为什么', '再', ',','认为','12','美元','以及', '因为', '从而', '但', '像','更', '用', '“', '这', '有', '在', '什么', '都','是否','一个','是不是','”', '还', '使', ',', '把', '向','中','新', '对', ' ', ' ', u')', '、', '。', ';','之后','表示','%', ':', '?', '...', '的','和', '了', '将', '到', ' ',u'可能','2014','怎么','从', '年', '今天', '要', '并', 'n', '《', '为', '月', '号', '日', '大','如果','哪些','北京时间', '怎样', '还是', '应该','这个', '这么','没有','本周','哪个', '可以','有没有']
#将某些固定词汇加入分词
stopwords=['比特币','利空','对冲基金','分析师','移动均线','数字货币','中本聪']
for word in stopwords:jieba.add_word(word)
#设置blacklist黑名单过滤无关词语
d = {} #将词语转入字典
for word in jieba.cut(content): if word in blacklist: continueif len(word)<2: #去除单个字的词语continued[word] = d.get(word, 0) + 1
#使用jieba.analyse
d=''.join(d)
tags=jieba.analyse.extract_tags(d,topK=100,withWeight=True)
tf=dict((a[0],a[1]) for a in tags)
backgroud_Image = plt.imread('比特币.jpg')wc = WordCloud(background_color='white',# 设置背景颜色mask=backgroud_Image,# 设置背景图片font_path='C:\Windows\Fonts\STZHONGS.TTF',  # 若是有中文的话,这句代码必须添加max_words=2000, # 设置最大现实的字数stopwords=STOPWORDS,# 设置停用词max_font_size=150,# 设置字体最大值random_state=30)
wc.generate_from_frequencies(tf)
plt.figure(figsize=(12,12),facecolor='w',edgecolor='k')
plt.imshow(wc)
# 是否显示x轴、y轴下标
plt.title(df.title[0],fontsize=15)
plt.axis('off')
plt.show()

从上面新闻内容的词云图,不难看出,比特币出现了暴跌,悲观情绪笼罩…。

#将上述词云作图包装成函数
def plot_news_cloud(df,n):txt= [line.strip() for line in df.content[n]]text=''.join(txt)tags=jieba.analyse.extract_tags(text,topK=100,withWeight=True)tf=dict((a[0],a[1]) for a in tags)backgroud_Image = plt.imread('中国地图.jpg')#可以自己找适合的图片做背景,最后是背景白色wc = WordCloud(background_color='white',# 设置背景颜色mask=backgroud_Image,# 设置背景图片font_path='C:\Windows\Fonts\STZHONGS.TTF',  # 若是有中文的话,这句代码必须添加max_words=2000, # 设置最大现实的字数stopwords=STOPWORDS,# 设置停用词max_font_size=150,# 设置字体最大值random_state=30)wc.generate_from_frequencies(tf)plt.figure(figsize=(12,10),facecolor='w',edgecolor='k')plt.imshow(wc)plt.title(df.title[n],fontsize=18)plt.axis('off')plt.show()
#画出第6条新闻的词云图
plot_news_cloud(df,5)


新闻情绪判断

通过新闻标题来判断该新闻报道内容为积极性/消极性的概率。这部分代码较长,不在此展示,感兴趣的朋友可以关注公众号并回复“文本1”免费获取代码。

def word_processing(text):
#数据清洗,限于篇幅,代码省略
def sentiment_score_list(dataset):
#数据处理和情绪判断主函数,
#限于篇幅,代码省略
def sentiment_score(senti_score_list):
#情绪得分汇总
#将上述新闻标题去掉空格,写入列表里(list)
y=[]
t1=list(df.title)
for i in range(len(t1)):x=t1[i].split()x=','.join(x)if i<len(t1)-1:x=x+'。'y.append(x)
#显示前三条新闻标题
y[:3]

结果显示

[‘暴跌后逼近"死亡交叉",比特币下个目标是1500美…。’, ‘全球资管巨头:未来5年投资,你需要留意这5件事。’,
‘洲际酒店被指泄露花总护照信息并调侃,波及德云社。’]

#将上述标题内容合成一起,以句号结尾
wlist=[line.strip() for line in y]
wlist=''.join(wlist)
#wlist
senti_score_list=sentiment_score_list(wlist)
text=sentiment_score(senti_score_list)
print(text)
p=0
n=0
for i in range(len(text)):if text[i]>0:p+=1else:n+=1
print("正面新闻数目:{0},负面新闻数目:{1}".format(p,n))

输出结果

[-33, 11, -1, 12, -9, 0, -6, 0, -8, -5, -8, 8.0,14, 13, 0, -2.0, 7,
3, 9, -8, 3, -3, 4, -4, 8, 22,19, 11, -11, -16, 6,13, 11, 9, 0, -9,
12, 2, 4,12,-10, 6, 2, -4, -6, -13, 7,-9, 0, -28, 11, -10, -4, -13,
0, -3, -1, 0, 0, 7,9,15,12,7, 7, 0, 1, 0, 0,0, 12.0, -9, 15, -11, 1,
-9, 1, -6, 9, 0] 正面新闻数目:38,负面新闻数目:42

结语

金融行业是人工智能最先应用的行业之一,文本挖掘和NPL处理在金融场景上的应用会越来越广泛,并将日益成为智能金融的基石。未来智能金融应用场景有很多,如智能投研、智能投顾、智能风控、智能客服、智能监管、智能运营等,这些场景应用对机器学习、深度学习的要求将会越来越高。本文采用简单的词云分析、字典分词、句子情绪判断对财经新闻文本进行了初浅的探索,希望能起到抛砖引玉的作用。

【Python金融量化】财经新闻文本分析相关推荐

  1. Python金融量化 | 从入门到高阶实战应用

    引言 今天给大家分享一个微信公众号"Python金融量化",作者是金融学博士,堪萨斯大学访问学者,专注于分享Python在金融量化领域的实战应用,坚持走原创路线,持续输出技术干货, ...

  2. python金融量化分析 | 闲杂笔记

    最近事情好像有点多,处理得心不在焉.之前国庆计划把张五常老师的经济解释卷二看完,但也是只把第三章生产的成本看了一下,哈哈~ 这是一篇python金融量化分析的闲杂且入门的笔记,感觉学习价值较低,我只是 ...

  3. 【Python金融量化】零基础如何开始学?

    前言 Python可以说是当前非常流行的编程语言,甚至有点"网红"的感觉.网上还流行一句话"Life is short, I use Python"(人生短暂, ...

  4. python金融实战 源代码_穆棱市seo总代直销python金融量化营业实战课程 python量化项目实战源码+课件+视频...

    python金融量化生意实战课程 python量化项目实战源码+课件+视频 1. 自愿化生意综述 重要实质: 课程实质综述,自愿化/算法生意先容,python正在自愿生意中的使用简介 2. 量化生意体 ...

  5. python 爬取财经新闻_金融财经新闻的文本爬取

    大家一定还记得<金融数据的获取--一个爬虫的简单例子>这篇文章中介绍的爬虫思想和方法吧.看过之后,大多数人都会有这样的感受,虽然爬虫的原理比较简单,但是正则表达式却很难写.对于每个页面内容 ...

  6. python 爬取财经新闻股票_Python进阶量化交易专栏场外篇20-爬虫抓取股票论坛帖子...

    欢迎大家订阅<教你用 Python 进阶量化交易>专栏!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外已陆续推出一些手记来辅助同学们学习本专栏内容,目前推出的扩展篇链接如下: 为了 ...

  7. python金融量化书籍_超强干货 | Python金融数据量化分析教程+机器学习电子书

    如今Python语言的学习已经上升到了国家战略的层面上.Python语言是人工智能的基础语言,国家相关教育部门对于"人工智能普及"格外重视,不仅将Python列入到小学.中学和高中 ...

  8. Python数据分析案例22——财经新闻可信度分析(线性回归,主成分回归,随机森林回归)

    本次案例还是适合人文社科领域,金融或者新闻专业.本科生做线性回归和主成分回归就够了,研究生还可以加随机森林回归,其方法足够人文社科领域的硕士毕业论文了. 案例背景 有八个自变量,['微博平台可信度', ...

  9. 【Python金融量化 1- 100 】了解Python及常用财经数据接口包

    了解Python及常用财经数据接口包 背景介绍: Python是一种计算机程序设计语言,它诞生于20世纪90年代初,正在逐渐被广泛运用中. Python的创始人是Guido van Rossum.相传 ...

最新文章

  1. python自带图形模块_检查单击是否在图形对象内[Python图形模块]
  2. MIT发布“全球最快AutoML”,刷新DARPA比赛成绩
  3. 启明云端分享|ESP32-C3模块入门应用
  4. Django REST framework 开始
  5. SpringBoot 处理内置对象
  6. C++基础复习——C++语言数据类型
  7. 又重新让aspspider.net支持中文PDF输出了
  8. 年轻人创业可以选择的3个方向
  9. java4特征_java的四大基本特征
  10. MySQL中索引的长度的限制
  11. 【数字信号处理】基于matlab GUI正选信号时域+频域分析【含Matlab源码 887期】
  12. 算法第四版C++算法实现全集
  13. Springboot2.X项目中添加druid连接池监控
  14. 周记——20150427
  15. 2021-05-01微信小程序存储数据的几种方式
  16. 旧电脑更新win10日记
  17. 魔域服务器修改和宝宝数据,宝宝属性与真实值之间的公式计算关系
  18. 天龙八部架设IP配置文件
  19. C语言编程>第三周 ⑧ 打印出杨辉三角形(要求打印出10行)
  20. STM32山外示波器程序

热门文章

  1. pyecharts绘制堆叠柱状图
  2. SAP中采购订单中固定汇率选项的影响分析
  3. MATLAB算法实战应用案例精讲-【自动驾驶】线控制动(补充篇)
  4. 使用Cisco-ISE做Radius 服务端
  5. 玉环市礁门塘除险加固工程水闸扩建设计
  6. 项目13 路由器与网桥的设置
  7. 关于jxls2.6.0后的版本使用的jexl3学习使用
  8. 计算机辅助教学应用调查表,计算机辅助教学应用论文精选.doc
  9. 修复VBS病毒感染的html文件
  10. mysql group by 后求和_MySQL分组求和GROUP BY