numpy基础属性方法随机整理(五)--- numpy通用函数 np.loadtext / np.mean() / np.average(a, weights=...)/ .../ 常用统计指标...

1、读取CSV文件:
loadtext (文件名,分隔符(delimiter),usecols=(列索引表—需要的列), unpack=True, dtype=元素类型, converters={列索引号:转换函数})
注:unpack=True 表示所有的分隔符都进行处理

2、算数平均值 np.mean()

3、加权平均值 np.average(price, weights=volumes)

4、最大值和最小值
np.max(arr):
np.min(arr):
np.maximum(arr1, arr2, …): 所有数组中对应元素的最大值组成一个数组
np.minimum(arr1, arr2, …): 所有数组中对应元素的最小值组成一个数组

5、中位数 np.median

# maximum
>>> a
array([[[67, 25, 88],
        [81, 14, 22],
        [73, 33, 70]],

       [[17, 78, 89],
        [82, 13, 78],
        [13, 39, 45]],

       [[67, 78, 89],
        [82, 14, 78],
        [73, 39, 70]]])
>>> np.maximum(a[0],a[1],a[2])
array([[67, 78, 89],        # 三个数组对应位置元素做对比,取最大值组成一个数组
       [82, 14, 78],
       [73, 39, 70]])

6、常用统计指标

  • 样本 si
  • 均值 mean
  • 离差 [d1,d2,…,dn], di = si-mean
  • 离差方 [q1,q2,…,qn], qi= di^2
  • 总体方差: p = (q1+q2+…+qn)/n
  • 总体标准差:std = sqrt(p)

  • 样本方差: p = (q1+q2+…+qn)/(n-1)
  • 样本标准差:std = sqrt(p)

numpy.var(arr): 计算总体方差
numpy.std(arr): 计算总体标准差

  • 差分np.diff(x , lag = ,differences = )
    一阶差分就是离散函数中连续相邻两项之差。当自变量从x变到x+1时,函数y=y(x)的改变量∆yx=y(x+1)-y(x),(x=0,1,2,……)称为函数 y(x)在点x的一阶差分,记为∆y(x)=y(x+1)-y(x),(x=0,1,2,……)。
    二阶差分
参数 描述
x 变量名
lag 差分的步长,不特意指定,系统默认lag =1
differences 差分次数,不特意指定,系统默认differences=1
1阶差分 diff(x)
2阶差分 diff(x,log=1, differences=2)
k阶差分 diff(x,1,k)
d步差分 diff(x,d,1) 根据diff函数的参数定义,如果差分命令写成diff(x,d,k),意思是进行k次d步差分。

这里写图片描述

百分比收益率和对数收益率:
这里写图片描述

def auto_returns(closing_prices):
    # 一阶方差
    diff_price = np.diff(closing_prices)            # 计算一阶差分 (当天收盘价 - 上一天收盘价)
    # 收益率    a[:-1]: 不包含a数组中的最后一个元素
    returns = diff_price / closing_prices[:-1]      # 收益率 = 一阶差分 / 上一天收盘价 
    # 收益率标准差
    returns_std = np.std(returns)                   #  收益率标准差

    # 对数收益率定义: log_retruns = log(s2/s1), log或ln都可
    # 收盘价取对数
    log_prices = np.log(closing_prices)   
    # 对数差分 = 对数收益率
    log_returns = np.diff(log_prices)
    # 对数收益标准差
    log_returns_std = np.std(log_returns)
    return returns_std, log_returns_std

举例:

import os
import sys
import numpy as np
import matplotlib.pyplot as plt 
import matplotlib.dates as md
import platform                 # pltform模块
import datetime as dt

# 解析日期函数
def dmy2ymd(dmy):
    return (dt.datetime.strptime(
        str(dmy, encoding = 'utf-8'), '%d-%m-%Y').date() - dt.date.min).days
    # 返回的是时间差,距离最原始时间点的天数 datetime.timedelta.days
    # str(dmy, encoding = 'utf-8'): 构造str对象的同时可以指定字符编码
    # 将中文window默认dbcs(双字节字符集)字符编码的gb2312字符串转化为unicode字符串(utf-8)

# 定义读取文件的函数
def read_data(filename):
    times, close_price,volumes = np.loadtxt(
        filename, delimiter = ',', usecols = (1,6,7), unpack = True,
        dtype='f8,f8,f8',converters = {1:dmy2ymd})  
    return times, close_price,volumes
    # M8[D] D表示日期精度以天为单位

# 算数平均值
def auto_mean(close_price):
    mean = np.mean(close_price)
    return mean

# 加权平均值
def auto_vwap(close_price,volumes):
    vwap = np.average(close_price, weights=volumes)
    return vwap

# 加权平均值
def auto_twap(times, close_price):
    twap = np.average(close_price, weights=times)
    return twap

# 手动计算
def manu_twap(times, close_price):
    twp, tv = 0., 0.
    for time, c_price in zip(times, close_price):
        twp += c_price * time
        tt += time
    twap = twp / tt
    return twap

# 定义主函数
def main(argc, argv, envp):
    # 导入文件
    times, close_price, volumes = read_data('aapl.csv')
    print(auto_mean(close_price))
    print(auto_vwap(close_price, volumes))
    print(auto_twap(times, close_price))
    return 0

# 调用主函数
if __name__ == '__main__':
    sys.exit(main(len(sys.argv),sys.argv,os.environ))

猜你喜欢

转载自blog.csdn.net/weixin_40040404/article/details/80792098