• NumPy的常用函数


    1.1 读写文件 

    eye函数创建了一个单位矩阵 

    使用savetxt函数将数据存储到文件中,当然我们需要指定文件名以及要保存的数组。 

    >>> import numpy as np

    >>> i2=np.eye(2)

    >>> print i2

    [[ 1.  0.]

     [ 0.  1.]]

    >>> np.savetxt("eye.txt",i2)

    1.2 CSV 文件

    CSV(Comma-Separated Value,逗号分隔值)格式是一种常见的文件格式。通常,数据库的 转存文件就是CSV格式的,文件中的各个字段对应于数据库表中的列。 

    读入 CSV 文件 

    NumPy中的loadtxt函数可以方便地读取CSV 文件,自动切分字段,并将数据载入NumPy数组。 

    下面,我们以载入苹果公司的历史股价数据为 例展开叙述。股价数据存储在CSV文件中,第一列为股票代码以标识股票(苹果公司股票代码为 AAPL),第二列为dd-mm-yyyy格式的日期,第三列为空,随后各列依次是开盘价、最高价、最低 9 价和收盘价,最后一列为当日的成交量。 

    下面为一行数据:

    AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800 

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

    可以看到,数据存储在data.csv文件中,我们设置分隔符为,(英文标点逗号),因为我们要处理一个CSV文件。usecols的参数为一个元组,以获取第7字段至第8字段的数据,也就是股票 的收盘价和成交量数据。unpack参数设置为True,意思是分拆存储不同列的数据,即分别将收 盘价和成交量的数组赋值给变量c和v。 

    >>> import numpy as np

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

    >>> c

    336.10000000000002

    >>> v

    21144800.0

    1.3成交量加权平均价格(VWAP) 

    VWAP(Volume-Weighted Average Price,成交量加权平均价格)是一个非常重要的经济学量, 它代表着金融资产的“平均”价格。某个价格的成交量越高,该价格所占的权重就越大。VWAP 就是以成交量为权重计算出来的加权平均值,常用于算法交易。 

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

    >>> vwap=np.average(c,weights=v)

    >>> vwap

    338.09998959549171

    1.4 算术平均值函数 

    >>> d=np.mean(c)

    >>> d

    338.10000000000002

    时间加权平均价格 

    在经济学中,TWAP(Time-Weighted Average Price,时间加权平均价格)是另一种“平均” 价格的指标。既然我们已经计算了VWAP,那也来计算一下TWAP吧。其实TWAP只是一个变种 而已,基本的思想就是最近的价格重要性大一些,所以我们应该对近期的价格给以较高的权重。 最简单的方法就是用arange函数创建一个从0开始依次增长的自然数序列,自然数的个数即为收 盘价的个数。当然,这并不一定是正确的计算TWAP的方式。 

    >>> t=np.arange(len(c))

    >>> f=np.average(c,weights=t)

    >>> f

    339.10000000000002

    1.5 取值范围 

    通常,我们不仅仅想知道一组数据的平均值,还希望知道数据的极值以及完整的取值范 围——最大值和最小值。我们的股价示例数据中已经包含了每天的股价范围——最高价和最低 价。但是,我们还需要知道最高价的最大值以及最低价的最小值。 

    min函数和max函数能够满足需求。我们按如下步骤来找最大值和最小值。 

    >>> h,l=np.loadtxt('data.csv',delimiter=',',usecols=(4,5),unpack=True)

    >>> m=np.max(h)

    >>> n=np.min(l)

    >>> m

    348.39999999999998

    >>> n

    333.52999999999997

    NumPy中有一个ptp函数可以计算数组的取值范围。该函数返回的是数组元素的最大值和最小值之间的差值。也就是说,返回值等于max(array) - min(array)。调用ptp函数: 

    >>> r=np.ptp(h)

    >>> q=np.ptp(l)

    >>> r

    4.0

    >>> q

    0.0

    1.6 统计分析 

    median的函数将帮助我们找到中位数

    msort函数可以帮我们获得排序后的数组,并输出 结果 

    >>> a=np.loadtxt("data.csv",delimiter=',',usecols=(6,),unpack=True)

    >>> b=np.median(a)

    >>> b

    338.10000000000002

    >>> c=np.msort(a)

    >>> c

    array([ 336.1,  337.1,  338.1,  339.1,  340.1])

    方差能够体现变量变化的程度。在我们的例子中, 方差还可以告诉我们投资风险的大小。那些股价变动过于剧烈的股票一定会给持有者制造麻烦。 

    >>> a=np.loadtxt("data.csv",delimiter=',',usecols=(6,),unpack=True)

    >>> d=np.var(a)

    >>> d

    2.0

    1.7 股票收益率

    在学术文献中,收盘价的分析常常是基于股票收益率和对数收益率的。简单收益率是指相邻 两个价格之间的变化率,而对数收益率是指所有价格取对数后两两之间的差值。我们在高中学习 过对数的知识,“a”的对数减去“b”的对数就等于“a除以b”的对数。因此,对数收益率也可 以用来衡量价格的变化率。注意,由于收益率是一个比值,例如我们用美元除以美元(也可以是 8 其他货币单位),因此它是无量纲的。总之,投资者最感兴趣的是收益率的方差或标准差,因为 这代表着投资风险的大小。 

    分析股票收益率

    NumPy中的diff函数可以返回一个由相邻数组元素的差 值构成的数组。这有点类似于微积分中的微分。为了计算收益率,我们还需要用差值除以前一天 的价格。 

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

    >>> c

    array([ 336.1,  337.1,  338.1,  339.1,  340.1])

    >>> d=c[:-1]

    >>> d

    array([ 336.1,  337.1,  338.1,  339.1])

    >>> e=np.diff(c)

    >>> e

    array([ 1.,  1.,  1.,  1.])

    >>> returns = e/d

    >>> returns

    array([ 0.0029753 ,  0.00296648,  0.0029577 ,  0.00294898])

    我们没有用收盘价数组中的最后一个值做除数。接下来,用std函数计算标准差: 

    >>> f=np.std(returns)

    >>> f

    9.8097844864301728e-06

    1.8 日期分析 

    分析日期数据 处理日期总是很烦琐,NumPy是面向浮点数运算的,因此需要对日 期做一些专门的处理。 

    import numpy as np
    from datetime import datetime
    
    def datestr2num(s):
            return datetime.strptime(s,"%d-%m-%Y").date().weekday()
    
    dates,close=np.loadtxt('data.csv',delimiter=',',usecols=(1,6),converters={1:datestr2num},unpack=True)
    
    print "Dates=",dates
    
    averages =np.zeros(5)
    
    for i in range(5):
        indices=np.where(dates==i)
        prices=np.take(close,indices)
        avg=np.mean(prices)
        print "Day",i,"prices",prices,"Average",avg
        averages[i]=avg
    
    top= np.max(averages)
    
    print "Highest average",top
    
    print "topp day of the week ", np.argmax(averages)
    
    bottom =np.min(averages)
    print "lowest average",bottom
    print "bottom day of the week ",np.argmin(averages)
    
     
  • 相关阅读:
    3月27日
    IndiaHacks 2016
    华东交通大学2017年ACM“双基”程序设计竞赛 1003
    华东交通大学2017年ACM“双基”程序设计竞赛 1002
    华东交通大学2017年ACM“双基”程序设计竞赛 1008
    华东交通大学2017年ACM“双基”程序设计竞赛 1010
    华东交通大学2017年ACM“双基”程序设计竞赛 1001
    OpenCV3的配置(VS2015)
    Python 起步 多版本共存配置
    栈与队列试题中的操作代码
  • 原文地址:https://www.cnblogs.com/vincentqliu/p/6623861.html
Copyright © 2020-2023  润新知