数据分析常用的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包_量化投资数据分析之常用的python包(附代码)相关推荐
- 量化金融投资及其python应用_量化投资:用Python实现金融数据的获取与整理
小编说:数据可以说是量化投资的根本,一切投资策略都是建立在数据基础上的.本文以优矿网为例,带领大家用Python实现金融数据的获取与整理. 本文选自<Python与量化投资:从基础到实战> ...
- 我用Python做一个量化指数增强策略,爽了 !附代码!
这是邢不行第 84 期量化小讲堂的分享 作者 | 邢不行.密斯锌硒 A股是一个神奇的地方,它最大的特点就是多年不涨和永远的3000点. 正因如此,调侃A股的段子层出不穷. 甚至连中国男足这么烂的行业都 ...
- 同花顺python面试_量化投资面试集锦
2019年的秋招的尾声快到,来总结一下经历过的私募笔试和面试.一开始采取的是海投的形式,第一份是来自上海持赢投资的笔试题.二选一, NO.1熟悉现有量化回测框架的使用 对pywinauto库的使用 实 ...
- python 策略回测期货_量化投资实战教程(1)—基于backtrader的简单买入卖出策略
都说Python可以用于量化投资,但是很多人都不知道该怎么做,甚至觉得是非常高深的知识,其实并非如此,任何人都可以在只有一点Python的基础上回测一个简单的策略. Backtrader是一个基于Py ...
- 2015CDAS中国数据分析师行业峰会:R语言量化投资数据分析应用
跨界知识聚会系列文章,"知识是用来分享和传承的",各种会议.论坛.沙龙都是分享知识的绝佳场所.我也有幸作为演讲嘉宾参加了一些国内的大型会议,向大家展示我所做的一些成果.从听众到演讲 ...
- 我用Python爬取了难下载的电子教材(内附代码)
我用Python爬取了难下载的电子教材(内附代码) 第一次在CSDN上面分享经历,有点激动.本大二狗最近这段时间去不了学校又想看教材,不巧学习通上面的部分内容老师设置了不可下载啊.好在最近学习了一点P ...
- 量化投资数据分析之常用的python包(附代码)
小伙伴们都知道python功能强大,在金融量化分析中运用广泛,python常用的数据分析包很多,下面先给大家简单列举一些(如果您刚开始学python觉得这东西很烦看不懂,那么请不要担心,直接忽视跳到第 ...
- python处理金融数据_量化投资:用Python实现金融数据的获取与整理
小编说:数据可以说是量化投资的根本,一切投资策略都是建立在数据基础上的.本文以优矿网为例,带领大家用Python实现金融数据的获取与整理. 本文选自<Python与量化投资:从基础到实战> ...
- python量化自学书籍推荐_量化投资学习推荐的书籍都有哪些?
给大家简单推荐介绍3本书吧这些都是比较实用的,入门还是高手级别的都有. 1. 打开量化投资的黑箱 这本书的作者里什·纳兰(Rishi K. Narang)是华尔街顶级数量金融专家,资深对冲基金经理.& ...
最新文章
- django 1.8 官方文档翻译:2-5-9 条件表达式
- Python中range和xrange的区别
- Linux awk内部变量
- JAVA从下载到浏览器运行完整篇,写给lewis
- mysql删除以什么开头的数据_Mysql如何删除以“#sql-”开头的临时表
- NoSQL那些事--Redis
- 信息学奥赛一本通(1247:河中跳房子)
- 【C语言】在线OJ题 BC7-BC52-牛客网编程初学者入门训练
- 最简单的零成本创业模式
- Recordia for Mac - 音频无损录制工具「M1兼容」
- php app用户验证失败,无法验证app需要互联网连接以认证 建议更换登陆的AppleID
- c语言二维数组相关程序设计,c语言二维数组定义及其规则详解
- 【js】js获取今日和昨日0点和23点59分59秒
- Python在气象与海洋中的实践技术应用
- 运筹系列63:使用ALNS求解大规模TSP问题
- iOS依赖注入框架系列(一):介绍Typhoon
- 初识Calcite——使用实例
- 基于Stm32f103利用模拟iic驱动LM75A温度传感器
- iconfont用在placeholder里
- 一些常用的公共 DNS 服务器 IP 地址
热门文章
- 【Spring】Spring autowire-candidate解决注入的时候有多个符合的bena
- Spark : DNS resolution failed for url in bootstrap.servers xx:9092
- kerberos安装配置与使用
- Java中使用ProcessBuilder启动、管理应用程序
- Spingboot定时任务与多线程
- 为什么网上都推荐下载jdk8和jdk11,而没有人推荐最新的15
- 云计算学习路线图课件:云计算和虚拟机有什么区别?
- spring知识点概述
- linux 2.6内核进程调度,Linux2.6内核进程调度系列--scheduler_tick()函数2.更新实时进程的时间片,...
- RestfulToolKit:根据接口,快速定位代码