基于Numpy的统计分析



文件的读写(savetxt(写))、(loadtxt(读))

 
    
  1. import numpy as np
  2. # a=np.eye(6)
  3. # np.savetxt('lianxi.txt',a,fmt='%d')
  4. # b=np.loadtxt('lianxi.txt')
  5. # print(b)

image.png-65.7kB

数组的计算(axis=0,代表操作行,axis=1,代表操作列)

删除数据

 
    
  1. # b=np.arange(12).reshape(3,4)
  2. # b1=np.delete(b,0,axis=0) #数组元素的计算axis=0,代表操作行,axis=1,代表操作列
  3. # print(b1)

计算加权平均数(average)

 
    
  1. 加权平均数的计算(average
  2. np.average(求那一列,weights=将什么做为权重)

计算算数平均值、最大最小值、极差、中位数、方差

 
    
  1. # b=np.arange(12).reshape(3,4)
  2. # b1=np.delete(b,0,axis=0) #数组元素的计算axis=0,代表操作行,axis=1,代表操作列
  3. # print(b1)
  4. #加权平均数
  5. # b1,b2,b3=np.loadtxt('data.csv',delimiter=',',usecols=(5,6,7),unpack=True)
  6. # print(b2)
  7. # print(b3)
  8. # b4=np.average(b2,weights=b3)
  9. # b5=np.average(b2)
  10. # print(b4)
  11. # b6=np.mean(b2) #算数平均数
  12. # print(b6)
  13. # print(b5)
  14. # b7=max(b2) #最大
  15. # b8=min(b2) #最小
  16. # print(b8)
  17. # print(b7)
  18. # b9=np.ptp(b2) #极差
  19. # print(b9)
  20. #
  21. # c1=np.median(b2) #中位数
  22. # print(c1)
  23. #
  24. # c2=np.var(b2) #计算方差,方差越大波动越大
  25. # c3=np.var(b1)
  26. # print(c3)
  27. # print(c2)

计算股价收益率、年波动率、月波动率
image.png-98.3kB

计算简单收益率、标准差

 
    
  1. #简单收益率
  2. # syl=np.diff(b2)/b2[:-1]
  3. # print(syl)
  4. #标准差
  5. # bzc=np.std(syl)
  6. # print(bzc)

计算对数收益率(先用log函数得到每一个收盘价的对数)

 
    
  1. #对数收益率利用log函数获取每天收盘价的对数
  2. # dssyl=np.diff(np.log(b2))
  3. # print(dssyl)

获取收益率的正值

 
    
  1. #获取收益率为正值的值所对应的下标
  2. # zsyl=np.where(dssyl>0)
  3. # print(zsyl)

股票的年波动率、月波动率
image.png-73.2kB

 
    
  1. #计算年波动率(年波动率等于对数收益率的标准差除以其均值,在除以交易日倒数的平方根,通常交易日为252天)
  2. # nbdl=np.std(dssyl)/np.mean(dssyl)/np.sqrt(1/252)
  3. # print(nbdl)
  4. #计算月波动率
  5. # ybdl=np.std(dssyl)/np.mean(dssyl)/np.sqrt(1/12)
  6. # print(ybdl)

其他常用函数

求数组内元素的乘积(prod)(cumprod)、求和(sum)

 
    
  1. #数组的计算
  2. a=np.arange(1,21)
  3. print(a)
  4. a=np.cumprod(a)
  5. print(a)
  6. b=np.sum(a) #求和
  7. print(b)
  8. 结果:
  9. [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]
  10. [ 1 2 6 24 120 720
  11. 5040 40320 362880 3628800 39916800 479001600
  12. 1932053504 1278945280 2004310016 2004189184 -288522240 -898433024
  13. 109641728 -2102132736]
  14. 268040729

数组的修剪(clip)
image.png-96.2kB

数组的压缩
image.png-87.2kB

日期处理函数

 
    
  1. #时间日期函数(datetime)
  2. # from datetime import datetime
  3. # shijian=datetime.strptime('2017-12-31T10:53:49.875z','%Y-%m-%dT%H:%M:%S.%fZ')
  4. # print(shijian)
  5. #获取年月日
  6. # data1=shijian.date()
  7. # print(data1)
  8. #可以分别获取年、月、日
  9. # print(shijian.day)
  10. # print(shijian.month)
  11. # print(shijian.year)
  12. #也可分别获取时、分、秒
  13. # print(shijian.hour)
  14. # print(shijian.minute)
  15. # print(shijian.second)

案例分析

image.png-34.4kB
image.png-38.8kB
image.png-54.5kB
image.png-15.3kB
image.png-54.6kB
image.png-21.4kB

 
    
  1. import numpy as np
  2. from datetime import datetime
  3. #获取当前日期的星期几
  4. def datestr2num(s):
  5. return datetime.strptime(s.decode('ascii'), "%d-%m-%Y").date().weekday()
  6. dates,close=np.loadtxt('./excel/data.csv', delimiter=',', usecols=(1,6), converters={1:datestr2num}, unpack=True)
  7. print(dates)
  8. averages=np.zeros(5)
  9. for i in range(5):
  10. #获取当天所对应的收盘价
  11. xiabiao=np.where(i==dates)
  12. spj=np.take(close,xiabiao)
  13. avg=np.mean(spj)
  14. averages[i]=avg
  15. print("周",str(i+1)," 收盘价:",spj," 平均价为:",avg)
  16. #获取评价收盘价,最高是星期几,最低又是星期几
  17. print(averages)
  18. d1=np.argmax(averages)
  19. print(d1)
  20. d2=np.argmin(averages)
  21. print(d2)

作业

image.png-80.9kB

 
    
  1. import numpy as np
  2. a=np.array([[100000,1,20000,1],[10000,15,11000,20],[7500,20,9000,15]])
  3. print(a)
  4. #A公司的薪资
  5. a1=a[:,0]
  6. #A公司所对应人数
  7. a2=a[:,1]
  8. #A公司的薪资
  9. a3=a[:,2]
  10. #A公司所对应人数
  11. a4=a[:,3]
  12. print(a1)
  13. print(a2)
  14. print(a3)
  15. print(a4)
  16. #A公司以人数为权重计算工资的平均值
  17. b1=np.average(a1,weights=a2)
  18. print(b1)
  19. #B公司以人数为权重计算工资的平均值
  20. b2=np.average(a3,weights=a4)
  21. print(b2)
  22. #A公司薪资的中位数7500
  23. #B公司薪资的中位数11000
  24. #A公司加权平均数相对较高,是因为经理的工资占列很大的权重,拉高列平均工资
  25. #B公司工资的中位数和众数较高相交之下,会更适合

猜你喜欢

转载自blog.csdn.net/weixin_42199174/article/details/80911522