【量化基础知识】二、Python数据处理——Numpy/Pandas/Matplotlib/Sqlite3/Talib等介绍

介绍

完成一个量化策略的研发过程,包括对于数据的处理,因子的提取,这里介绍一些关于Python常用的数据处理模块,看这一篇就够啦!

Numpy——向量矩阵运算

Numpy提供了对于向量和矩阵的运算,用于实现快速计算,下面从一个简单的数组例子入手。

使用Numpy创建数组
import numpy as np
a=np.array([1,2,3,4],dtype=np.int64)
print(type(a)) #输出numpy对象类型
print(a.dtype)	#输出numpy数组中元素的类型
print(a)	#输出numpy对象实例
print(a.reshape(2,2))	#改变数组的维度

输出如下

<class 'numpy.ndarray'>

int64

[1 2 3 4]

[[1. 2.]
[3. 4.]]

这里a使用Python列表创建numpy.ndarray对象,可以简单认为a是Numpy中对应的数组,dtype指定了数组中元素的类型,比如np.int32,np.float64。

使用Numpy完成矩阵运算
import numpy as np
a=np.array([[1,0],
            [0,1]])
b=np.array([[2,3],
            [4,5]])
print(a*b)#矩阵a×b
print(a+b)#矩阵a+b
print(np.linalg.inv(b))#矩阵b的逆

输出如下

[[2 0]
[0 5]]

[[3 3]
[4 6]]

[[-2.5  1.5]
[ 2.  -1. ]]
Numpy二维数组切片
import numpy as np
np.random.seed(999)
a=np.random.rand(9,3) #生成一个9行3列的二维数组
print(a)
print(a[:,0])	#筛选第1列
print(a[0,:])	#筛选第1行
print(a[1,2])	#筛选第2行,第3列的元素
print(np.mean(a,0))	#从第1维度(行)对数组求平均,最后得到每一列的平均数
print(np.mean(a,1))	#从第2维度(列)对数组求平均,最后得到每一行的平均数
Pandas——表格处理
使用pandas创建/读取csv文件
import pandas as pd
a=pd.DataFrame([1,2,3,4],columns=["number"]) #创建一个DataFrame对象
print(a)
a.to_csv("test.csv")	#将该对象保存至当前目录下test.csv文件中

data=pd.read_csv("test.csv",index_col=0)	#读取当前目录下test.csv文件到data,data为DataFrame对象
print(data.head())	#输出data的前5行

输出如下

	number
0	1
1	2
2	3
3	4
4	5
5	6
	number
0	1
1	2
2	3
3	4
4	5

首先使用pd.DataFrame将列表转化为DataFrame对象,并设置该列的列名,调用to_csv和read_csv可以保存读写csv文件,也可以使用to_excel(“test.xlsx”)和read_excel(“test.xlsx”)保存。

筛选表格中相关数据
import pandas as pd
columns=["name","id"]
a=pd.DataFrame()
a["name"]=["A","B","C"]
a["id"]=[1,2,3]
print(a)
print(a[a["name"]=="B"])#筛选其中name列等于B的行
print(a[a["id"]>=2])#筛选其中id列数字大于等于2的行

输出如下

	name id
0	A	1
1	B	2
2	C	3

	name id
1	B	2

	name id
1	B	2
2	C	3

可以使用df[df[“列名”]+条件]的方法筛选出想要的行,其原理是df[“列名”]+条件会生成一个行数与原DataFrame相同的True和False的列,再次使用df则会去除其中为False的行,保留True的行,得到筛选后的结果。

访问表格中数据

如果想要访问或修改表格中某个位置的数据,可以使用如下方法进行筛选:

import pandas as pd
columns=["name","id"]
a=pd.DataFrame()
a["name"]=["A","B","C"]
a["id"]=[1,2,3]
print(a)
print(a["name"].iloc[1])#筛选表格中name列的第2行的元素
print(a.iloc[1]["name"])#筛选表格中第2行元素中name列的元素

输出如下

	name id
0	A	1
1	B	2
2	C	3
B
B
DataFrame/np.array/list互相转换

上面已经介绍了如何从python自带的列表list生成numpy和pandas中的数据类型,下面展示了其他转化方式。

import pandas as pd
import numpy as np
columns=["name","id"]
a=pd.DataFrame()
a["name"]=["A","B","C"]
a["id"]=[1,2,3]
print(type(a))

a_list=a.values.tolist()	#将DataFrame转化为list
#a_list=a["name"].tolist()
print(type(a_list))
print(a_list)

a_numpy=np.array(a)	#将DataFrame转化为numpy.ndarray
print(type(a_numpy))
print(a_numpy)

a_list_from_numpy=a_numpy.tolist()	#将numpy.ndarray转化为list
print(type(a_list_from_numpy))
print(a_list_from_numpy)

输出如下

<class 'pandas.core.frame.DataFrame'>

<class 'list'> 
[['A', 1], ['B', 2], ['C', 3]] 

<class 'numpy.ndarray'> 
[['A' 1]                                                                                                                              ['B' 2] 
['C' 3]]

<class 'list'> 
[['A', 1], ['B', 2], ['C', 3]] 
Matplotlib——入门级画图工具

常见的Python画图工具有Matplotlib、Seaborn、Pyecharts、Plotly等。这里介绍Matplotlib,基本可以实现可视化功能。

基础绘图
import matplotlib.pyplot as plt
a=[1,2,3,4]
b=[2,4,6,8]
plt.plot(a,b)#将a,b对应铧画到x,y轴上,折线图
plt.show()#显示当前图片,如果不加则不显示

【量化基础知识】二、Python数据处理——Numpy/Pandas/Matplotlib/Sqlite3/Talib等介绍_第1张图片

设置标题
import matplotlib.pyplot as plt

a=[i for i in range(20)]
b=[20-i for i in range(20)]
plt.scatter(a,b,color="red")
plt.title("a~b")
plt.xlabel("x/a")
plt.ylabel("y/b")
plt.savefig("a.jpg")

【量化基础知识】二、Python数据处理——Numpy/Pandas/Matplotlib/Sqlite3/Talib等介绍_第2张图片

Sqlite3——数据库操作

量化策略的回测过程中可以将相关数据导入到数据库中,这里以Sqlite3为例,简单阐述Python对数据库的调用。

import sqlite3 as sql
def create():
    con=sql.connect("database.db")#会在当前目录下生成database.db文件
    c=con.cursor()
    c.execute('''CREATE TABLE TEST
        (ID  INT  PRIMARY KEY NOT NULL,
        NAME TEXT             NOT NULL)
        ''')#创建一个表
    con.commit()
    con.close()

def insert():
    con=sql.connect("database.db")
    c=con.cursor()
    c.execute("INSERT INTO TEST (ID,NAME) VALUES (3, 'APPLE')")#插入数据
    con.commit()
    con.close()

def select():
    con=sql.connect("database.db")
    c=con.cursor()
    c.execute("SELECT * FROM TEST")#筛选表中所有数据
    for data in c:
        print(data)
    con.commit()
    con.close()

if __name__=="__main__":
    create()
    select()
    insert()
    select()

输出如下

(3, 'APPLE')

Python中与数据库交互操作过程包括连接数据库,执行相关数据库的命令并commit,最后关闭数据库。

Talib——计算技术指标

Talib(Technical Analysis Library)提供了对于量化策略中技术指标的计算函数。以移动平均线(Moving Average)为例,使用talib完成相关指标计算。

import talib
import numpy as np
import matplotlib.pyplot as plt

data=np.random.random(50) #生成一个长度为50的随机序列代表时序数据
MA=talib.MA(data,10) #计算10个单位的移动平均线
plt.plot(data,label="close")
plt.plot(MA,label="MA")
plt.legend()
plt.show()

【量化基础知识】二、Python数据处理——Numpy/Pandas/Matplotlib/Sqlite3/Talib等介绍_第3张图片

你可能感兴趣的:(量化基础知识,线性代数,python,可视化,数据库,pandas)