之前寫畢業**時有從**文字中計算投資者情緒,在此把當時所用的**發上來,當做乙個記錄。
#匯入需要的庫
from collections import defaultdict
from pandas import dataframe, series
from datetime import datetime
import pandas as pd
import os
import re
import jieba
import codecs
#讀取情感詞典檔案
sen_file=open('c:\\users\\administrator\\desktop\\dictionary3.txt','r+',encoding='utf-8')
sen_list = sen_file.read().splitlines()
sen_dict = defaultdict()
for s in sen_list:
s_split=s.split(',')
if len(s_split) == 2:
sen_dict[s.split(',')[0]] = s.split(',')[1]
#讀取否定詞檔案
not_word_file = open('c:\\users\\administrator\\desktop\\not_word.txt', 'r+', encoding='utf-8')
not_word_list = not_word_file.read().splitlines()
not_word_list[0]="不"
#讀取程度副詞檔案
degree_file = open('c:\\users\\administrator\\desktop\\degree.txt', 'r+', encoding='utf-8')
degree_list = degree_file.read().splitlines()
degree_dic = defaultdict()
for d in degree_list:
d_split=d.split(' ')
if len(d_split) == 2:
degree_dic[d.split(' ')[0]] = d.split(' ')[1]
#對句子進行分詞
def seg_word(sentence):
seg_list = jieba.cut(sentence)
seg_result =
for w in seg_list:
stopwords = set()
fr = codecs.open('c:\\users\\administrator\\desktop\\stopwords.txt', 'r', 'utf8')
for word in fr:
stopwords.add(word.strip())
fr.close()
return list(filter(lambda x: x not in stopwords, seg_result))
#對分詞後的詞語進行詞性劃分
def classify_words(word_list):
sen_word = dict()
not_word = dict()
degree_word = dict()
for i in range(len(word_list)):
word = word_list[i]
if word in sen_dict.keys() and word not in not_word_list and word not in degree_dic.keys():
sen_word[i] = sen_dict[word]
elif word in not_word_list:
not_word[i] = -1
elif word in degree_dic.keys():
degree_word[i] = degree_dic[word]
sen_file.close()
degree_file.close()
not_word_file.close()
return sen_word, not_word, degree_word
#計算情感詞的情感值
def socre_sentiment(sen_word, not_word, degree_word, seg_result):
score = 0
sentiment_index_list = list(sen_word.keys())
for i in sentiment_index_list:
w = 1
n = i-1
if n in not_word and n not in degree_word.keys():#有否定詞
w=w*(-1)
m = n-1
if m in degree_word.keys():
s = w*float(degree_word[m])*float(sen_word[i])
else:
s = w*float(sen_word[i])
else:
if n in degree_word.keys():
s = w*float(degree_word[n])*float(sen_word[i])
else:
s = float(sen_word[i])
score = s + score
return score
def setiment_score(sententce):
seg_list = seg_word(sententce)
sen_word, not_word, degree_word = classify_words(seg_list)
score = socre_sentiment(sen_word, not_word, degree_word, seg_list)
return score
path = 'c:\\users\\administrator\\desktop\\comment-csv.csv'
comment = pd.read_csv(path,encoding='gbk').astype(str)
review = comment['內容 2']
score =
for r in review:
comment['score'] = score
total_daily = df.groupby("time").count()
total_daily.columns = ['total']
pos_daily = df[df['score'] >0]
pos_daily = pos_daily.groupby("time").count()
pos_daily.columns = ['positive']
df_merge = pd.merge(total_daily, pos_daily, on='time')
df_merge['sentiment'] = df_merge['positive'] /df_merge['total']
path = 'c:\\users\\administrator\\desktop\\000300.csv'
stock = pd.read_csv(path,encoding='gbk').astype(str)
stock['time'] = pd.to_datetime(stock['time'])
df_merge = df_merge.reset_index()
df_merge['time'] = pd.to_datetime(df_merge['time'])
df_final = pd.merge(df_merge, stock, on='time', how = 'inner')
df_final.to_csv('c:\\users\\administrator\\desktop\\data.csv')
我研究一下如何傳檔案,有需要的可以自取。
**部分並非全部原創,裡面的情感詞情感值計算的規則部分也進行了較大改動。
歡迎討論。
不同型別投資者的炒金方式
明天,國家統計局將公布月度消費者物價指數 cpi 儘管多數機構 5月份cpi仍將維持負增長,但 今年下半年通脹的觀點卻愈發響亮。為此提供注意的是,包括 銅在內的大宗商品,金 銀等 傳統抗通脹概念的樓市 近期均走出揚公升的 通脹這只靴子真的會落地,還是虛驚一場?如果通脹真的發生,上述資產真的能保值增值...
編撰乙份投資者滿意的商業計畫書
編撰乙份投資者滿意的經營計畫書 文 裘友真 酷迷資訊管理顧問公司總經理 電子商務似乎沒有轉好的趨勢,因此學者專家開始探討新經濟泡沫現象是否將至?好的創意除了要生逢其時外,還需要有好的執行力,如此,才有機會創造好的收益。如果單從通路發展歷史角度看,統一超商 7 11 創新通路時曾經過漫長的陣痛期,因此...
西方最大的展會 加密投資者展會將在曼徹斯特舉行
英國加密投資者展會 crypto investor show將於2019年1月18日 19日在曼徹斯特中心舉行。這是繼2018年3月倫敦加密投資者展覽會勝利召開後,又一場引起世界範圍內區塊鏈愛好者及加密投資者的矚目的會議。據悉,作為歐洲區塊鏈領域最大的展會,2018年倫敦展會共有60家參展商,400...