import numpy as np

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

"""
Explanation: 内容索引
这一小节介绍NumPy的常用函数。


读入csv
loadtxt函数


计算平均值
average、mean函数


求最大最小值
max、min函数


计算中位数
median、msort函数


计算方差
var函数


1. 读写CSV文件
CSV（Comma-Separated Value，逗号分隔值）格式是一种常见的文件格式。通常，数据库的转存文件就是csv格式的，文件中的各个字段对应于数据库中的列。
Numpy中的loadtxt函数可以方便地读取csv文件，自动切分字段，并将数据载入Numpy数组。
End of explanation
"""


c

v

#选择第4列，开盘价
opening_price = np.loadtxt('data.csv', delimiter=',', usecols=(3,), unpack=True)

print opening_price

"""
Explanation: data.csv文件是苹果公司的历史股价数据。第一列为股票代码，第二列为dd-mm-yyyy格式的日期，第三列为空，随后各列依次是开盘价(4)、最高价(5)、最低价(6)和收盘价(7)，最后一列为当日的成交量(8)。
loadtxt函数中，usecols参数为一个元组，以获得第7字段至第8字段的数据，也就是股票的收盘价和成交量数据。
unpack参数设置为True，意思是分拆存储不同列的数据，即分别将收盘价和成交量的数组赋值给变量c和v。
用usecols中的参数指定我们感兴趣的数据列，并将unpack参数设置为True使得不同列的数据分别存储。
End of explanation
"""


vwap = np.average(c, weights=v)
print "VWAP =", vwap

"""
Explanation: 2. 计算平均值
2.1 计算加权平均
VWAP是Volume-Weighted Average Price，成交量加权平均价格，某个价格的成交量越高，该价格所占的权重就越大。VWAP就是以成交量为权重计算出来的加权平均值。
End of explanation
"""


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

"""
Explanation: TWAP是Time0Weighted Average Price，时间加权平均价格，其基本思想是最近的价格重要性大一些，所以我们应该对近期的价格给以较高的权重。
我们使用arange函数创建从0递增的自然数序列，自然数的个数即为收盘价的个数。
End of explanation
"""


mean = np.mean(c)
print "mean = ",mean

print "mean = ", c.mean()

"""
Explanation: 2.2 算术平均
使用mean函数计算算术平均
End of explanation
"""


h,l = np.loadtxt('data.csv', delimiter=',', usecols=(4,5), unpack=True)
print 'hightest = ', np.max(h)
print 'lowest = ', np.min(l)

"""
Explanation: 3. 求最大最小值和取值范围
步骤：读入最高价和最低价，使用max和min函数得到最大最小值。
End of explanation
"""


print 'Spread high price : ', np.ptp(h)
print 'Spread low price : ', np.ptp(l)

"""
Explanation: numpy中ptp函数可以计算数组的取值范围。该函数返回的是数组元素最大值和最小值的差值，即max(array)-min(array)。
End of explanation
"""


closing_price = np.loadtxt('data.csv', delimiter=',', usecols=(6,), unpack=True)
print 'median = ', np.median(closing_price)

"""
Explanation: 4. 计算中位数
计算收盘价的中位数
End of explanation
"""


sorted_closing = np.msort(closing_price)
print "sorted_closing_price = ", sorted_closing

#先判断数组的个数是奇数还是偶数
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

"""
Explanation: 对数组进行排序，之后再去中位数
End of explanation
"""


print "variance = ", np.var(closing_price)

#手动求方差
print 'variance from definition = ', np.mean( (closing_price-c.mean())**2 )

"""
Explanation: 5. 计算方差
方差体现变量变化的程度，股价变动过于剧烈的股票一定会给持有者制造麻烦。
End of explanation
"""


