1. 程式人生 > >Numpy 常用函式及讀寫操作

Numpy 常用函式及讀寫操作

檔案讀寫

(1)txt格式

首先建立一個單位矩陣,然後將其寫入txt檔案(自定義儲存路徑)

import numpy as np
a=np.eye(3)
np.savetxt('D:/a.text',a)

開啟建立的txt檔案看看
這裡寫圖片描述


(2)csv格式

loadtxt函式可以方便地讀取CSV檔案,自動切分欄位,並將資料載入NumPy陣列。下面都以蘋果公司的歷史股價資料為例展開
第一列:股票程式碼以標識股票
第二列:dd-mm-yyyy格式的日期
第三列為空
之後依次是開盤價、最高價、最低價、收盤價和當日成交量
這裡寫圖片描述

c,v=np.loadtxt('data.csv'
, delimiter=',', usecols=(6,7), unpack=True)

設定分隔符為‘,’,usecols的引數為一個元組,以獲取第7欄位至第8欄位的資料,即收盤價和成交量,unpack引數設定為True,意思是分開儲存不同列的資料。
寫入CSV檔案

np.savetxt("weeksummary.csv", weeksummary, delimiter=",", fmt="%s")

最後是一個型別指定字元,在我們的例子中指定為字串型別。


(3)日期讀入

讀入日期不能像之前一樣。不然會有

ValueError: invalid literal for
float(): 28-01-2011

Numpy嘗試把日期直接轉換成浮點數會引發錯誤。
用引數converters,是資料列和轉換函式之間進行對映的字典,首先寫出轉換函式將日期轉成星期幾,

-星期一 0
-星期二 1
-星期三 2
-星期四 3
-星期五 4
-星期六 5
-星期日 6

def datestr2num(s):
    return datetime.datetime.strtime(s,'%d-%m-%Y').date().weekday()

dates,close=loadtext('data.csv',delimiter=',',usecols=(1
,6),converters={1:datestr2num},upstack=True)

加權平均

(1)用vwap(Volume-Weighted Average Price)代表成交量加權平均價格

vwap=np.average(c,weights=v)

(2)用twap(Time-Weighted Average Price)代表時間加權平均價格
基本的思想:近期價格權重大
用arange函式建立一個從0開始依次增長的自然數序列,自然數的個數即為收盤價的個數

t = np.arange(len(c))
twap=np.average(t,weights=t)

算術平均

mean=np.mean(c)

取值範圍

再次讀入資料,將每日最高價和最低價的資料載入陣列

h,l=np.loadtxt('data.csv',delimiter=',', usecols=(4,5), unpack=True)

獲取最大、最小值和價格區間

highest=np.max(h)
lowest=np.min(l)
interval_h=np.ptp(h)
interval_l=np.ptp(l)

統計分析及常用函式

(1) 中位數
只獲取收盤價資料即可

c=np.loadtxt('data.csv', delimiter=',', usecols=(6,),unpack=True)
med=np.meidan(c)

(2)排序

sorted_close=np.msort(c)

(3)方差

variance=np.var(c)

(4)差分

diff=np.diff(c)

(5)標準差

stand_dev=np.std(c)

(6)開方

sqrt=np.sqrt(c)

(7)返回滿足條件的陣列元素的索引值

indices=np.where(dates==6)

(8)按照索引值從陣列中取出相應的元素

np.take(close,indices)

(9)apply_along_axis函式
呼叫另外一個由我們給出的函式,作用於每一個數組元素上,並且可以指定軸。

dates, open, high, low,close=np.loadtxt('data.csv',delimiter=',', usecols=(1, 3, 4,
5, 6), converters={1: datestr2num}, unpack=True)
close = close[:16]
dates = dates[:16]
# get first Monday
first_monday = np.ravel(np.where(dates == 0))[0]
# get last Friday
last_friday = np.ravel(np.where(dates == 4))[-1]
weeks_indices = np.split(weeks_indices, 3)

def summarize(a,o,h, l, c):
    monday_open = o[a[0]]
    week_high = np.max( np.take(h, a) )
    week_low = np.min( np.take(l, a) )
    friday_close = c[a[-1]]
    return("APPL", monday_open, week_high, week_low, friday_close)
    weeksummary = np.apply_along_axis(summarize, 1, weeks_indices, open, high, low, close)