#!/usr/bin/env python # coding: utf-8 # ##内容索引 # 这一小节介绍NumPy的常用函数。 # # 1. 读入csv # loadtxt函数 # # 2. 计算平均值 # average、mean函数 # # 3. 求最大最小值 # max、min函数 # # 4. 计算中位数 # median、msort函数 # # 5. 计算方差 # var函数 # ##1. 读写CSV文件 # CSV(Comma-Separated Value,逗号分隔值)格式是一种常见的文件格式。通常,数据库的转存文件就是csv格式的,文件中的各个字段对应于数据库中的列。 # **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 # In[4]: v # In[18]: #选择第4列,开盘价 opening_price = np.loadtxt('data.csv', delimiter=',', usecols=(3,), unpack=True) # In[19]: print opening_price # ##2. 计算平均值 # ###2.1 计算加权平均 # VWAP是Volume-Weighted Average Price,成交量加权平均价格,某个价格的成交量越高,该价格所占的权重就越大。**VWAP就是以成交量为权重计算出来的加权平均值。** # 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) # ###2.2 算术平均 # 使用mean函数计算算术平均 # In[21]: mean = np.mean(c) print "mean = ",mean # In[32]: print "mean = ", c.mean() # ##3. 求最大最小值和取值范围 # 步骤:读入最高价和最低价,使用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) # ##4. 计算中位数 # 计算收盘价的中位数 # 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 # ##5. 计算方差 # 方差体现变量变化的程度,股价变动过于剧烈的股票一定会给持有者制造麻烦。 # In[30]: print "variance = ", np.var(closing_price) # In[31]: #手动求方差 print 'variance from definition = ', np.mean( (closing_price-c.mean())**2 )