1. 程式人生 > >資料分析—numpy

資料分析—numpy

(https://blog.csdn.net/taiyang5946/article/details/77859851)用numpy時要注意縮排,頂頭寫

否者報錯。

a_list = range(10)

b_list = range(10)
# 把兩個列表中的元素一一對應相乘,把結果放在列表中\n
c_list = []
for x in range(len(a_list)):
# 根據x的值  取出列表中的資料 相乘  結果放入c列表中\n",
    c = a_list[x] * b_list[x]
    c_list.append(c)
    print(c_list)
[0]
[0, 1]
[0, 1, 4]
[0, 1, 4, 9]
[0, 1, 4, 9, 16]
[0, 1, 4, 9, 16, 25]
[0, 1, 4, 9, 16, 25, 36]
[0, 1, 4, 9, 16, 25, 36, 49]
[0, 1, 4, 9, 16, 25, 36, 49, 64]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 引入numpy,重新命名為np\n
import numpy as np
# 生成一個numpy中的一維陣列
# numpy中的陣列,儲存的所有資料必須是同質(相同型別)的
a_arr = np.arange(10)
print(a_arr)
b_arr = np.arange(10)
    # 直接使用陣列做向量運算的,會把運算作用到陣列中的每一個元素中
c_arr = a_arr * b_arr

print(c_arr)

執行結果:
[0 1 2 3 4 5 6 7 8 9]
[ 0  1  4  9 16 25 36 49 64 81]

import numpy as np

data = np.random.rand(2,3)
print(data)
print('維度個數',data.ndim)
print('各維度大小',data.shape)

print('資料型別',data.dtype)

執行結果:

[[0.99220889 0.99680282 0.51083921]
 [0.98437702 0.9869212  0.82989925]]
維度個數 2
各維度大小 (2, 3)
資料型別 float64

 # python中列表轉換numpy中的陣列
l1 = range(10)
print(type(l1))
# 轉換為陣列
arr = np.array(l1)
print(type(arr))
print(arr.ndim)
print(arr.shape)
print(arr.dtype)

l2 = [range(10),range(10,20)]
print(type(l2))
arr = np.array(l2)
print(arr)
print(arr.ndim)
print(arr.shape)
print(arr.dtype)

<class 'list'>
[[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]]
2
(2, 10)
int32

#  zeros() \\ ones() \\ empty()函式  建立陣列\n",
# 使用zeros()建立指定維度,指定資料型別的陣列\n",
# 1.維度資訊  2.指定型別\n",
# 如果不指定資料型別,預設全部是0.的float64的資料\n",
zeros_arr = np.zeros((2,3),np.int32)
print(zeros_arr)
print(zeros_arr.dtype)
   
# 使用ones()函式建立指定維度,指定資料類的陣列\n",
# 不指定資料型別,預設是全部為1的float64型別的資料\n",
ones_arr = np.ones((2,3),np.int32)
print(ones_arr)
    
# 使用empty()函式建立指定為度的陣列\n",
# 不指定資料型別,預設為全部為1的float64的資料\n",
empty_arr = np.empty((2,3))
print(empty_arr)
# 如果想要一個空字串的陣列,可以指定資料型別為np.str
empty_arr_str = np.empty((2,3),np.str)
print(empty_arr_str)
# 建立對角線資料全部為1的陣列
identity_arr = np.identity(3,dtype=np.int64)
print(identity_arr)

[[0 0 0]
 [0 0 0]]
int32
[[1 1 1]
 [1 1 1]]
[[0.99220889 0.99680282 0.51083921]
 [0.98437702 0.9869212  0.82989925]]
[['' '' '']
 ['' '' '']]
[[1 0 0]
 [0 1 0]
 [0 0 1]]

zeros_arr = np.zeros((3,3),np.int64)
print(zeros_arr)
print(zeros_arr.dtype)
# astype()函式,轉換陣列中的資料型別
zeros_float_arr = zeros_arr.astype(np.float64)
print(zeros_float_arr)
print(zeros_float_arr.dtype)
    
# 儲存資料為小數型別,轉換為整數型別\n",
data_arr = np.array([1.45,2.34,3.14,5.5,6.6,3.1])
print(data_arr)
print(data_arr.dtype)
# 將float64資料型別轉換為整數int64型別,只保留整數部分\n",
int_data_arr = data_arr.astype(np.int64)

print(int_data_arr)

[[0 0 0]
 [0 0 0]
 [0 0 0]]
int64
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]
float64
[1.45 2.34 3.14 5.5  6.6  3.1 ]
float64
[1 2 3 5 6 3]
# 陣列的運算
arr = np.array([[1,2,3],[4,5,6]])
arr2 = np.array([[4,5,6],[7,8,9]])
# 乘法運算   會把運算作用陣列中的每一個元素中\n",
print('乘法運算',arr*3)
# 乘方
print('乘方運算',arr**2)
   
# 矩陣(陣列)加減乘除運算\n",
print(arr+arr)
print(arr-arr2)
print(arr/arr2)

print(arr*arr2)

乘法運算 [[ 3  6  9]
 [12 15 18]]
乘方運算 [[ 1  4  9]
 [16 25 36]]
[[ 2  4  6]
 [ 8 10 12]]
[[-3 -3 -3]
 [-3 -3 -3]]
[[0.25       0.4        0.5       ]
 [0.57142857 0.625      0.66666667]]
[[ 4 10 18]
 [28 40 54]]

# BMI體重計算器,計算若干人員的身高體重比\n",
# BMI = 體重/身高(m)^2\n",
# 有兩個陣列,一個存放體重  一個存放身高  將身高體重一一計算,把計算結果放入陣列\n",
# 1.列表進行運算\n",
weight_list = [65,75,85]
height_list = [1.7,1.75,1.8]
result =[]
for x in range(len(weight_list)):
    bmi = weight_list[x]/(height_list[x]*height_list[x])
    result.append(bmi)
    print(result)
    # 2.array資料運算\n",
    w_arr = np.array(weight_list)
    h_arr = np.array(height_list)
    # 直接使用陣列做向量運算\n",
    rs_arr = w_arr/(h_arr**2)
    print(rs_arr)
    
    # 表示式返回的是存放布林型別化資料陣列\n",
    is_ok = rs_arr >=23
    print(is_ok)
    print(is_ok.dtype)
    # 通過is_ok資料可以將陣列中資料取出來\n",
    # 取出bmi大於等23的身高和體重\n",
    # 把True對應的資料取出來\n",
    w_rs = w_arr[is_ok]
    print(w_rs)
    h_rs = h_arr[is_ok]

    print(h_rs)

[22.49134948096886]
[22.49134948 24.48979592 26.2345679 ]
[False  True  True]
bool
[75 85]
[1.75 1.8 ]
[22.49134948096886, 24.489795918367346]
[22.49134948 24.48979592 26.2345679 ]
[False  True  True]
bool
[75 85]
[1.75 1.8 ]
[22.49134948096886, 24.489795918367346, 26.234567901234566]
[22.49134948 24.48979592 26.2345679 ]
[False  True  True]
bool
[75 85]
[1.75 1.8 ]

year_arr = np.array([
       [2000,2013,2015],
       [2008,2019,2007],
       [2010,2012,2017]
    ])
    # 篩選出大於等於2015的年份\n",
is_year_after = year_arr >= 2015
print(is_year_after)
    # 根據篩選的結果布林資料取出資料\n",
filter_year = year_arr[is_year_after]
print(filter_year)
    # 等同於上面的寫法\n",
filter_year = year_arr[year_arr>=2015]
print(filter_year)
print('-----------------------------------------------')
    
    # 多個條件同時成立\n",
filter_year = year_arr[(year_arr>=2007) & (year_arr%4==0)]
print(filter_year)
    
    # 多個條件有一個成立即可 | 或者\n",
filter_year = year_arr[(year_arr>=2007) | (year_arr%2==0)]

print(filter_year)

[[False False  True]
 [False  True False]
 [False False  True]]
[2015 2019 2017]
[2015 2019 2017]
-----------------------------------------------
[2008 2012]
[2000 2013 2015 2008 2019 2007 2010 2012 2017]

# 陣列的切片\n",
arr = np.arange(10)
print(arr)
    # 資料中的索引從0開始,依次+1\n",
print(arr[3])
    # 切片\
print(arr[2:5])
print(arr[:5])
print(arr[2:])

print(arr[2::3])

[0 1 2 3 4 5 6 7 8 9]
3
[2 3 4]
[0 1 2 3 4]
[2 3 4 5 6 7 8 9]
[2 5 8]
# reshape()把一維陣列轉換為多維陣列\n",
# 轉換之後的資料總個數必須等於轉換之前的個數\n",
arr2 = np.arange(12).reshape(3,4)
print(arr2)
# 多維陣列通過組合索引取值\n",
print(arr2[1,1])
    # 切片\n",
print(arr2[0:2])
print(arr2[0:2,2:])

print(arr2[:,1:3])

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
5
[[0 1 2 3]
 [4 5 6 7]]
[[2 3]
 [6 7]]
[[ 1  2]
 [ 5  6]
 [ 9 10]]

arr3 = np.random.rand(2,3)
print(arr3)
print(arr3.ndim),
print(arr3.shape)
# 轉置之後,將陣列中的各個索引資料對應結合\n",
arr4 = arr3.transpose()
print(arr4)
print(arr4.ndim)
print(arr4.shape)
    
# 多維陣列轉一維陣列\n",
arr5 = arr4.reshape(6)

print(arr5)

[[0.32211391 0.7809368  0.28596324]
 [0.83252519 0.52694696 0.03446635]]
2
(2, 3)
[[0.32211391 0.83252519]
 [0.7809368  0.52694696]
 [0.28596324 0.03446635]]
2
(3, 2)
[0.32211391 0.83252519 0.7809368  0.52694696 0.28596324 0.03446635]