python股票数据预处理_Python股票处理之六_数据预处理A
1. 說明
在數據統計和預測的過程中,工程師基本都使用現成的算法,工程師的主要工作是根據具體業務邏輯預處理數據和選擇算法。
首先要對數據預處理(數據清洗),包括數據的歸一化,去除重復數據,修改錯誤數據,填充無效數據,抽象數據表示,篩選特征值,分配權重等等,以得到更準確的數據和更有效的結果。
繼續上次關于股票直方圖的話題,來看看簡單的股票數據預處理。左圖是昨天股票漲跌的直方圖,從中看出,漲跌幅分布在-10到50的區間內。
漲幅超過10%是因為計入了新股的首日漲幅,跌漲超過-10%,可能由于分紅配送等原因引起。下面程序中將對此區域進行特殊處理。
對于當日停牌的數據,它的開盤價收盤價最高價最低價都是同一個值,如果加入統計,會在0附近形成一個無意義的峰值,在預處理中也把它去掉。
如果用左圖結果做一個從(-10,10)共計20個區間的分類器,那么結果多半會落入(-1,1)的區間內,這并不是我們想要的。我們更希望看到的是將3000多支股票平均分布在這20個區域,每個區域股票數量相同,但是各區域大小不同。根據區域得到更合理的分類結果。(假設我們之后將要通過現有股票的各個特征,預測漲跌最有可能分布在哪個區域,這是一個對結果的分類問題,暫不考慮回歸)
2. 程序
1) 代碼
# -*- coding:utf-8 -*-
import tushare as ts
import numpy as np
import matplotlib.pyplot as plt
e = ts.get_today_all()
size = 20 #把區間分成20份
array = []
ll = e[u'high'] # 最高價
hh = e[u'low'] # 最低價
cc = e[u'changepercent']# 漲跌幅
for i in range(0, len(e)):
ifll[i] != hh[i]: # 最高價與最低價相同說明停牌
ifcc[i] > 10: # 漲幅大于10%的股票歸為10%
array.append(10)
elifcc[i] < -10: # 跌幅大于-10%的股票歸為-10%
array.append(-10)
else:
array.append(cc[i])
print "Total:",len(array)
array=np.sort(array) # 排序
bin_arr = []
bin_arr.append(-10) # 加入區間的左側值
count = 0 #區域計數
for i in range(0, len(array)):
count+=1
ifcount > len(array) / size:
printarray[i]
count= 0
bin_arr.append(array[i])
bin_arr.append(10) # 加入區間右側值
hist, bins = np.histogram(array,bins=bin_arr) # 按bin_arr給定的區域計算直方圖
width = np.diff(bins)
center = (bins[:-1] + bins[1:]) / 2
plt.bar(center, hist, align='center',width=width)
plt.show()
2) 運行結果
圖片.png
Total: 3010
-1.271 -0.667 -0.289 -0.098 0.061 0.219 0.348 0.482 0.599 0.719 0.873 1.021 1.16 1.312 1.505 1.786 2.133 2.713 3.74
3) 分析
從結果可以看出,總共篩選出了3010支股票,將其分成20個區間,其中每個區間的股票數基本相等(最后一個不足1/20),此處只使用了一天的數據,當天微漲;實際處理時,需要使用更多數據來劃分區域,20個區域可能也有點多。此處只是拋磚引玉,程序寫得并不嚴謹,大家領會精神即可。以上計算用到了直方圖均衡化的原理,在頻域上劃分,替代按值域劃分,讓我們聚焦于數據更集中的區域。
3. 參考
1) 直方圖均衡化的數學原理
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的python股票数据预处理_Python股票处理之六_数据预处理A的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 删除同域名所有cookies_淘宝自动登
- 下一篇: jquery实现登录失败提示_浅谈jQu