《编程不难:全彩图解+微课+Python编程》是“鸢尾花数学大系—从加减乘除到机器学习”丛书的第一册,也是“编程”板块的第一册,着重介绍如何零基础入门学Python编程。虽然《编程不难:全彩图解+微课+Python编程》主要讲解Python编程,但是也离不开数学。《编程不难:全彩图解+微课+Python编程》尽量避免讲解数学概念公式,而且用图形和近乎口语化的语言描述程序设计、数据分析、机器学习背后常用的数学思想。
《编程不难:全彩图解+微课+Python编程》分为预备、语法、绘图、数组、数据、数学、机器学习、应用八大板块,共36章,内容“跨度”极大!从Python基本编程语法,到基本可视化工具,再到各种数据操作工具,还介绍常用Python实现的各种复杂数学运算,进入数据分析和机器学习之后,还讲解如何搭建应用App。我们可以把《编程不难:全彩图解+微课+Python编程》看作从Python编程角度对“鸢尾花书”全系内容的总览。
《编程不难:全彩图解+微课+Python编程》提供代码示例和讲解,而且提供习题,每章还配套JupyterNotebook代码文件(JupyterNotebook不是可有可无的,而是学习生态的关键一环,“鸢尾花书”强调在JupyterLab自主探究学习才能提高大家编程技能)。《编程不难:全彩图解+微课+Python编程》配套微课也主要以配套JupyterNotebooks为核心,希望读者边看视频,边动手练习。
《编程不难:全彩图解+微课+Python编程》读者群包括所有试图用编程解决问题的朋友,尤其适用于初级程序员进阶、高级数据分析师、机器学习开发者。
姜伟生博士FRM。
Preface
前言
感谢
首先感谢大家的信任。
出来混总是要还的
曾经,考试是我们学习数学的唯一动力。考试是头悬梁的绳,是锥刺股的锥。我们中的绝大多数人从小到大为各种考试埋头题海,学数学味同嚼蜡,甚至让人恨之入骨。
数学给我们带来了无尽的“折磨”。我们甚至恐惧数学,憎恨数学,恨不得一走出校门就把数学抛之脑后,老死不相往来。
可悲可笑的是,我们很多人可能会在毕业五年或十年以后,因为工作需要,不得不重新学习微积分、线性代数、概率统计,悔恨当初没有学好数学,走了很多弯路,没能学以致用,甚至迁怒于教材和老师。
这一切不能都怪数学,值得反思的是我们学习数学的方法和目的。
再给自己一个学数学的理由
为考试而学数学,是被逼无奈的举动。而为数学而学数学,则又太过高尚而遥不可及。
相信对于绝大部分的我们来说,数学是工具,是谋生手段,而不是目的。我们主动学数学,是想用数学工具解决具体问题。
现在,本丛书给大家带来一个“学数学、用数学”的全新动力—数据科学、机器学习。
未来已来,你来不来?
本丛书如何帮到你
为了让大家学数学、用数学,甚至爱上数学,作者可谓颇费心机。在丛书创作时,作者尽量克服传统数学教材的各种弊端,让大家学习时有兴趣、看得懂、有思考、更自信、用得着。
为此,丛书在内容创作上突出以下几个特点。
虽然本书标榜“从加减乘除到机器学习”,但是建议读者朋友们至少具备高中数学知识。如果读者正在学习或曾经学过大学数学(微积分、线性代数、概率统计),那么就更容易读懂本丛书了。
聊聊数学
数学是工具。锤子是工具,剪刀是工具,数学也是工具。
数学是思想。数学是人类思想高度抽象的结晶体。在其冷酷的外表之下,数学的内核实际上就是人类朴素的思想。学习数学时,知其然,更要知其所以然。不要死记硬背公式定理,理解背后的数学思想才是关键。如果你能画一幅图、用大白话描述清楚一个公式、一则定理,这就说明你真正理解了它。
数学是语言。就好比世界各地不同种族有自己的语言,数学则是人类共同的语言和逻辑。数学这门语言极其精准、高度抽象,放之四海而皆准。虽然我们中大多数人没有被数学“女神”选中,不能为人类对数学认知开疆拓土,但是这丝毫不妨碍我们使用数学这门语言。就好比,我们不会成为语言学家,但是我们完全可以使用母语和外语交流。
数学是艺术。数学和音乐、绘画、建筑一样,都是人类艺术体验。通过可视化工具,我们会在看似枯燥的公式、定理、数据背后,发现数学之美。
II
数学是历史,是人类共同记忆体。“历史是过去,又属于现在,同时在指引未来。”数学是人类的集体学习思考,它把人的思维符号化、形式化,进而记录、积累、传播、创新、发展。从甲骨、泥板、石板、竹简、木牍、纸草、羊皮卷、活字印刷、纸质书,到数字媒介,这一过程持续了数千年,至今绵延不息。
数学是无穷无尽的想象力,是人类的好奇心,是自我挑战的毅力,是一个接着一个的问题,是看似荒诞不经的猜想,是一次次胆大包天的批判性思考,是敢于站在前人臂膀之上的勇气,是孜孜不倦地延展人类认知边界的不懈努力。
家园、诗、远方
诺瓦利斯曾说:“哲学就是怀着一种乡愁的冲动到处去寻找家园。”
在纷繁复杂的尘世,数学纯粹得就像精神的世外桃源。数学是一束光、一条巷、一团不灭的希望、一股磅礴的力量、一个值得寄托的避风港。
打破陈腐的锁链,把功利心暂放一边,我们一道怀揣一份乡愁,心存些许诗意,踩着艺术维度,投入数学张开的臂膀,驶入它色彩斑斓、变幻无穷的深港,感受久违的归属,一睹更美、更好的远方。
《编程不难》
III
Acknowledgement
致谢
Tomyparents.
谨以此书献给我的母亲和父亲。
HowtoUsetheBook
使用本书
丛书资源
本系列丛书提供的配套资源有以下几个。
在纸质图书中,为了方便大家查找不同配套资源,作者特别设计了以下几个标识。
数学家、科学家、
艺术家等语录
配套Python代码完
成核心计算和制图
引出本书或本系列
献介绍
代码中核心Python库函数和讲解
用Streamlit开发制
作App
提醒读者格外注意的知识点
每章结束总结或升华本章内容
思维导图总结本章
脉络和核心内容
介绍数学工具、机
器学习之间的联系
每章配套微课视频
二维码
本书核心参考文献和
推荐阅读文献
微课视频
本书配套微课视频均发布在B站—生姜DrGinger。
微课视频是以“聊天”的方式,和大家探讨某个数学话题的重点内容,讲解代码中可能遇到的难点,甚至侃侃历史、说说时事、聊聊生活。
本书配套微课视频的目的是引导大家自主编程实践、探究式学习,并不是“照本宣科”。
纸质图书上已经写得很清楚的内容,视频课程只会强调重点。需要说明的是,图书内容不是视频的“逐字稿”。
App开发
本书配套多个用Streamlit开发的App,用来展示数学动画、数据分析、机器学习算法。
Streamlit是个开源的Python库,能够方便快捷地搭建、部署交互型网页App。Streamlit简单易用,很受欢迎。Streamlit兼容目前主流的Python数据分析库,比如NumPy、Pandas、Scikit-Learn、PyTorch、TensorFlow等。Streamlit还支持Plotly、Bokeh、Altair等交互可视化库。
本书中很多App设计都采用Streamlit+Plotly方案。此外,本书专门配套教学视频手把手和大家一起做App。
大家可以参考如下页面,更多了解Streamlit:
实践平台
本书作者编写代码时采用的IDE(IntegratedDevelopmentEnvironment)是Spyder,目的是给大家提供简洁的Python代码文件。
但是,建议大家采用JupyterLab或JupyterNotebook作为“鸢尾花书”配套学习工具。
简单来说,Jupyter集“浏览器+编程+文档+绘图+多媒体+发布”众多功能于一身,非常适合探究式学习。
运行Jupyter无须IDE,只需要浏览器。Jupyter容易分块执行代码。Jupyter支持inline打印结果,直接将结果图片打印在分块代码下方。Jupyter还支持很多其他语言,如R和Julia。
使用Markdown文档编辑功能,可以在编程的同时写笔记,不需要额外创建文档。在Jupyter中插入图片和视频链接都很方便,此外还可以插入LaTex公式。对于长文档,可以用边栏目录查找特定内容。
Jupyter发布功能很友好,方便打印成HTML、PDF等格式文件。
Jupyter也并不完美,目前尚待解决的问题有几个:Jupyter中代码调试不是特别方便。Jupyter没有variableexplorer,可以在线打印数据,也可以将数据写到CSV或Excel文件中再打开。Matplotlib图像结果不具有交互性,如不能查看某个点的值或者旋转3D图形,此时可以考虑安装(JupyterMatplotlib)。注意,利用Altair或Plotly绘制的图像支持交互功能。对于自定义函数,目前没有快捷键
VI
直接跳转到其定义。但是,很多开发者针对这些问题正在开发或已经发布相应插件,请大家留意。
大家可以下载安装Anaconda,将JupyterLab、Spyder、PyCharm等常用工具,都集成在Anaconda
中。下载Anaconda的地址为:
JupyterLab探究式学习视频:
代码文件
“鸢尾花书”的Python代码文件下载地址为:
同时也在如下GitHub地址备份更新:
Python代码文件会不定期修改,请大家注意更新。图书原始创作版本PDF(未经审校和修订,内容
和纸质版略有差异,方便移动终端碎片化学习以及对照代码)和纸质版本勘误也会上传到这个GitHub账户。因此,建议大家注册GitHub账户,给书稿文件夹标星(Star)或分支克隆(Fork)。
考虑再三,作者还是决定不把代码全文印在纸质书中,以便减少篇幅,节约用纸。
VII
学习指南
大家可以根据自己的偏好制定学习步骤,本书推荐如下步骤。
1
浏览本章思维导图,把握核心脉络
4
用Jupyter创建笔
记,编程实践
2
下载本章配套
Python代码文件
5
尝试开发数学动画、机器学习App
3
观看微课视频,阅读本章正文内容
6
翻阅本书推荐参
考文献
学完每章后,大家可以在社交媒体、技术论坛上发布自己的Jupyter笔记,进一步听取朋友们的意见,共同进步。这样做还可以提高自己学习的动力。