閱讀338 返回首頁    go Python


Python數據分析-Numpy

前言

NUMPY(以下簡稱NP)是Python數據分析必不可少的第三方庫,np的出現一定程度上解決了Python運算性能不佳的問題,同時提供了更加精確的數據類型。

如今,np被Python其它科學計算包作為基礎包,已成為Python 數據分析的基礎,可以說,NP是SciPy、Pandas等數據處理或科學計算庫最基本的函數功能庫。因此,理解np的數據類型對python數據分析十分有幫助。

下麵,本文將介紹Np的常用操作和基本數據類型。

NP提供了以下重點功能。

一個強大的N維數組對象ndarray

廣功能函數

整合C/C++/Fortran代碼的工具

提供了線性代數、傅裏葉變換、隨機數生成的相關功能

為了更加直觀的了解Np的強大與作用,我們先看作用再看方法:

使用NUMPY操作數據集

在操作數據之前,我們先來理解什麼是維度:

什麼是維度

維度是一組數據的組織形式,不同數據維度可能表示不同的含義。一維數據由對等關係的有序或無序數據構成,采用線性方式組織,可以用數組表示。

通俗來講,

這麼一行數據就可以稱之為一維數據,但如果我們再對其折疊:

那麼他就成為了二維數據,又可以稱之為矩陣。

什麼是數據集

數據集,顧名思義就是數據的集合,是用以訓練程序的數據集合,一般是二維或者多維數表。

如果我們想自己手工新建一個數據集,可以直接新建一個文本文件,隻要有恰當的數據,都可以稱之為數據集:

比如這樣,我們就可以稱上麵的文件稱之為數據集。我們還注意到,上麵數據是使用逗號作為分隔符分隔數據的,它簡單描述了數據的內容和含義,並使用半角逗號作為分隔符。像這樣,用逗號分隔的數據集就稱之為CSV(Comma-Separated Value,逗號分隔值)數據集,它是一種常見的文件格式,用來存儲批量的數據。它就像一張excel表,用來存儲簡單結構的數據。

怎麼樣,數據集的概念是否特別簡單呢?

生成數據集

數據集是一個簡單的概念,但每次使用手工的方式去寫畢竟不方便,所以,我們可以使用np的內置函數來生成數據集:

frame:文件、字符串、或產生器的名字,可以是.gz,.bz2的壓縮文件

arrray:存入文件的NP的數組

fmt(format):寫入文件的格式,如%d,%.2f,%.18e(默認,科學計數法保留18位)

delemiter:分割字符串,默認是任何空格。

我們可以這樣寫下代碼:

這樣,我們就會在當前的工作目錄下發現一個新的demo.csv,用記事本打開,裏麵是一個4 * 5的矩陣,元素0~19。

讀取數據集

既然生成,那就可以讀取,同樣使用np:

frame:指定讀入的文件來源

dtype:數據類型,默認為np.float。

delimiter:分割字符串

unpack:默認為False讀入文件寫入一個數組,如果為True,讀入屬性將分別寫入不同變量

同樣的我們隻需要寫下代碼:

就可以查看到我們先前寫入的數組a。

CSV文件的局限

可以發現,CSV文件隻能有效存儲和讀取一維和二維數組,因為更高的維度無法更直觀的文本下顯現出來,這時,更加靈活的存取方式就唿之欲出了,但講之前先賣個關子,再介紹一個不太常用的方法:

tofile:對於NP中的ndarray數組,我們可以使用NP中的tofile方法。

frame:文件,字符串

數據分割字符串,如果不寫,將使用二進製文件存儲

format:寫入數據的格式

同樣,我們隻需要命令:

就可以生成新的CSV數據集。

此時,我們如果打開a.dat文件,我們可以看到數組1,2,3……99。但是與CSV不同,這個文件並沒有包含數字的維度信息,他隻是將數組所有元素逐一的列出。而且如果我們不指定sep,將保存為二進製文件,雖然對人不可讀,但將占用更小的空間。

既然tofile可以保存文本文件,那麼也很容易猜到對應的fromfile可以還原這些信息。

frame:文件

dtype:讀取元素使用的數據類型,默認為float

count:讀文件的個數,默認-1,讀取全部

sep:數據分割字符串,如果是空串,寫入文件為二進製。

如果我們想要重新恢複數據的維度信息,我們需要重新使用reshape來恢複維度信息:

不得不說,當我看到這個方法時感覺這兩個真是蠢爆了,使用savetxt / loadtxt 至少還能保存個二維信息,而使用了tofile / fromfile 方法居然把數被伸展為一維的,然後自己記住維度信息(╯‵′)╯︵┻━┻。

因此,為了保存更複雜的數據類型,二維以上的數據信息,save / load 函數成功解決了這個問題:(為了方便,兩個函數就放到一起了)

保存 / 讀取高維度數據

Demo:

附錄

附錄中提供NP的常用方法及注釋,做查詢用。

np數組定義

初始化數組

隨機序列

如果想要多個隨機整數:

多維數組運算

還可以使用reshape函數,對數組結構重定義:

下麵介紹一些常用的運算操作:

此外,還可以sqrt、log、sin、sum、max等操作:

我們下定義一個三維數組:

我們可以看到sum方法對lst的所有元素都進行了求和,此外我們還可以通過對sum方法增加參數axis的方式來設置求和的深入維度:

這裏的axis取值為數組維數-1,axis可以理解為進行運算操作時的深入程度,axis越大,深入程度越大。同理,不僅sum函數,max等函數也可以一樣理解。

相加運算

numpy.array是np最簡單的數據結構。np.array相比與Python原生列表其強大之處在於可以實現對數組數據的運算。我們知道,list隻能對元素的追加。而numpy是真正意義上的數據運算。

例如

但np最強大的地方不在於簡單的一維運算,Np對矩陣也能進行基本的運算操作:

此外,由於原生list沒有確定的數據類型,所以維護起來成本較高,而使用C編寫的numpy,則可以聲明各種常見的數據類型:

np所支持的數據類型都有bool、int8/16/32/64/128/、uint8/16/32/64/128、float16/32/43、complex64/128、string。

總結

Python作為一門弱類型語言,有其不可避免的缺點。但NP的出現,彌補了這些缺點,使其具備了構造複雜數據類型的能力,為Python數據分析提供了基礎。

如您有何疑問,請聯係小編:

15201480058

最後更新:2017-10-22 12:37:44

  上一篇:go Python核心知識思維導圖
  下一篇:go Python 開發者的 6 個必備庫