热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python相关知识的巩固《python与量化投资从基础到实战》的python基础部分

python与量化投资从基础到实战数据格式numpypandasSciPy插值积分优化图像处理特殊函数OLS回归分析插值正态性检验凸优化matplotlib绘图的始祖,


python与量化投资从基础到实战

    • 数据格式
    • numpy
    • pandas
    • SciPy 插值 积分 优化 图像处理 特殊函数
      • OLS 回归分析
      • 插值
      • 正态性检验
      • 凸优化
    • matplotlib 绘图的始祖,适合绘制简单的统计图表。
    • Seaborn 绘制美观的图表
    • Scikit-Learn 机器学习常用的第三方模块
      • 决策树
      • 支持向量机
      • 朴素贝叶斯分类器
      • 神经网络
      • 模型评价方法-metric模块
      • 深度学习
    • 连接数据库


数据格式

字符串不可更改

列表中的元素可以修改,元组【更安全】中的元素不可修改

集合:1.进行集合操作【交集、差集、补集】2.消除重复元素

‘’’ ‘’'三引号可以换行输入输出

str='''fishcat fish'''print(str)

python中数的类型:整数型(int)长整型(long)浮点型(float)布尔型(bool)复数型(complex)

数据类:列表list【可以是不同的类型】 元组tuple 集合set 字典dict


numpy

numpy的主要对象ndarray的数据类型:整数型(np.int32)浮点型(np.float64)布尔型(bool)字符串(string) unicode(np.unicode__)

array【只允许储存相同的数据类型】

arr=np.array(['量','化'])
arr.dtype

dtype('

pandas

pandas的数据对象:series一维数组【只允许储存相同的数据类型】 dataframe二维的表格型数据结构 panel三维数组

df.describe()会统计出各列的计数、平均数、方差、最小值、最大值及quantile数值

df.info()会展示数据类型。行列数和DataFrame占用的内存

map函数映射一个字典,可以实现根据已有的列建立新列。

df.drop_duplicates(subset=‘k1’,keep=‘first’)去重

df.drop([‘Unnamed:0’,axis=1])删除已有的列

df.rename(columns={‘Unnamed:0’:‘id’])重命名某些列

df.loc第一个参数是行标签,第二个参数是列标签

df.iloc第一个参数是行的位置,第二个参数是列的位置

df.ix自动根据我们给出的索引类型判断是使用位置还是标签进行切片

pd.cut(a.closeprice,bins,lables)分组,bins分组标准,lables分组名称

agg apply 用于分组聚合


SciPy 插值 积分 优化 图像处理 特殊函数


OLS 回归分析

import statsmodels.api as sm

model=sm.OLS(y,x)


插值

import scipy.interpolate as spi

ipo=spi.splrep(X,Y,k=1) #线性插值 k样条拟合顺序

iy=spi.splev(x,ipo) #三次样条插值


正态性检验

statsmodel.api 中的qqplot通过QQ图检验


凸优化

import scipy.optimize as sco

opts=sco.minimize()

min_sharpe 夏普最大化

min_volatility 收益最大化

min_return 风险最小化


matplotlib 绘图的始祖,适合绘制简单的统计图表。

import matplotlib.pyplot as plt

%matplotlib inline #更改字体以便正常显示中文

plt.rcParams[‘font.sans-serif’]=[‘SimHei’]#用来正常显示中文标签

plt.rcParams[‘axes.unicode_minus’]=False#用来正常显示负号


Seaborn 绘制美观的图表

import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
#更改字体以便正常显示中文

plt.rcParams[‘font.sans-serif’]=[‘SimHei’]#用来正常显示中文标签

plt.rcParams[‘axes.unicode_minus’]=False#用来正常显示负号

sns.set_style({“font.sans-serif”:[‘Microsoft YaHei’,‘SimHei’]})#显示中文

plt.figure(figsize=(12,8))
sns.set_context('paper')
plt.subplot(221)
plt.title('paper')
sinplot()
sns.set_context('talk')
plt.subplot(222)
sinplot()
plt.title('talk')
sns.set_context('poster')
plt.subplot(223)
sinplot()
plt.title('poster')
sns.set_context('notebook')
plt.subplot(224)
sinplot()
plt.title('notebook')

在这里插入图片描述

plt.figure(figsize=(12,8))
sns.set_palette('muted')
plt.subplot(221)
plt.title('循环')
sinplot()
sns.set_palette('Blues_r')
plt.subplot(222)
sinplot()
plt.title('渐变(深-浅)')
sns.set_palette('Blues')
plt.subplot(223)
sinplot()
plt.title('渐变(浅-深)')
sns.set_palette('RdBu')
plt.subplot(224)
sinplot()
plt.title('混合(红-蓝)')

在这里插入图片描述

Python可视化18|seborn-seaborn调色盘(六) - 知乎 (zhihu.com): https://zhuanlan.zhihu.com/p/180551053


Scikit-Learn 机器学习常用的第三方模块

机器学习的功能主要包括分类、回归、降维和聚类。


  • 分类:决策树Decision Trees 贝叶斯分类Naive Bayes 支持向量机Support Vector Machines
    随机森林random forest

  • 回归:SVR Lasso

  • 降维:主成分分析PCA 主题模型LDA

  • 聚类:K-Means Gaussian

Scikit-Learn还包括特征提取、数据处理和模型评估三大模块

Scikit-Learn的模块列表


  1. 关于数据集的模块有sklearn. datasets。
  2. 关于特征预处理的模块有 sklearn. feture_extraction(特征抽取)、 sklearn.
    feature_selection(特征选择)、 sklearn. preprocessing(特征预处理)和 sklearn.
    random_projection(数据集合)。
  3. 关于模型训练的模块有 sklearn. cluster 、 sklearn. cluster. bicluste 、
    sklearn. linear_model 、 sklearn. naive_bayes 、 sklearn.
    naural_network 、 sklearn. svm 和 sklearn. tree 。
  4. 关于模型评估的模块有 sklearn. metrics 和 sklearn. cross_validation 。
  5. 关于其他功能的模块有sklearn. covariance和sklearn. mixture等。

请添加图片描述


决策树

对训练集进行训练

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import sklearn
import re
from sklearn import cross_validation
import sklearn.tree as treedata=pd.read_excel('loan.xlsx')
target=data['type']
data.drop('type',axis='columns',inplace=True)
train_data,test_data,train_target,test_target=cross_validation.train_test_split(data,target,test_size=0.4,train_size=0.6,random_state=12345)
clf_1=tree.DecisionTreeClassifier(criterion='entropy')
clf_1.fit(train_data,train_target)
train_est=clf_1.predict(train_data)
train_est_p=clf_1.predict_proba(train_data)[:,1]

将模型应用于测试集

test_est=clf_1.predict(test_data)

将模型适用于新样本的能力称为 泛化能力
我们希望一个模型的训练误差和泛化误差都很低,其中,泛化误差低是我们首要考虑的因素:

from sklearn import metrics
metrics.accuracy_score(test_target,test_est)

混淆矩阵:

metrics.confusion_matrix(test_target,test_est)

决策树算法易于理解,计算简单,能够处理有缺失属性的样本及不相关的特征,在短时间内可对较大的数据做出可行且效果良好的判断。存在问题:忽略数据之间的相关性,容易出现过拟合。


支持向量机

训练及预测

import sklearn.svm as svm
clf_2=svm.SVC()
clf_2.fit(train_data,train_target)
train_est=clf_2.predict(train_data)
test_est=clf_2.predict(test_data)

查看模型效果

from sklearn import metrics
metrics.accuracy_score(test_target,test_est)
metrics.confusion_matrix(test_target,test_est)

SUV算法具有较高的准确率,可解决高维问题,能够处理非线性特征的相互作用。但高维问题比较消耗内存,调参也有一定难度,对于非线性问题没有通用的解决方案,有时很难找到合适的核函数。


朴素贝叶斯分类器

from sklearn.naive_bayes import GaussianNB
clf_3=GaussianNB()
clf_3.fit(train_data,train_target)
train_est=clf_3.predict(train_data)
test_est=clf_3.predict(test_data)from sklearn import metrics
metrics.accuracy_score(test_target,test_est)
metrics.confusion_matrix(test_target,test_est)

朴素贝叶斯算法有着坚实的数学基础及稳定的分类效率,常用于文本分类,在小规模数据上表现较好。存在缺点:需要计算先验概率,对数据的输入性比较敏感。


神经网络

from sklearn.neural_network import MLPClassifier
clf_4=MLPClassifier()
clf_4.fit(train_data,train_target)
train_est=clf_4.predict(train_data)
test_est=clf_4.predict(test_data)from sklearn import metrics
metrics.accuracy_score(test_target,test_est)
metrics.confusion_matrix(test_target,test_est)

人工神经网络具有分类准确性高,可进行并行处理和分布式存储及学习能力强等众多优点,同时能充分逼近复杂的非线性网络。但学习时间过长,参数过多,输出结果难以解释。


模型评价方法-metric模块

#accuracy_score分类准确率
metrics.accuracy_score(y_true,y_pred)#返回正确分类的比例
metrics.accuracy_score(y_true,y_pred,normalize=False)#返回正确分类的样本数
#confusion_matrix混淆矩阵
metrics.confusion_matrix(y_true,y_pred)
#对角线表示被正确分类的样本数,其余位置均代表被错误分类的样本数
#roc_curve(ROC曲线)
metrics.roc_curve(y_true,y_score,pos_label=None)#y_score测试集属于正值样本的概率
#recall_score(召回率)
metrics.recall_score(y_true,y_pred)#提取正确的样本条数除以样本总信息条数

深度学习

卷积神经网络Convolutional neural networks,CNN
深度置信网络Deep Belief Bets,DBNs
[后续单独补充]


连接数据库

from sqlalchemy import create_engine
from sqlalchemy.ext.automap import automap_base
import pandas as pd
import numpy as np
engine=create_engine('mysql://root:123@127.0.0.1:3306/test?charset=utf8')
#root用户名 123密码 127.0.0.1:3306IP地址及端口号 test数据库名

#读取数据
pd.read_sql('select * from data',engine)#传入sql语句
pd.read_sql('data',engine)#直接传入表名
#存储数据
df=pd.DataFrame([[5,'apple',22],[6,'orange',23]],columns=['ID','name','price'],index=range(2))
df.to_sql('data',engine,index=False,if_exists='append')
#if_exists 'fail':原表存在不执行 'append':原表存在插入,不存在新建插入 'replace':原表存在清空重新插入
#to_sql十分便捷但有局限性,只针对DataFrame存储,不能应用于dict
df1=pd.DataFrame(np.arange(2000).reshape(1000,2),index=range(1000),columns=['key','value'])
r=df1.to_dict('records')
df1.to_sql('f_data',engine,index=False,if_exists='append')
pd.read_sql('f_data',engine).tail()
#使用SQLALchemy的方法,将数据实例化为SQLALchemy支持的类型
#ORM映射 Base.metadata.XXXX就是映射的类
Base=automap_base()
Base.prepare(engine,reflact=True)
f_data=Base.metadata.tables('f_data')
#再对实例化后的f_data执行insert,也能快速、批量的插入数据。
engine.execute(f_data.insert(),r)
pd.read_sql('f_data',engine).tail()

后面是量化数据获取和策略的知识,今天摸鱼还整不出来,下次继续。


推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
author-avatar
初始163
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有