# -*- coding: utf-8 -*- # @Date: 2017-08-26 # @Original: import numpy as np # 200支股票 stock_cnt = 200 # 504個交易日 view_days = 504 # 生成服從正態分佈:均值指望=0,標準差=1的序列 stock_day_change = np.random.standard_normal((stock_cnt, view_days)) # 使用沙盒數據,目的是和書中同樣的數據環境,不須要注視掉 # stock_day_change = np.load('../gen/stock_day_change.npy') # 打印shape (200, 504) 200行504列 print(stock_day_change.shape) # 打印出第一支只股票,頭五個交易日的漲跌幅狀況 print(stock_day_change[0:1, :5]) 3.1.3 索引選取和切片選擇 # 0:2第一,第二支股票,0:5頭五個交易日的漲跌幅數據 stock_day_change[0:2, 0:5] 3.1.4 數據轉換與規整 # 2表明保留兩位小數 np.around(stock_day_change[0:2, 0:5], 2) 3.1.5 邏輯條件進行數據篩選 mask = stock_day_change[0:2, 0:5] > 0.5 print(mask) 3.1.6 通用序列函數 # np.all判斷序列中的全部元素是否所有是true, 即對bool序列進行與操做 # 本例實際判斷stock_day_change[0:2, 0:5]中是否全是上漲的 np.all(stock_day_change[0:2, 0:5] > 0) # np.any判斷序列中是否有元素爲true, 即對bool序列進行或操做 # 本例實際判斷stock_day_change[0:2, 0:5]中是至少有一個是上漲的 np.any(stock_day_change[0:2, 0:5] > 0) # 對兩個序列對應的元素兩兩比較,maximum結果集取大,相對使用minimum爲取小的結果集 np.maximum(stock_day_change[0:2, 0:5], stock_day_change[-2:, -5:]) # array([[ 0.38035486, 0.12259674, -0.2851901 , -0.00889681, 0.45731945], # [ 0.13380956, 2.03488293, 1.44701057, -0.92392477, 0.96930104]]) change_int = stock_day_change[0:2, 0:5].astype(int) print(change_int) # 序列中數值值惟一且不重複的值組成新的序列 np.unique(change_int) # diff 先後臨近數據進行減法運算 # axis=1 np.diff(stock_day_change[0:2, 0:5]) # 惟一區別 axis=0 np.diff(stock_day_change[0:2, 0:5], axis=0) #where 數據篩選 tmp_test = stock_day_change[-2:, -5:] print(np.where(tmp_test > 0.5, 1, 0)) 統計概念與函數使用 stock_day_change_four = stock_day_change[:4, :4] print('最大漲幅 {}'.format(np.max(stock_day_change_four, axis=1))) print('最大跌幅 {}'.format(np.min(stock_day_change_four, axis=1))) print('振幅幅度 {}'.format(np.std(stock_day_change_four, axis=1))) print('平均漲跌 {}'.format(np.mean(stock_day_change_four, axis=1))) 3.2.2 統計基礎概念 a_investor = np.random.normal(loc=100, scale=50, size=(100, 1)) b_investor = np.random.normal(loc=100, scale=20, size=(100, 1)) # a交易者 print('交易者指望{0:.2f}元, 標準差{1:.2f}, 方差{2:.2f}'.format(a_investor.mean(), a_investor.std(), a_investor.var())) # b交易者 print('交易者指望{0:.2f}元, 標準差{1:.2f}, 方差{2:.2f}'.format(b_investor.mean(), b_investor.std(), b_investor.var())) 正態分佈 伯努利分佈