2017-09-13 57 views
0

我得到了6056卷的價格數據,並且我想要在每個倉中創建20個具有相同數據量的倉(倉),找到每個倉內的平均交易量和價格,並繪製一個體積(x軸)圖價格(Y軸)編輯:Python如何創建等量數據的箱子並繪製它們?

我想修改我的代碼來改變時間間隔,以便它可以包含相同數量的數據點

間隔不必爲等間隔。我想有相同數量的每個間隔的數據,並確定每個區間的範圍,然後找到每個區間內的數據的平均值,並繪製它

enter image description here

我當前的代碼是:

dat = df['Volume_norm'] 

def discretize(data, bins): 
    split = np.array_split(np.sort(data), bins) 
    cutoffs = [x[-1] for x in split] 
    cutoffs = cutoffs[:-1] 
    discrete = np.digitize(data, cutoffs, right=True) 
    return discrete, cutoffs 

discrete_dat, cutoff = discretize(dat, 50) 

df = pd.DataFrame({'X' : TradeN['Volume_norm'], 'Y' : TradeN['dMidP']}) #we build a dataframe from the data 
data_cut = pd.cut(dat,Cutoff)   #we cut the data following the bins    #we cut the data following the bins  
grp = df.groupby(by = data_cut)  #we group the data by the cut 
ret = grp.aggregate(np.mean) 

然而,當我計數中的數據,這將返回我:

Counter({Interval(0.376, 0.46400000000000002, closed='right'): 2065, 
     Interval(0.83899999999999997, 0.92800000000000005, closed='right'): 563, 
     Interval(0.046399999999999997, 0.0557, closed='right'): 63, 
     Interval(0.56100000000000005, 0.67200000000000004, closed='right'): 121, 
     Interval(0.46400000000000002, 0.51000000000000001, closed='right'): 145, 
     Interval(0.11600000000000001, 0.14399999999999999, closed='right'): 105, 
     Interval(0.013899999999999999, 0.023199999999999998, closed='right'): 144, 
     Interval(0.14399999999999999, 0.186, closed='right'): 119, 
     Interval(0.186, 0.23200000000000001, closed='right'): 134, 

,這意味着在每個範圍的數據的數目仍然是各色NT

+0

在一般情況下,您無法同時滿足等間隔的箱的約束以及包含相同數量的數據點的箱。 - 請澄清你的問題,明確說明你想要什麼,或發佈你的數據集。 –

+0

抱歉的混淆。我不想創建等間隔的垃圾箱,所以我試圖修改我的代碼來更改間隔,以便它可以包含相同數量的數據點 – bing

+0

您真正想要的內容仍不清楚。 –

回答

1

強調文本您將需要等於基數的集合對數據進行分區:

data = [collection of data points] 

bins = [] 
num_bins = 12 
data_points_per_bin = len(data) // 12 

bins = [data[_ * data_points_per_bin: (_+1)*data_points_per_bin] for _ in range(num_bins)] 

最後一行是創建列表包含數據的列表(箱)列表解析點。它對所有數據進行迭代,以相同大小的組對其進行切片並存儲。

您可能需要選擇一個num_bins,該數值是數據點數量的除數,並且與最合適的數字最接近,或者決定如何處理未在滿箱中分配的數據。

例如:

data = list(range(48)) 

num_bins = 12 
data_points_per_bin = len(data) // 12 

bins = [data[_ * data_points_per_bin: (_+1)*data_points_per_bin] for _ in range(num_bins)] 

輸出爲:

[[0, 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]] 

一旦數據被分配給每個倉,你可以繪製。

+0

的更新謝謝,但不應該'箱'是20個等距元素的數組?例如array([4.50996122e-03,7.49458897e-03,1.22444006e-02, 2.06965446e-02,3.43932215e-02,5.71541629e-02, 9.49779695e-02,1.57833030e-01,2.62284668e-01, 4。35860906e-01,7.24307412e-01,1.20364369e + 00, 2.00019784e + 00,3.332390013e + 00,5.52360964e + 00, 9.17905540e + 00,1.52536228e + 01,2.53482520e + 01, 4.21233621e + 01,7.00000000e + 01]) In [65]: – bing

+0

很難同時滿足具有相同大小的二進制文件和包含相同數量的元素的二進制文件的限制。有時偶爾可能有一些數據集可能,但一般情況下可能是一種或另一種。 –

+0

謝謝你的回覆。我嘗試了上述代碼,並返回我:[26 0.463769 32 0.463769 65 0.927538 104 0.055652 128 0.463769 156 0.927538 205 0.463769 348 0.463769 379 0.890436 434 0.463769 457 0.649276 639 0.463769 641 0.486957 673 0.463769 715 0.125218,而不是我想要切斷的範圍 – bing

相關問題