1. 程式人生 > >利用python 學習資料分析 (學習一)

利用python 學習資料分析 (學習一)

內容學習自:

Python for Data Analysis, 2nd Edition        

就是這本

純英文學的很累,對不對取決於百度翻譯了

前情提要:

各種方法貼:

  https://www.cnblogs.com/baili-luoyun/p/10250177.html

    本內容主要講的是

      陣列和向量的計算

 

    一: 建立陣列

      傳入內容(序列化物件),轉化成陣列

        np.array()

      1:單維陣列 (和列表沒什麼兩樣)

1 單維陣列
2 # data1 = [6, 7, 8, 9, 10, 1, 2] 3 # arr1 =np.array(data1) 4 # print(arr1)
>>>>
[ 6  7  8  9 10  1  2]

 

 

      2:多維陣列

 

data2 =[[1,2,3,4],[5,6,7,8]]
arr2 =np.array(data2)
l =arr2.shape   #返回維度
print(arr2)
print(l)
>>>>>

[[1 2 3 4]
[5 6 7 8]]
(2, 4)

 

 

 

      3:系統內建函式np.arange(橫,縱)

 

data3 =np.arange(1,15)
print(data3)
>>>>>

[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14]

 

 

 

      4:生成對角線陣列 

 

data4 =np.eye(3,3)
print(data4)


>>>

[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]

 

 

 

 

 

    二:陣列之間的運算(向量化運算可以直接參與賦值)

      1:向量可以直接參運算

 

* 乘法

lis =[[1,2,3],[4,5,6]]
data1 =np.array(lis)
print(data1)
#向量化運算可以直接參與運算
l2 =data1*data1
print(l2)

-減法
l3 =data1+data1
print(l3)



>>>>>

[[1 2 3]
[4 5 6]]
[[ 1 4 9]
[16 25 36]]
[[ 2 4 6]
[ 8 10 12]]

 

  

 

      2:陣列與標量之間可以直接傳遞到陣列的每個內容

 

l4 =1/data1
print(l4)

>>>>

[[1. 0.5 0.33333333]
[0.25 0.2 0.16666667]]

 

 

 

      3:陣列相同維度的比較(維度不同則報錯)

 

data2 =np.array([[3,2,1],[6,5,4]])
l4 =data1>data2
print(l4)
>>>>

[[False False  True]
 [False False  True]]

 

 

 

 

    三:陣列的切片和索引

      1:一維陣列

 

print(arr1[1])
print(arr1[4])
print(arr1[:4])
arr1[1]=888    #給對應索引位置換值
print(arr1)
arr1[:] =55    # 給所有索引位置換值
print(arr1)
>>>>>
2
5
[1 2 3 4]
[  1 888   3   4   5]
[55 55 55 55 55]

 

  

      2:多維陣列:

 

arr2d =np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(arr2d)
print(arr2d[3])  #多維陣列索引是一維陣列
print(arr2d[1][2])    #一維陣列以後切牌獲得單個值
arr2d[0]=42        #多維陣列單獨索引賦值,則整個一維陣列都換值
arr2d[0][0] =55
print(arr2d)              # 把多為陣列都拆開單獨賦值獲得內容
l =arr2d[0:2]       #多維陣列切片,可以
l =arr2d[:2,2]         #切完之後再,進行小切

l =arr2d[:2,1:]       #獲取前二行後兩列
l =arr2d[2,:2]
l1 =arr2d[1,:2]       #獲取第二個前兩列
l =arr2d[:3,:2]       #獲取前三行前兩列
l =arr2d[:,:1]         #多維陣列,索引從1開始
print(l)
>>>

[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
[10 11 12]
6
[[55 42 42]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
[[55]
[ 4]
[ 7]
[10]]

 

 

 

 

 

    五:布林型索引

 

names =np.array(['bob','bob','bob','bob','bob','apple','alan','sele'])
data =np.random.randn(8,4)
# names =='bob'
print(names=='bob')   #字串也可以進行比較返回一個bool值
print(names)
>>>>

[ True True True True True False False False]
['bob' 'bob' 'bob' 'bob' 'bob' 'apple' 'alan' 'sele']

 

 

 

 

 

 

 

 

print(data)
print(data[names =='bob']) #有兩個bob 所以返回行 #布林型索陣列長度,需要等於布林型索引長度,
>>>>>

[[-0.3316016 1.78918492 -1.59222587 0.21469427]
[ 1.55247352 1.14508726 -0.68673629 -0.42648069]
[-0.95385141 -0.1938747 0.22302977 -1.25419395]
[ 0.09290589 0.26875941 -0.34120567 1.67205517]
[ 1.17781667 -0.83402007 -2.64528669 -0.70822941]
[ 0.34199013 1.81982055 0.60103061 0.39070584]
[-1.20352138 0.7618197 -1.29754963 1.19821404]
[ 0.84278983 -0.60723742 -0.73442051 -0.87391669]]
[[-0.3316016 1.78918492 -1.59222587 0.21469427]
[ 1.55247352 1.14508726 -0.68673629 -0.42648069]
[-0.95385141 -0.1938747 0.22302977 -1.25419395]
[ 0.09290589 0.26875941 -0.34120567 1.67205517]
[ 1.17781667 -0.83402007 -2.64528669 -0.70822941]]

 

 

 

 

 

 

 

print(data[names =='bob',2:])         #獲取之後也可以切片
print(names!='bob')
print(data[~(names =='bob')])
>>>>>>>>>>

[[-1.05528931 -0.19176188]
[-1.55590721 0.43000376]
[ 1.3635074 0.75722279]
[ 2.80719722 0.3907232 ]
[ 0.3805182 -1.30951587]]
[False False False False False True True True]
[[ 0.64999255 -1.40220795 -0.11081563 0.51079912]
[ 1.24400895 -1.81700713 -0.24652383 1.20494275]
[-1.53308854 1.09828319 1.32899806 -0.86707369]]