Numpy 常用函数及读写操作

来源:互联网 发布:什么是根域名服务器 编辑:程序博客网 时间:2024/05/29 17:40

文件读写

(1)txt格式

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

import numpy as npa=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 Mondayfirst_monday = np.ravel(np.where(dates == 0))[0]# get last Fridaylast_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)
0 0