python有許多很好的庫(libraries),實現這些功能只需要幾行**。今天介紹乙個庫:collections. 這個模組提供容器相關的更高效能的資料型別,它們提供比通用容器 dict, list, set 和tuple更強大的功能。
今天介紹其中三種資料型別,最後你可能會驚訝它們怎麼這麼好用。
對於資料分析或機器學習領域,用好namedtuples 會寫出可讀性強、易於維護的**。大家回憶這種熟悉的場景,你正在做特徵工程,因為你尤其喜愛list, 所以把一堆特徵放到乙個list 中,然後喂到機器學習模型中。很快,你將會意識到數百個特徵位於此list 中,這就是事情變得糟糕的開始。
in [10]: feature = ['age','height','name']
in [11]: data = [[10,1,'xiaoming'],[12,1,5,'xiaohong']]
in [12]: data[0][0] #只能靠整數索引到某個特徵,0對應age
out[12]: 10
某天,你想使用某個特徵,這時比較棘手,你不知道它的index!更糟糕的是,當你準備離職要交接工作時,他們看到乙個乙個的數字型索引,完全對不上哪個和哪個,他們懵逼,你也尷尬。
如果我們使用namedtuples去處理以上資料,亂為一團的事情將會迅速變得井然有序:
in [4]: person = namedtuple('person',['age','height','name'])
in [15]: data2 = [person(10,1.4,'xiaoming'),person(12,1.5,'xiaohong')]
in [16]: data2[0].age
out[16]: 10
僅僅幾行**,我們將會很容易索引到第0行資料的age屬性取值,這在實際中真是太好用。你告別indexes訪問你的資料集中的特徵值,而是使用更加人性化,可讀性強的names索引。
namedtuples會使得**易讀、更易維護。
counter正如名字那樣,它的主要功能就是計數。這聽起來簡單,但是我們在分析資料時,基本都會涉及計數,真的家常便飯。
習慣使用list 的看過來,有一些數值已經放在乙個list中:
skupurchasecount = [3, 8, 3, 10, 3, 3, 1, 3, 7, 6, 1, 2, 7, 0, 7, 9, 1, 5, 1, 0]
in [33]: for i in skupurchasecount:
...: if countdict.get(i) is none:
...: countdict[i]=1
...: else:
...: countdict[i]+=1
in [34]: countdict
out[34]:
如果使用counter,我們可以寫出更簡化的**:
in [35]: from collections import counter
in [42]: counter(skupurchasecount).most_common()
out[42]:
[(3, 5),(1, 4),(7, 3),(0, 2),(8, 1),(10, 1),(6, 1),(2, 1),(9, 1),(5, 1)]
僅僅一行**,我們便輸出統計計數結果,並且是乙個按照次數統計出來的由大到小排序好的tuples列表,因此我們很快就會看到,購買3次是出現最多的,一共5次。
購買為1次的占多數,屬於長尾。
defaultdict是乙個被初始化的字典,也就是每個鍵都已經被訪問一次:
in [53]: d = defaultdict(int)
in [54]: for k in 'collections':
...: d[k] += 1
in [55]: d
out[55]:
defaultdict(int,
)
一般地,當你嘗試訪問乙個不在字典中的值時,將會丟擲乙個異常。但是defaultdict可以幫助我們初始化,它的引數作為default_factory. 在上面例子中,將生成int
物件,意思是預設值為int 型,並設定初始值為0
,所以我們可以很容易地統計每個字元出現的次數。
****** and clean!
更有用的乙個使用場景,我們有很多種商品,在每秒內下單次數的統計資料如下:
in [56]: data = [('iphone11',103), ('華為macbook-sku1232',210),('iphone11',21),('
...: 華為macbook-sku1232',100)]
in [57]: d = defaultdict(list)
in [58]: for ele in data:
in [59]: d
out[59]: defaultdict(list, )
結合這個提示再理解上面**,就不會吃力。 你的價值被低估了嗎
工作中最鬱悶的事情之一就是,你覺得自己才高八斗,學富五車,完全是治國領軍的奇才,但在別人的心中,你也許有那麼點特色,比如文筆還不錯,人挺老實,名牌大學畢業等等微不足道的特色,但與你的自我評估絕對是天壤之別。不知道你發現了沒有,人們好像總是過於苛刻地看待別人的優點,又總是過於慷慨地對待自己的缺點,所謂...
資料採集那些被低估的價值
說到網頁資料採集器,很多企業不由自主的想到了抄內容,抓賬號之類的似乎上不了檯面的一些用途,網頁資料採集的應用大家習以為常的是站長抓取內容進行偽原創,或者抓取賬號進行網路營銷推送之內的,透露著或多或少竊取的意味在裡面。其實,資料採集技術發展應用至今,很多企業的觀念仍舊停留在最原始的印象上,舊有的觀念對...
隨想錄(被低估的gcc g )
1 c 編譯c檔案 2 o 生成目標檔案 3 s 將c檔案生成彙編檔案 4 include 包含特定標頭檔案 5 i 大寫的i 指明頭檔案目錄 6 l 小寫的l 指明具體的動態庫名稱 7 l 指明動態庫目錄 8 d 新增預設macro定義 9 static 強制生成乙個exe檔案,不依賴動態庫,除錯...