當前位置:
首頁 > 最新 > Python與數據分析《一》

Python與數據分析《一》

出真實數據,確保政府決策的科學有據;做紮實工作,詮釋統計人生的平凡風雅。

——國家統計局標語

接下來這幾篇,我們將對Python在數據分析方面的應用做方方面面的具體介紹。

我們知道在數據分析中,需要很多包,如pandas, numpy, scikit, scipy, 以及畫圖的matplotlib,我們要進行很多操作,包括清理數據(Data Clean),數據操縱(Data Manipulation),還要做一些EDA(Exploratory Data Analysis),然後可能 會有一些假設檢驗(Hypothese Testing) 及 建模(Modeling),以及一些驗證(Validation) 、監測(Monitering)及Backtesting等等一系列過程。在小規模的數據範圍內,我們可以直接在內存(RAM)上進行數據分析。我們在很多時間內都會對Pandas中DataFrame進行使用和操作。因此我們用這一期對DataFrame進行一個簡要的深入介紹是很有必要的。

From Built-in Library CSV to Pandas DataFrame

我們在數據分析之初,就是要載入數據到你的Computing platform 上。很多人都用過R,大家對R中存儲數據的單位DataFrame印象都很深刻,其操作的便捷性確實讓人很難適應別樣式的數據單位。

也因為如此大家在接觸Python之初,就把重點放在了Pandas 上,因為Pandas中的DataFrame及各項操作確實和R中的DataFrame很相似,對於用慣了R的同學們,確實很好上手,但大多數人都覺得對於同樣的操作,R比Python要容易的多,比如說提取一行或一列,在R中只需要指明行數、列數、列名或行名就行,但在Pandas中要首先搞清楚loc和iloc的區別;在中更改一列的名字是及其簡單的,只需要重新設置以下names就行了,就是一個對array的操作,在Pandas中,學會用rename這個方程,用到dict進行操作,是需要費點功夫的,特別是對沒有很紮實Python基礎的人。於是就有了在功能性和操作性方面,Python在數據分析中沒有R強大的錯誤說法。這是因為R根本不需要什麼基礎,這種結構性語言與SAS一樣,在使用中學習就足夠了,但Python不一樣,你需要通過一些基礎學習才能靈活掌握。

這期中,我們將從Python build-in的I/O方法入手,然後再延伸到Pandas。儘管我們平時根本不會用到這些方法,畢竟太過複雜,Python Base也導致I/O不會太快,但了解其機制能讓使用者對Pandas中的I/O 及對數據的manipulating有一個更充分的了解。

CSV是一個built-in的Python Package,有興趣的同學可以去Python.org去閱讀一下該library的說明和使用方法。[對於這些Python built-in的Package,我們是一定要學習的,因為這些包基本上囊括了Python所有的功能,包括上期所提到的decorator,還有更高級的factory。我們在此後的某期會著重介紹兩個built-in packages: collections 和functools,這對寫出高規格和高兼容性的代碼是必不可少的。]

csv.reader()是csv library中的一個方程,它是對txt類型的文本進行操作,規定了分割符(delimiter)和newline的形式(對於類似csv類的文本類型,我們稱之為formatted data file,因為I/O需要的所有參數都是固定的,比如csv,delimiter就是逗號)。

csv.reader()的功能就是把文本根據每一行都按照newline(「
」) 的位置進行分行,按「,」的位置對每一行的記錄進行拆分,它基本輸出形式是一個list,而每一個成員(Component)都是一個list,這些成員中的成員是字元串(String)。

正因為同樣的機制,用list of list 去創立一個ataframe時,每一個list是一行,而並非一列。

我們再看csv.DictReader()這個方程,在這個方程中,我們必須規定的是Fieldnames,也就是每一列的名字,這將被作為keys,輸出的每一行將會是dict。如果我們將整個文本以dict的形式儲存,將會造成極大的便利:

基於這些原因dataframe主要以dictionary 的形式去存數據。因此在靈活的使用dataframe之前,第一件事就是要熟悉dictionary。於是我們可以對dataframe進行對dictionary 一樣的操作:

關於__getitem__, __setitem__見。下一期我們將列舉Python中載入數據的方法。

小貼士

我們在上期中介紹了運算符重載(operator overloading)。在dict中,最基本的兩種運算副重載的方法就是__setitem__ 和__getitem__。__setitem__對應的操作是object[key] = val,__getitem__對應的操作是object[key] 來retrieve 這個object中的指定位置的值。我們可以通過定義這兩種方法來創造類dict型的object, 我們可以看以下的例子:

這個例子中,我用list作為DictObj 的數據container,規定了__setitem__和__getitem__的方法,就可以創造出了類dict的object。

如果你喜歡這個公眾號,請推薦給你的親朋好友哦。快快關注,點燃我堅持下去的信心和勇氣~!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

Python3萌新入門筆記

TAG:Python |