KNU_edit.py
6.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
# KNU 한국어 감성사전
# 작성자 : 온병원, 박상민, 나철원
# 소속 : 군산대학교 소프트웨어융합공학과 Data Intelligence Lab
# 홈페이지 : dilab.kunsan.ac.kr
# 작성일 : 2018.05.14
# 뜻풀이 데이터 출처 : https://github.com/mrchypark/stdkor
# 신조어 데이터 출처 : https://ko.wikipedia.org/wiki/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%EC%9D%98_%EC%9D%B8%ED%84%B0%EB%84%B7_%EC%8B%A0%EC%A1%B0%EC%96%B4_%EB%AA%A9%EB%A1%9D
# 이모티콘 데이터 출처: https://ko.wikipedia.org/wiki/%EC%9D%B4%EB%AA%A8%ED%8B%B0%EC%BD%98
# SentiWordNet_3.0.0_20130122 데이터 출처 : http://sentiwordnet.isti.cnr.it/
# SenticNet-5.0 데이터 출처 : http://sentic.net/
# 감정단어사전0603 데이터 출처 : http://datascience.khu.ac.kr/board/bbs/board.php?bo_table=05_01&wr_id=91
# 김은영, “국어 감정동사 연구”, 2004.02, 학위논문(박사) - 전남대학교 국어국문학과 대학원
#-*-coding:utf-8-*-
import json
import warnings
warnings.simplefilter(("ignore"))
import openpyxl
import pandas as pd
import re
from datetime import datetime
class KnuSL():
def data_list(wordname):
with open('KnuSentiLex/data/SentiWord_info.json', encoding='utf-8-sig', mode='r') as f:
data = json.load(f)
result = [0,0]
for i in range(0, len(data)):
if data[i]['word'] == wordname:
result.pop()
result.pop()
result.append(data[i]['word_root'])
result.append(int(data[i]['polarity']))
r_word = result[0] #어근
s_word = result[1] #극성
return s_word
if __name__ == "__main__":
ksl = KnuSL
print("\nKNU 한국어 감성사전입니다~ :)")
print("사전에 단어가 없는 경우 결과가 None으로 나타납니다!!!")
print("종료하시려면 #을 입력해주세요!!!")
print("-2:매우 부정, -1:부정, 0:중립 or Unkwon, 1:긍정, 2:매우 긍정")
print("\n")
#########
Newsfilefolder = input("종목폴더입력: ")
Newsfilename=input("파일이름입력:")
Newsfilepos = "C:/Users/yangj/PycharmProjects/pythonProject1/뉴스키워드/"+Newsfilefolder+"/" + Newsfilename + ".xlsx"
Newsfile = openpyxl.load_workbook(Newsfilepos)#파일이름입력
ws=Newsfile.active
data=[]
date=[]
i=0
for row in ws.rows:
data.append([])
date.append(row[1].value)
for cell in row:
if cell.value != None:
data[i].append(cell.value)
i += 1
del data[0] #첫번째 의미없는 열 삭제
del date[0]
for i in range(len(data)):
del data[i][0] #각 열의 첫번째 행 삭제
for i in range(len(data)):
del data[i][0] #각 열의 날짜 행 삭제
KNUdata=[]
Tdata=[]
for x in range(len(data)):
KNUdata.append([])
Tdata.append([])
for y in range(len(data[x])):
KNUdata[x].append(ksl.data_list(data[x][y]))
Tdata[x].append([data[x][y], KNUdata[x][y]])
result = { '날짜':date, '단어, 극성':Tdata }
df = pd.DataFrame(result)
#print(df)
list_df=df.values.tolist() #dataframe list로 변경
#print(list_df)
#print(list_df[0][0]) 날짜 2021.01.01.
new_date = [] # 날짜 중복 삭제
for v in date:
if v not in new_date:
new_date.append(v)
#print(new_date)
Setlist =[]# 날짜별 키워드 넣기
for v in range(len(new_date)):
Setlist.append([])
Setlist[v].append(new_date[v])
for i in range(len(list_df)):
for j in range(len(list_df[i][1])):
if new_date[v] == list_df[i][0]:
Setlist[v].append(list_df[i][1][j])
print(Setlist)
print(Setlist[0][0]) #2021.01.01
print(Setlist[0][1][1]) #극성 0
print(type(Setlist[0][1][1])) #극성 모든 타입 int
#print(list_df[0][1][0]) 키워드와 극성 ['HMM…"체질개선해', 'X']
#print(list_df[0][1][0][1]) 극성 x
#print(list_df[0][0].split('.')[:3]) ['2021', '01', '01']
#df.to_excel(Newsfilename+' KNU.xlsx',sheet_name='sheet1')
Stockfilefolder = input("종목시세폴더입력: ")
Stockfilename=input("시세파일이름입력:")
fileStock = "C:/Users/yangj/PycharmProjects/pythonProject1/종목별시세/"+Stockfilefolder+"/" + Stockfilename + ".xlsx"
Stockfile = openpyxl.load_workbook(fileStock)#파일이름입력
stock_ws=Stockfile.active
Stock_data=[] #list 타입
i=0
for row in stock_ws.rows:
Stock_data.append([])
for cell in row:
if cell.value != None:
Stock_data[i].append(cell.value)
i += 1
del Stock_data[0]
for i in range(len(Stock_data)):
del Stock_data[i][2] # 대비 삭제
for i in range(len(Stock_data)):
del Stock_data[i][7] #거래대금 삭제
for i in range(len(Stock_data)):
del Stock_data[i][7] #시가 총액 삭제
for i in range(len(Stock_data)):
del Stock_data[i][7] #상장주식 수 삭제 / 결과:'일자', '종가', '등락률', '시가', '고가', '저가', '거래량'
print(Stock_data)
def Calpercentage(a,b): #시초가 대비 고점/저점 비율
return abs(a-b)/a*100
for i in range(len(Stock_data)-1):
for k in range(len(Setlist)):
if( Stock_data[i][0].split('/') == Setlist[k][0].split('.')[:3]): # 날짜 비교
if Calpercentage(Stock_data[i][3],Stock_data[i][4]) > 2 : #당일 시가 대비 고가가 2퍼 높을때
for j in range(1,len(Setlist[k])):
if Setlist[0][j][1] == 0:
Setlist[0][j][1] = 1
else:
Setlist[0][j][1] += 1
elif Calpercentage(Stock_data[i][3],Stock_data[i][5]) < -2 : #당일 시가 대비 저가가 2퍼 낮을 때
for j in range(1,len(Setlist[k])):
if Setlist[0][j][1] == 0:
Setlist[0][j][1] = -1
else:
Setlist[0][j][1] -= 1
else:
if Stock_data[i+1][2] > 0: # 다음날 주가 등락률이 양수면
for j in range(1,len(Setlist[k])): #어제뉴스는 호재 취급
if Setlist[0][j][1] == 0:
Setlist[0][j][1] = 1
else:
Setlist[0][j][1] += 1
elif Stock_data[i+1][2] < 0:
for j in range(1,len(Setlist[k])): # 음수면 어제 뉴스는 악재 취급
if Setlist[0][j][1] == 0:
Setlist[0][j][1] = -1
else:
Setlist[0][j][1] -= 1
print(Setlist)