版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章绪论随着人工智能在经济金融领域的广泛应用,大量传统岗位被人工智能取代,同时又出现了许多新兴岗位。本章将介绍Python与量化建模的基础知识,帮助读者快速入门。一、导入:人工智能与量化建模的背景随着人工智能在经济金融领域的广泛应用,大量传统岗位被人工智能取代,同时又出现了许多新兴岗位。这些岗位通常要求从业者同时掌握三个核心模块的知识:经济金融知识掌握经济学原理与金融市场运作机制数学建模能力运用数学方法构建量化分析模型编程技术使用编程语言实现算法与数据处理然而,要同时精通这三者,并能熟练应用于量化建模实践中,学习周期极为漫长。二、Python语言的意义与优势软件的发展,特别是Python语言的普及,极大地降低了学习量化建模的门槛。Python的优势包括:语法简洁、易读性强第三方库生态丰富,可快速实现复杂算法可调用深度学习框架(如卷积神经网络CNN、长短期记忆网络LSTM)无需深度掌握数学原理,仅需调用相关库即可实现建模与预测示例:使用Python,只需几条命令即可调用支持向量机、随机森林、神经网络等模型进行数据拟合。三、学习逻辑与本章任务在学习量化建模之前,应首先完成以下步骤:安装并掌握Python软件下载并正确安装Python开发环境学会使用集成开发环境PyCharm熟悉PyCharm的界面与基本操作了解如何调用机器学习模型命令用于在较短时间内弥补数学建模方面的不足本章内容主要包括:Python与PyCharm的安装、界面功能、常用操作,以及机器学习算法简介。图1.1本章主要内容结构1.1软件的安装与功能1.1.1软件的下载与安装一、Python软件的下载进入Python官方网站→单击Download→Windows。示例版本:Python3.12.3主版本号:3次版本号:12修订号:3图1.2Python下载界面版本类型说明"a"表示Alpha初期版本软件开发早期阶段,功能不完整"b"表示Beta测试版功能基本完整,但可能存在bug"rc"表示ReleaseCandidate准发布版本即将正式发布的候选版本建议:选择无字母的稳定版。图1.3Python软件版本二、Python软件的安装方式Python提供两种安装模式:(1)默认安装模式点击InstallNow(立即安装)默认路径通常为:C:\Users\用户名\AppData\Local\Programs\Python\Python版本号或C:\ProgramFiles\Python\Python版本号务必勾选"Addpython.exetoPATH"(加入环境变量)图1.4Python的软件安装界面(2)自定义安装模式选择CustomizeInstallation(自定义安装)可修改安装路径。关键选项说明:Useadminprivilegeswheninstallingpy.exe:使用管理员权限安装Addpython.exetoPATH:添加到环境变量InstallPython3.12forallusers:为所有用户安装AssociatefileswithPython:将.py文件与Python关联Precompilestandardlibrary:预编译标准库,加快启动速度推荐勾选:从上到下第2~4个选项。图1.5Python的自定义安装高级选项三、Python安装注意事项若安装时未勾选Addpython.exetoPATH,需手动配置环境变量。操作步骤:打开"运行"(Win+R),输入SYSDM.CPL在"系统属性"中选择"高级"→"环境变量"编辑系统变量"Path",点击"新建"添加Python安装目录与Scripts目录路径保存后即可每次点击"新建"应添加一个路径,确保Python命令可在任何终端中执行。四、PyCharm软件的下载与安装PyCharm是JetBrains推出的Python集成开发环境(IDE)。分为:社区版(Community)免费、开源社区版功能:代码辅助、重构可视化调试版本控制集成专业版(Professional)付费,功能更全面专业版额外支持:Django、Flask等Web框架数据库与科学工具远程配置与部署1)下载PyCharm进入JetBrains官方网站→选择PyCharmCommunityEdition(社区版)。根据CPU架构选择:Intel/AMD→.exe(Windows)ARM架构→.exe(WindowsARM64)本书统一使用社区版进行示例讲解。2)安装PyCharm安装界面常见选项:创建桌面快捷方式更新PATH变量(添加至系统环境变量)更新右键菜单(支持"以PyCharm打开")创建文件关联(.py文件默认用PyCharm打开)图1.6PyCharm软件安装界面建议:全部勾选,安装完成后重启电脑。3)PyCharm解释器设置注意事项若PyCharm未自动识别Python解释器:设置步骤:打开PyCharm→新建或打开项目点击菜单栏File→Settings→Project→PythonInterpreter点击AddInterpreter→AddLocalInterpreter手动指定Python安装路径图1.7指定解释器路径1.1.2软件的界面与功能一、Python及IDLE的界面与功能1)通过命令提示符(CMD)打开方式:Win+R→输入cmd→回车→输入python用途:直接执行Python代码,快速测试小片段。图1.8命令提示符界面2)通过IDLE图形界面打开路径:"开始菜单"→Python3.12.3→IDLE特点:官方IDE具备语法高亮、自动缩进内置交互器含调试器,可单步运行代码图1.9IDLE界面IDLE的菜单功能IDLE提供了多种菜单栏选项,用于代码编辑、调试与环境配置。主要菜单包括:File(文件)NewFile(新建):创建新的Python脚本Open(打开):打开现有脚本文件Save/SaveAs/SaveCopyAs:保存或另存文件PrintWindow:打印当前窗口内容Close/Exit:关闭文件或退出IDLEEdit(编辑)Undo/Redo(撤销/重做)Cut/Copy/Paste(剪切/复制/粘贴)Find/Replace(查找/替换)GotoLine(跳转行号)IDLE菜单功能(续)Debug(调试)提供断点设置与单步执行功能,可查看局部变量与全局变量值,便于发现错误。Options(选项)用于个性化编辑器设置:字体与字号语法高亮颜色自动缩进等Window(窗口)管理当前打开的多个文件窗口。Help(帮助)IDLEHelp:查看IDLE的操作说明PythonDocs:访问Python官方文档AboutIDLE:显示版本信息与版权声明二、PyCharm的界面与菜单1)PyCharm界面结构首次启动PyCharm,可见如下初始界面(图1.10)。点击NewProject→设置路径→单击Create创建新项目。创建项目后:右键项目→New→PythonFile新建Python脚本左下角PythonConsole区域用于查看运行输出图1.10初始界面图1.11Python运行文件的创建2)PyCharm界面分区说明从整体上,PyCharm界面主要分为四个区域:菜单栏区域新建、运行、设置等功能入口项目视图区域展示当前项目及文件结构代码编辑区域编写和修改Python脚本的主要区域运行信息区显示程序输出结果与调试信息图1.13界面分区3)PyCharm菜单栏功能主要菜单分类如下(图1.14):图1.14菜单栏File:新建项目、打开、保存、从版本控制导入Edit:剪切、复制、粘贴、撤销、重做View:调整显示与窗口布局Navigate:跳转至类、函数或特定行号Code:代码生成、格式化、补全Refactor:代码重命名、提取方法、结构优化Run:运行与调试程序Tools:数据库、终端、任务管理等工具VCS:版本控制系统(如Git)Help:帮助、更新与反馈1.1.3软件功能一、Python的功能(1)下载安装第三方库Python通过包管理器pip安装第三方库。常用命令(在命令行输入):pipinstallpackage_name#安装库piplist#查看已安装库pipuninstallpackage_name#卸载库python-mpipinstall--upgradepip#更新pippipinstallnumpy==1.19.3#安装指定版本示例:pipinstallnumpypipinstallseaborn(2)交互器与脚本模式交互式模式打开IDLE可直接输入并运行代码(交互式模式)。适用场景:小型代码实验脚本模式新建脚本(File→NewFile)后,可运行完整程序(Run→RunModule)。适用场景:项目开发图1.15运行脚本ADM二、PyCharm的功能(1)新建脚本项目步骤:File→NewProject设置名称与保存路径选择Python解释器→Create图1.16新项目的创建图1.18新建Python脚本创建完成后右键项目→New→PythonFile即可生成.py文件。(2)安装第三方库的两种方法①菜单法路径:File→Settings→Project→PythonInterpreter点击"+"→搜索库名→InstallPackage。图1.19用菜单下载第三方库②命令法打开PyCharm底部Terminal→输入pipinstallnumpy图1.20用命令下载第三方库(3)镜像源加速下载国外服务器下载较慢,可使用国内镜像源:镜像源地址清华大学/simple阿里云/pypi/simple/豆瓣/simple/中国科技大学/simple/配置方法命令法pipinstall--upgradepippipconfigsetglobal.index-url/simple菜单法PyCharm→PythonPackages→设置齿轮→添加镜像地址图1.22镜像源配置界面图1.23服务器证书授权若下载仍慢,打开:File→Settings→Tools→ServerCertificates→勾选Acceptnon-trustedcertificatesautomatically。(4)PyCharm常用快捷键功能快捷键注释/取消注释Ctrl+/复制当前行Ctrl+D放大/缩小选区Ctrl+W/Ctrl+Shift+W跳转定义Ctrl+B或Ctrl+点击插入新行Shift+Enter格式化代码Ctrl+Alt+L左缩进Shift+Tab小结:软件安装与功能Python提供了编程语言与交互环境PyCharm提供高效的集成开发平台核心技能掌握安装、配置、库管理与镜像设置是进入AI编程的第一步1.2机器学习算法介绍机器学习是一种让计算机"从数据中学习"的技术。核心思想:通过分析历史数据,挖掘规律,生成模型,用于预测或决策。一、聚类(Clustering)1)K-均值聚类(K-Means)将数据划分为K个类别,每个类别由"距离其中心点最近"的样本组成。2)层次聚类(HierarchicalClustering)通过构建多层次的聚类树实现分类,可自顶向下或自底向上进行。二、主成分分析(PCA)一种降维技术。通过线性变换,将高维数据压缩为少数几个综合指标。保留最有价值的信息,提高算法效率。适用于:高维特征数据分析与可视化。三、线性模型(LinearModels)多元回归用于预测目标变量与多个特征变量之间的线性关系逻辑回归用于二分类问题的概率预测岭回归在回归中增加正则化项,防止过拟合四、支持向量机(SVM)一种监督学习算法通过在特征空间中构造最优分类超平面,实现二分类任务常用于文本分类、人脸识别、信用评分等五、决策树与随机森林1)决策树按特征逐层划分数据,形成"树状结构"每个叶节点代表一个决策结果2)随机森林集成多棵决策树结果通过平均或投票得到,更稳定、更准确六、神经网络(NeuralNetworks)1)多层感知器(MLP)包含输入层、隐藏层、输出层各层神经元全连接能识别非线性模式用于分类与回归2)卷积神经网络(CNN)由卷积层、池化层、全连接层组成用于图像识别、视频分析、时间序列预测3)长短期记忆网络(LSTM)包含记忆单元与门控机制(遗忘门、输入门、输出门)适合处理时间序列数据在语音识别、语言翻译中表现突出本章小结本章介绍了Python与PyCharm的安装、界面与功能学会了使用pip命令与镜像源管理第三方库初步了解了常见的机器学习算法类型及其核心思想:聚类与降维回归与分类决策树与集成方法神经网络体系通过本章学习,学生应能独立搭建AI编程环境,并理解机器学习算法的基本框架,为后续章节的建模与实战打下基础。第2章Python编程基础及数据处理图2.1本章主要内容结构章节概述本章主要内容本章围绕后续章节中常用的函数和操作,对Python中的基本数据类型及其相关操作、Python中的函数及条件与循环语句等进行介绍,然后讲述NumPy库及Pandas库的常用语法。学习重点函数的定义与使用NumPy库和Pandas库的数据切片排序等问题的归纳总结特色说明鉴于NumPy库和Pandas库对数据切片的使用方法繁杂,所以在微课视频中用简单的口诀来总结数据切片的各种规则,便于加深读者对这些语法的理解与记忆。2.1Python基础语法引言Python是一门强大的编程语言,提供了丰富的数据类型来处理不同的数据。数据类型是理解和操作数据的基础,认识并掌握不同的数据类型是学会正确处理数据的前提。数据类型查看方法在Python中可用type()函数查看对象的数据类型。2.1.1数据类型1.数字型数字型分为整数型和浮点型。(1)整数型(Int)Int是Python中表示整数的数据类型可以是正数、负数或零直观上讲,整数型就是没有小数点的数值,如14,-2,0Int类型的变量可以进行常见的数学运算,如加法、减法、乘法和除法(2)浮点型(Float)Float是Python中表示实数的数据类型直观上讲,浮点型就是有小数点的数值,如3.14,-0.23Float类型的变量不仅可以进行常见的数学运算,甚至可以进行特殊的浮点运算,如四舍五入等2.布尔型定义与特点布尔型(Bool)是Python中表示真假值的数据类型只有True和False两个取值常用于控制流程和逻辑运算应用场景布尔类型变量常用于进行逻辑判断。3.空值定义与特点空值(None)是Python中表示空值的数据类型用于表示一个不存在的值或未定义的值是Python中的一个特殊的值重要说明None并不等同于0或者是空的字符串也不等同于空列表、空字典等数据仅是Python定义的一个特殊的值4.字符串定义与表示字符串(Str)是Python中表示文本的数据类型一般使用一对单引号或一对双引号或一对三个单引号引起来基本形式如'hello'字符串特点Str类型的变量可以进行拼接、切片和格式化等操作但不能进行数学计算,即使引号内有数字重要原则:在Python中,任何内容加上引号都会被视为字符串5.列表定义与表示列表(List)是Python中表示有序、可变集合的数据类型基本形式如[1,3,6,10]或者['abc','def',7]由多个元素组成,元素之间用逗号(半角)分隔,并用方括号(全角)括起来列表操作List类型的变量可以进行添加、删除、修改和访问元素等操作。6.元组定义与表示元组(Tuple)是Python中表示有序、不可变集合的数据类型一般而言,元组由多个元素组成,元素之间用逗号分隔,并用圆括号括起来基本形式如(1,3,6,10)或者('abc','def',7)特殊规则如果使用逗号(,),即使不加圆括号,也被视为元组,如1,3,6,10单个元素的元组,元素后也需要加逗号例如:(10,)是元组,而(10)是整数元组与列表的区别元组与列表相似,但两者的区别在于:列表用方括号([]),而元组用圆括号(())元组中的元素不能修改,而列表中的元素可以修改序列的概念序列定义此处定义上述字符串、列表、元组属于基本序列。序列中的每一个元素都是有序的。索引机制在Python中序列中的元素会被按照位置分配称为"索引"的序号第一个元素的索引是0;第二个元素的索引是1;以此类推索引的作用索引的存在使得访问序列中的某一个或某几个元素十分便捷。序列操作示例示例1:列表元素访问列表a的2号位元素$\mathrm{a}=[1,3,5,7]$print(a[2])运行结果:5示例2:元组元素访问#元组b的2号位元素$\mathtt{b}=(2,4,6,8)$print(b[2])运行结果:6示例3:字符串切片#字符串c中的$0\sim2$号位元素c='hello'#用英文输入模式下的双、单引号引用helloprint(c[0:3])运行结果:hel7.字典定义与表示字典(Dict)是Python中表示无序、可变、键不重复的键值对集合的数据类型基本形式如d={7:'seven',8:'eight',9:'nine'}由键值对组成,键值对之间用逗号分隔,并用花括号({})括起来字典中的值字典中的值可以没有限制地取任何Python对象,既可以是标准的对象,也可以是用户定义的对象。字典的键的特性键的两个特性字典的键具有以下两个特性:(1)唯一性不允许同一个键出现两次(2)不可变性键必须不可变键的类型要求不可变数据类型(如数字、字符串或元组等)可以充当键可变数据类型(如列表、字典等)不能充当键字典操作示例示例:字典元素访问d={7:'seven',8:'eight',9:'nine'}#字典d中键8对应的值print(d[8])运行结果:eight数据类型说明注:可变数据类型是指内容可以随着函数的执行而发生改变,不可变数据类型则是从初始化到结束都是不可改变的。2.1.2数据类型操作1.序列操作1)索引索引方式序列包括字符串、元组、列表等。索引的方式有两种:正序访问、倒序访问。正序访问:从序列的第一个元素(0)开始倒序访问:从序列的最后一个元素(-1)开始示例1:正序访问#序列操作a=[1,3,6,10]#正序访问列表a的3号位元素print(a[3])运行结果:10示例2:倒序访问#倒序访问列表a的-1号位元素print(a[-1])运行结果:102)切片切片定义通俗地讲,序列的切片操作就是从序列中取出指定范围内的元素。切片格式切片操作的格式为a[start:end:step]。其中:start:切片的起始位置,默认从0号位开始end:切片的结束位置,默认到最末位为止step:步长,默认取值为1切片规则切片操作取出的元素包含start号位,但不包含end号位,即前闭后开如果步长为正数则表示从左往右,若为负数则是从右往左切片操作示例(一)示例1:基本切片c='hello'print(c[0:4])#访问c的0~3号位元素运行结果:hell示例2:负索引切片print(c[-3:-1])#访问c的-3和-2号位元素运行结果:ll示例3:混合索引切片print(c[0:-2])#访问c的0~-3号位元素运行结果:hel示例4:指定步长切片print(c[0:5:2])#指定步长切片,访问c的0~4号位,步长为2运行结果:hlo3)序列相加序列拼接定义序列相加也称为序列的拼接,即通过"+"运算符对序列进行加法,将两种序列合并在一起。注意事项要注意,两种相同类型的序列才能相加。示例1:列表拼接#用"+"拼接列表a和列表a=[1,2,3]b=[4,5,6]print(a+b)运行结果:[1,2,3,4,5,6]示例2:字符串拼接#用"+"拼接字符串c和字符串dc='hello,'d='world'print(c+d)运行结果:hello,world4)查询查询操作判断一个值是否在序列中可以使用in运算符。如果该值在序列中,则返回True若不在,则返回False示例1:元素存在#判断o是否在a中a='hello'print('o'ina)运行结果:True示例2:元素不存在#判断t是否在a中print('t'ina)运行结果:False2.列表操作引言作为Python中最常用的数据类型之一,列表除了上述共有的一些操作外,也有一些自己独有的操作。1)序列类型相互转换类型转换函数list()函数可以将字符串转换为列表tuple()函数可以将列表转换为元组str()函数可以将序列转换为字符串类型转换示例(一)(1)将字符串转换为列表a=list('hello')#list()函数采用圆括号print(a)运行结果:['h','e','l','l','o'](2)将列表转换为元组b=tuple(a)print(b)运行结果:('h','e','l','l','o')类型转换示例(二)(3)将序列转换为字符串a=(1,3,6,10,15,18)c=str(a)print(c)print(type(c))#type()函数用于查询对象数据类型运行结果:(1,3,6,10,15,18)#元组a被转换为字符串c,虽然从形式上看没有被改变,但是数据类型已变为str<class'str'>示例:整数转字符串b=10d=str(b)print(d)print(type(d))运行结果:10#整数b被转换为字符串d,虽然从形式上看没有被改变,但是数据类型已变为str<class'str'>2)元素赋值、删除操作格式删除索引号下对应的元素格式为:dela[索引号]更改对应索引号下元素值的格式为:a[索引号]=值示例1:元素修改#将列表b的2号位元素l改为ta='hello'b=list(a)#将字符串a转换为列表b[2]='t'print(b)运行结果:['h','e','t','l','o']示例2:元素删除#删除列表b的2号位元素delb[2]print(b)运行结果:['h','e','l','o']3)分片赋值分片赋值定义为列表某一范围内的元素赋值,格式为:a[开始索引号:结束索引号]=list(值)示例:将hello转换为heyyob=list('hello')print(b)运行结果:['h','e','l','l','o']#将b的2号位和3号位元素赋值为yy#因为'll'处于'hello'这个单词的第2、3号位,所以赋值时用b[2:4]b[2:4]=list('yy')print(b)运行结果:['h','e','y','y','o']4)列表方法概述方法的概念很多语言中都有函数,如Excel中的if函数、vlookup函数,SQL中的count函数,等等Python中的函数是指一段可重复使用的、能实现特定功能的代码块,具有相对独立性方法是Python中定义的一系列指令集,这些指令可以用来执行各种任务Python中方法的调用格式对象.方法(参数)列表方法的调用格式列表方法是对列表实现一些比较深入的操作,列表方法的调用格式为:列表.方法(参数)列表方法示例(一)下面以a=[3,7,2,5,0]为例,介绍常用的列表方法。a=[3,7,2,5,0](1)插入元素a.insert(2,1)#在列表的2号索引位插入1print(a)运行结果:[3,7,1,2,5,0](2)添加元素a.append(2)#在列表的最后添加2print(a)运行结果:[3,7,1,2,5,0,2]列表方法示例(二)(3)统计元素出现的次数a.count(2)#统计2出现的次数print(a.count(2))运行结果:2(4)查找元素索引位置a.index(2)#查找2第一次出现的索引位置print(a.index(2))运行结果:3列表方法示例(三)(5)删除列表中第一次出现的元素a.remove(2)#删除a中第一个2print(a)运行结果:[3,7,1,5,0,2](6)删除列表中某个索引位的元素b=a.pop(1)#删除1号索引位的元素print('a是',a)print('b是',b)运行结果:a是[3,1,5,0,2]b是7列表方法示例(四)(7)将列表排序a.sort()#从小到大排序aprint(a)运行结果:[0,1,2,3,5](8)反转列表a.reverse()print(a)运行结果:[5,3,2,1,0]列表方法归纳总结表2.1列表方法语法作用a.insert(n,m)在列表a的n索引位置插入一个元素ma.append(m)在列表a的最末位插入一个元素ma.count(m)统计列表中元素m出现的频次a.index(m)在列表a中查询元素m第一次出现的索引位置a.remove(m)删除列表a中第一次出现的元素ma.pop(n)删除列表中的第n个元素a.sort()默认对列表数据进行从小到大排序a.reverse()反转列表中的所有元素pop()与remove()的区别在列表方法中,pop()与remove()方法都用于删除元素,但有所不同:pop():按索引位进行删除,括号中的变量应为待删除元素的索引号,且运行后会返回待删除元素的值remove():按照元素值进行删除,括号中的变量应为待删除元素的值,且运行后不会返回待删除元素的值3.字典操作作为Python中另一个常用的数据类型,字典有其独有的操作。1)dict()函数函数定义dict()函数通过关键字参数创建字典,格式为:dict(参数1=值1,参数2=值2,...)示例:创建字典#用dict函数创建字典时,采用圆括号a=dict(name='xiaowang',age=30)print(a)运行结果:{'name':'xiaowang','age':30}直接创建字典也可以直接采用花括号创建字典a={'name':'xiaowang','age':30}print(a)运行结果:{'name':'xiaowang','age':30}2)字典基本操作示例对比序列与字典下面以序列a=[1,3,6,10],字典f={'age':30,'name':'shushuo'}为例,在表2.2中对比字典和列表的基本操作。表2.2列表与字典的基本操作(表中操作在交互器中进行)功能列表操作格式列表命令结果字典操作格式字典命令结果查询长度len(列表)len(a)→4len(字典)len(f)→2查询某索引位上的值列表[索引号]a[1]→3字典[键]f['age']→30元素赋值列表[索引]=值a[2]=1a→[1,3,1,10]字典[键]=值f['age']=28f→{'age':28,'name':'shushuo'}元素删除del列表[索引]dela[1]a→[1,1,10]del字典[键]delf['name']f→{'age':28}成员资格元素in列表1ina→True键in字典'age'inf→True注意事项注:字典的操作都是针对键。数据类型错误说明注意:在Python中,数据类型错误通常有以下几种(1)将不同类型的数据进行运算例如,将字符串与整数相加。错误示例:m='10'n=5mn=m+nprint(mn)正确示例:m=10n=5mn=int(m)+nprint(mn)数据类型错误说明(续)(2)传递的数据类型不符合要求例如,将整数传递给需要字符串类型的函数。(3)尝试访问不存在的索引错误示例:list=[5,6,7,8]print(list[4])正确示例:list=[5,6,7,8]print(list[3])(4)访问不存在的变量例如,尝试访问一个未定义的变量。2.1.3Python函数1.def自定义函数1)定义规则函数概念Python的自定义函数分为有函数名称的def自定义函数和匿名的自定义函数lambda。def自定义函数是一段可重用的代码块,用于执行特定的任务。它通过函数名称来调用,接收输入(参数)并返回输出(结果)。定义格式def函数名(参数列表):函数体return值格式说明def与函数名之间通常是一个空格冒号(:)表示接下来的代码是函数体,即具有特定功能的一组代码函数体必须缩进def可以使用return来结束函数并返回需要返回的值如果不使用return结束函数,则在没有返回值的情况下直接结束函数自定义函数示例示例:定义一个平方函数square(x),输入参数x,返回x的平方(1)有return的自定义函数defsquare(x):returnx*x#调用自定义函数print(square(9))运行结果:81(2)无return的自定义函数deffunction():print('Hello,World!')#调用自定义函数function()运行结果:Hello,World!2)定义变参数函数变参数函数概念变参数函数就是传入的参数个数是可变的函数。定义方式在Python中,有两种方式来定义变参数函数:用一个星号(*)和两个星号(**)。一个星号(*):定义可以接收任意数量参数的函数,这些参数会被放入一个元组中两个星号(**):定义可以接收任意数量的关键字参数的函数,这些参数会被放入一个字典中变参数函数示例(一)(1)用一个星号(*),传入的参数以元组形式存在于args中deffunction(*args):print(args)#调用函数function(1,2,3)运行结果:(1,2,3)(2)用两个星号(**),传入的参数为以字典形式存在于kwargs中deffunction(**kwargs):print(kwargs)#调用函数function(a=1,b=2,c=3)运行结果:{'a':1,'b':2,'c':3}变参数函数示例(二)注意事项注:args是arguments的缩写,表示位置参数;kwargs是keywordarguments的缩写,表示关键字参数。*args表示允许传入任意数量的参数(包括0个参数,即无参数)**kwargs表示允许传入任意数量的关键字参数(包括0个参数,即无参数)(3)同时使用一个星号(*)和两个星号(**)deffunction(*tuple,**dict):print(tuple)print(dict)#调用函数function(1,2,3)运行结果:(1,2,3){}变参数函数示例(三)#调用函数function(1,2,3,a=1,b=2,c=3)运行结果:(1,2,3){'a':1,'b':2,'c':3}2.lambda匿名函数lambda函数定义lambda匿名函数,常用来表示内部仅包含一行表达式的函数。语法格式函数名=lambda参数列表:表达式示例1:无参数x=lambda:2+2print(x())运行结果:4示例2:一个参数x=lambdaa:aprint(x('helloworld'))运行结果:helloworldlambda函数示例(续)示例3:默认参数x=lambdaa,b,c=100:a+b+cprint(x(10,20))运行结果:130示例4:带逻辑判断的lambdax=lambdaa,b:aifa>belsebprint(x(1000,500))运行结果:10002.1.4Python条件与循环引言循环语句是在符合给定的循环条件下,用于反复执行某一操作。循环语句一般与条件控制语句搭配使用,根据条件是否成立来决定是否执行循环体。Python中的循环语句包括while循环与for循环。1)for循环for循环定义for循环是一种遍历循环,其基本语法是:forvariableinsequence。其中:variable:表示变量名sequence:表示要遍历的序列for循环特点for循环在执行时会遍历序列中的每个元素执行代码块。图2.2for循环流程图for循环遍历示例(一)Python中可供循环的序列Python中可供循环的序列很多,如列表、元组、字符串等。(1)列表循环:遍历列表中的每一个元素numbers=[0,1,2,3,4,5]foriinnumbers:print(i)运行结果:012345注意事项注:Python是用缩进来标识出哪一段命令属于本循环,因此缩进是不能省略的。for循环遍历示例(二)(2)元组循环:遍历元组中的每一个元素tuple=(9,8,7,6,5)foriintuple:print(i)运行结果:98765(3)字符串循环:遍历字符串中的每一个字符string='hello'foriinstring:print(i)运行结果:hellofor循环遍历示例(三)(4)字典循环:遍历字典中的每一个键dict={'a':2,'b':4,'c':6,'d':8}foriindict:print(i)运行结果:abcd(5)遍历文件文件遍历方法一般地,for与walk()函数搭配用于遍历目标文件夹,结构是:forroot,dirs,filesinos.walk(path):参数说明root:表示当前目录dirs:表示子目录列表files:表示文件列表walk函数说明walk函数在运行后返回一个包含当前遍历的目录名、当前目录下的所有子目录名和当前目录下的所有文件名的三元组。文件遍历示例importos#导入库deftraverse_dir(path):#自定义函数,函数名是traverse_dir,输入参数是pathforroot,dirs,filesinos.walk(path):#对目标文件夹进行遍历,获取信息print('当前目录:',root)#获取被遍历文件夹的路径print('子目录列表:',dirs)#获取被遍历文件夹中的子文件夹列表print('文件列表:',files)#获取被遍历文件夹中的文件列表dir_path='C:\量化金融\第2章\数据合集'#在C盘新建一个文件夹"量化金融",将本书的#数据按章放入该文件夹中,即可运行本书与脚本中的程序print('待遍历的目录为:',dir_path)print('遍历结果为:')traverse_dir(dir_path)#调用自定义函数traverse_dir,输入的参数是dir_path文件遍历运行结果运行结果如下:待遍历的目录为:C:\量化金融\第2章\数据合集遍历结果为:当前目录:C:\量化金融\第2章\数据合集子目录列表:[]文件列表:['上证指数12月25-29数据.xlsx','人民币汇率中间价.xls']range()函数range()函数定义for循环语句还常与range()函数同用。语法格式range(start,stop,step)函数会生成从start开始,到stop-1结束,步长为step的数字序列。默认值说明当start处无值时,默认从0开始生成数字。示例1:生成0~4的序列foriinrange(5):#range(5)是指生成从0开始到4结束的数字,步长为1。#因为range()默认从0开始,步长为1,所以range(5)没有写从0开始,也没有写步长print(i)运行结果:01234range()函数示例(续)示例2:生成2~8,步长为2的序列foriinrange(2,10,2):print(i)运行结果:2468注意事项注:for循环语句后记得加冒号,这是循环语句中不可缺少的一部分。(6)列表推导式列表推导式定义列表推导式允许直接将运算应用于列表的每个元素,生成新列表。语法结构new_list=[expressionforiteminiterableifcondition]语法说明ifcondition:是可选部分expression:是新列表中的元素,不可省略iterable:是一个可迭代对象列表推导式示例(一)基本结构list=[1,2,3,4,5]new=[x+2forxinlist]print(new_list)运行结果:[3,4,5,6,7]嵌套循环list_1=[1,2]list_2=['A','B']new_list=[(x,y)forxinlist_1foryinlist_2]等价形式说明#---[(x,y)forxinlist_1foryinlist_2]等同于----#new_list=[]#forxinlist_1#foryinlist_2#new_list_0=[(x,y)]#new_list=new_list+new_list_0#--------------------------------------------------------print(new_list)列表推导式示例(二)运行结果:[(1,'A'),(1,'B'),(2,'A'),(2,'B')]带if逻辑判断,if在for后#带if逻辑判断,if在for后p=[]p=[2*vforvinrange(10)ifv%2==0]#只有满足if条件的才保留#--------[(x,y)forxinlist_1foryinlist_2]等同于:--------#forvinrange(10):#ifv%2==0:#%是求余的运算符.如果v除以2等于0,则运行下一条代码#p.append(2*v)#-------------------------------------------print(p)运行结果:[0,4,8,12,16]列表推导式示例(三)带if逻辑判断,if在for前list$=[2,3,4,5,6]$list_1$=[]$list_1$=[\mathbf{x}**2$if$\texttt{x}\%2==0$else$\texttt{x}*\texttt{3}$for$\texttt{x}$inlist]print(list_1)运行结果:[4,27,16,125,36]等价形式说明[4,27,16,125,36]#----[x\*\*2if$\mathbf{x}\%2==0$else$\mathbf{x}\ast\ast3$for$\mathbf{x}$inlist]等同于---#list$=[2,3,4,5,6]$#list_1$=[]$#for$\mathbf{x}$inlist:#if$\mathbf{x}\%2==0$:#list_1.append(x\*\*2)#else:#list_1.append(x\*\*3)#print(list_1)#----------------------------------------------2)while循环while循环定义while循环也很常见。while循环在条件为真时会重复执行代码块。语法结构while条件:执行语句图2.3while循环流程图while循环示例示例:计数循环#每次循环后i+1,直至i=5,结束循环i=0whilei<5:i+=1#i+=1等价于i=i+1print(f'这是第{i}次')#print()中加f后,可以在字符串里面使用花括号,#花括号中可以使用变量或者表达式运行结果:这是第1次这是第2次这是第3次这是第4次这是第5次2.1.5break与continue语句引言在Python中,break和continue是两个重要的控制语句,它们用于控制循环的执行流程。break语句break语句定义break语句通常用于中断循环。当它在循环中使用时,即使循环内还有未处理的数据,它也会立即终止该循环。break语句作用即break语句允许在满足一定条件下退出整个循环。当break语句用在for或while循环中,可以跳出当前的循环。图2.4break循环流程图2.1.5break与continue语句在Python中,break和continue是两个重要的控制语句,它们用于控制循环的执行流程。图2.4break循环流程图break语句break语句定义break语句通常用于中断循环。当它在循环中使用时,即使循环内还有未处理的数据,它也会立即终止该循环。break语句作用即break语句允许在满足一定条件下退出整个循环。当break语句用在for或while循环中,可以跳出当前的循环。break语句示例forLETTERinrange(2):#LETTER依次读取0、1。最初读取0forletterin'ABCD':#letter依次读取A、B、C、Difletter=='C':#如果letter等于Cbreak#中断循环,跳出当前循环,LETTER读取1else:#如果letter不等于C,执行下面的print()函数print('打印当前字母',letter)运行结果:打印当前字母A打印当前字母B打印当前字母A打印当前字母Bcontinue语句continue语句定义continue语句则是用来跳过当前循环的剩余语句,并继续进行下一轮循环。continue与break的区别与break不同的是,continue不会终止整个循环的执行,而是仅结束本次循环。continue语句作用因此,continue通常用于在当前循环不满足条件时,提前结束本次循环,以便转到下一个条件的评估。图2.5continue循环流程图continue语句示例forLETTERinrange(2):#LETTER依次读取0、1。最初读取0forletterin'ABCD':#letter依次读取A、B、C、Difletter=='C':#如果letter等于Ccontinue#中断循环,不跳出当前循环,letter读取Delse:#如果letter不等于C,执行下面的print()函数print('打印当前字母',letter)运行结果:打印当前字母A打印当前字母B打印当前字母D打印当前字母A打印当前字母B打印当前字母D2.1.6if语句if语句定义Python中的if语句是一种控制结构,用于根据某个条件的值来决定是否执行特定的代码块。它主要用于分支控制,即根据不同的条件执行不同的代码部分。以下是Python中涉及if的一些常见用法1)if语句的语法结构基本语法if条件:条件成立时执行的语句示例j=2.67ifj<3:print('j<3')运行结果:j<32)if-else语句的语法结构基本语法if条件:当条件成立时执行的语句else:当条件不成立时执行的语句示例num=int(input("请输入一个数字:"))#input()函数接收从Python交互器中输入的整数,并以#字符串类型返回结果ifnum%2==0:print(num,"是偶数")else:print(num,"是奇数")运行结果:请输入一个数字:44是偶数3)if-elif-else语句基本语法if条件1:当条件1成立时执行的语句elif条件2:当条件2成立时执行的语句else:当条件1、2都不成立时执行的语句示例t=3ift<3:print('t<3')elift==3:print('t=3')else:print('t>3')运行结果:t=3if语句使用注意事项注:使用if语句的注意事项如下(1)条件表达式的灵活性if语句中的判断条件可以使用任何能够取得True或False的布尔值的语句或函数如果条件表达式不产生布尔值,在执行时Python会将其转换为布尔值再进行判断(2)"空"值的转换规则对于0、空字符串''、空列表[]、空字典{}、空元组()等"空"值,Python会将其转换为False非零数值、非空字符串、非空列表、非空字典等"非空"值则会被转换为True(3)缩进的重要性用缩进表示层次关系(4)if语句的嵌套if语句可以嵌套使用(5)不要遗漏冒号2.2数据处理常用的库引言在金融领域,Python常被用于处理分析数据,具体内容涉及数据加载、数据清洗、数据探索、数据可视化和模型构建等。在分析处理数据过程中,常用的库是Pandas库和NumPy库等。2.2.1数据分析Python数据处理工具Python有许多强大的库和工具用于数据处理,如NumPy、Pandas、Matplotlib和Scikit-learn等。工具特点这些库提供了丰富的功能和方法,使得处理和分析数据变得更加高效和方便。2.2.2相关库库的概念在Python编程中,库是指一组已经编写好的可重用代码的集合,通常包含特定的功能、数据结构、算法和接口。库的作用可以让程序员不必重新编写所有代码,从而帮助程序员更快速地实现特定的任务。数据处理常用库Python中关于数据处理最常用的库为Pandas、NumPy、Scikit-Learn、Matplotlib、Seaborn。库的导入库中含有许多函数,在实际使用前需要使用import()函数导入模块。1.Matplotlib库Matplotlib库简介Matplotlib是一个广泛使用的Python数据可视化库,它可以创建各种类型的图表、图形和可视化效果,适用于各种数据分析和可视化任务。2.Seaborn库Seaborn库简介Seaborn是一个基于Matplotlib的Python数据可视化库,它提供了一种更高级别的接口,专门用于绘制具有统计意义的图形,进一步丰富了Python数据可视化图形库。3.NumPy库NumPy库简介NumPy库是Python的一个非常重要的科学计算库。NumPy数组概念NumPy本身可以理解为列表或者数组,一个NumPy数组就是一个由不同数值组成的网格。NumPy数组特点网格中的数据都是同一种数据类型可以通过非负整型数的元组来访问维度的数量被称为数组的阶数组的大小是一个由整数型构成的元组,可以描述数组不同维度上的大小1)创建数组导入NumPy库importnumpyasnp生成数组(将列表转换为数组)A=np.array([1,2,3,4,5,6])print(A)运行结果:[123456]生成3行4列的全0数组A=np.zeros((3,4))print(A)运行结果:[[0.0.0.0.][0.0.0.0.][0.0.0.0.]]创建数组示例(续一)生成3行4列的全1数组A=np.ones((3,4))print(A)运行结果:[[1.1.1.1.][1.1.1.1.][1.1.1.1.]]生成4×4的单位矩阵数组A=np.identity(4)print(A)运行结果:[[1.0.0.0.][0.1.0.0.][0.0.1.0.][0.0.0.1.]]创建数组示例(续二)生成1~9、步长为2的数组A=np.arange(1,10,2)print(A)运行结果:[13579]2)切片引言NumPy库提供了强大高效的处理数组的功能,此处以2023年12月25~29日的上证指数为例,介绍本教材中常用的NumPy库处理数组的功能。首先介绍切片。数据准备importnumpyasnpimportpandasaspd#读取数据并将数据转换为NumPy数组path='C:\\量化金融\\第2章\\数据合集'#读取Excel格式数据,其中,path为要读取的文件的绝对路径#默认sheetname=0,即默认读取Excel中的第一个工作表#header=0,表示用第一行作为列标签,若header=None,则表明数据中没有列标签#index_col=0表示用第一列作为行索引,若index_col=None,则表明数据中没有行索引df=pd.read_excel(path+'\\'+'上证指数12月25-29数据.xlsx',sheet_name=0,header=0,index_col=None)#将DataFrame转换为NumPy数组data=np.array(df)print(data)数据读取运行结果运行结果如下:[[2.91881e+032.90988e+032.92063e+032.90399e+031.40000e-03][2.89888e+032.91797e+032.91797e+032.89284e+03-6.80000e-03][2.91461e+032.90015e+032.91796e+032.89017e+035.40000e-03][2.95470e+032.91311e+032.96165e+032.90939e+031.38000e-02][2.97493e+032.95084e+032.97503e+032.95002e+036.80000e-03]]切片示例(一)(1)读取数组第1行(类似行索引是0)和第4行(类似行索引是3),第1行与第4行没有连续A=data[[0,3],:]#该代码等同于A=data[[0,3]],即去除逗号(,)和冒号(:)#A=data[3]等同于A=data[3,:],即读取第4行print(A)运行结果:[[2.91881e+032.90988e+032.92063e+032.90399e+031.40000e-03][2.95470e+032.91311e+032.96165e+032.90939e+031.38000e-02]](2)读取数组第1~3行A=data[0:3,:]#该代码等同于A=data[0:3],即去除逗号(,)和冒号(:)print(A)运行结果:[[2.91881e+032.90988e+032.92063e+032.90399e+031.40000e-03][2.89888e+032.91797e+032.91797e+032.89284e+03-6.80000e-03][2.91461e+032.90015e+032.91796e+032.89017e+035.40000e-03]]切片示例(二)(3)读取数组第1列和第4列A=data[:,[0,3]]print(A)运行结果:[[2918.812903.99][2898.882892.84][2914.612890.17][2954.72909.39][2974.932950.02]](4)读取行索引是0到2,列索引是1到2的数组A=data[0:3,1:3]print(A)运行结果:[[2909.882920.63][2917.972917.97][2900.152917.96]]切片示例(三)(5)读取数组第1行第2列和第4行第4列的两个数值A=data[[0,3],[1,3]]print(A)运行结果:[2909.882909.39]3)其他运算(1)均值(计算每一列的均值)A=np.mean(data,axis=0)#axis取0表示沿着纵轴从上向下,对每一列求均值;取1表示沿着#横轴从左向右,对每一行求均值print(A)运行结果:[2.932386e+032.918390e+032.938648e+032.909282e+034.120000e-03](2)最大值(计算每一列的最大值)A=np.max(data,axis=0)print(A)运行结果:[2.97493e+032.95084e+032.97503e+032.95002e+031.38000e-02]其他运算示例(续一)(3)最小值(计算每一列的最小值)A=np.min(data,axis=0)print(A)运行结果:[2.89888e+032.90015e+032.91796e+032.89017e+03-6.80000e-03](4)中位数(读取每一列的中位数)A=np.median(data,axis=0)print(A)运行结果:[2.91881e+032.91311e+032.92063e+032.90399e+035.40000e-03](5)排序用np.sort()函数进行排序#用函数np.sort()进行排序。axis取0表示对每一列排序,取1表示对每一行排序A=np.sort(data,axis=0)print(A)运行结果:[[2.89888e+032.90015e+032.91796e+032.89017e+03-6.80000e-03][2.91461e+032.90988e+032.91797e+032.89284e+031.40000e-03][2.91881e+032.91311e+032.92063e+032.90399e+035.40000e-03][2.95470e+032.91797e+032.96165e+032.90939e+036.80000e-03][2.97493e+032.95084e+032.97503e+032.95002e+031.38000e-02]]特定行排序用np.argsort()对特定行进行排序#对特定行进行排序print(data[2,:])#查看第3行运行结果:[2.91461e+032.90015e+032.91796e+032.89017e+035.40000e-03]#还没有排序,此时5个元素的索引号分别是[0,1,2,3,4]。即2.91461e+03的索引号是0,2.90015e#+03的索引号是1...5.40000e-03的索引号是4print(np.argsort(data[2,:]))#查看第3行各元素在排序后的位次变化。此代码等同于print#(np.argsort(data[2]))运行结果:[43102]特定行排序说明排序规则说明在5个元素中,5.40000e-03的值最小,排序前,该数值的索引号是4,排序后,索引号调整到0号位,即在[43102]的0号位。在5个元素中,2.91796e+03的值最大,排序前,该数值的索引号是2,排序后,索引号调整到4号位,即在[43102]的4号位。按特定行排序整个数组#从小到大排序A=data[:,np.argsort(data[2,:])]#以第3行各元素新的索引号调整其他元素,不修改原数组,#即整列移动。此代码等同于A=data[:,np.argsort(data[2])]#如果要从大到小排序,添加[::-1]即可,#A=data[:,np.argsort(data[2,:])[::-1]]print(A)运行结果:[[1.40000e-032.90399e+032.90988e+032.91881e+032.92063e+03][-6.80000e-032.89284e+032.91797e+032.89888e+032.91797e+03][5.40000e-032.89017e+032.90015e+032.91461e+032.91796e+03][1.38000e-022.90939e+032.91311e+032.95470e+032.96165e+03][6.80000e-032.95002e+032.95084e+032.97493e+032.97503e+03]]特定列排序对特定列进行排序A=data[np.argsort(data[:,2])]#从小到大排序#上述代码的含义是,data[:,2]是提取第3列[2920.632917.972917.962961.652975.03]。#np.argsort(data[:,2])是对第3列进行排序,获得排序后各元素索引号新的位次[21034]。#例如,在5个元素中,2917.96的值最小,排序前索引号是2,排序后索引号调整到1号位。2975.03#的值最大,排序前索引号是4,排序后索引号仍然在4号位#如果要从大到小排序,添加[::-1]即可,A=data[np.argsort(data[:,2])[::-1]]print(A)运行结果:[[2.91461e+032.90015e+032.91796e+032.89017e+035.40000e-03][2.89888e+032.91797e+032.91797e+032.89284e+03-6.80000e-03][2.91881e+032.90988e+032.92063e+032.90399e+031.40000e-03][2.95470e+032.91311e+032.96165e+032.90939e+031.38000e-02][2.97493e+032.95084e+032.97503e+032.95002e+036.80000e-03]](6)对数组中所有元素取绝对值A=np.abs(data)print(A)运行结果:[[2.91881e+032.90988e+032.92063e+032.90399e+031.40000e-03][2.89888e+032.91797e+032.91797e+032.89284e+036.80000e-03][2.91461e+032.90015e+032.91796e+032.89017e+035.40000e-03][2.95470e+032.91311e+032.96165e+032.9
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 室内分布系统外包合同
- 酒店客房劳务外包合同
- 酒店餐饮制作外包合同
- 图像后期处理外包合同
- 房产抵押备案外包合同
- 消防控制室服务外包合同
- 电商仓库劳务外包合同
- 安全检查业务外包合同
- 护理礼仪的礼仪实践者
- 学校网络设备外包合同
- 英语北京市西城区2026年高三年级统一测试试卷(西城高三一模)(4.7-4.10)
- (2025年)急性缺血性脑卒中静脉溶栓的护理常规考核试题及答案
- AI在教育课堂互动中的应用:场景、策略与评估
- 2026年报关员通关实务培训
- 电线电缆生产安全制度
- 文件控制程序培训
- 江苏省高职单招《职测》考试题库(附答案)
- 药明康德研发生产制度
- 建筑国企合规管理培训
- 供应链物流环节运输成本精细化管理降本增效方案
- 光伏电力调度考试题库及答案
评论
0/150
提交评论