【Python】【课程笔记】金融数据分析(一)

本文是课程《金融数据分析》的学习笔记(一),该系列笔记分为基础篇、Numpy、Pandas和Matplotlib等,本系列用于对知识点总结和代码练习,Q&A为问题及解决方案,参考书籍为《利用Python进行数据分析》。

往期回顾:

博文内容
【Python】【课程笔记】金融数据分析(一)Python基础、Numpy
【Python】【课程笔记】金融数据分析(二)Pandas

前言:Python基础

1、python基本元素:数字、字符串和变量
类型转换:int()、float()、str()
(1)使用[start: end: step]分片
[start: end: step] 从start 提取到 end-1, 每step个字符提取一个
(2)使用split()分割
(3)使用join()合并

2、python容器:列表、元组、字典、集合

  • 列表
    (1)切片提取元素
    (2)使用append()添加元素至末尾
    (3)使用extend()或+=合并列表
    (4)使用insert()在指定为止插入元素
    (5)使用del 删除指定位置的元素
    (6)使用pop()获取并删除指定位置的元素
    在这里插入图片描述
    (7)使用index()查询具有特定值的元素位置
    在这里插入图片描述
    (8)使用in判断值是否存在
    在这里插入图片描述
    (9)使用count()记录特定值出现的次数
    (10)使用sort()重新排列元素
    列表方法 sort() 会对原列表进行排序,改变原列表的内容
    通用函数 sorted() 则会返回排好序的列表副本,原列表内容不变
    (11)使用 = 赋值,使用copy()复制

  • 元组:无法进行增加、删除和修改操作

  • 字典:其中元素的顺序无关紧要,每个元素拥有与之对应的互不相同的键(key),需要通过键来访问元素,键通常为字符串。
    在这里插入图片描述
    (1)使用[key]添加或修改元素,如:dict['A']=a
    (2)使用update()合并字典
    (3)使用del删除具有指定键的元素
    (4)使用keys()获取所有键
    (5)使用values()获取所有值
    在这里插入图片描述

  • 集合:像“舍弃了值,仅剩下键的字典”,键与键之间不允许重复

3、python外壳:代码结构
(1)使用if,elif和else进行比较
(2)使用while进行循环
在这里插入图片描述
在这里插入图片描述
(3)使用for迭代
在这里插入图片描述
⭐⭐(4)推导式
在这里插入图片描述
在这里插入图片描述
⭐⭐(5)函数
在这里插入图片描述
lambda:匿名函数
在这里插入图片描述
4、迭代器[1]
iter()next():方法
IteratorIterable:迭代器、可迭代的对象
isinstance() :判断一个对象是否是一个已知的类型(语法)
例:先检查对象是否是一个列表,如果不是将它转换未列表:

if not isinstance(x, list) and isiterable(x):
	x = list(x)

第一部分:Numpy(数组)

1、向量的加法
例:输入n,输出: n 2 + n 3 n^2 + n^3 n2+n3

def numpysum(n):
    a = np.arange(n)**2
    b = np.arange(n)**3
    return a+b

numpysum(10)

2、数组对象np.arange()np.array()多维数组

a =np.arange(5)
b = np.array([np.arange(2), np.arange(2)])

3、数组属性[1]b.ndimb.shapeb.size
在这里插入图片描述

4、取数、索引切片

  • 使用[start: end: step]分片
    [start: end: step] 从start 提取到 end-1, 每step个字符提取一个
    在这里插入图片描述
    (1)一维数组:[]与冒号的搭配
    取其中一部分,隔几个数取,逆序取数
    在这里插入图片描述
    (2)多维数组:[]与冒号、逗号的搭配

5、改变数组的维度

  • 将多维数组降为一维,默认是行序优先,传入’F’参数表示列序优先[2]b.ravel()b.flatten()
    区别:flatten()返回的是拷贝。
  • 改变维数:b.reshape()
    用法:当参数只有一个-1时表示将数组降为一维。
  • 改变维数,会改变原数组[3]np.resize(b,())
  • 转置:b.transpose()
b = np.arange(24).reshape(2,3,4)
b.reshape(2,12)
np.resize(b,(2,12))

在这里插入图片描述
6、数组的组合

  • 元素:使用join()合并
    在这里插入图片描述

  • 数组:堆叠[4]
    np.hstack((a,b)):在第一维进行堆叠(即最外层的方括号)
    np.vstack((a,b)):将数组在第二维进行堆叠(即第二层方括号)
    np.dstack((a,b)):将数组在第三维进行堆叠(即第三层方括号)

  • np.concatenate((a,b), axis=1)[5]:axis=1表示对应行的数组进行拼接,默认axis=0(按列)。
    在这里插入图片描述
    在这里插入图片描述
    7、数组的分割

  • 使用split()分割
    在这里插入图片描述

  • np.split(a,3,axis=1)np.split(a,3,axis=0)
    在这里插入图片描述

  • np.hsplit(c,3)np.vsplit(c,3)np.dsplit(c,3)
    在这里插入图片描述
    在这里插入图片描述


案例:股价

  • 数据集:data.csv
    在这里插入图片描述

1、计算成交量价权平均价格

  • 函数:
    (1)np.loadtxt()
    参数:usecols:选取数据的列。
    (2)np.average()
    参数:weights:加权重

2、计算时间加权平均价格

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

# 成交量加权
vwap = np.average(c,weights=v)
print ("VWAP=", vwap)
print ("mean=", np.mean(c))

# 时间加权
t = np.arange(len(c))
twap = np.average(c,weights=t)
print("TWAP=",twap)

3、统计量

  • 函数
    (1)np.max()、np.median()、np.var()、np.std():最大值、中位数、方差、标准差
    (2)np.msort():数组按第一个轴排序,返回排序后的数组副本,等价于 np.sort(a, axis=0)。
#中位数
sorted_close = np.msort(c)
N = len(c)
print ("middle = ", sorted_close[np.int((N-1)/2)])

4、股票收益率

  • 收益率:returns = np.diff(c)/c[:-1]
  • 对数收益率:logreturns = np.diff(np.log(c))
  • 年化波动率:annual_volatility = np.std(logreturns)/np.sqrt(1.0/242)

5、简单移动平均线、指数移动平均线

  • 等权表示:weights = np.ones(N)/N

  • 卷积函数[6]numpy.convolve(a, v, mode=‘full')
    参数:
    a:(N,)输入的一维数组
    v:(M,)输入的第二个一维数组
    mode:{‘full’, ‘valid’, ‘same’}参数可选
    ①‘full’ 默认值,返回每一个卷积值,长度是N+M-1,在卷积的边缘处,信号不重叠,存在边际效应。
    ②‘same’ 返回的数组长度为max(M, N),边际效应依旧存在。
    ③‘valid’  返回的数组长度为max(M,N)-min(M,N)+1,此时返回的是完全重叠的点。边缘的点无效。

  • 创建等差数组[7]np.arange([start, ]stop, [step, ]dtype=None)
    用法:指定开始值,终值和步长生成等差数列的一维数组。
    参数:
    start:可忽略不写,默认从0开始;起始值
    stop:结束值;生成的元素不包括结束值
    step:可忽略不写,默认步长为1;步长
    dtype:默认为None,设置显示元素的数据类型

  • 创建等差数列[8]numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
    用法:指定开始值,终值和元素个数生成等差数列的一维数组。

#简单移动平均线
N=20
weights = np.ones(N)/N
sma = np.convolve(weights,c)[N-1:-N+1] 
#从第N-1个数,到倒数N-1个数为止

#指数移动平均线
N=5
weights = np.exp(np.linspace(-1.,0.,N))
weights = weights/weights.sum()
ema = np.convolve(weights,c)[N-1:-N+1]

import matplotlib.pyplot as plt
t=np.arange(N-1, len(c))
plt.plot(t,c[N-1:], lw=1.0)
plt.plot(t,sma,lw=2.0)
plt.show()

在这里插入图片描述
在这里插入图片描述

  • 11
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值