Numpy中的loadtxt函数可以方便地读取csv文件,自动切分字段,并将数据载入Numpy数组。
In [1]:
import numpy as np
In [2]:
c, v = np.loadtxt('data.csv', delimiter=',', usecols=(6,7), unpack=True)
data.csv文件是苹果公司的历史股价数据。第一列为股票代码,第二列为dd-mm-yyyy格式的日期,第三列为空,随后各列依次是开盘价(4)、最高价(5)、最低价(6)和收盘价(7),最后一列为当日的成交量(8)。
loadtxt函数中,usecols参数为一个元组,以获得第7字段至第8字段的数据,也就是股票的收盘价和成交量数据。
unpack参数设置为True,意思是分拆存储不同列的数据,即分别将收盘价和成交量的数组赋值给变量c和v。
用usecols中的参数指定我们感兴趣的数据列,并将unpack参数设置为True使得不同列的数据分别存储。
In [3]:
c
Out[3]:
In [4]:
v
Out[4]:
In [18]:
#选择第4列,开盘价
opening_price = np.loadtxt('data.csv', delimiter=',', usecols=(3,), unpack=True)
In [19]:
print opening_price
In [20]:
vwap = np.average(c, weights=v)
print "VWAP =", vwap
TWAP是Time0Weighted Average Price,时间加权平均价格,其基本思想是最近的价格重要性大一些,所以我们应该对近期的价格给以较高的权重。 我们使用arange函数创建从0递增的自然数序列,自然数的个数即为收盘价的个数。
In [23]:
t = np.arange(len(c))
print "twap = ",np.average(c, weights=t)
In [21]:
mean = np.mean(c)
print "mean = ",mean
In [32]:
print "mean = ", c.mean()
步骤:读入最高价和最低价,使用max和min函数得到最大最小值。
In [24]:
h,l = np.loadtxt('data.csv', delimiter=',', usecols=(4,5), unpack=True)
print 'hightest = ', np.max(h)
print 'lowest = ', np.min(l)
numpy中ptp函数可以计算数组的取值范围。该函数返回的是数组元素最大值和最小值的差值,即max(array)-min(array)。
In [25]:
print 'Spread high price : ', np.ptp(h)
print 'Spread low price : ', np.ptp(l)
计算收盘价的中位数
In [26]:
closing_price = np.loadtxt('data.csv', delimiter=',', usecols=(6,), unpack=True)
print 'median = ', np.median(closing_price)
对数组进行排序,之后再去中位数
In [27]:
sorted_closing = np.msort(closing_price)
print "sorted_closing_price = ", sorted_closing
In [29]:
#先判断数组的个数是奇数还是偶数
N = len(closing_price)
median_ind = (N-1)/2
if N & 0x1 :
print "median = ", sorted_closing[median_ind]
else:
print "median = ", (sorted_closing[median_ind]+sorted_closing[median_ind+1])/2
In [30]:
print "variance = ", np.var(closing_price)
In [31]:
#手动求方差
print 'variance from definition = ', np.mean( (closing_price-c.mean())**2 )