數據分析 numpy

主要內容:python

1 數據分析數組

  a 概念:  是把隱藏在一些看似雜亂無章的數據背後信息提煉出來,總結出所研究對象的內在規律.dom

  b 三劍客: Numpy  Pandas  Matplotlib函數

2 Numpy 是Python語言的一個擴展程序庫, 支持大量的緯度數組與矩陣運算,此外也針對數組運算提供大量的數字函數庫.spa

  a ndarray的概念:  ndarray 是一個多維的數組對象,具備矢量算術運算能力和複雜的廣播能力,並具備執行速度快和節省空間的特色。code

  b  ndarray的建立:對象

    1) 使用np.array()建立: 最簡單的方法是使用 numpy 提供的 array() 函數直接將 Python 數組轉換爲 ndarray 數組,array() 接受一切序列類型的對象,例如將一個列表轉換成 ndarray 數組.blog

import numpy as np
#一維數組的建立
np.array([1,2,3,4,5])

# 二維數組的建立
np.array([[1,2,3], [3, 4, 5]])
np.array([[1, 2, 3], ['a', 4, 5]])

#注意: 1 numpy默認ndarray的全部元素的類型是相同的
#      2 若是傳過來的列表包含不一樣的類型,則統一爲
# 統一類型,優先級: str > float > int

    2) 使用matplotlib.pyplot獲取一個numpy數組, 數據來源於同一張圖片排序

import matplotlib.pyplot as plt
img_arr = plt.imread('1.jpg')
plt.imshow(img_arr)
img_arr.shape

    3) 使用np.ones方法建立  :np.ones(shape, dtype=None, order='C')索引

      np.ones(shape=(20, 30))

    4)  使用np.full方法建立:   np.full(shape, fill_value, dtype=None, order='C')

      np.full(shape=(5,6), fill_value=100)

    5)  使用np.linspace方法建立: np.linspace(start, stop, num=50, endpoint=True, retstep=False,dtype=None)等差數列

      np.linspace(1, 100, num=20)

    6)  使用np.arange方法建立: np.arange([start, ]stop, [step, ]dtype=None)

      np.arange(0,100, step=2)

    7) 使用np.random.randint(low, high=None, size=None, dtype='I')

np.random.seed(14)  #固定時間種子,產生的隨機數就固定下來了
np.random.randint(0,100,size=(5,7))

    8)  使用np.random.randn(d0,d1,d2....dn) 標準正態分佈

      arr = np.random.randn(4,4)

    9)  使用np.random.random(size=None) 生成0到1的隨機數, 左閉右開

      np.random.random(size=(3, 4))

  c : ndarray屬性

    1)  4個必記的參數:  ndim  維度;  shape  形狀 ; size  總長度  ; dtype 元素類型

  d : ndarray基本操做

    1) 索引:  一維與列表徹底一致,多維時同理

    2) 切片: 一維與列表徹底一致,多維時同理

# 左邊是行,右邊是列
arr = np.random.randint(60,120,size=(6,4))
# 獲取前兩行的數據
    # arr[0:2]
# 獲取二維數組的前2列
    # arr[:, 0:2]
# 獲取前兩行和前兩列的數據
    # arr[0:2,0:2]
# 將數據反轉   ::進行切片
# 將數組的行倒序
    # arr[::-1]
# 將數組的列倒序
    # arr[:, ::-1]
# 所有倒序
arr[::-1, ::-1]

   3) 變形 : 使用arr.reshape()函數, 注意參數是一個tuple!基本使用: 

      將一維數組轉變爲多維數組

arr2 = np.random.randint(20,30, size=(6,4))
arr2
# 轉變爲一維數組
arr12 = arr2.reshape(24)
arr12
# 轉變成三維數組
arr32 = arr2.reshape(2,4,3)
arr32
# 自動計算行和列
arr4 = arr2.reshape(3,-1)
arr4
arr5 = arr2.reshape(-1,6)
arr5

      4) 級聯   一維數組 二維數組  多維數組的級聯, 實際操做中級聯多爲二維數組

      np.concatenate()  axis=0表示的是豎直方向  1水平方向

arr1 = np.random.randint(0,100, size=(3,4))

arr2 = np.random.randint(0,100, size=(3,4))

np.concatenate((arr1,arr2), axis=1)       水平方向

np.concatenate((arr1,arr2), axis=0)       豎直方向

   5)  切分: 與級聯相似, 三個函數完成切分工做: np.split(arr,行/列,軸): 參數2是一個列表類型 np.vsplit np.hsplit

import matplotlib.pyplot as plt
img_arr = plt.imread('./1.jpg')
plt.imshow(img_arr)

imgs = np.split(img_arr,[100,300],axis=0)
plt.imshow(imgs[1])

   6)  副本:  全部賦值操做不會爲ndarray的任何元素建立副本, 對賦值後的對象的操做也會對原來的對象生效.

可以使用copy建立副本.

arr = np.array([1,2,3,4,5])
a = arr
a[1] = 10
print(arr)

arr1 = arr.copy()
arr1[0] = 20

  e : ndarray的聚合操做

arr.sum()
arr.std()
arr.mean()

  f: 廣播機制

    ndarray廣播機制的三條規則:

      缺失維度的數組, 則維度補充爲進行運算的數組的維度.缺失的數組元素使用已有元素進行補充.

      規則一:  爲缺失的維度補1

      規則二: 缺失元素用已用值補充

      規則三: 缺失維度的數組只能有一行或者是一列

例一: m = np.ones((2,3)) a = np.arange(3) 求m + a
# 兩行三列的矩陣1
m = np.ones((2,3))
# 一維數組0,1,2
a = np.arange(3)
m+a

a = np.arange(3).reshape(3,1)
b = np.arange(3)
a+b

習題3 : a = np.ones((4,1)) b = np.arange(4) 求a+b
a = np.ones((4,1))
b = np.arange(4)
a+b

  h : ndarray排序

# 1  快速排序np.sort()與ndarray.sort()均可以, 但有區別:
#         np.sort()不改變輸入
#         ndarray.sort()本地處理, 不佔用空間, 但改變輸入.
arr = np.array([3,8,5,7,6])
arr

# 排序
np.sort(arr)

  部分排序

2 部分排序 np.partition(a,k) 有的時候咱們不會對所有的數據感興趣, 咱們可能對最小的或者最大的一部分感興趣. 當k爲正時, 咱們想獲得最小的k個數 當k爲負時, 咱們想獲得最大的k個數

arr = np.array([1,2,3,4,5])
np.partition(arr, kth=4)
相關文章
相關標籤/搜索