12月的第一天,天冷了,不更新一点啥的总觉得浑身有点难受。
前段时间本来写了我好几天的“完美代码”却因为32G内存不足而中道崩殂了。无奈只有寻找其他办法了,于是就花了好些天一直在研究大数据下怎么使用out-of-memory和parallelization方面的技术。结果翻遍了stackoverflow也没找到合适的解决方法,都有点逼我差点试图用C来重新编写部分代码了。不过最后发邮件求助在芝加哥的dask的开发团队,得到一些帮助后花了两三天时间写了一大堆函数式和垃圾回收方面代码,总算是差不多把这个问题解决了。内存和CPU被蜜汁优化了哈哈哈。。。
话说回来,这近些日子,随着机器学习的热潮,python也算是程序界的蒂花之秀了,几乎到处都能看到它的声影。算下来,我也有“几乎4年”的python开发时间了,期间还使用python来参加全国研究生数学建模比赛并连续两年拿到了国二。都说python入门简单,网上也有很多学习资源。但是大多数都比较乱,没有一个明确的顺序和方向。今日我就推荐一些如何从零开始用python进行科学计算的书籍吧。
第0本:《Python学习手册》
不得不说,欧瑞利公司出版的程序设计书籍真心不错,诙谐幽默,很容易让读者接受。我是在大四期间开始自学python的,第一本书就是它。这本书虽然有七八百页,但是作者加入了很多让读者有充分信心来理解的内容,因此读起来也不费事。这本书几乎没有提及任何python官方以外的库,所以接触到的是完全“pythonic”的语法。我当时几乎每天看50页左右,有时做做笔记,看完一部分之后再动动手编程,差不多一个月时间就看完了。就如这本书最后部分所写的那样,读完这本书基本上算是一个中阶python程序员了。当然,这还不够,因为这时候的我们相当于会搭小木屋了,但是,要设计一栋现代化大楼,还需要一些工作。
第1本:《利用python进行数据分析》
同样还是欧瑞利的书。
正如这本书前言部分所写的那样,已经默认读者基本掌握了python的初级语法并具有一定的数理统计和线性代数知识,如方差啊、协方差啊、矩阵啊、行列式啊、特征向量之类的,知道这些名词所对应的知识就基本上足够进行数据分析了。
此书主要侧重于讲解主流的python科学计算库,如Numpy,pandas,matplotlib。其中,Numpy侧重于描述矩阵的一切关系,是用python进行科学计算的根基,几乎可以实现Matlab对矩阵的一切运算。pandas是数据表分析的基础,几乎可以实现一切SQL语言所完成的查询与计算。并且,pandas是完全支持Numpy的,也就是说,Numpy的数据是可以轻松转换成pandas的处理格式,反之也差不多。Matplotlib是python中最最著名的作图库,可以做出一切满足要求的统计图,前提是要敲足够多的代码。。。虽然这个库很庞大,但是初学者还是多用用这个库来作图,等会的差不多或者是厌烦了呢再改用例如seaborn这种高级绘图库。只要仔细阅读了此书,从此科学计算不是梦~
第2本:《python科学计算》
清华大学出版社出版。
讲道理,清华大学出版的书,要么是晦涩难懂,要么是太简单易懂。不过嘛,这本科学计算的书还是不错的。我当时用的是第一版,和上面那本一起对照着看的,充当工具书。此书除了讲Numpy以外,还会讲到理科中会常用的库Scipy。Scipy这个库包含了很多数值计算和数学物理方面的内容。比如pi值啊、普朗克常数啊、光速等等的,至于函数方面,比如以前学的什么拟合啊、插值啊、凸优化什么的。这个库比较适合理科生使用,看看也没什么损失(反正我几乎没用过)。不过当时第一版里面有个章节是用的Enthought公司开发的库,不过已经废弃的那种,现在这个第二版应该把这一章节重新制作了吧。
第三本:《机器学习实战》
不知道是翻译的国外的哪个出版社的书。
这本书当时是和西瓜书一起出现的。西瓜书主要是讲机器学习算法理论,而这本书是既讲理论(不难)更讲算法,即如何用python来实现主流的机器学习算法。有趣的是,这本书中的代码几乎没有借Numpy以外的库来实现的,可以说是非常的pythonic了。我建议第一遍看的时候主要看它的实战例子,第二遍再看相关代码。原因有两点,第一:目前有诸如sklearn这样方便用户调用的机器学习库,大多数情况下我们不需要重复造轮子;第二:看代码是真的慢。。。
看完第0本,中阶语法不用愁。
看完第1本,数据分析信手拈来。
第2本就不用看完了,偶尔翻翻就好了。
看完第3本,主流的机器学习思想基本上可以搭建起来了。
我平时也喜欢看看其他的python的书,看看有什么新奇的东西。比如这是我书柜的一角,有的书也很有趣,《pythoncookbook》就是其中的一本。不过不是很建议初学者读,后期感兴趣的朋友可以试试的。