<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > Numpy和Pandas簡(jiǎn)介

Numpy和Pandas簡(jiǎn)介

發(fā)布人:ygtu 時(shí)間:2023-09-11 來(lái)源:工程師 發(fā)布文章

推薦:使用NSDT場(chǎng)景編輯器快速搭建3D應用場(chǎng)景

如果您正在從事數據科學(xué)項目,Python 包將簡(jiǎn)化您的生活,因為您只需要幾行代碼即可執行復雜的操作,例如操作數據和應用機器學(xué)習/深度學(xué)習模型。

在開(kāi)始你的數據科學(xué)之旅時(shí),建議從學(xué)習兩個(gè)最有用的Python包開(kāi)始:NumPy和Pandas。在本文中,我們將介紹這兩個(gè)庫。讓我們開(kāi)始吧!

什么是NumPy?

NumPy代表Numeric Python,用于在機器學(xué)習模型的幕后對數組和矩陣進(jìn)行有效的計算。Numpy 的構建塊是數組,它是一種與列表非常相似的數據結構,不同之處在于它提供了大量的數學(xué)函數。換句話(huà)說(shuō),Numpy 數組是一個(gè)多維數組對象。

創(chuàng )建數字數組

我們可以使用列表或列表列表來(lái)定義 NumPy 數組:

import numpy as np
l = [[1,2,3],[4,5,6],[7,8,9]]
numpy_array = np.array(l)
numpy_array
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

與列表列表不同,我們可以可視化矩陣 3X3,每行之間都有一個(gè)縮進(jìn)。此外,NumPy提供了40多個(gè)用于數組創(chuàng )建的內置函數。

要創(chuàng )建一個(gè)充滿(mǎn)零的數組,有函數 np.zeros ,您只需要在其中指定所需的形狀:

zeros_array = np.zeros((3,4))
zeros_array
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])

同樣,我們可以創(chuàng )建一個(gè)充滿(mǎn) 1 的數組:

ones_array = np.ones((3,4))
ones_array
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])

還可以創(chuàng )建單位矩陣,它是一個(gè)方陣,主對角線(xiàn)上有 1,非對角線(xiàn)元素為 0:

identity_array = np.identity(3)
identity_array
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

此外,NumPy提供了不同的函數來(lái)創(chuàng )建隨機數組。要創(chuàng )建一個(gè)由 [0,1] 上的均勻分布的隨機樣本填充的數組,我們只需要函數 np.random.rand :

random_array = np.random.rand(3,4)
random_array
array([[0.84449279, 0.71146992, 0.48159787, 0.04927379],
       [0.03428534, 0.26851667, 0.65718662, 0.52284251],
       [0.1380207 , 0.91146148, 0.74171469, 0.57325424]])

與前面的函數類(lèi)似,我們可以定義一個(gè)帶有隨機值的數組,但這次時(shí)間取自標準正態(tài)分布:

randn_array = np.random.randn(10)
randn_array
array([-0.68398432, -0.25466784,  0.27020797,  0.29632334, -0.20064897,
        0.7988508 ,  1.34759319, -0.41418478, -0.35223377, -0.10282884])

如果我們有興趣用屬于區間 [low,high] 的隨機整數構建一個(gè)數組,我們只需要函數 np.random.randint :

randint_array = np.random.randint(1,20,20)
randint_array
array([14,  3,  1,  2, 17, 15,  5, 17, 18,  9,  4, 19, 14, 14,  1, 10, 17,
       19,  4,  6])
索引和切片

除了用于創(chuàng )建數組的內置函數之外,NumPy 的另一個(gè)優(yōu)點(diǎn)是可以使用一組方括號從數組中選擇元素。例如,我們可以嘗試取矩陣的第一行:

a1 = np.array([[1,2,3],[4,5,6]])
a1[0]
array([1, 2, 3])

假設我們要選擇第一行的第三個(gè)元素。在這種情況下,我們需要指定兩個(gè)索引,行的索引和列的索引:

print(a1[0,2]) #3

另一種方法是使用 a1[0][2],但它被認為是低效的,因為它首先創(chuàng )建包含第一行的數組,然后從該行中選擇元素。

此外,我們可以從矩陣中獲取切片,語(yǔ)法 start:stop:step 在括號內,其中不包括停止索引。例如,我們想再次選擇第一行,但我們只選擇前兩個(gè)元素:

print(a1[0,0:2])
[1 2]

如果我們更喜歡選擇所有行,但我們想提取每行的第一個(gè)元素:

print(a1[:,0])
[1 4]

除了整數數組索引之外,還有布爾數組索引,用于從數組中選擇元素。假設我們只需要符合以下條件的元素:

a1>5
array([[False, False, False],
       [False, False,  True]])

如果我們根據此條件過(guò)濾數組,輸出將僅顯示 True 元素:

a1[a1>5]
array([6])
數組操作

在數據科學(xué)項目中工作時(shí),經(jīng)常會(huì )在不更改數據的情況下將數組重塑為新形狀。

例如,我們從一個(gè)維度為 2X3 的數組開(kāi)始。如果我們不確定數組的形狀,有屬性形狀可以幫助我們:

a1 = np.array([[1,2,3],[4,5,6]])
print(a1)
print('Shape of Array: ',a1.shape)
[[1 2 3]
 [4 5 6]]
Shape of Array:  (2, 3)

要將數組重塑為 3X2 維度,我們可以簡(jiǎn)單地使用函數 reshape:

a1 = a1.reshape(3,2)
print(a1)
print('Shape of Array: ',a1.shape)
[[1 2]
 [3 4]
 [5 6]]
Shape of Array:  (3, 2)

另一種常見(jiàn)的情況是將多維數組轉換為單維數組。這可以通過(guò)將 -1 指定為形狀來(lái)實(shí)現:

a1 = a1.reshape(-1)
print(a1)
print('Shape of Array: ',a1.shape)
[1 2 3 4 5 6]
Shape of Array:  (6,)

也可能需要獲取轉置數組:

a1 = np.array([[1,2,3,4,5,6]])
print('Before shape of Array: ',a1.shape)
a1 = a1.T
print(a1)
print('After shape of Array: ',a1.shape)
Before shape of Array:  (1, 6)
[[1]
 [2]
 [3]
 [4]
 [5]
 [6]]
After shape of Array:  (6, 1)

同樣,您可以使用 np.transpose(a1) 應用相同的轉換。

數組乘法

如果您嘗試從頭開(kāi)始構建機器學(xué)習算法,則肯定需要計算兩個(gè)數組的矩陣乘積。當數組具有超過(guò) 1 個(gè)維度時(shí),可以使用函數 np.matmul 執行此操作:

a1 = np.array([[1,2,3],[4,5,6]])
a2 = np.array([[1,2],[4,5],[7,8]])
print('Shape of Array a1: ',a1.shape)
print('Shape of Array a2: ',a2.shape)
a3 = np.matmul(a1,a2) 
# a3 = a1 @ a2
print(a3)
print('Shape of Array a3: ',a3.shape)
Shape of Array a1:  (2, 3)
Shape of Array a2:  (3, 2)
[[30 36]
 [66 81]]
Shape of Array a3:  (2, 2)

@ 可以是 np.matmul 的較短替代品。

如果將矩陣與標量相乘,np.dot 是最佳選擇:

a1 = np.array([[1,2,3],[4,5,6]])
a3 = np.dot(a1,2)
# a3 = a1 * 2
print(a3)
print('Shape of Array a3: ',a3.shape)
[[ 2  4  6]
 [ 8 10 12]]
Shape of Array a3:  (2, 3)

在這種情況下,* 是 np.dot 的較短替代項。

數學(xué)函數

NumPy提供了各種各樣的數學(xué)函數,如三角函數,舍入函數,指數,對數等。您可以在此處找到完整列表。我們將展示您可以應用于問(wèn)題的最重要的功能。

指數和自然對數肯定是最流行和已知的變換:

a1 = np.array([[1,2,3],[4,5,6]])
print(np.exp(a1))
[[  2.71828183   7.3890561   20.08553692]
 [ 54.59815003 148.4131591  403.42879349]]
a1 = np.array([[1,2,3],[4,5,6]])
print(np.log(a1))
[[0.         0.69314718 1.09861229]
 [1.38629436 1.60943791 1.79175947]]

如果我們想在一行代碼中提取最小值和最大值,我們只需要調用以下函數:

a1 = np.array([[1,2,3],[4,5,6]])
print(np.min(a1),np.max(a1))  # 1 6

我們還可以從數組的每個(gè)元素計算平方根:

a1 = np.array([[1,2,3],[4,5,6]])
print(np.sqrt(a1))
[[1.         1.41421356 1.73205081]
 [2.         2.23606798 2.44948974]]
什么是Pandas?

Pandas建立在Numpy之上,對于操作數據集很有用。有兩種主要的數據結構:系列和數據。序列是一系列值,而數據幀是包含行和列的表。換句話(huà)說(shuō),序列是數據幀的一列。

創(chuàng )建系列和數據幀

要構建序列,我們只需將值列表傳遞給方法:

import pandas as pd
type_house = pd.Series(['Loft','Villa'])
type_house
0     Loft
1    Villa
dtype: object

我們可以通過(guò)傳遞對象字典來(lái)創(chuàng )建數據幀,其中鍵對應于列名,值是列的條目:

df = pd.DataFrame({'Price': [100000, 300000], 'date_construction': [1960, 2010]})
df.head()

Numpy和熊貓簡(jiǎn)介

創(chuàng )建數據幀后,我們可以檢查每列的類(lèi)型:

type(df.Price),type(df.date_construction)
(pandas.core.series.Series, pandas.core.series.Series)

應該清楚的是,列是系列類(lèi)型的數據結構。

匯總函數

從現在開(kāi)始,我們將通過(guò)使用Kaggle上提供的自行車(chē)共享數據集來(lái)展示Pandas的潛力。我們可以通過(guò)以下方式導入 CSV 文件:

df = pd.read_csv('/kaggle/input/bike-sharing-demand/train.csv')
df.head()

Numpy和熊貓簡(jiǎn)介

Pandas不僅允許讀取CSV文件,還允許讀取Excel文件,JSON,Parquet和其他類(lèi)型的文件。您可以在此處找到完整列表。

從輸出中,我們可以可視化數據幀的前五行。如果我們想顯示數據集的最后四行,我們使用 tail() 方法:

df.tail(4)

Numpy和熊貓簡(jiǎn)介

很少的行不足以很好地了解我們擁有的數據。開(kāi)始分析的一個(gè)好方法是查看數據集的形狀:

df.shape                    #(10886, 12)

我們有 10886 行和 12 列。是否要查看列名?這樣做非常直觀(guān):

df.columns

Numpy和熊貓簡(jiǎn)介

有一種方法可以將所有這些信息可視化為唯一的輸出:

df.info()

Numpy和熊貓簡(jiǎn)介

如果我們想顯示每列的統計信息,可以使用 describe 方法:

df.describe()

Numpy和熊貓簡(jiǎn)介

從分類(lèi)字段中提取信息也很重要。我們可以找到季節列的唯一值和唯一值的數量:

df.season.unique(),df.season.nunique()

輸出:

(array([1, 2, 3, 4]), 4)

我們可以看到值為 1、2、3、4。然后,有四個(gè)可能的值。這種驗證對于理解分類(lèi)變量和防止色譜柱中包含的可能噪聲至關(guān)重要。

要顯示每個(gè)級別的頻率,我們可以使用 value_counts() 方法:

df.season.value_counts()

Numpy和熊貓簡(jiǎn)介

最后一步應該是檢查每列上的缺失值:

df.isnull().sum()

Numpy和熊貓簡(jiǎn)介

幸運的是,我們在這些字段中沒(méi)有任何缺失值。

索引和切片

與在 Numpy 中一樣,有基于索引的選擇來(lái)從數據結構中選擇數據。有兩種主要方法可以從數據幀中獲取條目:

  • ILOC 根據整數位置選擇元素

  • LOC 根據標簽或布爾數組獲取項目。

要選擇第一行,iloc 是最佳選擇:

df.iloc[0]

Numpy和熊貓簡(jiǎn)介

如果我們想選擇所有行,只選擇第二列,我們可以執行以下操作:

df.iloc[:,1]

Numpy和熊貓簡(jiǎn)介

也可以同時(shí)選擇更多列:

df.iloc[0:3,[0,1,2,5]]

Numpy和熊貓簡(jiǎn)介

根據索引選擇列變得很復雜。最好指定列名。這可以使用 loc:

df.loc[0:3,['datetime','season','holiday','temp']]

Numpy和熊貓簡(jiǎn)介

與 Numpy 類(lèi)似,可以根據條件過(guò)濾數據幀。例如,我們要返回天氣等于 1 的所有行:

df[df.weather==1]

Numpy和熊貓簡(jiǎn)介

如果我們想返回包含特定列的輸出,我們可以使用 loc:

df.loc[df.weather==1,['season','holiday']]

Numpy和熊貓簡(jiǎn)介

創(chuàng )建新變量

新變量的創(chuàng )建對從數據中提取更多信息和提高可解釋性具有巨大影響。我們可以根據工作日的值創(chuàng )建一個(gè)新的分類(lèi)變量:

df['workingday_c'] = df['workingday'].apply(lambda x: 'work' if x==1 else 'relax')
df[['workingday','workingday_c']].head()

Numpy和熊貓簡(jiǎn)介

如果有多個(gè)條件,最好使用字典和方法映射來(lái)映射值:

diz_season = {1:'winter',2:'spring',3:'summer',4:'fall'}
df['season_c'] = df['season'].map(lambda x: diz_season[x])
df[['season','season_c']].head()

Numpy和熊貓簡(jiǎn)介

分組和排序

您可能希望根據分類(lèi)列對數據進(jìn)行分組。這可以使用分組方式:

df.groupby('season_c').agg({'count':['median','max']})

Numpy和熊貓簡(jiǎn)介

對于季節的每個(gè)級別,我們都可以觀(guān)察到租用自行車(chē)的中位數和最大值。如果不根據列進(jìn)行排序,此輸出可能會(huì )令人困惑。我們可以使用 sort_values() 方法做到這一點(diǎn):

df.groupby('season_c').agg({'count':['median','max']}).reset_index().sort_values(by=('count', 'median'),ascending=False)

Numpy和熊貓簡(jiǎn)介

現在,輸出更有意義。我們可以推斷,租用自行車(chē)數量最多的是夏季,而冬季則不是租用自行車(chē)的好月份。

結語(yǔ)

就是這樣!我希望您發(fā)現本指南對學(xué)習NumPy和Pandas的基礎知識很有用。它們通常是分開(kāi)研究的,但首先了解NumPy,然后理解Pandas,這是建立在NumPy之上的,這可能是有見(jiàn)地的。

當然,有些方法我沒(méi)有在本教程中介紹,但目標是介紹這兩個(gè)庫中最重要和最流行的方法。代碼可以在Kaggle上找到。感謝您的閱讀!有好的一天!

原文鏈接:Numpy和Pandas簡(jiǎn)介 (mvrlink.com)


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: 數據分析 python

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>