版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十二章
文本数据分析
学习目标
了解文本数据挖掘流程;掌握文本数据采集、文本切分和文本特征词选择的常用方法;掌握文本情感分析方法并能将该方法运用于金融市场分析。
本章导读
金融大数据为金融业态创新注入了新的活力,被银行、证券、保险等多个行业广泛应用于交易欺诈识别、精准营销、信贷风险评估、智能投顾、风险定价等具体业务中。未来金融业的核心竞争力将很大程度上依赖于从数据资产向市场竞争力转化的速度与能力,而这种速度和能力,取决于数据分析、挖掘和应用水平。上一章将详细介绍金融大数据的特征以及大数据处理流程,且重点研究几类常用的数据挖掘方法,本章重点介绍文本数据挖掘相关技术及其在金融风险计量中的应用。通过本章内容学习,学生应掌握文本数据分析的基本知识与技术,进一步提升运用大数据技术分析和解决金融实际问题的能力。通过金融文本挖掘技术的学习,了解中国政府保持金融稳定的决心和信心。12.1文本获取12.2文本预处理12.3文本表示12.4文本特征选择12.5模式挖掘12.6专题12金融网络舆情指数构建与应用目录CONTENTS文本获取12.112.1文本数据挖掘概述文本数据挖掘流程可概括为如下七个步骤:(1)文本获取;(2)文本预处理;(3)文本表示;(4)文本特征选择;(5)模式挖掘;(6)结果评价;(7)模式输出与应用。12.1文本获取网络爬虫的本质即模拟浏览器向网站服务器发送请求,然后从服务器返回的相应数据中筛选目标数据。Python是最为常用的爬虫程序语言之一,利用Python爬虫获取文本数据的基本工作流程包含四个步骤:发起HTTP请求;获取HTTP响应;解析内容;保存数据。12.1文本获取例12.1Python简单爬虫实例
运用Python爬取2023年政府工作报告全文。在爬取数据前应先观察数据所在的网站结构。进入2023年政府工作报告网页,在浏览器中按F12键打开开发者模式(有些电脑需同时按下Fn与F12键),查看网页的“元素”菜单,如图12-2所示。可以看到,想要爬取政府工作报告正文内容,只需将其从HTML文档中提取出来即可。最终采集的政府工作报告文本输出结果如图12-3所示。图12-22023年政府工作报告网页HTML文档图12-3采集的政府工作报告文本数据12.1文本获取例12.1Python简单爬虫实例Python代码演示importrequestsfrombs4importBeautifulSoup#导入BeautifulSoup4importosos.chdir(r'E:/jrj1/Chapter12/')#修改工作目录head={'Host':'','User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/99.0.4844.74Safari/537.36Edg/99.0.1150.55'}url='/zhuanti/2023lhzfgzbg/index.htm'#1发起HTTP请求r=requests.get(url,headers=head);print(r)#2获取HTTP响应html=r.content.decode('utf-8')#设置编码方式为utf-8以正确显示中文;print(html)#3解析内容soup=BeautifulSoup(html,"html.parser")#HTML文件解析content=soup.find("div",class_="zhj-bbqw-cont").text#筛选目标print(content)#4储存文件file=open('政府工作报告.txt','w',encoding="utf-8")file.write(content)file.close()12.2文本预处理分词分词,也称词条化(Tokenization),即将文档切分为词汇的单位。英语、法语、西班牙语等拉丁文语系的语言最小单位均是独立的词语,例如“Iamastudent”,词与词可通过空格符切分。而中文文本中,词与词之间没有固定的间隔符,因此需要分词处理。当前主要的分词技术可划分为三个流派:基于词典的分词技术(也称机械分词方法、基于理解的分词技术、基于统计的分词技术。随着大规模语料库的建立以及统计机器学习方法的研究和发展,基于统计的中文分词方法逐渐成为主流。Python的中文分词工具有很多,较为流行的有jieba(结巴分词)、THULAC(清华大学自然语言处理与社会人文计算实验室)、pkuseg(北京大学语言计算与机器学习研究组)、SnowNLP等。12.2文本预处理2.停用词过滤在汉语中,有一类没有多少实际意义的词,例如“啊”“阿”“的”“以及”等词,被称为停用词。停用词对理解文本没有太大作用,因此,在进行自然语言处理时一般将停用词过滤掉。停用词过滤一方面可以对文本数据降维,另一方面也可提高文本的信息含量。过滤停用词可通过建立停用词表来实现,如果词汇位于停用词表中,则将其删除。常用的停用词表有哈工大停用词词库、四川大学机器学习智能实验室停用词库、百度停用词表等。12.2文本预处理例12.2对《中国金融稳定报告(2022)》(节选)文本进行预处理本例选取《中国金融稳定报告(2022)》(节选)文本进行预处理。首先利用jieba工具包进行分词,然后利用停用词表stopword.txt对停用词进行过滤。预处理后结果如图12-4所示。可以看到,返回的result对象中为过滤掉停用词后的词汇组合。图12-4《中国金融稳定报告(2022)》(节选)文本预处理结果12.2文本预处理例12.2对《中国金融稳定报告(2022)》(节选)文本进行预处理Python代码演示importjieba#使用jieba分词fileContent=open(r'E:/jrj1/Chapter12/金融稳定报告节选.txt','r',encoding="utf-8").read()words=jieba.lcut(fileContent)#分词后返回一个列表stopwords=[line.strip()forlineinopen('stopword.txt','r',encoding='UTF-8').readlines()]#加载停用词表result=""forwinwords:ifwnotinstopwords:#停用词过滤
ifwnotin'\n\t\r\f':#去除特殊符号
result+=w+""print(result)12.3文本表示
图12-5向量空间模型12.3文本表示例12.3简单向量空间模型的Python实现比较两段文本d1“我喜欢投资,不喜欢消费。”与d2“我不喜欢投资,也不喜欢消费。”的相似性。并在基于这两段文本的向量空间模型基础上,比较新句子d3“他讨厌投资,但喜欢消费。”与已有文本的相似性。在Python中可利用gensim库构建向量空间模型,并利用gensim.similarities模块计算文本的余弦相似度。最后可得文本d1与d2的相似度为92.45%,即两段文本高度相似。新文本d3与d1文本的余弦相似度为83.33%,与d2文本的相似度为69.34%。由于向量空间模型无法处理新词,新文本d3与已有文本d1和d2之间的相似度大幅降低。12.3文本表示importjiebafromgensimimportcorpora,modelsfromgensim.similaritiesimportMatrixSimilarityd1="我喜欢投资,不喜欢消费。"#1.读取文档d2=我不喜欢投资,也不喜欢消费。"defstopword_filter(words):#2.分词result=[]forwinwords:ifwnotin',
。':result.append(w)returnresultw1=jieba.lcut(d1);w2=jieba.lcut(d2)w1=stopword_filter(w1)w2=stopword_filter(w2)texts=[w1,w2]#3.生成字典和向量语料dictionary=corpora.Dictionary(texts)#生成字典corpus=[dictionary.doc2bow(text)fortextintextstfidf=models.TfidfModel(corpus)#利用TF-IDF方法vector=tfidf[corpus[1]]#文本d2表达。#4.相似性比较featurenums=len(dictionary.token2id)index=MatrixSimilarity(corpus,num_features=featurenums)sim12=index[corpus[1]]#文本d2与文本d1和自身的余弦相似度。print('文本d2与文本d1余弦相似度为:')print(sim12[0])#5.比较新文本d3='他讨厌投资,但喜欢消费。’w3=stopword_filter(jieba.lcut(d3))new3=dictionary.doc2bow(w3)sim=index[new3]print('文本d3与文本d1和文本d2的余弦相似度分别为:')print(sim) 12.3文本表示2.主题模型主题模型(TopicModel)是一种概率生成模型,旨在挖掘文本中隐含的主题或概念。主题可以定义为文档集中具有相同词境的词的集合通过捕获文本中的主题分布,主题模型可以部分地解决一词多义和一义多词的问题。同时,主题提供了一种高维文本数据维数的约减方式,将传统向量空间模型中的高维稀疏向量转化为低维稠密向量,以缓解维数灾难问题。代表性的主题模型有概率潜在语义分析(Probabilisticlatentsemanticanalysis,PLSA)和潜在狄利克雷分布(LatentDirichletallocation,LDA)。12.3文本表示2.主题模型(1)PLSA12.3文本表示2.主题模型(1)PLSA12.3文本表示例12.4LDA简单模型的Python实现
在本例中,仍利用《中国金融稳定报告(2022)》(节选)数据作为文档集,抽取文档集的主题。最后输出结果如图12-6所示,输出结果中包含10个主题,每个主题囊括了该类别下最相关的5个词语及该词汇在主题中出现的概率。图12-6LDA主题模型提取结果12.3文本表示Python代码演示fromgensim.modelsimportLdaModel,TfidfModel;fromgensim.corporaimportDictionaryimportpandasaspd;importjieba;importrefileContent=open(r'E:/jrj1/Chapter12/金融稳定报告节选.txt','r',encoding="utf-8").read()word=fileContent.split();word=pd.Series(word)jieba_output=(word.astype(str)).apply(jieba.lcut)stopwords=[line.strip()forlineinopen('stopword.txt','r',encoding='UTF-8').readlines()]#建立停用词表df1=jieba_output.apply(lambdax:[iforiinxifinotinstopwords])#停用词过滤
df1=df1.apply(lambdax:[re.sub('[\d]','',i)foriinx])texts=[wforwindf1];dictionary=Dictionary(texts)corpus=[dictionary.doc2bow(text)fortextintexts];tfidf=TfidfModel(corpus)lda=LdaModel(corpus=corpus,id2word=dictionary,num_topics=10,random_state=1)x1=lda.show_topics(num_words=5)print("LDA主题类,词出现概率*词")forxinx1:print(x)lda=LdaModel(corpus=tfidf[corpus],id2word=dictionary,num_topics=10,random_state=1)x2=lda.show_topics(num_words=5)print("LDA主题类(tfidf优化),词出现概率*词")forxinx2:print(x)12.3文本表示3.基于神经网络的词嵌入模型12.3文本表示例12.5利用Word2vec对股票的文本评论进行词向量编码本例中利用文件comment_sample.csv进行词向量训练,comment_sample.csv是东方财富网上证股指股吧中2022年的20000条评论,数据结构如表12-2所示。12.3文本表示例12.5利用Word2vec对股票的文本评论进行词向量编码
利用gensim.modelsm模块中的Word2Vec模块,采用CBOW模型进行词向量训练,在训练完模型后输出词语“涨”的词向量,以及与“涨”最相关的10个词语。输出结果如图12-7所示。可以看到,最终词向量中一共包含6078个词,特征向量维度为100。与“涨”最相关的十个词分别是“指数”“个股”“红”“股票”“跌成”。图12-7利用Word2vec对股票的文本评论进行词向量编码12.3文本表示Python代码演示fromgensim.modelsimportWord2Vecimportpandasaspd;
importjieba;importredf=pd.read_csv(r'E:/jrj1/Chapter12/comment_sample.csv',encoding='utf-8')jieba_output=(df['标题'].astype(str)).apply(jieba.lcut)stopwords=[line.strip()forlineinopen('stopword.txt','r',encoding='UTF-8').readlines()]#建立停用词表df1=jieba_output.apply(lambdax:[iforiinxifinotinstopwords])#停用词过滤
df1=df1.apply(lambdax:[re.sub('[\d]','',i)foriinx])common_texts=[wforwindf1]model=Word2Vec(sentences=common_texts,vector_size=100,window=5,min_count=2,workers=4)print(model)#summarizevocabularywords=list(model.wv.key_to_index)#print(words[:10])model.save("word2vec.model")model=Word2Vec.load("word2vec.model")vector=model.wv['涨']#getnumpyvectorofawordprint('“涨”的词向量为:')print(vector)sims=model.wv.most_similar('涨',topn=5)print('和“涨”最相关的5个词:')forwinsims:print(w)12.4文本特征选择TF-IDF法如果某个文本特征词在某文档中出现的频率高,并且在其他文档中很少出现,则认为该词具有很好的类别其区分能力,适合用来分类。在TF-IDF中,TF代表文本特征词w在文档Di中出现的频率;IDF表示如果包含文本特征词w的文档越少,则说明w具有很好的类别区分能力。表达式如下所示:12.4文本特征选择2.互信息法3.信息增益法在文本挖掘中,信息增益代表文本中包含某一文本特征词时文本类型的平均信息量,体现了某一个特征词的存在与否对类别预测的影响能力。因此,一个特征词w能够为系统带来的信息越多,则表示特征词w越重要。在文本分析中,信息增益的计算式可定义为熵与条件熵的差值:12.4文本特征选择
12.4文本特征选择12.4文本特征选择例12.6文本特征选择下面介绍基于jieba.analyse.extract_tags()方法的文本特征选择,从《中国金融稳定报告(2022)》(节选)中抽出TF-IDF权重最大的20个关键词。抽取结果如图12-8所示。图12-8文本特征选择结果示例12.4文本特征选择Python代码演示importjiebaimportjieba.analysefileContent=open(r'E:/jrj1/Chapter12/金融稳定报告节选.txt','r',encoding="utf-8").read()keywords=jieba.analyse.extract_tags(fileContent,topK=20,withWeight=True,allowPOS=('n','nr','ns'))foriteminkeywords:print(item[0],item[1])12.5模式挖掘1.情感分析例如,“虽然目前大盘处于上升周期,但这支股票仍在下跌,投资者极其不看好它,认为不能扭亏为盈”,这样一条评论对应的消费者情绪是积极的还是消极的?(1)对评论进行分词:“虽然/目前/大盘/处于/上升/周期/,但/这支/股票/仍/在/下跌/,投资者/极其/不/看好/它/,认为/不能/扭亏为盈”。(2)找出句子中的情感词,并对其赋值。积极的情感词如“好”“好看”“上涨”等,消极的情感词如“差”“烂”“下跌”等,出现一个积极词分值加1,出现一个消极词分值就减1。(3)往情绪词前查找程度副词,并为程度副词设置调整权重。例如,当存在“太”、“无比”等反映强情感的程度副词时,该词权重设定为2;存在“仅仅”、“有点”等反映弱情感的程度副词时,该词权重设为0.5。(4)寻找情感词前是否存在否定词,如存在,则情感倾向发生改变,将该条评论的情感权重设定为-1。(5)计算一条评论所有分词的情感值,记录下来。例句最后综合情感得分为-3分,即该评论中负面情绪占主导地位。12.5模式挖掘例12.7用Python实现对一段评论文本的情感分析
利用情感词典对评论文本进行情感分析。Python代码演示importpandasaspd;importjieba;importosos.chdir(r'E:/jrj1/Chapter12/')#修改工作目录#加载词典score=pd.read_table("emotion1.txt",header=None,delimiter=",",encoding='utf-8',names=['word','score'])adv_words=pd.read_csv("fdandcd.txt",header=None,delimiter="\t",encoding='utf-8',names=['term','score'])stopwords=[line.strip()forlineinopen('stopwords.txt','r',encoding='UTF-8').readlines()]#建立停用词表#找出语料a中的情感词和程度副词,计算句子的情感得分defcount_score(a):b=pd.DataFrame(a,columns=['word'])b_score=pd.merge(b,score,how='left',left_on='word',right_on='word')c_score=pd.merge(b_score,adv_words,how='left',left_on='word',right_on='term')delc_score['term']ind=c_score['score_y'].notnull()#布尔向量c_score.loc[ind,'score_x']=012.5模式挖掘Python代码演示(续)ind2=[iforiinrange(len(c_score))ifind[i]]#定位程度副词#程度副词调整foriinind2:ifi!=(len(c_score)-1):c_score.loc[i+1,'score_x']=c_score.loc[i+1,'score_x']*c_score.loc[i,'score_y']returnc_score['score_x'].sum()#文本预处理得到语料comment=‘虽然目前大盘处于上升周期,但这支股票仍在下跌,投资者极其不看好它,认为不能扭亏为盈'words=jieba.lcut(comment)result=[]forwinwords:ifwnotinstopwords:result.append(w)#调用count_score()函数计算情感得分emo=count_score(result)print('当前情感得分值为:'+str(emo))12.5模式挖掘2.可视化词云例12.8用Python生成“词云”图在本例中,利用《中国金融稳定报告(2022)》(节选)文本数据,构建词云提取报告中的关键词,运行结果如图12-9所示。可以看到“同业业务”“银行”“业务”“金融机构”等词均为报告中的高频词汇,凸显出防范化解金融风险的重要性。图12-9“词云”运行结果12.5模式挖掘Python代码演示
fromwordcloudimportWordCloudimportcollections#词频统计库importjiebaimportmatplotlib.pyplotaspltimportosos.chdir(r'E:/jrj1/Chapter12/')#文本预处理fileContent=open(r'E:/jrj1/Chapter12/金融稳定报告节选.txt','r',encoding="utf-8").read()#去除特殊符号forchin"',。“”、!()%+-《》":fileContent=fileContent.replace(ch,"")#使用分词工具分词#jieba.add_word("中国特色社会主义",freq=883634)jieba.load_userdict('fc.txt')words=jieba.lcut(fileContent)#利用jieba库cut方法进行分词#去除停用词stopwords=[line.strip()forlineinopen('stopwords.txt','r',encoding='UTF-8').readlines()]#建立停用词表12.5模式挖掘Python代码演示(续)terms=[]#print(words)forwordinwords:ifwordnotinstopwords:ifwordnotin'\n\t\r\f':terms.append(word)#开始词频统计
word_counts=collections.Counter(terms)word_counts_top10=word_counts.most_common(10)print(word_counts_top10)#根据词频词云绘制w=WordCloud(font_path="/Fonts/simhei.ttf",max_words=100)w=w.generate_from_frequencies(word_counts)w.to_file("govreport.png")plt.imshow(w)#对图像进行处理,并显示其格式plt.axis("off")#隐藏坐标轴
plt.show()#显示词云图片专题12金融网络舆情指数构建与应用
12.6金融网络舆情指数构建与应用伴随互联网的快速发展,网络舆情借助论坛、博客等平台快速传播发酵。有别于电视广播、报刊等传统媒体,网络舆情具有相对自由性、传播迅速性、覆盖广泛性、情绪非理性、真假交互性以及信息可测性等六个特点。目前,网络舆情与股票市场之间的强关联性已引起业界与学界诸多关注。网络舆情可通过影响投资者关注与投资者情绪作用于股票收益率与波动率。事实上,网络舆情对系统性金融风险起到推波助澜的作用。金融危机时期,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 糖尿病模型讨论与分析
- 物业客服部员工培训
- 露天矿山安全培训课件经典
- 互联网平台会计劳动合同
- 城市综合体外保温施工合同
- 生物科技办公楼施工承包合同
- 山东影剧院建设合同
- 墙纸施工合同幼儿园欢乐世界
- 地下商场建设钻探施工合同
- 教育信息化项目招投标攻略
- 教科版四年级上册《制作我们的小乐器》作业设计
- 中小学四年级各种跑教案公开课教案教学设计课件案例测试练习卷题
- 一 《改造我们的学习》(同步练习)解析版
- 2025届高考语文复习:作文审题立意+课件
- 2024-2025学年北京市海淀区名校初三第二学期期中练习化学试题含解析
- 孙中山诞辰纪念日主题班会主题班会
- (正式版)SH∕T 3541-2024 石油化工泵组施工及验收规范
- 【中考真题】2024年江西省初中学业水平考试历史真题试卷(含答案)
- 内科知识练习题库(附答案)
- 【易错题】苏教版数学六年级上册第5单元《分数四则混合运算》易错题强化训练卷(含答案)
- 云南省高中学业水平考试数学考题分类汇编以及知识点穿插
评论
0/150
提交评论