數(shù)據(jù)分析之二:用NumPy進(jìn)行數(shù)據(jù)處理

1. NumPy簡(jiǎn)介


  • NumPy是Numerical Python的簡(jiǎn)稱牌废,用作高性能計(jì)算和數(shù)據(jù)分析,其操作是圍繞ndarray這么一個(gè)矩陣元素來(lái)進(jìn)行啤握。

  • 針對(duì)數(shù)據(jù)分析的應(yīng)用鸟缕,NumPy主要功能體現(xiàn)在如下幾個(gè)方面:

  1. 用于數(shù)據(jù)清理和整理、子集構(gòu)造和過(guò)濾排抬、轉(zhuǎn)換等快速的矢量化數(shù)組運(yùn)算
  2. 常用的數(shù)組算法懂从,如排序、唯一化蹲蒲、集合運(yùn)算等
  3. 統(tǒng)計(jì)和數(shù)據(jù)聚合運(yùn)算
  4. 異構(gòu)數(shù)據(jù)的合并/連接/轉(zhuǎn)換

2. 使用NumPy進(jìn)行數(shù)據(jù)處理


  • 函數(shù)庫(kù)的導(dǎo)入番甩,以下簡(jiǎn)寫成np
import numpy as np

2.1 矩陣的創(chuàng)建


In [1]: arr = np.array([[1,2,3]])
In [2]: arr
Out[2]: array([[1, 2, 3]])

也可以像下面這樣批量生成

In [3]: arr = np.array([[1,2,3]]).repeat(4, axis=0)
In [4]: arr
Out[4]: 
array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]])
  • 或者我想初始化一個(gè)空的矩陣,只需要提供行和列即可届搁,例如想創(chuàng)建3×4的矩陣缘薛,用empty或者zeros函數(shù)
In [6]: arr = np.empty((3,4))
In [7]: arr
Out[7]: 
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
  • 查看矩陣的維度,行列數(shù)以及元素的數(shù)據(jù)類型
In [10]: arr = np.array([[1,2,3],[4,5,6]])
In [11]: arr
Out[11]: 
array([[1, 2, 3],
       [4, 5, 6]])

In [12]: arr.ndim
Out[12]: 2

In [13]: arr.shape
Out[13]: (2, 3)

In [14]: arr.dtype
Out[14]: dtype('int64')
  • 這里需要理清一個(gè)“軸”的概念
    軸(axis)和矩陣空間的維度相關(guān)卡睦,舉個(gè)例子宴胧,在平面坐標(biāo)系中,x軸與y軸構(gòu)成二維的平面么翰,由此牺汤,x,y浩嫌,z三個(gè)軸組成三維立體空間檐迟;

  • 再來(lái)看矩陣,如果矩陣是二維的码耐,那么它由2個(gè)軸組成追迟,np將它們表示成0軸和1軸,0軸修飾“列方向”骚腥,1軸修飾“行方向”敦间,0軸的長(zhǎng)度為列向量長(zhǎng)度,1軸的長(zhǎng)度為行向量長(zhǎng)度束铭,那么以上arr = np.array([[1,2,3]]).repeat(4, axis=0)可以理解成將向量[1,2,3]在列方向上重復(fù)多次廓块,生成了4×3矩陣,可以試驗(yàn)一下axis=1的情況契沫,答案是仍然生成一個(gè)一維的行向量带猴,因?yàn)樗前凑招蟹较蜓由斓模?/p>

  • 推廣到三維,不難發(fā)現(xiàn)懈万,三維空間可以看做由多個(gè)二維平面層疊生成的拴清,則三維空間的0軸修飾“平面”,1軸修飾平面的“列”会通,2軸修飾平面的“行”口予。

  • 注:矩陣的創(chuàng)建函數(shù):

array         # 將輸入數(shù)據(jù)轉(zhuǎn)換為ndarray,可以指定dtype
asarray       # 將輸入轉(zhuǎn)換為ndarray
arange        # 類似于Python的range函數(shù)涕侈,可以指定范圍和步長(zhǎng)
ones          # 初始化為一個(gè)全1的數(shù)組
zeros         # 初始化為一個(gè)全0的數(shù)組
empty         #只分配內(nèi)存空間沪停,但不進(jìn)行初始化
eye/identity  # 創(chuàng)建方陣,對(duì)角線為全1裳涛,其余為0

2.1 數(shù)據(jù)存取


支持Python的下標(biāo)和切片訪問(wèn)木张,但是np可以給切片直接賦值,并且切片賦值會(huì)影響到原始數(shù)組调违,這是因?yàn)榍衅僮鞑粫?huì)對(duì)數(shù)據(jù)進(jìn)行復(fù)制窟哺,數(shù)據(jù)只在內(nèi)存保留一份,對(duì)切片的賦值也就是更改原始內(nèi)存技肩,如果想在切片上重新分配一塊內(nèi)存區(qū)域且轨,可以使用ndarray.copy()函數(shù)。

In [22]: arr = np.arange(10)
In [23]: arr
Out[23]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [24]: arr[5]
Out[24]: 5

In [25]: arr[5:8]
Out[25]: array([5, 6, 7])

In [26]: arr[5:8] = 10

In [27]: arr
Out[27]: array([ 0,  1,  2,  3,  4, 10, 10, 10,  8,  9])

2.3 矩陣運(yùn)算


  • 變換
In [28]: arr = np.arange(15).reshape((3,5))

In [29]: arr
Out[29]: 
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

# 轉(zhuǎn)置操作
In [30]: arr.T                     
Out[30]: 
array([[ 0,  5, 10],
       [ 1,  6, 11],
       [ 2,  7, 12],
       [ 3,  8, 13],
       [ 4,  9, 14]])

# 矩陣乘法
In [31]: np.dot(arr, arr.T)
Out[31]: 
array([[ 30,  80, 130],
       [ 80, 255, 430],
       [130, 430, 730]])
  • 排序
In [40]: arr = randn(8)

In [41]: arr
Out[41]: 
array([-0.04165555, -0.58147668, -0.1026614 , -2.00641289, -0.94810499,
        0.68015849, -0.94358531, -0.12948516])

In [42]: arr.sort()

In [43]: arr
Out[43]: 
array([-2.00641289, -0.94810499, -0.94358531, -0.58147668, -0.12948516,
       -0.1026614 , -0.04165555,  0.68015849])

In [44]: arr = randn(3,4)

In [45]: arr
Out[45]: 
array([[-0.31807417, -0.12209285, -0.35218604,  1.86467014],
       [-0.87586945,  0.48491914,  0.02919893, -0.89746354],
       [ 0.75919047,  0.61933593,  0.22276992, -0.63860342]])

# 沿1軸方向上的排序(行方向虚婿,也是sort默認(rèn)方向)
In [46]: arr.sort(axis=1)

In [47]: arr
Out[47]: 
array([[-0.35218604, -0.31807417, -0.12209285,  1.86467014],
       [-0.89746354, -0.87586945,  0.02919893,  0.48491914],
       [-0.63860342,  0.22276992,  0.61933593,  0.75919047]])
  • 統(tǒng)計(jì)
# 創(chuàng)建一個(gè)三維矩陣
In [15]: arr = np.random.randint(0,9,[2,3,3])
In [16]: arr
Out[16]: 
array([[[7, 0, 4],
        [3, 1, 7],
        [3, 8, 1]],

       [[2, 3, 5],
        [0, 3, 4],
        [2, 6, 7]]])

# 0軸上相加旋奢,也就是平面相加,結(jié)果仍然是一個(gè)平面
In [17]: arr.sum(axis=0)
Out[17]: 
array([[ 9,  3,  9],
       [ 3,  4, 11],
       [ 5, 14,  8]])

# 1軸上相加然痊,也就是各平面上沿著列方向相加
In [18]: arr.sum(axis=1)
Out[18]: 
array([[13,  9, 12],
       [ 4, 12, 16]])

# 2軸上相加至朗,也就是各平面上沿著行方向相加
In [19]: arr.sum(axis=2)
Out[19]: 
array([[11, 11, 12],
       [10,  7, 15]])

注:數(shù)學(xué)統(tǒng)計(jì)函數(shù):

sum
mean
std/var             # 標(biāo)準(zhǔn)差/方差
min/max
argmin/argmax       #  最小和最大元素的下標(biāo)索引

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市剧浸,隨后出現(xiàn)的幾起案子锹引,更是在濱河造成了極大的恐慌矗钟,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫌变,死亡現(xiàn)場(chǎng)離奇詭異吨艇,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)腾啥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門东涡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人倘待,你說(shuō)我怎么就攤上這事疮跑。” “怎么了凸舵?”我有些...
    開(kāi)封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵祖娘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我贞间,道長(zhǎng)贿条,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任增热,我火速辦了婚禮整以,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘峻仇。我一直安慰自己公黑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布摄咆。 她就那樣靜靜地躺著凡蚜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吭从。 梳的紋絲不亂的頭發(fā)上朝蜘,一...
    開(kāi)封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音涩金,去河邊找鬼谱醇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛步做,可吹牛的內(nèi)容都是我干的副渴。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼全度,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼煮剧!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤勉盅,失蹤者是張志新(化名)和其女友劉穎佑颇,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體菇篡,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡漩符,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年一喘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了驱还。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凸克,死狀恐怖议蟆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情萎战,我是刑警寧澤咐容,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站蚂维,受9級(jí)特大地震影響戳粒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜虫啥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一蔚约、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涂籽,春花似錦苹祟、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至景东,卻和暖如春砂轻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背斤吐。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工搔涝, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人曲初。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓体谒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親臼婆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抒痒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容