現(xiàn)在有如此之多的Python包幻锁,幾乎沒有人能夠全盤掌握。 光是PyPI就可單獨列出47,000個包沸伏!
近日,聽到很多數(shù)據(jù)科學家切換到Python的消息动分,我不由地想到毅糟,雖然他們得到了pandas、scikit-learn和numpy的一些巨大好處澜公,但卻錯過了一些稍微老一點但同樣能提供幫助的Python庫姆另。
在這篇文章中,我將介紹一些鮮為人知的庫坟乾。即使你已經(jīng)是Python高手迹辐,也應(yīng)該看看,可能會有那么一兩個是你從來沒有見過的甚侣!
1)delorean
Delorean是一個非趁鞣裕酷的日期/時間庫。它是我在Python中使用過的感覺最自然的日期/時間munging庫之一殷费。有點像JavaScript中的moment印荔。文檔也不錯,除了在技術(shù)上有幫助详羡,還讓無數(shù)人情不自禁地回過頭來參考仍律。
?
from delorean import Delorean
EST = "US/Eastern"
d = Delorean(timezone=EST)
歡迎加入我的QQ群`923414804`與我一起學習,群里有我學習過程中整理的大量學習資料实柠。加群即可免費獲取
很可能你還沒有聽說過prettytable水泉,因為它列在GoogleCode上面——基本上是被流放的編碼裝備。
盡管被流放到了西伯利亞主到,prettytable在終端或在瀏覽器中依然是強大又美觀的構(gòu)建輸出茶行。所以,如果你正在為IPython的筆記本電腦搞新插件的話登钥,那就使用prettytable為你的HTML __repr__吧。
from prettytable import PrettyTable
table = PrettyTable(["animal", "ferocity"])
table.add_row(["wolverine", 100])
table.add_row(["grizzly", 87])
table.add_row(["Rabbit of Caerbannog", 110])
table.add_row(["cat", -1])
table.add_row(["platypus", 23])
table.add_row(["dolphin", 63])
table.add_row(["albatross", 44])
table.sort_key("ferocity")
table.reversesort = True
+----------------------+----------+
|? ? ? ? animal? ? ? ? | ferocity |
+----------------------+----------+
| Rabbit of Caerbannog |? 110? ? |
|? ? ? wolverine? ? ? |? 100? ? |
|? ? ? grizzly? ? ? ? |? ? 87? ? |
|? ? ? dolphin? ? ? ? |? ? 63? ? |
|? ? ? albatross? ? ? |? ? 44? ? |
|? ? ? platypus? ? ? |? ? 23? ? |
|? ? ? ? cat? ? ? ? ? |? ? -1? ? |
+----------------------+----------+
我第一次安裝snowballstemmer的原因是因為我覺得這個名字很酷娶靡。但它實際上是一個非常漂亮的小型庫牧牢。 snowballstemmer能在15種不同的語言下工作,并自帶用于引導的porter stemmer姿锭。
from snowballstemmer import EnglishStemmer, SpanishStemmer
EnglishStemmer().stemWord("Gregory")
# Gregori
SpanishStemmer().stemWord("amarillo")
# amarill
4)wget
還記得你曾因為某種目的寫的網(wǎng)絡(luò)爬蟲(web crawler)嗎塔鳍?原來是它——wget創(chuàng)造的。遞歸地下載網(wǎng)站呻此?抓取每個頁面的每一張圖片轮纫?避開cookie 痕跡?統(tǒng)統(tǒng)只要wget焚鲜。
電影《馬克·扎克伯格》甚至這樣贊譽過它
首先是Kirkland掌唾,他們把一切都公開放前,并允許索引他們的Apache配置,所以只需要一點wget的魔術(shù)就能夠下載整個Kirkland的Facebook糯彬。太簡單了凭语!
Python的版本帶有幾乎所有你需要的功能,并且非常易于使用撩扒。
import wget
wget.download("http://www.cnn.com/")
# 100% [............................................................................] 280385 / 280385
需要注意的是Linux和OSX用戶可能會操作的另一種選擇是:from sh import wget似扔。不過,Python的wget模塊確實有一些有爭議的地方搓谆。
5)PyMC
我不知道PyMC怎么會經(jīng)常被排除在組合之外炒辉。scikit-learn似乎是大家的寵兒(不過它確實很棒),但在我看來泉手,PyMC沒有得到應(yīng)有的地位黔寇。
from pymc.examples import disaster_model
from pymc import MCMC
M = MCMC(disaster_model)
M.sample(iter=10000, burn=1000, thin=10)
[-----------------100%-----------------] 10000 of 10000 complete in 1.4 sec
PyMC是一個做貝葉斯分析(Bayesian analysis)的庫。它被著重描述于Cam Davidson Pilon的《Bayesian Methods for Hackers》一文中螃诅,并已在很多流行的數(shù)據(jù)科學/ python的博客中亮過相啡氢,但一直未能得到類似于scikit-learn的推崇。
6)sh
sh允許你將shell命令作為函數(shù)導入到Python术裸。它在bash中做一些簡單的事情時特別有用倘是,但你可能已經(jīng)忘記怎么在Python(即遞歸搜索文件)中使用了。
from sh import find
find("/tmp")
/tmp/foo
/tmp/foo/file1.json
/tmp/foo/file2.json
/tmp/foo/file3.json
/tmp/foo/bar/file3.json
我使用過的最簡單的袭艺,排行前十位的庫就是fuzzywuzzy(如果你有時間的話搀崭,可以閱讀源碼)。fuzzywuzzy是SeatGeek中的一些人構(gòu)建的一個模糊字符串匹配庫猾编。
fuzzywuzzy可以實現(xiàn)如字符串比較比率瘤睹、令牌比率,以及許多其他匹配指標等工作答倡。這對于創(chuàng)造特征向量 (feature vectors)或匹配不同數(shù)據(jù)庫中的記錄特別有用轰传。
from fuzzywuzzy import fuzz
fuzz.ratio("Hit me with your best shot", "Hit me with your pet shark")
# 85
你知道那些你在一堆爛攤子中調(diào)用__main__的for循環(huán)執(zhí)行print “still going…”腳本嗎?那么你為什么不步驟化你的游戲并使用progressbar呢瘪撇?
誠如其名获茬,progressbar確實就是進度條(progress bar)。雖然這不是一個完全的數(shù)據(jù)科學中的具體活動倔既,但它確實很好地改善了那些超長的運行腳本恕曲。
可惜的是,作為另一個GoogleCode的棄兒渤涌,它也沒有得到很多的關(guān)注(文檔有2個空格的縮進……2芭逡ァ!)实蓬。希望大家能對這個勤勞又能干的娃多一點憐憫茸俭,阿門吊履。
from progressbar import ProgressBar
import time
pbar = ProgressBar(maxval=10)
for i in range(1, 11):
? ? pbar.update(i)
? ? time.sleep(1)
pbar.finish()
# 60% |########################################################? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
9)colorama
既然你為日志設(shè)置了很好的進度條,何不讓它們變得多彩起來瓣履!而且還可以當事情出現(xiàn)嚴重錯誤的時候還可以提醒自己率翅。
colorama超級易于使用。只要彈出到你的腳本袖迎,添加任何你想要變色的文本即可:
?
10)uuid
在我的想法中冕臭,我們在編程的時候其實真正只需要幾個工具就可以了:hashing、鍵/值存儲以及全局惟一標識符(universally unique ids燕锥,uuid)辜贵。 uuid內(nèi)置于Python的UUID庫。它實現(xiàn)了版本1归形、3托慨、4和5的UUID標準,對于比如說保證唯一性等工作暇榴,非常方便厚棵。
這聽起來很傻,但如果你要搞一個營銷活動或電子郵件投遞的記錄蔼紧,并且要確保每個人都有自己的促銷代碼或身份證號碼的時候呢婆硬?
如果你擔心用完id,哈哈奸例,那你完全多慮了彬犯!UUID可以生成的數(shù)量相當于宇宙中原子的數(shù)目。
import uuid
print uuid.uuid4()
# e7bafa3d-274e-4b0a-b9cc-d898957b4b61
?
滄海一粟的uuid
11)bashplotlib
最后這個就讓我厚著臉皮介紹吧——bashplotlib是我的作品之一查吊。它可以讓你繪制使用標準輸入的直方圖和散點圖谐区。因此,盡管你可能不會讓它取代ggplot或matplotlib作為日常的繪圖庫逻卖,但是它非常的新穎宋列。最起碼,可以把它作為美化日志的一個方式评也。
$ pip install bashplotlib
$ scatter --file data/texas.txt --pch x
希望這些Python庫能對你的開發(fā)有所幫助虚茶!