數據分析入門之Numpy讀寫與統計分析

1、讀寫二進制文件

  • NumPy文件讀寫主要有二進制的文件讀寫和文件列表形式的數據讀寫兩種形式
  1. save函數是以二進制的格式保存數據。 np.save("…/tmp/save_arr",arr)
  2. load函數是從二進制的文件中讀取數據。 np.load("…/tmp/save_arr.npy")
  3. savez函數可以將多個數組保存到一個文件中。 np.savez(’…/tmp/savez_arr’,arr1,arr2)
  • 存儲時可以省略擴展名,但讀取時不能省略擴展名。
import numpy as np

1.1、創建兩個隨機數組

a = np.random.random((3,4))
a
array([[0.00097881, 0.11324792, 0.78365009, 0.39502093],
       [0.01605974, 0.52657326, 0.82535021, 0.39551375],
       [0.97713031, 0.45004703, 0.61007741, 0.75425759]])
b = np.random.randn(2,5)
b
array([[ 0.15091007, -0.39143206, -1.03333289, -1.16875257,  1.70066908],
       [-0.65763125,  0.06532776,  1.15839962, -0.42828668, -1.35983853]])

1.2、使用save保存單個數據

  • 以二進制的格式保存數據。
  • np.save("…/tmp/save_arr",arr),“路徑”+保存的目標
  • 文件格式默認爲.npy,可以忽略不寫
np.save('./a',a)

1.3、使用savez保存多個數據

  • 以二進制的格式保存數據。
  • np.savez("…/tmp/save_arr",arr),“路徑”+保存的目標
  • 文件格式默認爲.npz,可以忽略不寫
np.savez('./ab.npz',a,b)

1.4、使用load讀取數據

  • 讀取格式爲.npy和.npz的二進制文件
  • 格式名稱不能忽略

(1) 讀取.npy文件

np.load('./a.npy')
array([[0.00097881, 0.11324792, 0.78365009, 0.39502093],
       [0.01605974, 0.52657326, 0.82535021, 0.39551375],
       [0.97713031, 0.45004703, 0.61007741, 0.75425759]])

(2) 讀取.npz文件

d = np.load('./ab.npz')
d
<numpy.lib.npyio.NpzFile at 0x17a56f9b0c8>

(3) 查看讀取文件內容

d.files
['arr_0', 'arr_1']
  • 讀取d中的arr_0
d['arr_0']
array([[0.00097881, 0.11324792, 0.78365009, 0.39502093],
       [0.01605974, 0.52657326, 0.82535021, 0.39551375],
       [0.97713031, 0.45004703, 0.61007741, 0.75425759]])
  • 讀取d中的arr_1
d['arr_1']
array([[ 0.15091007, -0.39143206, -1.03333289, -1.16875257,  1.70066908],
       [-0.65763125,  0.06532776,  1.15839962, -0.42828668, -1.35983853]])


2、讀取文本格式的數據

print (a)
print (b)
[[0.00097881 0.11324792 0.78365009 0.39502093]
 [0.01605974 0.52657326 0.82535021 0.39551375]
 [0.97713031 0.45004703 0.61007741 0.75425759]]
 
[[ 0.15091007 -0.39143206 -1.03333289 -1.16875257  1.70066908]
 [-0.65763125  0.06532776  1.15839962 -0.42828668 -1.35983853]]

2.1、savetxt函數

  • 將數組寫到某種分隔符隔開的文本文件中。
  • np.savetxt("…/tmp/arr.txt", arr, fmt="%d", delimiter=",")
  • fmt表示數據的格式,delimiter表示數據的分隔符號
  • 默認fmt=’%.18e’,delimiter=’ ’
np.savetxt('./a.txt',a)
np.savetxt()

2.2、loadtxt函數

  • 把文件加載到一個二維數組中
  • np.loadtxt("…/tmp/arr.txt",delimiter=",")
np.loadtxt("./a.txt")
array([[0.00097881, 0.11324792, 0.78365009, 0.39502093],
       [0.01605974, 0.52657326, 0.82535021, 0.39551375],
       [0.97713031, 0.45004703, 0.61007741, 0.75425759]])

2.3、genfromtxt函數

  • 面向的是結構化數組和缺失數據
  • np.genfromtxt("…/tmp/arr.txt", delimiter = “,”)
np.genfromtxt('./a.txt')
array([[0.00097881, 0.11324792, 0.78365009, 0.39502093],
       [0.01605974, 0.52657326, 0.82535021, 0.39551375],
       [0.97713031, 0.45004703, 0.61007741, 0.75425759]])


3、對數組進行排序

3.1、直接排序

  • sort函數是最常用的排序方法。 arr.sort()
  • sort函數也可以指定一個axis參數,使得sort函數可以沿着指定軸對數據集進行排序。axis=1爲沿橫軸排序; axis=0爲沿縱軸排序。
a = np.random.randint(1,51,size=(3,5))
a
array([[38, 22, 28, 37,  3],
       [15, 42, 10, 27, 43],
       [20, 18, 31, 12, 26]])

(1) 沿橫軸排序

a.sort(axis=1) #axis默認爲1,橫向
a
array([[ 3, 22, 28, 37, 38],
       [10, 15, 27, 42, 43],
       [12, 18, 20, 26, 31]])

(2) 沿縱軸排序

a.sort(axis=0) #axis=0,表示橫向
a
array([[ 3, 15, 20, 26, 31],
       [10, 18, 27, 37, 38],
       [12, 22, 28, 42, 43]])

(3) 對一維數組排序

a = np.array([6,4,5,7,2])
a.sort()
a
array([2, 4, 5, 6, 7])

3.2、間接排序

  • argsort函數返回值爲重新排序值的下標。 arr.argsort()
  • lexsort函數返回值是按照最後一個傳入數據排序的。 np.lexsort((a,b,c))

(1) 使用argsort函數排序

a = np.array([12,5,18])
a.argsort()#按照值得大小返回數值
array([1, 0, 2], dtype=int64)

(2) 使用lexsort函數排序

a = np.array([1,5,18])
b = np.array([10,15,13])
c = np.array([12,6,28])
np.lexsort((a,c,b))#c是最後傳入的
array([0, 2, 1], dtype=int64)

4、去重與重複數據

  • 重複數據
  1. tile函數主要有兩個參數,參數“A”指定重複的數組,參數“reps”指定重複的次數。np.tile(A,reps)
  2. repeat函數主要有三個參數,參數“a”是需要重複的數組元素,參數“repeats”是重複次數,參數“axis”指定沿着哪個軸進行重複,axis = 0表示按行進行元素重複;axis = 1表示按列進行元素重複。numpy.repeat(a, repeats, axis=None)
  • 數據去重
  1. 通過unique函數可以找出數組中的唯一值並返回已排序的結果。

4.1、重複數據

a = np.array([12,5,18])

(1) np.repeat()重複數據

  • 單個重複,數據相鄰
np.repeat(a,2)
array([12, 12,  5,  5, 18, 18])

(2) np.tile()重複數據

  • 整體重複
np.tile(a,2)
array([12,  5, 18, 12,  5, 18])

4.2、數據去重

a = np.array([12,5,18])
b = np.tile(a,2)
print ("重複的數據:",b)
c = np.unique(b)
print ("去重後的數據:",c)
c
重複的數據: [12  5 18 12  5 18]
去重後的數據: [ 5 12 18]
array([ 5, 12, 18])

5、常用的統計函數

  • 當axis=0時,表示沿着縱軸計算。當axis=1時,表示沿着橫軸計算。默認時計算一個總值。

5.1、案例實戰

  • 讀取iris數據集中的花萼長度數據(已保存爲csv格式),並對其進行排序、去重,並求出和、累積和、均值、標準差、方差、最小值、最大值

5.1.1、數據初始化

(1) 讀取數據

data = np.loadtxt('./iris_sepal_length.csv')
data
array([5.1, 4.9, 4.7, 4.6, 5. , 5.4, 4.6, 5. , 4.4, 4.9, 5.4, 4.8, 4.8,
       4.3, 5.8, 5.7, 5.4, 5.1, 5.7, 5.1, 5.4, 5.1, 4.6, 5.1, 4.8, 5. ,
       5. , 5.2, 5.2, 4.7, 4.8, 5.4, 5.2, 5.5, 4.9, 5. , 5.5, 4.9, 4.4,
       5.1, 5. , 4.5, 4.4, 5. , 5.1, 4.8, 5.1, 4.6, 5.3, 5. , 7. , 6.4,
       6.9, 5.5, 6.5, 5.7, 6.3, 4.9, 6.6, 5.2, 5. , 5.9, 6. , 6.1, 5.6,
       6.7, 5.6, 5.8, 6.2, 5.6, 5.9, 6.1, 6.3, 6.1, 6.4, 6.6, 6.8, 6.7,
       6. , 5.7, 5.5, 5.5, 5.8, 6. , 5.4, 6. , 6.7, 6.3, 5.6, 5.5, 5.5,
       6.1, 5.8, 5. , 5.6, 5.7, 5.7, 6.2, 5.1, 5.7, 6.3, 5.8, 7.1, 6.3,
       6.5, 7.6, 4.9, 7.3, 6.7, 7.2, 6.5, 6.4, 6.8, 5.7, 5.8, 6.4, 6.5,
       7.7, 7.7, 6. , 6.9, 5.6, 7.7, 6.3, 6.7, 7.2, 6.2, 6.1, 6.4, 7.2,
       7.4, 7.9, 6.4, 6.3, 6.1, 7.7, 6.3, 6.4, 6. , 6.9, 6.7, 6.9, 5.8,
       6.8, 6.7, 6.7, 6.3, 6.5, 6.2, 5.9])

(2) 排序

data.sort()
data
array([4.3, 4.4, 4.4, 4.4, 4.5, 4.6, 4.6, 4.6, 4.6, 4.7, 4.7, 4.8, 4.8,
       4.8, 4.8, 4.8, 4.9, 4.9, 4.9, 4.9, 4.9, 4.9, 5. , 5. , 5. , 5. ,
       5. , 5. , 5. , 5. , 5. , 5. , 5.1, 5.1, 5.1, 5.1, 5.1, 5.1, 5.1,
       5.1, 5.1, 5.2, 5.2, 5.2, 5.2, 5.3, 5.4, 5.4, 5.4, 5.4, 5.4, 5.4,
       5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.6, 5.6, 5.6, 5.6, 5.6, 5.6,
       5.7, 5.7, 5.7, 5.7, 5.7, 5.7, 5.7, 5.7, 5.8, 5.8, 5.8, 5.8, 5.8,
       5.8, 5.8, 5.9, 5.9, 5.9, 6. , 6. , 6. , 6. , 6. , 6. , 6.1, 6.1,
       6.1, 6.1, 6.1, 6.1, 6.2, 6.2, 6.2, 6.2, 6.3, 6.3, 6.3, 6.3, 6.3,
       6.3, 6.3, 6.3, 6.3, 6.4, 6.4, 6.4, 6.4, 6.4, 6.4, 6.4, 6.5, 6.5,
       6.5, 6.5, 6.5, 6.6, 6.6, 6.7, 6.7, 6.7, 6.7, 6.7, 6.7, 6.7, 6.7,
       6.8, 6.8, 6.8, 6.9, 6.9, 6.9, 6.9, 7. , 7.1, 7.2, 7.2, 7.2, 7.3,
       7.4, 7.6, 7.7, 7.7, 7.7, 7.7, 7.9])

(3) 數據去重

data = np.unique(data)
data
array([4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5. , 5.1, 5.2, 5.3, 5.4, 5.5,
       5.6, 5.7, 5.8, 5.9, 6. , 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.8,
       6.9, 7. , 7.1, 7.2, 7.3, 7.4, 7.6, 7.7, 7.9])

(4) 查看個數

data.shape
(35,)

5.1.2、統計運算

(1) 求和

np.sum(data)
210.39999999999998

(2) 累計和

np.cumsum(data)
array([  4.3,   8.7,  13.2,  17.8,  22.5,  27.3,  32.2,  37.2,  42.3,
        47.5,  52.8,  58.2,  63.7,  69.3,  75. ,  80.8,  86.7,  92.7,
        98.8, 105. , 111.3, 117.7, 124.2, 130.8, 137.5, 144.3, 151.2,
       158.2, 165.3, 172.5, 179.8, 187.2, 194.8, 202.5, 210.4])

(3) 均值、標準差、方差、最小值、最大值

print ("均值:",np.mean(data))
print ("標準差:",np.std(data))
print ("方差:",np.var(data))
print ("最小值:",np.min(data))
print ("最大值:",np.max(data))
均值: 6.011428571428571
標準差: 1.0289443768310533
方差: 1.0587265306122449
最小值: 4.3
最大值: 7.9
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章