Numpy 常用函数及读写操作

时间:2022-09-26 18:58:12

文件读写

(1)txt格式

首先创建一个单位矩阵,然后将其写入txt文件(自定义存储路径)

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

打开建立的txt文件看看
Numpy 常用函数及读写操作


(2)csv格式

loadtxt函数可以方便地读取CSV文件,自动切分字段,并将数据载入NumPy数组。下面都以苹果公司的历史股价数据为例展开
第一列:股票代码以标识股票
第二列:dd-mm-yyyy格式的日期
第三列为空
之后依次是开盘价、最高价、最低价、收盘价和当日成交量
Numpy 常用函数及读写操作

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)