1. 說明
在數(shù)據(jù)統(tǒng)計和預(yù)測的過程中孤荣,工程師基本都使用現(xiàn)成的算法垃杖,工程師的主要工作是根據(jù)具體業(yè)務(wù)邏輯預(yù)處理數(shù)據(jù)和選擇算法羡洛。
首先要對數(shù)據(jù)預(yù)處理(數(shù)據(jù)清洗)柑司,包括數(shù)據(jù)的歸一化忙上,去除重復(fù)數(shù)據(jù)拷呆,修改錯誤數(shù)據(jù),填充無效數(shù)據(jù)疫粥,抽象數(shù)據(jù)表示茬斧,篩選特征值,分配權(quán)重等等梗逮,以得到更準(zhǔn)確的數(shù)據(jù)和更有效的結(jié)果项秉。
繼續(xù)上次關(guān)于股票直方圖的話題,來看看簡單的股票數(shù)據(jù)預(yù)處理慷彤。左圖是昨天股票漲跌的直方圖娄蔼,從中看出怖喻,漲跌幅分布在-10到50的區(qū)間內(nèi)。
漲幅超過10%是因?yàn)橛嬋肓诵鹿傻氖兹諠q幅岁诉,跌漲超過-10%锚沸,可能由于分紅配送等原因引起。下面程序中將對此區(qū)域進(jìn)行特殊處理涕癣。
對于當(dāng)日停牌的數(shù)據(jù)哗蜈,它的開盤價收盤價最高價最低價都是同一個值,如果加入統(tǒng)計坠韩,會在0附近形成一個無意義的峰值距潘,在預(yù)處理中也把它去掉。
如果用左圖結(jié)果做一個從(-10,10)共計20個區(qū)間的分類器只搁,那么結(jié)果多半會落入(-1,1)的區(qū)間內(nèi)音比,這并不是我們想要的。我們更希望看到的是將3000多支股票平均分布在這20個區(qū)域须蜗,每個區(qū)域股票數(shù)量相同硅确,但是各區(qū)域大小不同。根據(jù)區(qū)域得到更合理的分類結(jié)果明肮。(假設(shè)我們之后將要通過現(xiàn)有股票的各個特征菱农,預(yù)測漲跌最有可能分布在哪個區(qū)域,這是一個對結(jié)果的分類問題柿估,暫不考慮回歸)
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 #把區(qū)間分成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) # 加入?yún)^(qū)間的左側(cè)值
count = 0 #區(qū)域計數(shù)
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) # 加入?yún)^(qū)間右側(cè)值
hist, bins = np.histogram(array,bins=bin_arr) # 按bin_arr給定的區(qū)域計算直方圖
width = np.diff(bins)
center = (bins[:-1] + bins[1:]) / 2
plt.bar(center, hist, align='center',width=width)
plt.show()
2) 運(yùn)行結(jié)果
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) 分析
從結(jié)果可以看出循未,總共篩選出了3010支股票,將其分成20個區(qū)間秫舌,其中每個區(qū)間的股票數(shù)基本相等(最后一個不足1/20)的妖,此處只使用了一天的數(shù)據(jù),當(dāng)天微漲足陨;實(shí)際處理時嫂粟,需要使用更多數(shù)據(jù)來劃分區(qū)域,20個區(qū)域可能也有點(diǎn)多墨缘。此處只是拋磚引玉星虹,程序?qū)懙貌⒉粐?yán)謹(jǐn),大家領(lǐng)會精神即可镊讼。以上計算用到了直方圖均衡化的原理宽涌,在頻域上劃分,替代按值域劃分蝶棋,讓我們聚焦于數(shù)據(jù)更集中的區(qū)域卸亮。
3. 參考
1) 直方圖均衡化的數(shù)學(xué)原理
http://blog.csdn.net/superjunenaruto/article/details/52431941