NumPy学习 -- 002_常用函数

数据文件: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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值