• 利用tushare进行对兴业银行股价的爬取,并使用numpy进行分析


    import sys
    import tushare as ts
    import numpy as np
    data=ts.get_h_data('601066')
    print(data)
    #读出兴业银行7列数据
    date   open    high close low     volume      amount    
    data.to_csv('E:/csv statistic/day/601066.csv')  把读取的股票数据存入某个内存空间中
    #开始读某列数据

    c,v=np.loadtxt('E:/csv statistic/day/601066.csv', skiprows=1,delimiter=',',usecols=(3,5),unpack=True)#收盘价,交易量
    vwap=np.average(c,weights=v)#成交量加权平均值,
    print('vwap=',vwap)
    vwap= 9.63994147552952
    print(np.mean(c))
    9.0965625

    #计算时间加权平均值
    t=np.arange(len(c))
    print(np.average(c,weights=t))
    9.534940476190476

    #寻找最大值和最小值
    h,l=np.loadtxt('E:/csv statistic/day/601066.csv', skiprows=1,delimiter=',',usecols=(2,4),unpack=True)
    print(np.max(h))
    11.98
    print(np.min(l))
    6.5

    #计算中程数和极差
    print(np.max(h)+np.min(l)/2)#计算中程数
    print(np.ptp(h))#计算最大值和最小值的差值
    print(np.ptp(l))#计算交易量化的差值
    15.254999999999999
    4.19
    4.92
    #统计分析
    c=np.loadtxt('E:/csv statistic/day/601066.csv', skiprows=1,delimiter=',',usecols=(3,),unpack=Trueprint(np.median(c))#中间数
    8.850000000000001
    print('sorted:',np.msort(c))#从小到大排列
    sorted: [ 7.77 7.83 7.87 7.92 7.95 8. 8.06 8.15 8.17 8.19 8.2 8.2 8.23  8.27  8.28  8.32  8.32  8.35  8.36  8.36  8.36  8.36 
    8.48 8.5
    8.53 8.53 8.54 8.55 8.61 8.61 8.64 8.82 8.88 9.09 9.15 9.37 9.38 9.38 9.39 9.45 9.45 9.48 9.52 9.67 9.7 9.73 9.8 9.83
    9.86 9.91 9.93 10.06 10.23 10.27 10.31 10.33 10.33 10.41 10.42 10.56 10.8 11.09 11.46 11.85]
    print('方差:',np.var(c))
    方差: 0.9610756835937502
    print('手动计算方差:',np.mean((c-c.mean())**2))
    手动计算方差: 0.9610756835937502

    #股票收益率的计算
    c=np.loadtxt('E:/csv statistic/day/601066.csv', skiprows=1,delimiter=',',usecols=(3,),unpack=True)
    returns=np.diff(c)/c[:-1] #diff计算差分,总体是求股票收益率
    print(np.std(returns)) # 求标准差
    log_returns=np.diff(np.log(c)) #股票对数收益率
    print(log_returns)
    posretindices=np.where(returns>0)#股票收益率大于0的那几天
    print(posretindices)
    ann_vol=np.std(log_returns)/np.mean(log_returns)#日收益率
    print(ann_vol)
    ann_vol=ann_vol/np.sqrt(1./252.)#年收益率
    print(ann_vol)
    print(ann_vol*np.sqrt(1./12.))#月收益率

    #定义一个 把日期转换为数字的函数
    from datetime import datetime
    def date2num(s):
    return datetime.strptime(s,'%Y-%m-%d').date().weekday()
    #读取收盘价
    close=np.loadtxt('E:/csv statistic/day/601066.csv', skiprows=1,delimiter=',',usecols=(3,),unpack=True)
    #读取日期
    dates=np.loadtxt('E:/csv statistic/day/601066.csv', skiprows=1,delimiter=',',usecols=(0,),unpack=True,dtype=bytes).astype(str)
    #读取的str数据转换为 数字
    for i in range (dates.size):
    dates[i]=date2num(dates[i])
    dates=dates.astype(np.int8)
    print(dates.dtype)
    print(dates)
    averages = np.zeros(5)  # 定义一个空数组
    # 依次获取不同天的索引,然后根据索引求得close(收盘价)数组中所有的对应值,计算平均值,把平均值加入到averages数组中
    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) # 计算周每日的收盘价平均值的最大值
    np.argmax(averages) # 获取周每日的收盘价平均值的最大值是哪一天
    bottom = np.min(averages) # 计算周每日的收盘价平均值的最小值
    np.argmin(averages) # 获取周每日的收盘价平均值的最小值是哪一天
     



     
     
  • 相关阅读:
    数组与列表访问某一列的方法不同
    python 切片
    mapreduce统计数据库中的单词个数
    Call From s150/192.168.109.150 to 0.0.0.0:10020 failed on connection exception:
    message from server: "Host 'XXXX' is not allowed to connect to this MySQL server"
    Hadoop格式化namenode
    构建FP-growth算法高效发现频繁项集
    TypeError: '
    矩阵与列表取出行(左开右闭)
    2.nohup和&后台运行,进程查看及终止
  • 原文地址:https://www.cnblogs.com/ConnorShip/p/9667473.html
Copyright © 2020-2023  润新知