day30 金融量化分析
金融知识:股票的组成
余额宝收益下跌:货币政策宽松了。
MA5:从它开始及5天前的收盘价的平均值
金叉买入,死叉卖出
量化投资与python:python语言
量化投资第三方相关模块:
NumPy:数组批量计算
pandas:表计算与数据分析
Matplotlib:图表绘制
三个模块的学习:
anaconda下载,安装anaconda3 5.3.1(64-bit)
下一步安装即可,安装后有anaconda prompt、anaconda navigator
activate base进入环境
anaconda自带python,安装时可以不勾选path,否则打开的就是python中的anaconda
安装后使用:Jupiter notebook,在help---keyboard shortcuts中可查看快捷键
一、numpy
import numpy as np
random.uniform(100,200) 100-200之间的随机小数
例子1:
1.将数组中的数都*r,一行代码实现
[r*a for a in li]
list(map(lambda x: x*r,li))
np实现:
arr = np.array(li)
arr*r
例子2:
p = [random.uniform(10,20) for _ in range(1000)]
n = [random.randint(1,10) for _ in range(1000)]
s = 0
for a,b in zip(p,n):
s += a*b
s
np实现:
arr_p = np.array(p)
arr_n = np.array(n)
(arr_p * arr_n).sum()
np优点:速度快,省内存
shape属性常用--数组的维度大小
数据类型常用整型和浮点型:
0看作是整数,4个字节,表示(-2 ** 31, 2**31-1),共2**32个数
int32大概是21亿左右;;溢出会变为0
astype可以转类型:arr.astype('float') 知道小数和整数互相转换即可
arange()步长可以是小数
np.zeros((2,3),dtype='int') 创建一个2行3列的数组,数值是int类型的全0,默认dtype是小数
np.empty()
数组的转换:np.arange(15).reshape(3,5)
np.arange(15)[:-1].reshape(2,7)
np.arange(60).reshape(-1,5,4) -1位置随意
8:50-
布尔型索引
arr[1,2] 第一行,第二列,下标从0开始
arr[:,2] 行都要,取第二列
"# 二维数组的行索引和列索引可以互相搭配
",
"# 例外:都是花式索引或者布尔型索引不行
",
可以这样:"arr[[0,2],:][:,[1,3,4]]"
ceil向上, floor向下, rint四舍五入, trunc向零取整
方差 每一数与平均数的差取平方再求和
std= aqrt(var) 标准差=方差开根号
np.random.randint(3,10,3) 随机生成3个3-10的随机整数
np.random.randint(3,10,(3,5)) 随机生成3行5列的3-10的随机整数
重点:四个取整和两个特殊值nan 、 inf
高数、线性代数、离散数学
二、pandas--最重要
具备对其功能的数据结构DataFrame、Series
Series是一种类似于一位数组的对象,由一组数据和一组与之相关的数据标签(索引)组成。
支持数组的特性(语法、函数及方法)
import pandas as pd
sr = pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])
sr[2:3] # c 3
# sr['b':'c'] 前后都包
标签是整数,取标签对应的数
loc属性 以标签解释
iloc属性 以下标解释
数据对齐:按照标签来相加,不存在的相加显示nan(不存在默认为缺失值)
nan的类型为float,series数据类型一致,所以整数和也是float
将缺失值设为0 :sr1.add(sr2, fill_value=0)
处理缺失数据:
过滤缺失数据:sr.dropna() 或 sr[data.notnull()]
填充缺失数据:fillna(0)
DataFrame:二维的数据结构
自己创建pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]}) 了解即可
主要是从文件中读取,例如:一般是 csv
文件打不开,可以改为zip,就可以打开了,数据在worksheets文件夹中的sheet1.xml中
csv文件读取与写入:
df = pd.read_csv('601318.csv')
df.read_csv('filename.csv') 读
df.to_csv('new.csv') 写
第一行默认解释成列索引,默认生成从0开始的行索引!
array的dtype=object,因为每一列的值不一致。
df.index
切片和索引:第一个表示行
方法1:两个中括号,先取列再取行。 df['A'][0]
方法2(推荐):使用loc/iloc属性,一个中括号,逗号隔开,先取行再取列。
loc属性:解释为标签
iloc属性:解释为下标
先去列再取行或者df.loc[1,'open] df.iloc[1,1]
赋值df.iloc[1,1]=12
大于20的数都变为0 注意不取字符串类型的值,否则会报错
df2 = df.loc[:,'open':'low'].copy()
df2[df2>20] = 0
df2
DataFrame数据对齐
设置fill_value=0,行列都存在则进行相加
缺失数据:填充fillna(0) 扔掉dropna
dropna(how='all')行列有数据就留下,默认为any,有缺失值就整行或列丢掉
axis=1,换轴,原本是删一行,变为删一列
skipna=False跳过缺失值
ascending=False 降序
时间对象
timedelta时间差值
to_pydatetime()转换成python中datetime中的格式
做日期报表:# pd.DataFrame(np.nan, index=pd.date_range('2019-1-1', '2019-12-31'), columns=['张三','李四','王五']).to_csv('date.csv')
产生时间对象数组:date_range
pd.date_range('2019-1-1', '2019-12-31',freq='MS') 每个月初生成一条,freq='M'每个月末生成一条
3D:3天一条 SM:半个月 W-FRI :每周五 B:周一到周五
时间序列:DatetimeIndex对象类型,可以进行快速的切片
补充:df.resample('3D').mean() 每3天取平均
每月第一天 df.resample('M').first()
统计学会有专门分支讲解,我们学习了解目前的就好。
文件处理:
1.pd.read_csv('601318.csv'),默认把第一行解释为表头
pd.read_csv('601318.csv',header=None) 指定文件无列名
行索引自己生成,index_col 指定某列作为索引,就是普通的index
parse_dates=True 指定某些列是否被解析为日期,布尔值或列表,此时日期就是datetimeindex类型
sep='s+'指定分隔符为空格,这样可忽略数据之间的空格
有时可能遇到一个字段(eg:None)没有解析整个列数据类型都改变的情况,需要指定缺失值。
na_values 指定某些字符串表示缺失值 ,na_values=['None','<empty>'],这样会把None,<empty>解析为NaN
float_format='%.3f' 保留小数点后3位
index=False 不输出行索引一列
columns=['open','low'] 只导出指定的两列
na_rep='NaN'
Tushare是一个免费、开源的python财经数据接口包。(国内的)
需要安装:deactivate
activate base
pip install tushare
安装后可以import使用 import tushare as ts
"ts.get_k_data('601318',start='1980-1-1',end='2018-12-1')"获取股票数据
小练习:
1手:100股
定投:几年之后很可能赚钱!
day29 ok!
下周;画图及策略----视频??