文本挖掘(TF-IDF)小案例《每日新闻预测金融市场变化》

数据简介

本案例用到的原始数据是一个简单的数据集,其中包括从国外某网站捞取的每日新闻排序(25条),然后以当日的股票市场涨跌作为Label。从而根据对新闻的挖掘,来判断当日股票涨跌。

数据集大致长这样(部分截图):
Date:日期数据,本案例文本分析就不用这个数据了。
Label:当日股票市场情况,1代表上涨,0代表下跌。
Top*:共25列,表示当日的相关新闻。
在这里插入图片描述
下面利用TF-IDF简单的跑一下文本挖掘的基本流程,代码也都比较简单,重点是关注处理流程。

导入数据:

from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
import pandas as pd
import numpy as np
from sklearn.svm import SVC
from sklearn.metrics import roc_auc_score
from datetime import date

#读入数据
data=pd.read_csv(r'E:\python\news stock\input\Combined_News_DJIA.csv')
#观察数据
data.head()

数据预处理:

#接下来我们把headlines先合并起来。因为我们需要考虑所有的news的。
data['combined_news']=data.filter(regex=('Top.*')).apply(lambda x:''.join(str(x.values)),axis=1)

#分割测试/训练集,保留部分数据测试用
train=data[data['Date']<'2015-01-01']
test=data[data['Date']>'2014-12-31']

#小写 / 分成小tokens,并剔除部分无效字符
X_train=train['combined_news'].str.lower().str.replace('b"','').str.replace("b'",'').str.replace('"','').str.replace("'",'').str.split()
X_test=test['combined_news'].str.lower().str.replace('b"','').str.replace("b'",'').str.replace('"','').str.replace("'",'').str.split()

#Label
y_train=train['Label'].values
y_test=test['Label'].values

#删减停止词
from nltk.corpus import stopwords
stop=stopwords.words('english')

#删除数字
import re
def hasNumbers(inputString):
    return bool(re.search(r'\d',inputString))
    
# 特殊符号
def isSymbol(inputString):
    return bool(re.match(r'[^\w]', inputString))
    
#lemma,词形还原
from nltk.stem import WordNetLemmatizer
wordnet_lemmatizer=WordNetLemmatizer()

#我们把这些元素全都合成一个func
def check(word):
    if word in stop:
        return False
    elif hasNumbers(word) or isSymbol(word):
        return False
    else:
        return True

#然后我们把整个流程放进我们的DF中处理
X_train=X_train.apply(lambda x:[wordnet_lemmatizer.lemmatize(item) for item in x if check(item)])
X_test=X_test.apply(lambda x:[wordnet_lemmatizer.lemmatize(item) for item in x if check(item)])

#因为外部库,比如sklearn 只支持string输入,所以我们把调整后的list再变回string
X_train=X_train.apply(lambda x:' '.join(x))
X_test=X_test.apply(lambda x:' '.join(x))

特征处理:TF-IDF

#TF-IDF,把提取出来的词进行频率统计并进行频率修正
feature_extraction=TfidfVectorizer(lowercase=False)
X_train=feature_extraction.fit_transform(X_train.values)
X_test=feature_extraction.transform(X_test.values)

建立模型

这里随便抓个模型跑的,由于数据集太小,而且并不是非常严谨。重点理解上面的文本处理过程,在文本挖掘中SVM用的比较多,后续也会拿其它案例来进行更严谨的建模。

#建立模型
clf=SVC(probability=True,kernel='rbf')
clf.fit(X_train,y_train)
predictions=clf.predict_proba(X_test)
print('ROC-AUC yields:'+str(roc_auc_score(y_test,predictions[:,1])))
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值