python中金融包_量化投资&数据分析之常用的python包(附代码)

小伙伴们都知道python功能强大,在金融量化分析中运用广泛,python常用的数据分析包很多,下面先给大家简单列举一些(如果您刚开始学python觉得这东西很烦看不懂,那么请不要担心,直接忽视跳到第二节吧~因为您不会错过任何精彩内容~如果您是老司机,那么欢迎私戳讨论【微笑】):

一. 数据分析常用包

(1)NumPy:

NumPy是基于Python的科学计算的基础包,可用来存储和处理大型矩阵,提供了矩阵、线性代数、傅里叶变换和随机生成函数等解决方案。

(2)SciPy:

SciPy是基于NumPy的库,它提供了方便、快捷的N维数组操作。它包括统计、优化、整合、线性代数模块、傅里叶变换、信号和图像处理、常微分方程求解器等等。

(3)Statsmodels:

Statismodels是一个Python包,提供一些互补scipy统计计算的功能,包括描述性统计和统计模型估计和推断,主要用户统计建模和计量经济学。

(4)Pandas

Pandas 是基于NumPy 的一种工具,Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。

(5)TAlib:

TAlib是一个处理金融数据和技术分析的开放代码库。

(6)其他

networkx、Pillow 、Py 、Pytz、Requests 、Scipy、sympy 、Tables 、xlrd、xlwt等

二. NumPy

(1)ndarray数组基础

Pyhton 中用列表保存一组值,可将列表当成是数组使用。此外,Python 有 array 模快,但他不支持多维数组,无论是列表还是 array 模块都没有科学运算函数,不适合做矩阵等科学计算。因此,NumPy没有使用 Python 本身的数组机制,而是提供了ndarray 数组对象,该对象不断能方便的存取数组,而且拥有丰富的数组计算函数,比如向量的加法、减法、乘法等。使用 ndarray 数组,首先需要导入 Numpy 函数库,也可以直接导入该函数库。

创建数组是进行数组计算的先决条件,可以通过array()函数定义数组实例对象,其参数为Python 的序列对象。

文字描述太枯燥,我们来举个例子:

from numpy import *

import numpy as np

a=np.array([[1,2,4],[3,6,9]])

print(a)

结果是这样的:

[[1 2 4]

[3 6 9]]

(2)数组支持索引和切片

NumPy数组可按照列表的方式进行索引和切片,也可按如下方式访问数组中行、列与特定元素:

我们还是用上一个例子:

from numpy import *

import numpy as np

a=np.array([[1,2,4],[3,6,9]])

print(a)

print(a[:,1])

print(a[1,1])

结果如下:

[[1 2 4]

[3 6 9]]

[2 6]

6

三. Pandas

pandas包含高级的数据结构和精巧的工具,使得在Python中处理数据非常快速和简单。pandas建造在NumPy之上,它使得以NumPy为中心的应用很容易使用。我们首先导入库:

import pandas as pd

pandas主要包含三种数据结构:Series、DataFrame和Panel。

(1)Series

Series是一个一维的类似的数组对象,包含一个数组的数据(任何NumPy的数据类型)和一个与数组关联的数据标签,被叫做索引 。

Series创建

我们首先创建一个Series:

import pandas as pd

s=pd.Series([3,10000,10.8,'stock'])

print(s)

输出:

0 3

1 10000

2 10.8

3 stock

dtype: object

上例中左右两列即分别为索引index 和 values。因为传给构造器的是一个列表,所以 index 的值是从 0 起递增的整数,如果传入的是一个类字典的键值对结构,就会生成 index-value 对应的 Series;或者在初始化的时候以关键字参数显式指定一个 index 对象:

如:

s=pd.Series(data=[10.5,15.7,np.nan],index=['stockA','stockB','stockC'])

print(s)

print(s.data)

print(s.index)

print(s.values)

print(s[2]) # series也支持索引和切片

输出:

stockA 10.5

stockB 15.7

stockC NaN

dtype: float64

Index(['stockA', 'stockB', 'stockC'], dtype='object')

[ 10.5 15.7 nan]

nan

(2)DataFrame

一个DataFrame表示一个表格,类似电子表格的数据结构,包含一个经过排序的列表集,它们没一个都可以有不同的类型值(数字,字符串,布尔等等)。DataFrame有行和列的索引,它可以被看作是一个Series的字典(每个Series共享一个索引)。

DataFrame创建

创建DataFrame方法如下:

df=DataFrame(data=数据,index=索引,columns=列名)

例如,为创建一个索引是时间序列的DataFrame,首先创建一个时间序列:

dates=pd.date_range('2017-01-01',periods=3)

print(dates)

输出:

DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03'], dtype='datetime64[ns]', freq='D')

然后创建DataFrame:

df=pd.DataFrame(np.array([[10.5,15.7,11.2],[10.8,11.0,11.2],[9.4,10.2,9.8]]),index=dates,columns=['stockA','stockB','stockC'])

print(df)

输出:

stockA stockB stockC

2017-01-01 10.5 15.7 11.2

2017-01-02 10.8 11.0 11.2

2017-01-03 9.4 10.2 9.8

DataFrame也支持索引和切片:

print(df.ix[:2,:2])

print(df[['stockA','stockC']])

print(df[:2])

输出:

stockA stockB

2017-01-01 10.5 15.7

2017-01-02 10.8 11.0

stockA stockC

2017-01-01 10.5 11.2

2017-01-02 10.8 11.2

2017-01-03 9.4 9.8

stockA stockB stockC

2017-01-01 10.5 15.7 11.2

2017-01-02 10.8 11.0 11.2

支持排序和排名

s=pd.Series({'stockA':10.5,'stockB':15.7,'stockC':np.nan})

print(s.sort_values(ascending=False))

输出:

stockB 15.7

stockA 10.5

stockC NaN

dtype: float64

支持统计方法(Very important!):

如:

dates=pd.date_range('2017-01-01',periods=3)

print(dates)

df=pd.DataFrame(np.array([[11,12,13],[13,14,15],[12,13,15]]),index=dates,columns=['stockA','stockB','stockC'])

new_dates=pd.date_range('2017-01-01',periods=4)

print(df.sort_values('stockB'))

print(df.diff())

print(df.cumsum())

print(df.mean())

print(df.var())

print(df.std())

输出:

DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03'], dtype='datetime64[ns]', freq='D')

stockA stockB stockC

2017-01-01 11 12 13

2017-01-03 12 13 15

2017-01-02 13 14 15

stockA stockB stockC

2017-01-01 NaN NaN NaN

2017-01-02 2 2 2

2017-01-03 -1 -1 0

stockA stockB stockC

2017-01-01 11 12 13

2017-01-02 24 26 28

2017-01-03 36 39 43

stockA 12.000000

stockB 13.000000

stockC 14.333333

dtype: float64

stockA 1.000000

stockB 1.000000

stockC 1.333333

dtype: float64

stockA 1.000000

stockB 1.000000

stockC 1.154701

dtype: float64

码字码得手酸.....剩下的下次分享(微笑)

注:其中部分资料来源于量化金融平台Mindgo社区:

如果您觉得还不错,轻轻地帮宝宝点个赞吧~嘻嘻

你可能感兴趣的:(python中金融包)