數(shù)據(jù)分析日常學(xué)習(xí)week2_4.15

在極客時(shí)間上買了陳旸老師的數(shù)據(jù)分析實(shí)戰(zhàn)45講,以下是第二周對(duì)于專欄內(nèi)容的概括、思考和對(duì)實(shí)戰(zhàn)項(xiàng)目的記錄。


4.15 周一

03 |? Python的基礎(chǔ)語(yǔ)法

包括輸入輸出,for/while循環(huán),列表、元組、字典和集合,注釋、引用和函數(shù)

浙江大學(xué)ACM答題網(wǎng)址,這是浙江大學(xué)ACM?的?OnlineJudge。



04 | Numpy快速處理數(shù)據(jù)

Numpy數(shù)組存儲(chǔ)在一個(gè)均勻連續(xù)的內(nèi)存塊中,而列表list在內(nèi)存中是分散的,所以Numpy不像list還需要對(duì)內(nèi)存地址進(jìn)行查找,從而節(jié)省了計(jì)算資源。

Numpy里有兩個(gè)重要對(duì)象:ndarray(N-dimensional array object)解決了多維數(shù)組的問(wèn)題,ufunc(universal function object)則是對(duì)數(shù)組進(jìn)行處理的函數(shù)。

ndarray對(duì)象:

ndarray是多維數(shù)組的含義,每一個(gè)線性的數(shù)組成為一個(gè)軸(axes),axes=0是跨行(縱向),axes=1是跨列(橫向)

一些已經(jīng)會(huì)的東西,不再贅述。

ufunc對(duì)象:

NumPy 可以很方便地創(chuàng)建連續(xù)數(shù)組,比如我使用 arange 或 linspace 函數(shù)進(jìn)行創(chuàng)建:np.arange 和 np.linspace 起到的作用是一樣的,都是創(chuàng)建等差數(shù)組。這兩個(gè)數(shù)組的結(jié)果x1,x2 都是 [1 3 5 7 9]。結(jié)果相同,但是你能看出來(lái)創(chuàng)建的方式是不同的。arange() 類似內(nèi)置函數(shù) range(),通過(guò)指定初始值、終值、步長(zhǎng)來(lái)創(chuàng)建等差數(shù)列的一維數(shù)組,默認(rèn)是不包括終值的。

linspace 是 linear space 的縮寫(xiě),代表線性等分向量的含義。linspace() 通過(guò)指定初始值、終值、元素個(gè)數(shù)來(lái)創(chuàng)建等差數(shù)列的一維數(shù)組,默認(rèn)是包括終值的。

1、算數(shù)運(yùn)算:

通過(guò) NumPy 可以自由地創(chuàng)建等差數(shù)組,同時(shí)也可以進(jìn)行加、減、乘、除、求 n 次方和取余數(shù)。

x1 = np.arange(1,11,2)

x2 = np.linspace(1,9,5)

x1 = np.arange(1,11,2)

x2 = np.linspace(1,9,5)

print np.add(x1, x2)

print np.subtract(x1, x2)

print np.multiply(x1, x2)

print np.divide(x1, x2)

print np.power(x1, x2)

print np.remainder(x1, x2)

運(yùn)行結(jié)果:

[ 2. 6. 10. 14. 18.]

[0. 0. 0. 0. 0.]

[ 1. 9. 25. 49. 81.]

[1. 1. 1. 1. 1.]

[1.00000000e+00 2.70000000e+01 3.12500000e+03 8.23543000e+05

3.87420489e+08]

[0. 0. 0. 0. 0.]

以x1,?x2?數(shù)組為例,求這兩個(gè)數(shù)組之間的加、減、乘、除、求?n?次方和取余數(shù)。在?n次方中,x2?數(shù)組中的元素實(shí)際上是次方的次數(shù),x1?數(shù)組的元素為基數(shù)。在取余函數(shù)里,你既可以用?np.remainder(x1,?x2),也可以用?np.mod(x1,?x2),結(jié)果是一樣的。

2、統(tǒng)計(jì)函數(shù):

在?NumPy?中如何使用統(tǒng)計(jì)函數(shù)。

計(jì)數(shù)組?/?矩陣中的最大值函數(shù)?amax(),最小值函數(shù)?amin()

import?numpy?as?np

a?=?np.array([[1,2,3],?[4,5,6],?[7,8,9]])

print?np.amin(a)

print?np.amin(a,0)

print?np.amin(a,1)

print?np.amax(a)

print?np.amax(a,0)

print?np.amax(a,1)

運(yùn)行結(jié)果:

1

[1?2?3]

[1?4?7]

9

[7?8?9]

?[3?6?9]

amin()?用于計(jì)算數(shù)組中的元素沿指定軸的最小值。對(duì)于一個(gè)二維數(shù)組?a,amin(a)?指的是數(shù)組中全部元素的最小值,amin(a,0)?是延著?axis=0?軸的最小值,axis=0?軸是把元素看成了?[1,4,7],?[2,5,8],?[3,6,9]?三個(gè)元素,所以最小值為?[1,2,3],amin(a,1)?是延著?axis=1軸的最小值,axis=1?軸是把元素看成了?[1,2,3],?[4,5,6],?[7,8,9]?三個(gè)元素,所以最小值為[1,4,7]。同理?amax()?是計(jì)算數(shù)組中元素沿指定軸的最大值。

3、統(tǒng)計(jì)最大值與最小值之差?ptp()

代碼:

a?=?np.array([[1,2,3],?[4,5,6],?[7,8,9]])

print?np.ptp(a)

print?np.ptp(a,0)

print?np.ptp(a,1)

運(yùn)行結(jié)果:

8

[6?6?6]

[2?2?2]

對(duì)于相同的數(shù)組?a,np.ptp(a)?可以統(tǒng)計(jì)數(shù)組中最大值與最小值的差,即?9-1=8。同樣ptp(a,0)?統(tǒng)計(jì)的是沿著?axis=0?軸的最大值與最小值之差,即?7-1=6(當(dāng)然?8-2=6,9-3=6,第三行減去第一行的?ptp?差均為?6),ptp(a,1)?統(tǒng)計(jì)的是沿著?axis=1?軸的最大值與最小值之差,即?3-1=2(當(dāng)然?6-4=2,?9-7=2,即第三列與第一列的?ptp?差均為?2)。

4、統(tǒng)計(jì)數(shù)組的百分位數(shù)?percentile():

a?=?np.array([[1,2,3],?[4,5,6],?[7,8,9]])

print?np.percentile(a,?50)

print?np.percentile(a,?50,?axis=0)

print?np.percentile(a,?50,?axis=1)

運(yùn)行結(jié)果:

5.0

[4.?5.?6.]

[2.?5.?8.]

同樣,percentile()?代表著第?p?個(gè)百分位數(shù),這里?p?的取值范圍是?0-100,如果?p=0,那么就是求最小值,如果?p=50?就是求平均值,如果?p=100?就是求最大值。同樣你也可以求得在?axis=0?和?axis=1?兩個(gè)軸上的?p%?的百分位數(shù)。

5、統(tǒng)計(jì)數(shù)組中的中位數(shù)?median()、平均數(shù)?mean()

用?median()?和?mean()?求數(shù)組的中位數(shù)、平均值,同樣也可以求得在?axis=0?和?1兩個(gè)軸上的中位數(shù)、平均值。

a = np.array([[1,2,3], [4,5,6], [7,8,9]])

# 求中位數(shù)

print np.median(a)

print np.median(a, axis=0)

print np.median(a, axis=1)

# 求平均數(shù)

print np.mean(a)

print np.mean(a, axis=0)

print np.mean(a, axis=1)

運(yùn)行結(jié)果:

5.0

[4. 5. 6.]

[2. 5. 8.]

5.0

[4. 5. 6.]

[2. 5. 8.]

6、NumPy 排序:

排序算法在 NumPy 中實(shí)現(xiàn)起來(lái)其實(shí)非常簡(jiǎn)單,一條語(yǔ)句就可以搞定。你可以使用 sort 函數(shù),sort(a, axis=-1, kind=‘quicksort’, order=None),默認(rèn)情況下使用的是快速排序;在 kind 里,可以指定 quicksort、mergesort、heapsort 分別表示快速排序、合并排序、堆排序。同樣 axis 默認(rèn)是 -1,即沿著數(shù)組的最后一個(gè)軸進(jìn)行排序,

也可以取不同的 axis 軸,或者 axis=None 代表采用扁平化的方式作為一個(gè)向量進(jìn)行排序。另外 order 字段,對(duì)于結(jié)構(gòu)化的數(shù)組可以指定按照某個(gè)字段進(jìn)行排序。

a = np.array([[4,3,2],[2,4,1]])

print np.sort(a)

print np.sort(a, axis=None)

print np.sort(a, axis=0)

print np.sort(a, axis=1)

運(yùn)行結(jié)果:

[[2 3 4]? [1 2 4]]

[1 2 2 3 4 4]

[[2 3 1]? [4 4 2]]??? ????這塊沒(méi)有懂

[[2 3 4]? [1 2 4]]

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容