本书介绍了Python的环境构建、模块导入、元组、列表、字典、集合、正则表达式等基础知识;讲解了Python在科学计算、绘图、数据处理和分析、图形用户界面、数据库、网络爬虫、计算机视觉、网页编程等方面的编程技术。 科学计算涵盖了矩阵运算、相关分析、小二乘法、曲线拟合、线性规划等;绘图包括了matplotlib快速绘图和面向对象绘图两种编程技术;数据处理和分析介绍了应用Pandas的DataFrame读写CSV、Excel、JSON、数据库并进行相关数据分析;图形用户界面以Qt和tkinter框架为例,介绍了编写图形用户界面时控件的使用、事件和信号的处理方法;数据库介绍了Python连接MySQL、SQL Server、SQLite等不同类型的数据库管理系统,以SQLite为例说明了Python操作数据库的过程;网络爬虫讲解了爬虫的步骤、爬虫库requests、beautiful soup、lxml及XPath的语法;计算机视觉介绍了OpenCV在图像读取、保存、颜色空间变换、图像平滑、边缘检测、特征点检测、仿射变换、图像匹配等方面的编程知识;网页编程基于Flask框架,讲解了网页编程中路由、模板、提交表单、文件上传、Echarts绘制成本构成图、在网页上显示matplotlib绘制的图形等编程知识。 本书适合理工科的大学生及对Python感兴趣的技术人员阅读。
在GitHub的2018、2019年度报告中,Python是GitHub上排名的编程语言。Python号称脱水语言,基于它可以开发出许多开源库供人们免费使用。Python主要用于:①科学计算,其科学计算的能力完全可以取代商业化软件Matlab; ②数据分析和绘图,Python的pandas库提供了强大的数据分析和处理功能,matplotlib库可以方便地绘制各种图形; ③网络爬虫,利用爬虫库(如requests等),可以非常方便地从网络上爬取到自己所需要的信息; ④人工智能,Python有许多优秀的机器学习库,如Scikit learn(简称Sklearn)、tensorflow等,借助这些库可以完成机器分类、回归、降维等; ⑤图像处理和分析,可以完成各种图像的处理、分析和识别等,除pillow库外,较有名的计算机视觉库是OpenCV; ⑥三维建模mayavi;⑦网站建设,利用Flask、Django等框架建立网站。
Python与C 、Java等相比,具有以下编程优势。
(1) 完成同样的任务,代码量C ∶Java∶Python=1000∶100∶10。
(2) 应用范围广。从数据分析、科学计算、网站建设、网络爬虫、图像识别到人工智能,应用范围广泛。
(3) 学习AI的有效工具。如Sklearn库中提供了机器学习的各种算法,利用Python通过简单的调用就可以实现各种AI算法。
本书第1章介绍了软件安装、模块导入,介绍了元组、列表、字典、集合等的使用,编程采用的是面向过程的方法。第2章介绍了Python面向对象编程的方法。第1章和第2章的知识点贯穿于后面各章节。第3~10章介绍了Python在绘图、科学计算、数据分析、GUI、数据库、网络爬虫、Web框架Flask等的应用相关模块。虽然第3~10章单独成章,但各章之间有着紧密的联系。例如,绘图时难免涉及科学计算,如利用小二乘法建立回归方程,利用数据库中的数据绘制图形,绘制的图形可以出现在tkinter/PyQt5的窗口中,也可以在网页中显示;网络爬虫结果保存时涉及数据库;各章中涉及人机交互时可能需要GUI或网页编程等。
本着学以致用的原则,结合编著者教学和科研案例,本书由浅入深地介绍了Python各种基础知识及应用技能。基于小二乘法的回归分析、岩石地球化学的数据分析、Flask框架下利用Echarts绘制成本构成图等示例,都来自编著者的日常科研工作。相信读者阅读本书后一定能快速上手,将Python融入自己的学习和工作中,体验到Python编程的快乐。
本书已列入北京科技大学校级规划教材,教材的编写和出版得到了北京科技大学教材建设经费的资助,在此深表感谢!
编著者2021年8月
第1章基础知识001
1.1软件的安装001
1.2管理Python相关的扩展库001
1.3使用IDLE003
1.4模块005
1.4.1将整个模块导入005
1.4.2从某个模块中导入某个函数006
1.4.3使用软件包管理模块006
1.5数据类型和变量006
1.5.1数据类型006
1.5.2变量008
1.5.3运算符010
1.6元组、列表、字典、集合011
1.6.1元组011
1.6.2列表012
1.6.3切片014
1.6.4字典016
1.6.5集合020
1.6.6推导式022
1.6.7序列解包025
1.7基本语句026
1.7.1分支语句026
1.7.2循环语句028
1.8函数030
1.8.1字符串函数030
1.8.2数学函数032
1.8.3lambda033
1.8.4map()函数033
1.8.5filter()函数034
1.8.6zip()函数034
1.8.7enumerate()函数035Python基础及应用
目录
1.8.8日期时间函数035
1.8.9自定义函数039
1.9变量作用域042
1.10闭包与外部作用域043
1.11正则表达式044
1.11.1正则表达式匹配模式045
1.11.2不区分大小写的匹配047
1.11.3字符串替换047
1.11.4match、search和findall的区别048
1.11.5正则表达式常用符号049
1.12读写文件050
1.12.1文件与文件路径050
1.12.2读写文本文件053
1.12.3读写二进制文件054
1.12.4使用with语句055
1.12.5Python读写内存中数据055
1.13错误和异常056
1.13.1try...except格式058
1.13.2try...except...else格式058
1.13.3finally子句058
练习题059
第2章面向对象编程061
2.1类和对象061
2.1.1类的定义061
2.1.2对象的生成和使用062
2.1.3类属性与对象属性062
2.1.4定义外部属性063
2.1.5类的方法064
2.2类的继承068
2.3类的重载071
2.3.1方法重载071
2.3.2运算符重载071
2.4类的多态073
练习题074
第3章绘图075
3.1Python绘图模块的安装075
3.2使用pyplot模块快速绘图075
3.2.1绘制简单的直线图075
3.2.2快捷绘图方式下创建多图和多子图077
3.2.3matplotlib.pyplot常用的绘图函数078
3.3面向对象方式绘图085
3.3.1图和子图的建立086
3.3.2图中要素088
3.3.3patches模块097
3.3.4属性获取和设置097
3.3.5响应鼠标与键盘事件098
3.3.6widget模块100
练习题103
第4章科学计算105
4.1科学计算包105
4.2ndarray的创建106
4.3数组元素的访问109
4.4数据统计和相关分析110
4.4.1数据统计110
4.4.2相关分析112
4.5数据读取114
4.6矩阵运算与线性代数函数库linalg115
4.7优化模块122
4.7.1数据拟合122
4.7.2方程求根125
4.8岩石地球化学数据的相关分析126
练习题128
第5章Pandas数据处理和分析129
5.1Pandas基础知识129
5.1.1一维数据结构Series对象129
5.1.2二维数据结构DataFrame对象131
5.2浏览数据和操作数据132
5.2.1浏览数据132
5.2.2操作数据136
5.2.3数据转换140
5.3Pandas读写数据140
5.3.1读写Excel140
5.3.2读取CSV文件142
5.3.3读写JSON143
5.3.4从数据库中读写数据143
5.4Pandas在岩石地球化学数据分析中的应用145
练习题146
第6章图形用户界面149
6.1使用tkinter149
6.1.1创建窗口149
6.1.2窗口上增加部件151
6.1.3部件绑定事件152
6.1.4部件的常用布局154
6.1.5部件的使用方法156
6.1.6tkinter的消息框165
6.1.7tkinter的进阶库ttk166
6.1.8tkinter面向对象编程171
6.2使用PyQt5172
6.2.1创建窗口173
6.2.2窗口上增加部件174
6.2.3事件与信号的处理175
6.2.4PyQt5面向对象编程175
6.2.5PyQt5布局177
6.2.6使用Qt Designer186
6.3GUI上使用matplotlib193
6.3.1tkinter窗口上应用matplotlib193
6.3.2PyQt5窗口上应用matplotlib194
练习题195
第7章数据库197
7.1连接数据库197
7.2连接对象199
7.3查询记录201
7.3.1使用游标获取数据201
7.3.2查询语句202
7.3.3查询结果返回的形式205
7.3.4使用Pandas获取和分析数据205
7.4建立数据表206
7.5插入记录206
7.6其他SQL207
7.7GUI与数据库207
7.8利用ORM模型访问数据库209
7.9编程中注入SQL攻击的问题212
练习题215
第8章网络爬虫217
8.1爬虫需要安装的库文件217
8.2爬虫步骤218
8.3webbrowser221
8.4用requests模块从Web上下载文件221
8.5解析库的使用222
8.5.1beautiful soup解析库223
8.5.2lxml库及XPath语法226
8.5.3爬取图片示例230
8.6异步加载下网页的爬取232
8.6.1识别异步加载的网页232
8.6.2利用逆向工程识别Ajax加载网页的URL232
8.7用Selenium模块控制浏览器234
8.7.1Chrome浏览器下环境的配置234
8.7.2在页面中寻找元素235
8.7.3单击页面中链接236
练习题237
第9章计算机视觉库OpenCV240
9.1图像数字化240
9.1.1颜色空间(colorspace)241
9.1.2图像类型241
9.1.3图像频率241
9.1.4OpenCV视觉库242
9.2读取、显示、保存图像242
9.3颜色空间变换243
9.4图像基本操作245
9.5绘制直方图254
9.5.1cv2.calcHist函数绘制直方图254
9.5.2使用掩膜制作指定范围内的直方图255
9.6图像阈值256
9.7图像平滑260
9.7.1二维离散卷积261
9.7.2滤波262
9.8图像边缘检测267
9.8.1Sobel算子267
9.8.2Laplacian算子268
9.8.3Canny边界检测269
9.9模板匹配270
9.10图像特征点检测272
9.10.1Harris角点检测273
9.10.2SIFT算法提取和检测特征273
9.10.3SURF算法提取和检测特征275
9.11图像匹配275
9.12仿射变换277
9.13图像匹配在光学显微镜中的应用280
9.13.1目标定位281
9.13.2光学显微镜旋转前后图像的对准281
练习题283
第10章Python Web框架287
10.1Flask入门288
10.2路由289
10.3静态文件290
10.4Flask的模板293
10.5Flask提交表单295
10.5.1post()方法提交表单295
10.5.2get()方法提交表单297
10.6Flask Cookies298
10.7Flask Session300
10.8Flask重定向301
10.9Flask文件上传302
10.10应用Echarts绘制烧结厂成本构成图303
10.10.1Echarts基本用法303
10.10.2jQuery基本用法304
10.10.3成本数据库306
10.11网页中显示matplotlib绘制的图像309
练习题310
参考文献312