数据文件:data.csv
AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800
AAPL,31-01-2011, ,335.8,340.04,334.3,339.32,13473000
AAPL,01-02-2011, ,341.3,345.65,340.98,345.03,15236800
AAPL,02-02-2011, ,344.45,345.25,343.55,344.32,9242600
AAPL,03-02-2011, ,343.8,344.24,338.55,343.44,14064100
AAPL,04-02-2011, ,343.61,346.7,343.51,346.5,11494200
AAPL,07-02-2011, ,347.89,353.25,347.64,351.88,17322100
AAPL,08-02-2011, ,353.68,355.52,352.15,355.2,13608500
AAPL,09-02-2011, ,355.19,359,354.87,358.16,17240800
AAPL,10-02-2011, ,357.39,360,348,354.54,33162400
AAPL,11-02-2011, ,354.75,357.8,353.54,356.85,13127500
AAPL,14-02-2011, ,356.79,359.48,356.71,359.18,11086200
AAPL,15-02-2011, ,359.19,359.97,357.55,359.9,10149000
AAPL,16-02-2011, ,360.8,364.9,360.5,363.13,17184100
AAPL,17-02-2011, ,357.1,360.27,356.52,358.3,18949000
AAPL,18-02-2011, ,358.21,359.5,349.52,350.56,29144500
AAPL,22-02-2011, ,342.05,345.4,337.72,338.61,31162200
AAPL,23-02-2011, ,338.77,344.64,338.61,342.62,23994700
AAPL,24-02-2011, ,344.02,345.15,338.37,342.88,17853500
AAPL,25-02-2011, ,345.29,348.43,344.8,348.16,13572000
AAPL,28-02-2011, ,351.21,355.05,351.12,353.21,14395400
AAPL,01-03-2011, ,355.47,355.72,347.68,349.31,16290300
AAPL,02-03-2011, ,349.96,354.35,348.4,352.12,21521000
AAPL,03-03-2011, ,357.2,359.79,355.92,359.56,17885200
AAPL,04-03-2011, ,360.07,360.29,357.75,360,16188000
AAPL,07-03-2011, ,361.11,361.67,351.31,355.36,19504300
AAPL,08-03-2011, ,354.91,357.4,352.25,355.76,12718000
AAPL,09-03-2011, ,354.69,354.76,350.6,352.47,16192700
AAPL,10-03-2011, ,349.69,349.77,344.9,346.67,18138800
AAPL,11-03-2011, ,345.4,352.32,345,351.99,16824200
实例代码:
#-*- coding: UTF-8 -*-
'''
#################################################
# Author : 余欢
# Date : Dec 16, 2015 2:04:11 PM
#company : 南京师范大学--大数据实验室
# description : 常用函数
#本次使用的数据格式为:股票代码,日期格式,空, 开盘价, 最高价, 最低价, 收盘价, 成交量
#################################################
'''
from datetime import datetime
from numpy import eye, savetxt, loadtxt, average
import numpy as np
from audioop import avg
#创建单位矩阵,文件读写
i3 = eye(3) #创建单位矩阵
print '单元矩阵:\n', i3
savetxt("/root/Desktop/Numpy-data/eye.txt", i3) #保存文件
#读入CSV(逗号分隔值)文件,NumPy中的loadtxt函数可以放便地读取CSV文件,自动切分字段,并将数据载入NumPy数组。
#delimiter设置分隔符,usecols为一个元组,指定感兴趣的数据列,unpack参数为True表示分拆存储不同列的数据
c,v = loadtxt('/root/Desktop/Numpy-data/APPLE-STOCKS.csv', delimiter=',',usecols=(4, 7), unpack=True)
print '\n文件里面的数据:AAPLE,28-01-2011, ,344.17,344.4,333.53,336.1,21144800,3'
print '读入CSV(逗号分隔值)文件,第五列:', c
print '读入CSV(逗号分隔值)文件,第八列:', v
#加权平均
c,v = loadtxt('/root/Desktop/Numpy-data/APPLE-STOCKS.csv', delimiter=',',usecols=(3, 4), unpack=True)
vwap = average(c, weights = v) #加权平均,v为加权值
print '\n加权平均值为:', vwap
'''
取值范围
'''
#1. 得到值
d4, d5 = np.loadtxt("/root/Desktop/Code_NumPy/ch3code/data.csv", delimiter=",", usecols=(4, 5), unpack=True)
print "\n数据d4:\n", d4
print "最大值:", np.max(d4)
print "最小值:", np.min(d4)
#最大值 - 最小值
print "(d4极差)最大值 - 最小值 = ", np.ptp(d4)
print "\n数据d5:\n", d5
print "最大值:", np.max(d5)
print "最小值:", np.min(d5)
#最大值 - 最小值
print "(d5极差)最大值 - 最小值 = ", np.ptp(d5)
'''
简单的统计
'''
d = np.loadtxt("/root/Desktop/Code_NumPy/ch3code/data.csv", delimiter=",", usecols=(6, ), unpack=True)
print "\n原数据:\n", d
#计算中位数
print "中位数是:", np.median(d)
print "排序后:\n", np.msort(d)
print "方差:", np.var(d)
print "标准差:", np.std(d)
'''
注意样本方差和总体方差的区别:总体方差是用数据的个数去除离差平方和,而样本方差则是用样本数据
个数减1去除离差平方和,其中样本数据个数减1(即n-1)称之为自由度。之所以有着样的区别,是为了
保证样本方差是一个无偏估计量。(linux的拼音输入法真的很垃圾)
'''
#diff函数返回由相邻数组元素的差值构成的数组。
print "数组相邻元素的差值(后者减去前者):\n", np.diff(d)
print "对数:\n", np.log(d)
#where函数可以根据指定的条件返回所有满足条件的数组元素的索引值
post = np.where(d > np.median(d))
print "数据中大于中位数的数值:\n", d[post]
'''
日期处理:
首先,我们要读入收盘价数据。随后,根据星期几来切分收盘价,并分别计算平均价格。最后,我们将找出一周中哪一天的平均收盘价最高和最低。
Numy是面向浮点数运算的,因此需要对日期做一些专门的处理。
按照如下步骤处理日期。
'''
'''
步骤1 : Numy尝试把日期转换成浮点数。我们需要做的是显示地告诉Numy怎样来转换日期,而这需要用到
loadtxt函数的一个特定的参数(converters),它是一本数据列和转换函数之间进行映射的字典。
为此,我们必须写出转换函数
星期一 0
星期二 1
星期三 2
星期四 3
星期五 4
星期六 5
'''
def datestr2num(s):
return datetime.strptime(s, "%d-%m-%Y").date().weekday()
'''
步骤2:将日期转换函数挂接上去,这样就可以读取数据了
'''
dates, close = np.loadtxt("/root/Desktop/Code_NumPy/ch3code/data.csv", delimiter=",",
usecols=(1, 6), converters={1:datestr2num}, unpack=True)
'''
步骤3:创建包含5个元素的数组,用于保存各个工作日的平均收盘价
'''
averages = np.zeros(5)
'''
步骤4:计算
'''
for i in range(5):
indices = np.where(dates == i)
prices = np.take(close, indices)
avg = np.mean(prices) #平均值
averages[i] = avg
print "星期", i+1, "收盘价分别为:", prices, "\t\t平均价格为:", avg
print "平均价格最高者:", np.max(averages), "是星期", np.argmax(averages) + 1
print "平均价格最低者:", np.min(averages), "是星期", np.argmin(averages) + 1
结果:
单元矩阵:
[[ 1. 0. 0.]
[ 0. 1. 0.]
[ 0. 0. 1.]]
文件里面的数据:AAPLE,28-01-2011, ,344.17,344.4,333.53,336.1,21144800,3
读入CSV(逗号分隔值)文件,第五列: 344.4
读入CSV(逗号分隔值)文件,第八列: 21144800.0
加权平均值为: 344.17
数据d4:
[ 344.4 340.04 345.65 345.25 344.24 346.7 353.25 355.52 359.
360. 357.8 359.48 359.97 364.9 360.27 359.5 345.4 344.64
345.15 348.43 355.05 355.72 354.35 359.79 360.29 361.67 357.4
354.76 349.77 352.32]
最大值: 364.9
最小值: 340.04
(d4极差)最大值 - 最小值 = 24.86
数据d5:
[ 333.53 334.3 340.98 343.55 338.55 343.51 347.64 352.15 354.87
348. 353.54 356.71 357.55 360.5 356.52 349.52 337.72 338.61
338.37 344.8 351.12 347.68 348.4 355.92 357.75 351.31 352.25
350.6 344.9 345. ]
最大值: 360.5
最小值: 333.53
(d5极差)最大值 - 最小值 = 26.97
原数据:
[ 336.1 339.32 345.03 344.32 343.44 346.5 351.88 355.2 358.16
354.54 356.85 359.18 359.9 363.13 358.3 350.56 338.61 342.62
342.88 348.16 353.21 349.31 352.12 359.56 360. 355.36 355.76
352.47 346.67 351.99]
中位数是: 352.055
排序后:
[ 336.1 338.61 339.32 342.62 342.88 343.44 344.32 345.03 346.5
346.67 348.16 349.31 350.56 351.88 351.99 352.12 352.47 353.21
354.54 355.2 355.36 355.76 356.85 358.16 358.3 359.18 359.56
359.9 360. 363.13]
方差: 50.1265178889
标准差: 7.08000832548
数组相邻元素的差值(后者减去前者):
[ 3.22 5.71 -0.71 -0.88 3.06 5.38 3.32 2.96 -3.62 2.31
2.33 0.72 3.23 -4.83 -7.74 -11.95 4.01 0.26 5.28 5.05
-3.9 2.81 7.44 0.44 -4.64 0.4 -3.29 -5.8 5.32]
对数:
[ 5.81740873 5.82694361 5.84363137 5.84157146 5.83901242 5.84788282
5.86329021 5.87268101 5.88097981 5.87082117 5.87731553 5.88382366
5.88582622 5.8947609 5.88137062 5.85953188 5.824849 5.83662196
5.83738053 5.85266214 5.86706278 5.85595978 5.86397203 5.88488106
5.88610403 5.87313136 5.87425635 5.86496551 5.84837332 5.86360277]
数据中大于中位数的数值:
[ 355.2 358.16 354.54 356.85 359.18 359.9 363.13 358.3 353.21
352.12 359.56 360. 355.36 355.76 352.47]
星期 1 收盘价分别为: [[ 339.32 351.88 359.18 353.21 355.36]] 平均价格为: 351.79
星期 2 收盘价分别为: [[ 345.03 355.2 359.9 338.61 349.31 355.76]] 平均价格为: 350.635
星期 3 收盘价分别为: [[ 344.32 358.16 363.13 342.62 352.12 352.47]] 平均价格为: 352.136666667
星期 4 收盘价分别为: [[ 343.44 354.54 358.3 342.88 359.56 346.67]] 平均价格为: 350.898333333
星期 5 收盘价分别为: [[ 336.1 346.5 356.85 350.56 348.16 360. 351.99]] 平均价格为: 350.022857143
平均价格最高者: 352.136666667 是星期 3
平均价格最低者: 350.022857143 是星期 5