色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          "); //-->

          博客專欄

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

          Numpy和Pandas簡(jiǎn)介

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

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

          如果您正在從事數(shù)據(jù)科學(xué)項(xiàng)目,Python 包將簡(jiǎn)化您的生活,因?yàn)槟恍枰獛仔写a即可執(zhí)行復(fù)雜的操作,例如操作數(shù)據(jù)和應(yīng)用機(jī)器學(xué)習(xí)/深度學(xué)習(xí)模型。

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

          什么是NumPy?

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

          創(chuàng)建數(shù)字?jǐn)?shù)組

          我們可以使用列表或列表列表來定義 NumPy 數(shù)組:

          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è)用于數(shù)組創(chuàng)建的內(nèi)置函數(shù)。

          要?jiǎng)?chuàng)建一個(gè)充滿零的數(shù)組,有函數(shù) 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è)充滿 1 的數(shù)組:

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

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

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

          此外,NumPy提供了不同的函數(shù)來創(chuàng)建隨機(jī)數(shù)組。要?jiǎng)?chuàng)建一個(gè)由 [0,1] 上的均勻分布的隨機(jī)樣本填充的數(shù)組,我們只需要函數(shù) 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]])

          與前面的函數(shù)類似,我們可以定義一個(gè)帶有隨機(jī)值的數(shù)組,但這次時(shí)間取自標(biāo)準(zhǔn)正態(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])

          如果我們有興趣用屬于區(qū)間 [low,high] 的隨機(jī)整數(shù)構(gòu)建一個(gè)數(shù)組,我們只需要函數(shù) 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)建數(shù)組的內(nèi)置函數(shù)之外,NumPy 的另一個(gè)優(yōu)點(diǎn)是可以使用一組方括號(hào)從數(shù)組中選擇元素。例如,我們可以嘗試取矩陣的第一行:

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

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

          print(a1[0,2]) #3

          另一種方法是使用 a1[0][2],但它被認(rèn)為是低效的,因?yàn)樗紫葎?chuàng)建包含第一行的數(shù)組,然后從該行中選擇元素。

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

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

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

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

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

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

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

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

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

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

          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)

          要將數(shù)組重塑為 3X2 維度,我們可以簡(jiǎn)單地使用函數(shù) 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)

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

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

          也可能需要獲取轉(zhuǎn)置數(shù)組:

          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) 應(yīng)用相同的轉(zhuǎn)換。

          數(shù)組乘法

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

          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 的較短替代品。

          如果將矩陣與標(biāo)量相乘,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 的較短替代項(xiàng)。

          數(shù)學(xué)函數(shù)

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

          指數(shù)和自然對(duì)數(shù)肯定是最流行和已知的變換:

          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]]

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

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

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

          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之上,對(duì)于操作數(shù)據(jù)集很有用。有兩種主要的數(shù)據(jù)結(jié)構(gòu):系列和數(shù)據(jù)。序列是一系列值,而數(shù)據(jù)幀是包含行和列的表。換句話說,序列是數(shù)據(jù)幀的一列。

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

          要構(gòu)建序列,我們只需將值列表傳遞給方法:

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

          我們可以通過傳遞對(duì)象字典來創(chuàng)建數(shù)據(jù)幀,其中鍵對(duì)應(yīng)于列名,值是列的條目:

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

          Numpy和熊貓簡(jiǎn)介

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

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

          應(yīng)該清楚的是,列是系列類型的數(shù)據(jù)結(jié)構(gòu)。

          匯總函數(shù)

          從現(xiàn)在開始,我們將通過使用Kaggle上提供的自行車共享數(shù)據(jù)集來展示Pandas的潛力。我們可以通過以下方式導(dǎo)入 CSV 文件:

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

          Numpy和熊貓簡(jiǎn)介

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

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

          df.tail(4)

          Numpy和熊貓簡(jiǎn)介

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

          df.shape                    #(10886, 12)

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

          df.columns

          Numpy和熊貓簡(jiǎn)介

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

          df.info()

          Numpy和熊貓簡(jiǎn)介

          如果我們想顯示每列的統(tǒng)計(jì)信息,可以使用 describe 方法:

          df.describe()

          Numpy和熊貓簡(jiǎn)介

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

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

          輸出:

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

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

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

          df.season.value_counts()

          Numpy和熊貓簡(jiǎn)介

          最后一步應(yīng)該是檢查每列上的缺失值:

          df.isnull().sum()

          Numpy和熊貓簡(jiǎn)介

          幸運(yùn)的是,我們?cè)谶@些字段中沒有任何缺失值。

          索引和切片

          與在 Numpy 中一樣,有基于索引的選擇來從數(shù)據(jù)結(jié)構(gòu)中選擇數(shù)據(jù)。有兩種主要方法可以從數(shù)據(jù)幀中獲取條目:

          • ILOC 根據(jù)整數(shù)位置選擇元素

          • LOC 根據(jù)標(biāo)簽或布爾數(shù)組獲取項(xiàng)目。

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

          df.iloc[0]

          Numpy和熊貓簡(jiǎn)介

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

          df.iloc[:,1]

          Numpy和熊貓簡(jiǎn)介

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

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

          Numpy和熊貓簡(jiǎn)介

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

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

          Numpy和熊貓簡(jiǎn)介

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

          df[df.weather==1]

          Numpy和熊貓簡(jiǎn)介

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

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

          Numpy和熊貓簡(jiǎn)介

          創(chuàng)建新變量

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

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

          Numpy和熊貓簡(jiǎn)介

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

          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)介

          分組和排序

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

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

          Numpy和熊貓簡(jiǎn)介

          對(duì)于季節(jié)的每個(gè)級(jí)別,我們都可以觀察到租用自行車的中位數(shù)和最大值。如果不根據(jù)列進(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)介

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

          結(jié)語

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

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

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


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



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

          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉