python 金融应用(四)金融时间序列分析基础
1.1.创建DataFrame
df=pd.DataFrame(list(range(10,50,10)),columns=['num'],index=['a','b','c','d'])
df
Out[6]:
num
a 10
b 20
c 30
d 40
1.2 标签和索引
1.2.1行和列的标签
df.index #行标签
Out[8]: Index(['a', 'b', 'c', 'd'], dtype='object') df.columns #列标签
Out[9]: Index(['num'], dtype='object')
1.2..2 索引
ix可以索引某特定的行,也可以以列表的形式去索引
df.ix['c']
Out[10]:
num 30
Name: c, dtype: int64 df.ix[['a','b']]
Out[11]:
num
a 10
b 20
1.2.3 切片
df.ix[df.index[1:3]]
Out[12]:
num
b 20
c 30
1.2.4 apply函数
df.apply(lambda x:x**2)
Out[13]:
num
a 100
b 400
c 900
d 1600
将lambda函数应用到每一个数值
1.3 维度的扩充
1.3.1 列的扩充
df['fla']=[x for x in np.linspace(1.5,4.5,4)]
df
Out[15]:
num fla
a 10 1.5
b 20 2.5
c 30 3.5
d 40 4.5
1.3.2 行的扩充
1.3.2.1. 可以取整个DataFrame 对象来定义一个新列。在这种情况下,索引向动分配:
df['names'] = pd.DataFrame(['Yves' , 'Guido' , 'Felix' , 'Francesc' ],
index=['d' , 'a' , 'b' , 'c'])
df
Out[17]:
num fla names
a 10 1.5 Guido
b 20 2.5 Felix
c 30 3.5 Francesc
d 40 4.5 Yves
1.3.2.2 append函数的追加一行
df.append( {'num':80, 'fla':0.5, 'names':'Tom'},ignore_index=True)
Out[28]:
num fla names
0 10 1.5 Guido
1 20 2.5 Felix
2 30 3.5 Francesc
3 40 4.5 Yves
4 80 0.5 Tom
1.3.2.4 join方法
df.join(pd.DataFrame([ 4, 9, 16, 25] ,index=['a' , 'b' , 'c' , 'd'] ,columns=['sq' ,]))
Out[34]:
num fla names sq
a 10 1.5 Guido 4
b 20 2.5 Felix 9
c 30 3.5 Francesc 16
d 40 4.5 Yves 25
也可以用(how='outer')取并集
1.4 均值和标准差
df[['num','fla']].mean()
Out[51]:
num 25.0
fla 3.0
dtype: float64 df[['num','fla']].std()
Out[52]:
num 12.909944
fla 1.290994
dtype: float64
1.5 日期的添加
生成一组数据,并且转化为DataFrame
a = np.random.standard_normal((9, 4))
a.round(6) df=pd.DataFrame(a)
df
Out[79]:
0 1 2 3
0 0.718177 -0.933298 1.283205 -0.276078
1 0.385584 -0.467157 1.393199 -0.976146
2 -0.199838 0.440602 -0.350353 1.164440
3 1.077226 -0.327228 1.054912 0.142114
4 0.551220 0.782386 -1.383381 -0.116057
5 -0.842587 -0.361619 -0.071588 -0.238011
6 -0.853783 0.038920 0.746881 1.383499
7 -0.031835 1.323102 0.675193 -0.287660
8 -0.515417 -0.184136 -0.897797 1.059599
添加列名:
df.columns = ['No1' , 'No2' , 'No3' , 'No4']
df
Out[80]:
No1 No2 No3 No4
0 0.718177 -0.933298 1.283205 -0.276078
1 0.385584 -0.467157 1.393199 -0.976146
2 -0.199838 0.440602 -0.350353 1.164440
3 1.077226 -0.327228 1.054912 0.142114
4 0.551220 0.782386 -1.383381 -0.116057
5 -0.842587 -0.361619 -0.071588 -0.238011
6 -0.853783 0.038920 0.746881 1.383499
7 -0.031835 1.323102 0.675193 -0.287660
8 -0.515417 -0.184136 -0.897797 1.059599
提取某一元素
df['No2'][3]
Out[81]: -0.3272278378978686
添加日期的date_range函数
首先生成一列日期,并把它作为index添加
dates=pd.date_range('2018-01-01',periods=9,freq="M")
df.index=dates
df
No1 No2 No3 No4
2018-01-31 0.718177 -0.933298 1.283205 -0.276078
2018-02-28 0.385584 -0.467157 1.393199 -0.976146
2018-03-31 -0.199838 0.440602 -0.350353 1.164440
2018-04-30 1.077226 -0.327228 1.054912 0.142114
2018-05-31 0.551220 0.782386 -1.383381 -0.116057
2018-06-30 -0.842587 -0.361619 -0.071588 -0.238011
2018-07-31 -0.853783 0.038920 0.746881 1.383499
2018-08-31 -0.031835 1.323102 0.675193 -0.287660
2018-09-30 -0.515417 -0.184136 -0.897797 1.059599
date range 函数频率参数值
B: 交易口
C: 自定义交易日(武验性)
D: 日历日
w :每周
M :每月底
BM: 每月最后一个交易日
MS :月初
BMS :每月第一个交易日
Q :季度末
BQ :每季度最后一个交易日
QS :季度初
BQS: 每季度第一个交易日
A :每年底
BA :每年最后一个交易日
AS :每年初
BAS: 每年第一个交易日
H :每小时
T: 每分钟
S :每秒
1.6 基本分析
按列总和、平均值、累计总和、统计描述:
df.sum()
Out[87]:
No1 0.288746
No2 0.311574
No3 2.450272
No4 1.855700
dtype: float64 df.mean()
Out[88]:
No1 0.032083
No2 0.034619
No3 0.272252
No4 0.206189
dtype: float64 df.cumsum()
Out[89]:
No1 No2 No3 No4
2018-01-31 0.718177 -0.933298 1.283205 -0.276078
2018-02-28 1.103760 -1.400455 2.676405 -1.252224
2018-03-31 0.903922 -0.959853 2.326051 -0.087784
2018-04-30 1.981148 -1.287081 3.380963 0.054330
2018-05-31 2.532368 -0.504694 1.997583 -0.061727
2018-06-30 1.689780 -0.866313 1.925995 -0.299737
2018-07-31 0.835997 -0.827393 2.672876 1.083761
2018-08-31 0.804162 0.495710 3.348069 0.796101
2018-09-30 0.288746 0.311574 2.450272 1.855700 df.describe()
Out[90]:
No1 No2 No3 No4
count 9.000000 9.000000 9.000000 9.000000
mean 0.032083 0.034619 0.272252 0.206189
std 0.695067 0.698983 0.993399 0.807175
min -0.853783 -0.933298 -1.383381 -0.976146
25% -0.515417 -0.361619 -0.350353 -0.276078
50% -0.031835 -0.184136 0.675193 -0.116057
75% 0.551220 0.440602 1.054912 1.059599
max 1.077226 1.323102 1.393199 1.383499 np.sqrt(df)
__main__:1: RuntimeWarning: invalid value encountered in sqrt
Out[91]:
No1 No2 No3 No4
2018-01-31 0.847453 NaN 1.132787 NaN
2018-02-28 0.620954 NaN 1.180339 NaN
2018-03-31 NaN 0.663779 NaN 1.079092
2018-04-30 1.037895 NaN 1.027089 0.376980
2018-05-31 0.742442 0.884526 NaN NaN
2018-06-30 NaN NaN NaN NaN
2018-07-31 NaN 0.197281 0.864223 1.176222
2018-08-31 NaN 1.150262 0.821701 NaN
2018-09-30 NaN NaN NaN 1.029368
np.sqrt(df).sum()
__main__:1: RuntimeWarning: invalid value encountered in sqrt
Out[92]:
No1 3.248743
No2 2.895848
No3 5.026138
No4 3.661662
dtype: float64
1.7 绘图
import matplotlib.pyplot as plt df.cumsum().plot(lw=2.0)

plot函数具体描述


1.8 serises 类
type(df['No1'])
Out[96]: pandas.core.series.Series
series绘图
df['No1'].cumsum().plot(style='r',lw=2.)

1.9 groupby操作
pandas 抖备强大而灵活的分组功能, 工作方式类似于SQL 种的分组和I Microsoft Excel中的透视表。为了进行分组,我们添加一列,表示对应索引数据所属的季度:
df['Quarter']=['Q1','Q1','Q1','Q2','Q2','Q2','Q3','Q3','Q3']
df Out[97]:
No1 No2 No3 No4 Quarter
2018-01-31 0.718177 -0.933298 1.283205 -0.276078 Q1
2018-02-28 0.385584 -0.467157 1.393199 -0.976146 Q1
2018-03-31 -0.199838 0.440602 -0.350353 1.164440 Q1
2018-04-30 1.077226 -0.327228 1.054912 0.142114 Q2
2018-05-31 0.551220 0.782386 -1.383381 -0.116057 Q2
2018-06-30 -0.842587 -0.361619 -0.071588 -0.238011 Q2
2018-07-31 -0.853783 0.038920 0.746881 1.383499 Q3
2018-08-31 -0.031835 1.323102 0.675193 -0.287660 Q3
2018-09-30 -0.515417 -0.184136 -0.897797 1.059599 Q3
按季度进行分组:
groups=df.groupby('Quarter')
获取每个组的平均值( mean )、最大值( max ) 和组的大小( size )
groups.mean()
Out[100]:
No1 No2 No3 No4
Quarter
Q1 0.301307 -0.319951 0.775350 -0.029261
Q2 0.261953 0.031180 -0.133352 -0.070651
Q3 -0.467012 0.392629 0.174759 0.718479 groups.max()
Out[101]:
No1 No2 No3 No4
Quarter
Q1 0.718177 0.440602 1.393199 1.164440
Q2 1.077226 0.782386 1.054912 0.142114
Q3 -0.031835 1.323102 0.746881 1.383499 groups.min()
Out[102]:
No1 No2 No3 No4
Quarter
Q1 -0.199838 -0.933298 -0.350353 -0.976146
Q2 -0.842587 -0.361619 -1.383381 -0.238011
Q3 -0.853783 -0.184136 -0.897797 -0.287660 groups.size()
Out[103]:
Quarter
Q1 3
Q2 3
Q3 3
dtype: int64
还可以同时根据两列分组:
df['Odd_Even']=['Odd','Even','Odd','Even','Odd','Even','Odd','Even','Odd'] #添加一组 groups=df.groupby(['Quarter','Odd_Even'])
groups.mean()
Out[106]:
No1 No2 No3 No4
Quarter Odd_Even
Q1 Even 0.385584 -0.467157 1.393199 -0.976146
Odd 0.259169 -0.246348 0.466426 0.444181
Q2 Even 0.117319 -0.344423 0.491662 -0.047948
Odd 0.551220 0.782386 -1.383381 -0.116057
Q3 Even -0.031835 1.323102 0.675193 -0.287660
Odd -0.684600 -0.072608 -0.075458 1.221549 groups.max()
Out[107]:
No1 No2 No3 No4
Quarter Odd_Even
Q1 Even 0.385584 -0.467157 1.393199 -0.976146
Odd 0.718177 0.440602 1.283205 1.164440
Q2 Even 1.077226 -0.327228 1.054912 0.142114
Odd 0.551220 0.782386 -1.383381 -0.116057
Q3 Even -0.031835 1.323102 0.675193 -0.287660
Odd -0.515417 0.038920 0.746881 1.383499 groups.size()
Out[108]:
Quarter Odd_Even
Q1 Even 1
Odd 2
Q2 Even 2
Odd 1
Q3 Even 1
Odd 2
dtype: int64
python 金融应用(四)金融时间序列分析基础的更多相关文章
- python 生成器(四):生成器基础(四)标准库中的生成器函数
os.walk 这个函数在遍历目录树的过程中产出文件名,因此递归搜索文件系统像for 循环那样简单. 用于过滤的生成器函数 模块 函数 说明 itertools compress(it,sele ...
- R语言实现金融数据的时间序列分析及建模
R语言实现金融数据的时间序列分析及建模 一 移动平均 移动平均能消除数据中的季节变动和不规则变动.若序列中存在周期变动,则通常以周期为移动平均项数.移动平均法可以通过数据显示出数据长期趋势的变动 ...
- python时间序列分析
题记:毕业一年多天天coding,好久没写paper了.在这动荡的日子里,也希望写点东西让自己静一静.恰好前段时间用python做了一点时间序列方面的东西,有一丁点心得体会想和大家 ...
- Python 时间推进器-->在当前时间的基础上推前n天 | CST时间转化标准日期格式
由于公司任务紧迫,好久没有在园子里写自己的心得了,今天偷个闲发表点简单的代码块,在开源的时代贡献微薄力量.话不多说,直接上代码块: ]) m = ]) d = ]) the_date = dateti ...
- [python] 时间序列分析之ARIMA
1 时间序列与时间序列分析 在生产和科学研究中,对某一个或者一组变量 进行观察测量,将在一系列时刻 所得到的离散数字组成的序列集合,称之为时间序列. 时间序列分析是根据系统观察得到的时间序列数据, ...
- python学习第四讲,python基础语法之判断语句,循环语句
目录 python学习第四讲,python基础语法之判断语句,选择语句,循环语句 一丶判断语句 if 1.if 语法 2. if else 语法 3. if 进阶 if elif else 二丶运算符 ...
- 小白学 Python 爬虫(14):urllib 基础使用(四)
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- 时间序列分析工具箱——tidyquant
目录 时间序列分析工具箱--tidyquant tidyquant 的用途 加载包 tq_get:获得数据 从 Yahoo! Finance 获得股票数据 从 FRED 获得经济数据 使用 tq_tr ...
- SPSS时间序列分析
时间序列分析必须建立在预处理的基础上…… 今天看了一条新闻体会到了网络日志的重要性…… 指数平滑法(Exponential Smoothing,ES)是布朗(Robert G..Brown)所提出,布 ...
随机推荐
- UML简明使用
1.继承 空心三角+实线 2.实现接口 空心三角+虚线 3.关联 箭头+实线 4.聚合 空心菱形+实线+箭头 5.组合 实心菱形+实线+箭头 6.依赖 虚线+箭头 7.关联.聚合.组合.依赖的区别 关 ...
- java多线程与线程并发五:多个线程访问共享对象和数据的方式
本节的内容主要是对前面几节提到的线程间共享数据的方式做一个总结. 线程之间共享数据有以下几种方式: 1.如果每个线程执行的代码相同,可以使用同一个Runnable对象. 2.如果每个线程执行的代码不同 ...
- 力扣(LeetCode)计数质数 个人题解
统计所有小于非负整数 n 的质数的数量. 示例: 输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 . 一般方法,也就是一般人都会用的,将数从2到它本 ...
- KDevelop
ctags+vim还是太累了,还是使用IDE好,尤其是c++模板.KDevelop就不错,符号智能推导以及cmake项目管理和配置,还是挺好用的. Android端的ndk开发使用Android St ...
- opencv 2 Opencv数据结构与基本绘图
基础图像容器Mat Mat 是一个类,又两个数据部分组成:矩阵头(包含矩阵尺寸,存储方法,存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法不同,矩阵可以是不同的维数)的指针.矩阵头的尺 ...
- LLDB调试详解--逆向开发
前言 今天讲述在苹果日常开发中一个装逼神器LLDB,是Xcode内置的动态调试工具. 在iOS系统程序开发中,会经常需要代码调试的追踪, 最常用的也是LLDB(low level debugger) ...
- 新闻实时分析系统 Spark2.X环境准备、编译部署及运行
1.Spark概述 Spark 是一个用来实现快速而通用的集群计算的平台. 在速度方面, Spark 扩展了广泛使用的 MapReduce 计算模型,而且高效地支持更多计算模式,包括交互式查询和流处理 ...
- 【2018寒假集训 Day2】【动态规划】维修栅栏
维修栅栏 问题描述: 小z最近当上了农场主!不过,还没有来得及庆祝,一件棘手的问题就摆在了小z的面前.农场的栅栏,由于年久失修,出现了多处破损.栅栏是由n块木板组成的,每块木板可能已经损坏也可能没有损 ...
- 在Spring Security框架下JWT的实现细节原理
一.回顾JWT的授权及鉴权流程 在笔者的上一篇文章中,已经为大家介绍了JWT以及其结构及使用方法.其授权与鉴权流程浓缩为以下两句话 授权:使用可信用户信息(用户名密码.短信登录)换取带有签名的JWT令 ...
- 在vue中选中某个标签,并且对其属性进行操作
第一步:在标签中添加ref="111"属性 第二步:this.$refs.111.属性="" 此步骤是一111为标记选中了要操作的标签,通过点属性的方法,进 ...