pythoninnutshell
1. python String和PyQt QString的区别
以下在python2.5和PyQt4.4.6 for python2.5环境下讨论。
在python中有两种与字符有关的类型:string object和Unicode object。
平时进行输入输出的一般都用string
object,当需要显示一些特殊字符或者中文等文字时候,需要转换为Unicode编码。在PyQt中也有两种字符类型与上面两者对应:QByteArray和QString,主要是使用QString操作数据。
1) python string
object可以理解为一个接一个字节的字节组,至于表示什么编码,与表示文字有关,比如“python
string”,“中文”。注意它是有不同编码区分的。
PyQt中与之对应的是QbyteArray,而不是Qstring。
A built-in string object (plain or Unicode) is a sequence of
characters used to store and represent text-based information
(plain strings are also sometimes used to store and represent
arbitrary sequences of binary bytes). (摘自《Python in a
NutShell》)
QByteArray can be used to store both raw bytes (including '"0's)
and traditional 8-bit '"0'-terminated.(摘自《PyQt手册》)
2)Python Unicode
object可以理解为固定使用utf-16编码的字节组,其中英文和中文都使用两个字节(16位)来表示,如:u"Python
Unicode object"、u"中文"。
PyQt中与之对应的就是QString了。
Unicode string literals have the same syntax as other string
literals, with a u or U immediately before the leading quote.
(摘自《Python in a NutShell》)
Qt also provides the QString class to store string data. It stores
16-bit Unicode characters, making it easy to store
non-ASCII/non-Latin-1 characters in your
application.(摘自《PyQt手册》)
QString stores a string of 16-bit QChars, where each QChar
corresponds one Unicode 4.0 character.(摘自《PyQt手册》)
2 PyQt内部类型转换
QString有
toAscii()、toUtf8()函数转换为QByteArray类型,(这个基本不用,因为很少直接用QByteArray类型)有__init__
(self, QByteArray a)函数将QByteArray类型转为QString。
3. Python string object和Python Unicode object相互转换
1)Python string object是原始编码是有区分的,通过 decode('原始编码')
函数解码得到通用utf16编码即Python Unicode object。
>>>"python
string".decode('ascii')
或者
>>>"python
string".decode()
得到 u"python string"
因为默认按ascii解码。
>>>"中文".decode('gbk')
得到 u""u4e2d"u6587" ,打印出来就是 中文 二字。(注意结果是2字节一组,共两组,对应两个汉字)
又:"python string".decode('gkb') ,即按汉字来解码,也可以得到 u"python
string",因为gbk编码也支持英文字母;
但是"中文".decode('ascii') 即按ascii解码是错误的,因为ascii编码不支持汉字!
>>>
"dfdf".decode()
u'dfdf'
>>>
"dfdf".decode("ascii")
u'dfdf'
>>>
"dfdf".decode("gbk")
u'dfdf'
>>>
"中文".decode("gbk")
u'"u4e2d"u6587'
>>>print
"中文".decode("gbk")
中文
>>>
"中文".decode("gb2312")
u'"u4e2d"u6587'
>>>
"中文".decode("ascii")
Traceback (most recent call last):
File "<interactive input>", line 1,
in <mole>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd6 in
position 0: ordinal not in range(128)
2)Python Unicode object原始编码固定是utf16,通过 encode('目的编码') 编码来得到Python
string object。
>>>u"unicode
string".encode()
或者
>>>u"unicode
string".encode('ascii')
得到
'unicode string',默认目的编码为ascii。
>>>u"中文".encode("gbk")
得到'"xd4"xd0"xce"xc4',打印出来就是 中文。(注意结果是1字节一组,共4组)
>>>
u"sdff".encode()
'sdff'
>>>
u"sdff".encode('ascii')
'sdff'
>>>
u"sdff".encode('gbk')
'sdff'
>>>
u"sdff".encode('gb2312')
'sdff'
>>>
u"中文".encode('gbk')
'"xd6"xd0"xce"xc4'
>>> print
u"中文".encode('gbk')
中文
>>>
u"中文".encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in
<mole>
UnicodeEncodeError: 'ascii' codec can't encode characters in
position 0-1: ordin
al not in range(128)
注意:执行>>>
u"中文".encode('gbk')命令需要你的IDE支持gbk编码,在官方shell下执行肯定没问题,但如果你的IDE比如PyWin中文输入异常,则可能报错。
4. Python string object和Python Unicode object向QString的转换。
Qt一般不直接操作QByteArray,只需关注Python string object和Python Unicode
object向QString的转换。
很多关于PyQt4的英文书籍说:PyQt函数需要QString参数的地方都可以直接用Python string
object或者Python Unicode object,如果非要转换可以直接用QtCore.QString()构造。比如《GUI
Programming with PyQt》,再如《PyQt手册》:
Whenever PyQt expects a QString as a function argument, a Python
string object or a Python Unicode object can be provided instead,
and PyQt will do the necessary conversion automatically.
You may also manually convert Python string and Unicode objects to
QString instances by using the QString constructor as demonstrated
in the following code fragment:
qs1 = QtCore.QString("Converted Python string object")
qs2 = QtCore.QString(u"Converted Python Unicode object")
但可惜这只适用于英文即ascii编码,对于中文则行不通!
直接的QString:
>>>
QtCore.QString('中文')
PyQt4.QtCore.QString(u'"xd6"xd0"xce"xc4')
>>> print
QtCore.QString('中文')
Traceback (most recent call last):
File "<stdin>", line 1, in
<mole>
UnicodeEncodeError: 'ascii' codec can't encode characters in
position 0-3: ordin
al not in range(128)
>>>
>>>
QtCore.QString(u'中文')
PyQt4.QtCore.QString(u'"u4e2d"u6587')
>>> print
QtCore.QString(u'中文')
Traceback (most recent call last):
File "<stdin>", line 1, in
<mole>
UnicodeEncodeError: 'ascii' codec can't encode characters in
position 0-1: ordin
al not in range(128)
>>>
因为它们都是默认按ascii编码转换!
GUI编程:
可以创建一个QTextEdit对象myTextEdit, 检验:
myTextEdit.append("中文")
或者
myTextEdit.append(u"中文")
或者
myTextEdit.append(QtCore.QString('中文'))
或者
myTextEdit.append(QtCore.QString(u'中文'))
你会发现显示都是乱码...因为它们都是默认按ascii编码进行内部转换得到QString相应utf16编码的。
解决方法是:
利用unicode()函数显示指定gb2312编码进行中文编码转换,转换后的Python Unicode
object则是可以直接作为QString参数代入用的:
>>> unicode('中文',
'gb2312', 'ignore')
u'"u4e2d"u6587'
>>> print
unicode('中文', 'gb2312', 'ignore')
中文
>>>
myTextEdit.append(unicode('中文', 'gb2312', 'ignore'))
#用以替代myTextEdit.append(u"中文")
或者多此一举下:
myTextEdit.append(QtCore.QString(unicode('中文', 'gb2312',
'ignore')))
#用以替代myTextEdit.append(QtCore.QString(u'中文'))
5. QString向Python string object和Python Unicode object的转换。
Python中需要用Python string object和Python Unicode
object的地方可就不一定可以直接用QString了!!!
QString向Python string object转换可以理解,因为编码不同。
QString向Python Unicode object的转换?需要转换吗?不都是utf16编码吗?
QString是tuf16编码,但是它的实现并非Python Unicode
object那样直接的utf16码,而实际是一个QChar串,每个QChar才对应unicode符,所以地位相当但并不相同。
许多英文书籍写到:可以使用str()函数直接将QString转换为Python string
object,可以使用unicode()直接将QString转换为Python Unicode
object。如《PyQt手册》:
In order to convert a QString to a Python string object use the
Python str() builtin. Applying str() to a null QString and an empty
QString both result in an empty Python string object.
In order to convert a QString to a Python Unicode object use the
Python unicode() builtin. Applying unicode() to a null QString and
an empty QString both result in an empty Python Unicode
object.
但同样只适用于英文,具体见下面分别分析。
1)QString向Python Unicode object的转换。
>>> from PyQt4 import
QtGui, QtCore
>>>
unicode(QtCore.QString('def'))
u'def'
>>> print
unicode(QtCore.QString('def'))
def
对于中文,unicode()必须要指定编码后有效。(这样也只针对直接的QString有效?对于Qt
GUI编程中,从QWidget取得的QString无效?)
>>> from PyQt4 import
QtGui, QtCore
>>>
unicode(QtCore.QString('中文'))
u'"xd6"xd0"xce"xc4'
>>> print
unicode(QtCore.QString('中文'))
Traceback (most recent call last):
File "<stdin>", line 1, in
<mole>
UnicodeEncodeError: 'gbk' codec can't encode character u'"xd6' in
position 0: il
legal multibyte sequence
指定原始编码后:
>>>
unicode(QtCore.QString('中文'),'gbk','ignore')
u'"u4e2d"u6587'
>>> print
unicode(QtCore.QString('中文'),'gbk','ignore')
中文 TEST
2. python哪本书
Learning Python
这本书涵盖了Python编程相关的基础知识。这本基础性书籍是为那些编程初学者准备的,以帮助他们获得更好的理解,并且可以帮助他们建立一个坚固的程序设计的基础。这本书非常重要,因为它包括了Python的各个重要的部分,例如Python 2.7.X以及Python 3.X. 由于这本书简单易懂,读者们可以获得一个十分深入的对Python的理解。
Python Cookbook
这本书包含了Python语言相关的关键知识并且介绍了大量实用的Python技术,包括从简单的字符串拼接至递归下降分析程序等的写法。本书的部分章节还包含了大量的关于Python生成器与迭代器的技术。此外,它也在书中许多地方囊括了大量实战经验。因为这本书包括了大量重要的章节,它成为了想精通Python程序语言的人的必读物。
Python For Data Analysis
这本书是Python关于数据处理、数据清理、数据聚集等方面的全面的指导书籍。它是为数据密集型应用而着,并且提供了对数据分析问题的一些详尽的介绍。它可以让读者很好得理解及使用多种数据工具。这本书易于阅读和理解,并且提供了许多能够有效分析数据的出色的解决方案。这本书很适合于职业程序员,研究员以及已经深入掌握了Python基础的人使用。
Python Essential Reference
这本书是一本优秀的学习Python语言的参考书。它提供了一个清晰的对Python背景的理解,以及Python背后所发生的事情。它同样也包含了对Python的详细概述,可以帮助读者获得许多实战经验。此外,该书也包含了Python 2的相关章节,它同样是程序员需要首先通读的书籍。
Python Programming: An Introction To Computer Science
这本书是Python语言的一个很好的指导书籍。它是一本对Python编程语言的基础的介绍的图书,并且它提供了Python多个方面的一个清晰的认识,例如工具和观念。一旦涉及到安全领域,解决诸如取证,复杂协议工具(如SMB)的整合等问题时,这本书是最好的读物。本书十分适合那些对于Python语言已经有了一个很好理解的程序员使用。
3. Core Python Programming和Python in a Nutshell哪本好
书 是用来用的。不是用来膜BAI,或者是用来欣赏的。
python学会与否主要还是靠练习。几本书 都还不错。 等你别一段时间后再回来随便翻一下。足够了。
不过老实说,没有哪本书 真正讲到核心问题的。你遇到问题大部分时候还是需要搜索,以及自己看源代码,自己试验。
yield的用法不用学。你试一下就可以了。相当的简单好用。个人体会是一种带有锁的数据传递机制。
我推荐你看python自带的那个chm帮助。也许tutor不怎么样。不过后面的每个库最好都看一遍。特别是datatype那一章节。
python里的库,基本上没有浪费的。我几乎都用过。在特定场景下有用。
最近在用python做快速计算。忽然发现自己对于PyObject理解不够深。cython通过共享内存传递数据到c的模块,再传回来似乎丢东西。正在找原因。
4. 关于python学习
如果有其他语言的基础 学其他语言的语法都很快
学python的话主要学技巧吧 要熟练掌握还得做项目写程序,最好找本手册性质的参考书比如 python in a nutshell 这样的
5. 检测字符串是否包含特定的字符集合
问题您须要检查字符串中是否出现了特定的字符集合。
解法最简单的解法清晰、快捷、通用(不仅适用于字符串,还适用于任何序列;不仅适用于集合,还适用于任何您可以对其进行 membership 测试的容器):
def containsAny(seq, aset): """ Check whether sequence seq contains ANY of the items in aset. """ for c in seq: if c in aset: return True return False采用更高级、更复杂的解法可换得一些速度优势,利用标准库模块 itertools 以基本相同的思路来处理:
import itertoolsdef containsAny(seq, aset): for item in itertools.ifilter(aset.__contains__, seq): return True return False讨论大多数与集合(set)相关的问题最好是用 Python 2.4 引入的内建 set 类型来解决(在 Python 2.3 中您可以使用等效的标准库中的 sets.Set 类型)。但这其中也有例外。如下例所示,纯粹基于 set 的方案可以是:
def containsAny(seq, aset): return bool(set(aset).intersection(seq))然而,此方案中的 seq 的全部项目都必须被检查。而本条目“解法”栏目中的函数采用的是“短路(short-circuit)”手法:一旦找到就立刻返回。当然,若结果为 False ,“解法”栏目中的函数仍然必须检查 seq 的全部项目?否则我们就无法确认 seq 中的每个项目都不在 aset 中。而在结果为 True 的情况下,我们经常能够很快地明确结果,因为只须找到某一项是 aset 的成员即可。当然,上述情况是否值得斟酌,完全取决于数据的具体情况。若 seq 很短或者结果大多是 False ,那么上述两种方案就没有实质上的区别;而对于很长的 seq 来说(通常可以很快地明确结果为 True),这区别就极为重要了。
“解法”栏目中 containsAny 的第一个版本的优点是简单、明晰,以一目了然的方式表达了核心思路。第二个版本可能显得“机巧”,而在 Python 世界中“机巧”并不是个褒义词,因为 Python 世界的核心价值观是简单和明晰。然而,第二个版本还是值得斟酌,因为它展示了一种基于标准库模块 itertools 的更高级的方案,而更高级的方案往往胜过较低级的方案(尽管在本条目中这一点颇具争议)。itertools.ifilter 接收一个 predicate(谓词)和一个 iterable(可迭代体),并将 iterable 中满足 predicate 的项目 yield 出来。这里将 anyset.__contains__ 作为predicate ;当我们撰写 in anyset 形式的语句来进行 membership 测试时,anyset.__contains__ 就是被绑定的方法(bound method),语句内部会调用它。因此,只要 seq 中有哪个项目是属于 anyset ,ifilter 就会将其 yield 出来;一旦发生这种情况,我们就可以立刻返回 True 。如果代码执行到了 for 语句之后,就必然意味着 return True 从未被执行过,因为 seq 的任何一个项目都不属于 anyset ,由此应该 return False。
---- BOX BEGIN ----什么是“Predicate(谓词)”?“Predicate(谓词)”是讨论编程时您会经常遇到的一个术语,意即“返回 True 或False 的函数(或其他可调用对象)”。若 predicate 返回结果为真,就称满足了 predicate 。---- BOX E N D ----若您的应用程序需要诸如 containsAny 这样的函数来检查一个字符串(或其他序列)是否包含某集合的成员,您可能还需要象下面这样的变体形式:
def containsOnly(seq, aset): """ Check whether sequence seq contains ONLY items in aset. """ for c in seq: if c not in aset: return False return TruecontainsOnly 与containsAny 形式相同,只是在逻辑上反过来了。其他明显类似的功能本质上要求检查所有项目,无法应用“短路”手法,因此最好使用(Python 2.4 中)内建的 set 类型来处理(Python 2.3 中可使用 sets.Set ,用法相同):
def containsAll(seq, aset): """ Check whether sequence seq contains ALL the items in aset. """ return not set(aset).difference(seq)若您还没用惯 set(或 sets.Set)的 difference 方法,请注意该方法的语义:对于任意集合 a ,a.difference(b) 返回a 中所有不属于 b 的元素的集合(如同 a-set(b))。例如:
>>> L1 = [1, 2, 3, 3]>>> L2 = [1, 2, 3, 4]>>> set(L1).difference(L2)set([ ])>>> set(L2).difference(L1)set([4])希望上述例子有助于理解如下事实:
>>> containsAll(L1, L2)False>>> containsAll(L2, L1)True(换句话说,请不要将 difference 与set 的另一个方法 symmetric_difference 搞混淆了,symmetric_difference 返回a 和 b 中所有“属于 a 但不属于 b,或者属于 b 但不属于 a”的元素的集合)
[译注] 关于symmetric_difference 请参考如下例子:
>>> L1 = [1, 2, 3, 5]>>> L2 = [1, 3, 4, 8]>>> set(L1).symmetric_difference(L2)set([2, 4, 5, 8])>>> set(L2).symmetric_difference(L1)set([2, 4, 5, 8])若您要处理的 seq 和aset 只是(单纯的,而非 Unicode)字符串,可能就不完全需要本条目提供的函数所具有的通用性,不妨考虑采用 Recipe 1.10 中讲到的更有针对性地方案(该方案基于字符串的 translate 方法以及标准库中的 string.maketrans 函数)。例如:
import stringnotrans = string.maketrans(’’, ’’) # identity "translation"def containsAny(astr, strset): return len(strset) != len(strset.translate(notrans, astr))def containsAll(astr, strset): return not strset.translate(notrans, astr)这个方案略显巧妙,其原理在于:strset.translate(notrans, astr) 是由strset 中那些“不属于 astr 的字符”所组成的子序列。若这个子序列与 strset 长度相同,那就说明 strset.translate 并没有移除 strset 中任何字符,因此也就说明在 strset 中没有字符是属于 astr 的。反之,若子序列为空,那就说明 strset.translate 移除了 strset 中所有的字符,因此也就说明 strset 中所有的字符也都在 astr 中。当您想要将字符串作为字符集合来对待时,自然而然地就会用到 translate 方法,因为该方法效率高,用起来顺手,还具伸缩性(详情请参见 Recipe 1.10)。
本条目的这两组解决方案具有非常不同的通用性。前一组方案非常通用,并不仅限于字符串处理,对操作对象的要求相当少。而后一组基于 tanslate 方法的方案仅在“astr 和strset 都是字符串”或“astr 和strset 的功能在表象上与普通字符串非常接近”的情况下才能凑效。Unicode 字符串不适用于基于 tanslate 方法的方案,因为 Unicode 字符串的 translate 方法与普通字符串的 translate 方法的签名式(signature)不一样?Unicode 字符串的 translate 方法只有一个参数(该参数为 dict 对象,其将代码数字映射至 Unicode 字符串或 None),而普通字符串的 translate 方法有两个参数(都是字符串)。
请参见Recipe 1.10 ;Library Reference 和 Python in a Nutshell 中关于字符串及 Unicode 对象的 translate 方法,以及 string 模块的 maketrans 函数的文档;Library Reference 和 Python in a Nutshell 中关于内建 set 类型(仅限 Python 2.4 及后续版本)、sets 和 itertools 模块,以及特殊方法 __contains__ 的文档。查看本文来源
6. 哪位大哥能给个python内建函数大全
不认识的函数可以在shell 下运行help(你的函数)
建议找本教程看,偏手册的有python in a nutshell
7. 应该怎样学习python
先拿本教材看看,然后通过亲身实践一段时间,再找高手解惑!最后关键是接项目,或者演练一下别人的经典项目。
最后是自己的创新!
8. 果壳是不是Python做的
引用 Maigo 的回应:其实果壳不是python做的,果肉才是。
因为有一本书叫做《果壳里的蟒蛇》(Python in a Nutshell)冷到了……
9. 如何选择一本优质的数据科学书籍
如何选书
选择一本合适的数据科学书至关重要,一本不适合的书会浪费你的时间以及精力。
有时候,书的大纲可能正合你意。但是随着你深入阅读时,可能会发现作者只触及了表面,并不够深入。这种情况之前也发在我的身上,我写这篇文章就是为了让你避免这种情况。
当我们选择数据科学相关书籍时,可以考录一下几点:
· 看作者的个人简介:能够帮助了解作者的背景,他的研究和主要兴趣,同时也展现了本书的一些细节。但也要给新的作者机会,不要把这一点作为关键。
· 仔细阅读序言:大部分图书在网上都能免费阅读其序言部分。请仔细阅读该部分。大多数情况下,在此部分作者不仅会介绍写书背景,也会阐述各章节的细节。
· 选择有独立章节的书:这是我的个人喜好,比较一本技术型的书不是小说。虽然从书中由易到难、逐步学习很重要,但选择一本或多或少带有独立章节的书能让你结构性的把握此书。
· 去书店逛逛:虽然如今可以在网上找到所有的东西,但是在书店可以给你更直观的感受。有时候,当浏览一本书的关键章节时,我可能会改变主意,去选择另一本书。
· 阅读在线评论:首先不要相信所有评论,毕竟评论是主观的,但在线评论可以了解人们对此书的普遍看法。我们常说:不要以一本书的封面来判断其好坏。亚马逊的评论值得参考,人们会对作者做出有见地的评论和批评。
感兴趣的书籍
数据科学有很多好书,在本文末尾,我列出了39本我所读过的数据分析书籍。如果列表中没有涵盖你认为优质的书,请给我留言。
详细的回顾
一次回顾一堆书是一个艰巨的任务。将所有这些书放在一起的原因是,我认为概念和理论上有一些重叠的部分,其中最具挑战是大部分时间它们都是以不同的词汇呈现和阐述的。以下是我列出的,在阅读数据科学书之前值得一看的理想书籍清单。记住,你永远不会从一本书中获得足够的知识,因为科学领域是非常复杂的,一本书是远远不够的。
在下文中,我根据每个标准选择了这些书籍中的前5名。
书籍长度(页数)
一本书的长度确实取决于所探讨的内容。虽然这不是对质量的衡量标准,但我们可以假设你阅读的内容越多,所获得的知识就越多。以下是我根据书籍中探讨的内容多少排名前5名的书籍。
The Elements of Statistical Learning
Trevor Hastie and Robert Tibshirani
Python in a Nutshell: A Desktop Quick Reference
Alex Martelli, Anna Ravenscroft, Steve Holden
Data Structures and Algorithms in Python
Michael T. Goodrich and Roberto Tamassia
Doing Data Science
Cathy O’Neil and Rachel Schutt
Python Machine Learning
Sebastian Raschka
写作风格
对科学领域进行阐述很有挑战性,不能让每个人都满意,这取决于目标受众。有些作者有这方面的天赋,能够以简单明了的方式传达复杂的概念。同样,通过巧妙的结构和良好的学习方式解释概念,有助于学习。以下是写作风格方面前5名的书籍。
The Elements of Statistical Learning
Trevor Hastie and Robert Tibshirani
Python Machine Learning
Sebastian Raschka
The Art of Data Science
Roger D. Peng, Elizabeth Matsui
Machine Learning: The Art and Science of Algorithms that Make Sense of Data
Peter Flach
Real World Machine Learning
Henrik Brink and Joseph Richards
结构
教授数据科学并非易事,但也没有那么难,我们只需了解应如何构建内容,从而确保信息被保留。关于这点有两个主要的方法。我们可以构建独立的模块,当中的内容可以不具备相关性,但还是属于数据科学分析流程的内容。单独阐述这些概念不需按照顺序。
另一方面,人们可以通过以难度递增的顺序来构建内容,就像大多数教学书籍中一样。例如关于回归,书中以最基本形式的回归开始,并加以越来越多的变化和最复杂形式的回归。以下是结构性排名前五的书籍。
The Elements of Statistical Learning
Trevor Hastie and Robert Tibshirani
Python Machine Learning
Sebastian Raschka
Modern Python CookBook
Steven F. Lott
Docker in Practice
Ian Miell and Aidan Hobson Sayers
Ensemble Methods: Foundations and Algorithms
Zhi-Hua Zhou
内容
怎样就算太过了?从哪儿开始记叙?应该涉及什么内容,跳过什么内容?这些都是写数据科学相关书籍是会遇到的问题。一些作者会选择涵盖一个非常具体的领域,当查看这些作者的学术资料时,我们看到他们的研究与着作之间的联系。大多数时候,这些作者写的不是一般的数据科学书籍,而是他们的研究的一部分。他们的目标受众也比较狭窄。另一方面,一些作者针对数据科学教学,关注的是基本的和全局的部分,而不是细节。这类书籍常常涉及使用R语言或Python的回归,分类,以及使用模块进行数据分析等等。
通过封面判断一本书?
大多数人都说不要这么做。但我不认同这点。我们会用封面来判断一本书的好坏吗?我们需要、且必须这么做。当然,这里说的不是这本书的外部封面,而是在序言中可以看到的,书第一部的介绍性段落。在这部分,作者大部分都详细介绍了本书各个章节的细节。有时,作者会偏离他们最初对书籍的设想。这是正常的,这个领域正在快速发现,观点也是如此。但是一本好书总能够遵循其最初的设想。
解释的深度
作者在解释时会深入到哪个程度?我认为这与我在这篇文章中提到的很多观点有关。这与内容,结构和长度之间存在关联性。解释的深度能够区分好的作者,作者传达的信息中包含的内容,关系到你能够吸收知识,特别是那种会在大脑中留存很长时间的知识。因此,作者的技能在这占很重要的角色。因为他们必须掌握内容背后的真谛,这使得他们在解释问题时能够深入,同时避免读者脱离本书的大框架。
代码解释
代码很重要,但不是必需的。如果这本书的主要目的是为了解释特定的方法,算法和方法在后台如何工作,那么最好的方法是从头开始重新实现一个算法。尽管很多人会说:“为什么要这么麻烦,我们有对应的模块啊”,那么我只能建议他们换一本书,因为他们选错书了。重新实现的过程,能够让你感受到为了优化库的可扩展性所投入的精力。根据上下文,一些书只是为了教会你如何使用特定的库和包,这种书大多时候被称为cookbook,这类书作者会依赖笔记(分享在GitHub或其他版本控制平台用于对他们的书进行补充)。通过作者,你会发现足够的代码能够通过解释一些联系,从而帮助你掌握特定的主题。
The Elements of Statistical Learning
Trevor Hastie and Robert Tibshirani
Python Machine Learning
Sebastian Raschka
Modern Python CookBook
Steven F. Lott
Docker in Practice
Ian Miell and Aidan Hobson Sayers
Ensemble Methods: Foundations and Algorithms
Zhi-Hua Zhou
结语
这是一个非常主观的分类,如果你有不同的看法,欢迎给我留言。
附:39本数据科学相关推荐书籍
Doing Data Science
Cathy O’Neil and Rachel Schutt
Docker in Action
Jeff Nickoloff The Art Of R Programming
Norman Matloff
Introcing Data Science
Davy Cielen and Arno Meysman
Learning Predictive Analytics with Python
Ashish Kumar
Data Structures and Algorithms in Python
Michael T. Goodrich and Roberto Tamassia
Amazon Web Services in Action
Andreas Wittig and Michael Wittig
Spark for Python Developers
Amit Nandi
Machine Learning : A probabilistic perspective
Kevin P. Murphy
Real World Machine Learning
Henrik Brink and Joseph Richards
iPython Interactive Computing and Visualization Cookbook
Cyrille Rossant
Mastering Machine Learning with scikit-learn
Gavin Hackeling
Python Data Science Cookbook
Gopi Subramanian
Building Machine Learning Systems with Python
Willi Richert and Luis Pedro Coelho
Hadoop The Definitive Guide
Tom White
Statistical Learning with Sparsity
Trevor Hastie and Robert Tibshirani
The Elements of Statistical Learning
Trevor Hastie and Robert Tibshirani
Fluent Python
Luciano Ramalho
Thoughtful Machine Learning
Matthew Kirk
Machine Learning with R Cookbook
Yu-Wei, Chiu (David Chiu)
Docker in Practice
Ian Miell and Aidan Hobson Sayers
Data Science and Big Data Analytics
EMC Ecation Services
Mastering Object-Oriented Python
Steven F. Lott
Machine Learning with Spark
Nick Pentreath
Machine Learning for Hackers
Drew Conway and John Myles White
Data Science for Business
Foster Provost and Tom Fawcett
Developing Analytic Talent
Vincent Granville
Think Python : How to Think Like a Computer Scientist
Allen B. Downey
Python Algorithms
Magnus Lie Hetland
Python Cookbook
David Beazley and Brian K. Jones
Testing Python
David Sale
Programming Collective Intelligence
Toby Segaran
Data Analysis with open source tools
Philipp K. Janert
Python in a Nutshell: A Desktop Quick Reference
Alex Martelli, Anna Ravenscroft, Steve Holden
Python Machine Learning
Sebastian Raschka
The Art of Data Science
Roger D. Peng, Elizabeth Matsui
Machine Learning: The Art and Science of Algorithms that Make Sense of Data
Peter Flach
Modern Python CookBook
Steven F. Lott
Ensemble Methods: Foundations and Algorithms
Zhi-Hua Zhou
原文链接:
https://opendatascience.com/blog/how-to-choose-a-great-data-science-book/
10. 看Python 超级程序员使用什么开发工具
我以个人的身份采访了几个顶尖的Python程序员,问了他们以下5个简单的问题:
当前你的主要开发任务是什么?
你在项目中使用的电脑是怎样的?
你使用什么IDE开发?
你将来的计划是什么?
有什么给Python程序员的建议?
就是这几个问题,我找了几个顶尖的程序员和编程书籍作家,问他们这几个相同的问题。下面是他们的回答,希望在他们的回答中你能找到一些可以让你的开发更便捷的工具。
Alex Martelli
Alex Martelli
人物简介:Alex Martelli是一位意大利计算机软件程序员,他是Python软件基金会的成员。从2005年初开始,他以“Über技术首领”的身份在加利福尼亚景山谷歌总部工作。他拥有意大利Bologna大学电子工程学位(1980)。他是《Python in a Nutshell》一书的作者,他还和其他人合着了《Python Cookbook》,他还写了一些其它一些作品,大部分都是和Python相关的。因为他对Python社区杰出的贡献,他被授予的荣誉包括2002 Activators’ Choice Award和2006 Frank Willison award。
你可以通过他的博客了解更多关于他的信息。
问题一、当前你的主要开发任务是什么?
给我的老板(谷歌)开发商业软件,大部分是商业智能方面。
问题二、你在项目中使用的硬件机器是怎样的?
基本上都是谷歌的云服务器,通过谷歌APP引擎直接或间接的使用。有时候也使用一个Unix工作站或Macbook Air,但很少。
问题三、你使用什么IDE开发?
vim, gvim, mvim; 偶尔用一下iPython,但这好像不能算是IDE吧。
问题四、你将来的计划是什么?
应该还会待在谷歌——具体的研究方向那要看实际情况。
问题五、有什么给Python程序员的建议?
学习一下App Engine(通过webapp2 或flask, jinja2, &c以及其它类似django的轻量级环境):它们大部分都会对你的web项目有很好的用处——如果你想在这些环境之外的地方部署web应用,Appscale会是你最方便的选择。
Daniel Greenfeld
Daniel Greenfeld
人物简介: Daniel Greenfeld是《Two Scoops of django》一书的合着人。他有超过6年的在Django领域的研究经验。之前他在美国宇航局做开发,就是在那里他开始了他的Python之旅,一直到现在。他目前是Cartwheel Web的负责人。
你可以通过他的Twitter: @pydanny 和他的博客获取他的更多信息。
问题一、当前你的主要开发任务是什么?
我现在的工作主要是客户端方面,基本上都是用Python。内容服务方面有时候会用到Django,但当前的主要工作基本上跟web无关。
问题二、你在项目中使用的硬件机器是怎样的?
硬件方面,我使用一个2011年的Macbook Air。因为我的开发方式,像Macbook
Air这样的超级本用起来非常舒服。可苹果的产品一般都很贵,我就自己配了一个,我打算所有的任务都用它来做。如果哪天我能有一个新的笔记本,我想试试Linux的超级本或Window8的平板(以前我是靠虚拟机运行Windows8)。
问题三、你使用什么IDE开发?
我使用Sublime Text。我更喜欢文本编辑器,而不是IDE,因为我喜欢深入研究程序库和它们的文档,而不是通过IDE工具来提示我。
问题四、你将来的计划是什么?
我未来的计划就是编程,锻炼,做我最擅长的事情。也许会去一个新地方旅游。我喜欢去没有去过的地方,认识新朋友,品尝没吃过的食物。但大部分我的旅游都是基于客户的需求,今年我不知道什么时候会有这样的机会。
问题五、有什么给Python程序员的建议?
我给Python程序员的建议是挑战极限。寻找新的代码库,研究它们,使用它们。它们有些会不是很好,不好的东西也会教会你一些东西(不该做的事情)。
Miguel Grinberg
Miguel Grinberg
人物简介: Miguel是一个程序员,摄影师和电影制作人。生活在美国俄勒冈州。他目前正在写一本关于使用Python和Flask做web开发的书,将会由 O’Reilly Media出版。这本书的官方网站是Flask Book。
你可以通过他的Twitter: @miguelgrinberg 和他的博客获取更多信息。
问题一、当前你的主要开发任务是什么?
也许你会吃惊,工作中我并不做web开发。我在为Harmonic做视频软件。C++是我在工作中使用的主要语言,但我们却使用了一个古老的用Python写的自动化单元测试框架,用起来很有趣。
空闲时间里我目前的第一大任务就是给O’Reilly出版社写一本关于Flask为框架的书,基本上快写成了。
问题二、你在项目中使用的硬件机器是怎样的?
我的机器是一个双系统的台式机,装的是Ubuntu和Windows8.1。我还有一个Mac OS X笔记本。
我在跨平台方面有些变态。除了给Arino这样的嵌入式系统写代码外,所有其它我写的代码(不管什么语言),都需要在三种平台上运行。为了达到这个目的,我会不断的在Linux,Windows和OS X机器间切换。
问题三、你使用什么IDE开发?
我有一些最爱。PyCharm非常棒,在大型项目时我越来越依赖它,主要是因为它的交互式的调试工具。
在Windows平台上我会使用Visual Studio的一个Python插件,免费的,非常出色,我估计大部分人没听说过它。
我还经常使用SublimeText,通常是在笔记本上使用它。
Notepad++是我在Window台式机上最顺手的工具。在我所有的电脑上都装有一个非常老的Vim,即使在Windows上也使用Cygwin运行它。
问题四、你将来的计划是什么?
我在四月份的PyCon大会上会有一个关于Flask的演讲,我下一步开始着手准备材料,因为书已经快写好了。
我最近没怎么写博客,我很想写一点。我想能多腾出一些时间写博客。我已经拟了一份话题目录,准备按着这个清单写。如果需要的话,我可以把里面的一个关于Flask上的web sockets的文章提到最前面。
问题五、有什么给Python程序员的建议?
我对所有程序员——不光是Python爱好者——的建议是,多去实践,然后把它们分享给世界。分享很重要,从别人那获得反馈是让你提高的好方法。
而对于Python程序员我想说的是,如果我们只需要用嘴去讨论Python2和Python3的差别、而不需要花时间将众多的软件移植到Python3,那该多好。玩笑。
说的太好了!
揭开其他程序员的面纱,窥视他们如何施展魔法工作,这很有用。你可以看到,他们使用的工具、技术,我们都可以采用,很多都是免费的。我很感谢他们能分享这些信息。