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,那該多好。玩笑。
說的太好了!
揭開其他程序員的面紗,窺視他們如何施展魔法工作,這很有用。你可以看到,他們使用的工具、技術,我們都可以採用,很多都是免費的。我很感謝他們能分享這些信息。