如何用 Python 可视化《三国》人物与兵器出现频率?(视频教程)
咱们以《三国演义》人名和兵器谱为例,尝试读取不同结构的文本文件,并且对其中的信息进行统计分析和可视化。
(由于微信公众号外部链接的限制,文中的部分链接可能无法正确打开。如有需要,请点击文末的“阅读原文”按钮,访问可以正常显示外链的版本。)
入门
如何帮助学生高效入门 Python ,一直是困扰我的问题。
总结经验后,我写下了《如何高效学Python?》一文。
文中按照自律能力,我把学生分成了3个类别。
自律能力最高的,看书就行。文中推荐了我认为最好的 Python 书籍,有中文译本;
自律能力中等的,可以学各种轻量级课程组合。除了我当时推荐的课程平台外,最近我发现 Udemy 上的某些课程,也很不错;
自律能力较低的,可以学一门比较完整的专项课程。我推荐了经典 Python 入门课“Programming for Everybody”。
这篇文章很受欢迎,多个平台上阅读量都数以万计。
可是,有一个统计规律,我写作时,似乎没有考虑到。
直到后来,我收到了多名读者的留言反馈,才恍然大悟。
这个统计规律是:
自律能力,和英文能力,是显著正相关的。
仔细诼磨一下这句话,是不是能品出些滋味来?
如果一个学生自律能力较低,去尝试 “Programming for Everybody”,结果会发现英文听不懂,于是放弃……
读者的反馈,让我意识到了,找一门靠谱的、全面系统讲解 Python 基础的中文在线课程,是很重要的。
这样的课程,如果能够达到 “Programming for Everybody”的深度与广度,那么学过后,再进一步学数据挖掘、机器学习,乃至深度神经网络,就可以水到渠成了。
前几天,看到卖桃君(MacTalk,池建强老师的公众号)又重发了《人生苦短,我用 Python》的感言,我就知道又一门 Python 基础课程来了。
果不其然,池老师推荐的,是他们公司《极客时间》平台上的一门新 Python 课程《零基础学 Python》,主讲人是尹会生老师,金山软件西山居技术经理。
虽然我不需要“零基础”学 Python,但是我很想了解这门课,是否足够培训培训新入学的研究生,迅速掌握 Python 。
我很快就付费订阅了。
周末,我花了两个半天的时间,把目前已上线的27个视频(预计总视频数量50个),都从头到尾,完整看了一遍。
许多环节,我都实际跑了代码,还做了笔记。
我觉得,这门课对于我这个“非零基础”的学员,有不少帮助和启发。
如果你一直从事某一方面的工作或研究,即便是 Python 这么简单的语言,很多语法和技巧,你也不会经常用到。
用进废退。很多你学过的东西,也会遗忘掉。
系统地梳理知识体系,可以帮助自己补足漏洞,不至于经常“重新发明轮子”。
另外,我发现之前教程读者不断提出的一些问题,其实都跟 Python 基础命令的不熟悉有关系。
例如几乎每次教程,都要用到的文件操作,以读取外部数据。
你知道可以用 Pandas 读取与分析处理 csv 文件或者 Excel 文件。
但是那些非结构化的文本文件,你该如何读取与分析呢?
如果遇到编码问题,该怎么办?
尹老师在视频教程中,讲解了《三国演义》人名与兵器出现次数统计的例子,让我眼前一亮,觉得确实是很好的分析案例。
一个例子里面,不仅讲解了文件操作,还顺带复习了字符串、列表和字典等多项知识点。
而且我也是个《三国》迷,上中学的时候玩儿《三国志IV》非常上瘾。
为了修改武将技能和数值,还专门学会了16进制。
我在思考,如果换作自己授课,用同样的数据作为例子,给学生讲文件读取、字符串拆分、列表循环、字典生成……我会怎么讲呢?
作为行动派,我立刻就做了个视频教程出来。
视频教程
我采用 Jupyter Notebook 撰写了源代码,然后调用 mybinder ,把教程的运行环境扔到了云上。
请点击这个链接(http://t.cn/R1TLtxq),直接进入咱们的实验环境。
你不需要在本地计算机安装任何软件包。只要有一个现代化浏览器(包括Google Chrome, Firefox, Safari和Microsoft Edge等)就可以了。全部的依赖软件,我都已经为你准备好了。
如果你对这个代码运行环境的构建过程感兴趣,欢迎阅读我的《如何用iPad运行Python代码?》一文。
浏览器中开启了咱们的环境后,请你观看我给你录制的视频教程。
https://v.qq.com/txp/iframe/player.html?vid=p0675mfar27&width=500&height=375&auto=0
希望你能跟着教程,实际操作一遍。这样收获会比较大。
教程的末尾,我给你留了一道练习题。说明了练习题的要求,还给出了辅助框架代码。
请你自行尝试解决该练习题,以巩固所学知识。
如果你解完了练习题,或者在解题过程中遇到了问题,欢迎参考我做的练习解答视频,核对参考答案。
https://v.qq.com/txp/iframe/player.html?vid=j0675juqpek&width=500&height=375&auto=0
通过本教程,希望你已经掌握了以下知识:
如何读取文本文件;
如何把字符串分割成列表;
如何依据顺序,找出列表中的某一项内容;
如何遍历列表;
如何统计字符串a中,字符串b出现的次数;
如何新建,并用遍历方法,填充字典;
如何读入外部帮助函数模块,并调用其功能函数;
如果你希望在本地,而非云端运行本教程中的样例,请使用这个链接(http://t.cn/R1T4400)下载本文用到的全部源代码和运行环境配置文件(Pipenv)压缩包。
然后,请你参考《如何用 pipenv 克隆 Python 教程代码运行环境?》一文的说明,利用 Pipenv ,在本地构建代码运行环境。
如果你知道如何使用github,也欢迎用这个链接(http://t.cn/R1T4iL5)访问对应的github repo,进行clone或者fork等操作。
当然,要是能给我的repo加一颗星,就更好了。
建议
录完视频,我做个对比分析:
我俩的讲法,到底有哪些不同?
细节的差别,可能有很多。但是大多都不重要。
我只想给尹老师提一个建议——把握节奏。
这里的节奏,主要是为了学生和老师分别获得即时反馈用的。
编程不是一门看了,甚至听了,就能懂的课。
这就是为什么,得到App至今也没有上线编程课程。
编程必须要强调训练,注重实践。
训练该在什么时候做?
来自 Coursera, Udacity, 和 DataCamp 等平台的经验是:
间隔必须足够短。
老师得盯住学生在学完知识点后,旋即练习。
通过练习,把握知识和技能,提升应用能力。
学生在练习中遇到了疑惑,及时提问,加以解决,可以避免疑问的非线性积攒。
如果你不理解“疑问的非线性积攒”,可以回忆你学微积分或随机过程的遭遇。
学生不断积攒疑问,对老师也会有很大的不利影响。因为老师同样得不到有效反馈,还以为学生那边一切顺利呢。
在文件操作这一部分,尹老师确实也留了练习。
# 练习一 文件的创建和使用
1. 创建一个文件,并写入当前日期
2. 再次打开这个文件,读取文件的前4个字符后退出
问题在于,有多少学生会主动去 GitHub 上面找到这个练习,而且不但做了,还反馈给老师呢?
他们会拖延,甚至忽略这些练习。
然后一味继续播放下一集。
看似懂了内容,实际上没有真正掌握。
一旦中途遇到了比较困难的题目,或者是最后来个“期末考试”(例如项目作业),学生刚刚建立起来的学习兴趣和信心,可能会彻底崩盘。
还是回到一开始那个问题——如果学生自律能力足够强,他也就不需要这门 MOOC 了。
我的视频教程,就是把尹老师原先直接讲解的内容(武器文件读取与统计)先作为练习题,布置给了学生。
刚学完知识后,大部分人,还是愿意在操作成本足够低的情况下,去尝试一下的。
什么叫“操作成本足够低”?
看看我采取的这些方法,你就能理解了:
不需要学生自行安装任何编程环境,有浏览器和网络就行;
不用离开 Jupyter Lab 界面,直接打开另外一个 ipynb 就行;
不需要面对空的文档,只需要在辅助代码基础上,做填空就行;
不需要猜测代码长度,已经给出了建议行数;
不需要接触过多新的知识点,例如数据框转化、排序和绘图等,只需要调用已封装的帮助函数即可。
而且,视频教程末尾,明确说明了,下一个视频就是讲解练习的。
这就指明了,本练习的截止日期,就是你播放下一个视频的时候。
对于自律能力差的学生,很多时候,只能靠这种前面铺路、后面推一把的方法。
尹老师的教程介绍里面,类似《三国》武将和兵器谱统计这样的有趣例子还有不少。
例如查找星座和属相,用机器学习分类鸢尾花,用爬虫爬图片等。
因此,我对后续即将上线的20几个视频,还是很期待的。
《零基础学 Python》课程对应的 github 项目链接在这里(http://t.cn/R1TGsnK)。
里面不仅包括课程已发布视频的全部对应代码,还包含了配套的练习和讲义等。你可以在订阅课程之前,先浏览一下。
如果你对这门课程感兴趣,可以长按下图,扫码订阅。
讨论
你是通过什么课程或书籍,入门 Python 的?它有什么特色?还有哪些值得改进的地方?欢迎留言,把你的经验和思考分享给大家,我们一起交流讨论。
如果你对我的文章感兴趣,欢迎点赞,并且微信关注和置顶我的公众号“玉树芝兰”(nkwangshuyi)。
如果本文可能对你身边的亲友有帮助,也欢迎你把本文通过微博或朋友圈分享给他们。让他们一起参与到我们的讨论中来。
延伸阅读
创作不易,感谢打赏!
如果喜欢我的文章,请微信扫描下方二维码,关注并置顶我的公众号“玉树芝兰”。
欢迎微信扫码加入我的“知识星球”第二季。第一时间分享我的发现和思考,优先解答你的疑问。
或者,你也可以使用下面的小程序向我提问。