python數據分析三個重要方法之:numpy和pandas


關於數據分析的組件之一:numpy

 

ndarray的屬性     4個必記參數:
ndim:維度
shape:形狀(各維度的長度)
size:總長度
dtype:元素類型
 
        
  一:np.array()產生n維數組
一維:方法一:arr1 = np.array([1,2,3])
     方法二:arr6 = np.full((6),fill_value=666)
     方法二結果:array([666, 666, 666, 666, 666, 666])
     (一行六列)
    
二維:方法一:arr2 = np.array([[1,2,3],[4,5,6]])
     方法二:arr7 = np.full((6, 7), fill_value="5")
     (6行7列的二維數組,所有的值全是"5")
    
三維:方法一:arr3 = np.array([[[1,2,3],[4,5,6]]])
    方法二:arr7 = np.full((5, 6, 3), fill_value="ggg")
        (5行二維數組,每個二維數組里面是6行3列的1維數組)
關鍵點:[]的層數即是維度數
 
        

 

 
 二.數據類型優先級:tr > float > int
numpy默認ndarray的所有元素的類型是相同的
   特列:其中一個數組包含優先級高的數據類型時,所有的數據將會全部轉化成優先級高的數據類型。

   列如:arr4 = np.array([[1, 2, 3], [4, 5, "five"]])
   打印結果是:array([['1', '2', '3'],['4', '5', 'five']], dtype='<U11')
 
        

 

 三.matplotlib模塊
import matplotlib.pyplot as plt

1.使用imread將圖片變成多維數組,使用imshow展示圖片
圖片的數組是三維的分別為:高,寬,灰度值(縱向,橫向,灰度值)
img_arr = plt.imread('./cat.jpg')
plt.imshow(img_arr)

2.將數組進行加減來改變灰度值:plt.imshow(img_arr - 20)

3.查看數組維度:img_arr.ndim

4.查看數組橫向寬度,縱向高度,維度三個參數:img_arr.shape
 
        

 

 

 

四.產生等差一維數組

######  np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 等差數列

1. np.linspace(1, 100, num=10)結果是:1開頭,100結尾,將1到100分成十個數,array([ 1., 12., 23., 34., 45., 56., 67., 78., 89., 100.]))
2. np.arange([start, ]stop, [step, ]dtype=None)
np.arange(1, 100, 8)結果:此方法結尾數未被限定(array([ 1, 9, 17, 25, 33, 41, 49, 57, 65, 73, 81, 89, 97])
 

 

 

 

 

五.產生等差n維數組

np.random.randint(0,100,size=(5,6))   產生5行6列的二維數組

結果:array([[23, 88, 34, 82, 17, 26],
      [74, 19, 56, 26, 70, 87],
      [25, 60, 10, 91, 49, 14],
      [84, 63, 37, 83, 26, 42],
      [94, 87, 54, 72, 19, 26]])

 

 

 

六.生成的一維數組里是隨機數(size決定元素的數量)

生成0到1的隨機數,左閉右開:np.random.random(size=5)
結果是 :array([0.68491561, 0.84337526, 0.61612483, 0.56318751, 0.36816219])

 

 

七.nadarray(多為數組)的基本操作

1.索引  (與列表索引操作一致)

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

取值   :arr[0]得到 array([1, 2,3], dtype='<U21')

改值   :改一個數組arr[0] = [4,5,6],改某一個具體的值arr[0][1]=2

  arr1 + arr2 兩數組相加,對應索引位置的值相加
  arr1 = np.array([[1, 2, 3], [4, 5, 6]])
  arr2 = np.array([[1, 2, 3], [4, 5, 6]])
  arr1 + arr2
結果array([[ 2, 4, 6],[ 8, 10, 12]])

 

2.切片
1.獲取二維數組前兩行:arr[0:2]
2.獲取二維數組前兩列:arr[:, 0:2]
3.獲取二維數組前兩行和前兩列數據:arr[0:2, 0:2]
4將數據反轉arr[::-1,::-1]
1.將數組的行倒序
  arr[::-1]#
  2.列倒序
  arr[:, ::-1]

 

八.數組的行列數組個數的轉化

使用:arr3.reshape(行,列),
注意點:arr3.reshape(4, -1) # -1這個值表示自動計算行數,自動匹配,
arr3.reshape(-1, 4) # -1這個值表示自動計算行數,自動匹配, 是一個萬能的參數
總結就是:(前提條件是: 列數 x行數 = 總元素數)
行為-1,則列先滿足(先形成四列再得出行),行數 = 總元素個數/列數。
  列為-1,則行先滿足(先形成四行再得出列),列數 = 總元素個數/行數。

 

 

九.級聯(多維數組的拼接)

進行級聯, axis參數0表示列(縱向)拼接, 1表示行(橫向)拼接

np.concatenate((a1, a2),axis=0)

級聯需要注意的點:
- 級聯的參數是列表:一定要加中括號或小括號
- 維度必須相同
- 形狀相符:在維度保持一致的前提下,如果進行橫向(axis=1)級聯, 必須保證進行級聯的數組行數保持一致。如果進行縱向(axis=0)級聯, 必須保證進行級聯的數組列數保持一致。
- 可通過axis參數改變級聯的方向

 

十.切分(與級聯相反)

np.split(a1, [1, 1, 3], axis=0)  把a1看作整體,把第一行下面為界限切成兩個數組,再把這兩個堪稱一個整體,在第一行下面切一下,進行分割,因為第一行下面是空隙,所以會切出來一個空,再看成整體(空數組不算一行)從第三行的下面切割,形成行數為: 1, 空, 2, 2,   的數組
axis=0橫向切,唯為1縱向切。
樣式 :[array([[97, 56, 62, 57, 90, 22]]),
  array([], shape=(0, 6), dtype=int32),
  array([[97, 84, 26, 15, 14, 85],
      [44, 7, 78, 57, 60, 16]]),
  array([[25, 10, 67, 72, 54, 70],
      [37, 22, 41, 78, 92, 50]])]
切圖片:直接取高,寬的范圍,切片img_arr[60:390, 110:600]

 

十一.多維數組的聚合(加減乘除,平方,求最大,和值,最小等)

a1.sum()
最大最小值:np.max/ np.min
### 3. 其他聚合操作
Function Name NaN-safe Version Description
np.sum np.nansum Compute sum of elements
np.prod np.nanprod Compute product of elements
np.mean np.nanmean Compute mean of elements
np.std np.nanstd Compute standard deviation
np.var np.nanvar Compute variance
np.min np.nanmin Find minimum value
np.max np.nanmax Find maximum value
np.argmin np.nanargmin Find index of minimum value
np.argmax np.nanargmax Find index of maximum value
np.median np.nanmedian Compute median of elements
np.percentile np.nanpercentile Compute rank-based statistics of elements
np.any N/A Evaluate whether any elements are true
np.all N/A Evaluate whether all elements are true
np.power 冪運算

 

 

 

十二.ndarray(多維數組)的排序
np.sort(a1, axis=0),最小的行往上移
np.sort(a1, axis=1),最小的列往左移

np.sort()與ndarray.sort()都可以,但有區別:
np.sort(a1,axis=0)不改變輸入
a1.sort()本地處理,不占用空間,但改變輸入

 

二.數據分析組件之pandas(Series和DataFrame)

import pandas as pd

from pandas import Series,DataFrame

1.使用列表創建Series 隱式索引     取值s1[0]  name為表名
s1 = Series(data=[1,2,3,4,5],name='888')  
使用列表創建Series 顯式索引 取值s2['a']
s2 = Series(data=[1,2,3,4,5], index= ['a','b','c','d','e'],name='888')
2. 由字典創建:不能在使用index.但是依然存在默認索引
dic = {
  "English": 100,
  "Math": 30
}
s4 = Series(data=dic)
3.Series的索引和切片
可以使用中括號取單個索引(此時返回的是元素類型),或者中括號里一個列表取多個索引(此時返回的是一個Series類型),隱式和顯式一樣。
取值方式一:
如:s2["數學"]渠取到具體分數
而:s2[["語文", "英語"]] 取到類似表格的:
語文150
英語   150
dtype: int64
取值方式二:
s2.loc["數學"] # 使用loc方法通過顯式索引取值
s2.iloc[1] # 使用iloc方法通過隱式索引取值
s2.iloc[[1,3]]當有此時是取一和三
以上兩種取值方式都將可以
取值方式三:
s2.iloc[0:3] 右端取不到
s2.loc["語文":"理綜"]
4.增加值:
可以把Series看成一個定長的有序字典向Series增加一行:相當於給字典增加一組鍵值對:s2["aaa"] =1000

可以通過 shape,size,index, values等得到series的屬性
s2.shape

可以使用s.head(),s.tail()分別查看前n個和后n個值
使用unique()對Series元素進行去重
series對象間可以相加(相同索引的值相加)
可以使用相關的數據清洗方法: pd.isnull(),pd.notnull(),或s.isnull(),notnull()函數檢測缺失數據
2、DataFrame
DataFrame是一個【表格型】的數據結構。DataFrame由按一定順序排列的多列數據組成。設計初衷是將Series的使用場景從一維拓展到多維。DataFrame既有行索引,也有列索引。

1)DataFrame的創建
DataFrame是由多個Series組成的

最常用的方法是傳遞一個字典來創建。DataFrame以字典的鍵作為每一【列】的名稱,以字典的值(一個數組)作為每一列。

此外,DataFrame會自動加上每一行的索引。

使用字典創建的DataFrame后,則columns參數將不可被使用。

同Series一樣,若傳入的列與字典的鍵不匹配,則相應的值為NaN。

取值:
# 獲取前兩列df[0:2],
(1) 對 列 進行索引
  - 通過類似字典的方式 df['q']
  - 通過屬性的方式     df.q
修改列索引:
# 修改列索引
df.columns = ["zhangsan", "lisi"]
(2) 對行進行索引
- 使用.loc[]加index來進行行索引
- 使用.iloc[]加整數來進行行索引

方法一:df.loc["數學"]["zhangsan"]取到具體某一行的某一列
方法一:df.loc["數學", "zhangsan"]取到具體某一行的某一列

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM