AndyChiangTue, Feb 2, 2021 5:41 PM
Python
因為Python筆記寫太長了,所以有關模組的部分內容移來此篇說明XD
之前講得不夠清楚,所以補充一下,中文安裝教學。
下載前先檢查有沒有安裝pip:
如果有出現版本,就代表已經安裝過了!
如果沒安裝過,到pip官網跟著步驟下載。
如果要用pip安裝套件,留意路徑要對!
是一個Python專門處理數學運算的模組,此模組所定義的陣列(ndarray)比起傳統Python的列表快上50倍!
如果您已經在系統上安裝了Python和PIP,則安裝NumPy非常容易。
安裝完後就可以引用此模組了。
習慣上會將 numpy 簡寫成 np。
使用 array() 函數,參數可以是任意型態的數組,回傳型態為 ndarray。
和數組差不多,只有二維以上比較特別。
從1切到4(不包括5),2為間隔。
從二維取出0到1的一維陣列,再從一維陣列切出1到3的值,因此回傳值為兩個長度三的一維陣列。
產生副本,更改副本不會影響原始陣列,更改原始陣列也不會影響副本。
產生預覽,更改預覽會影響原始陣列,更改原始陣列也會影響預覽。
使用 .base
檢查:
產生的陣列為預覽(view)
-1 是未知數,電腦會自動幫你補上對的數字。
可以用之前的For迴圈:
但如果碰上高維度的陣列,相對變得麻煩,因此可以使用 .nditer()
函數。
使用 .ndenumerate()
列舉出所有元素以及它的索引值。
使用 np.concatenate()
函數,可決定要連接的軸心。
使用 np.stack()
函數,可決定要連接的軸心。
使用 np.array_split()
函數,參數為要拆分的陣列以及拆成幾份。
使用 np.where(condition)
函數,傳回符合條件的元素的索引值,型態為組合(tuple)。
使用 np.searchsorted()
函數,傳回指定值適合插入在陣列的索引值,插入後不會影響原排序。預設從左邊開始搜尋,可改變 side='right'
從右邊開始搜尋。
使用 np.sort()
函數,回傳值為排序好的陣列副本。
在NumPy中,會使用 布林值陣列 進行篩選:
NumPy提供了一個方便的功能,只要 布林值陣列 = 原陣列condition
,模組會依照條件自動產生一組布林值陣列。
從 numpy 中引用 random 模組:
size 參數可決定陣列大小。
size 參數可決定陣列大小。
p 陣列代表機率,機率值從0~1,0是完全不會出現,1是一定會出現,機率總和記得要為1。
使用 shuffle()
隨機打散陣列,原陣列會改變。
使用 permutation()
隨機打散陣列,原陣列不會改變。
有太多分布了,而且不是那麼重要,有需要可以查底下連結:更多分布
可以搭配 Matplotlib 印出分布圖,那部分之後再說明。
NumPy ufuncs 實作出像量化,因此會比正常的運算還要更快。
使用 frompyfunc(<函數名稱>, <輸入參數(數組)的數量>, <輸出數組的數量>)
,如下:
當然原先Python提供的加減乘除也可以用,但用 ufuncs 會跑得更快!
ps. 無法整除的會返回浮點數。
直接刪除小數後的整數部分。
第二個參數可指定要四捨五入到第幾位。
注意到三角函數的參數都是弧度,因此必須先把角度(degree)換成弧度(radian):
反過來也可以:
給sin、cos、tan值反求角度:
使用 unique()
將任意陣列轉為集合,重複項將刪除。
關於集合的操作前面講過了,這邊只放指令
newarr = np.union1d(arr1, arr2)
:聯集(union)newarr = np.intersect1d(arr1, arr2, assume_unique=True)
:交集(intersection)newarr = np.setdiff1d(set1, set2, assume_unique=True)
:差(difference)newarr = np.setxor1d(set1, set2, assume_unique=True)
:對稱差(symmetric difference)assume_unique=True
:此屬性可以加速運算,寫就對了!是專門用來繪製數據圖的Python模組。
如果您已經在系統上安裝了 Python 和 PIP,則 Matplotlib 的安裝非常簡單。
大多數 Matplotlib 實用程序位於 pyplot 子模組下,並且通常以 plt 別名導入:
使用 plot()
函數在xy座標上繪製點或線。
plot() 第一個參數代表x軸上的座標,第二個參數代表y軸上的座標。
如果只給一組參數,函數會預設x軸座標為 [0,1,2,3…]
參數多加上 "o"
marker|line|color
依序為 端點形狀|線樣式|點和線的顏色
樣式有很多,可以去以下連結找:Matplotlib 標記格式
可修改參數 markersize(或ms) 設定端點大小。
可修改參數 markeredgecolor(或mec) 設定端點邊緣顏色。
可修改參數 markerfacecolor(或mfc) 設定端點邊緣內顏色。
顏色可使用十六進位制色碼或指定顏色名稱。
可修改參數 linestyle(或ls) 設定線的樣式。
可修改參數 color(或c) 設定線的顏色。
顏色可使用十六進位制色碼或指定顏色名稱。
可修改參數 linewidth(或lw) 設定線的寬度。
可使用 loc
參數來修改標題位置:
可修改參數 axis
設定網格線類型:
網格線也可以更改格式,方法和線一樣。
使用 subplots()
,一口氣顯示多個圖。
參數代表:subplot(多圖有幾列, 有幾行, 這是第幾張圖)
使用 suptitle()
顯示整張多圖的主標籤。
使用 scatter()
必須有兩個長度相同的陣列,第一個當x軸座標,第二個當y軸座標。
可修改參數 color(或c) 設定散點圖的顏色。
使用 cmap 參數設定色卡,另外必須有 color 陣列標記色卡百分比(0~100),長度必須與散點圖一致,參數限定使用 c
。
使用 plt.colorbar()
更可以將色卡印在散點圖旁邊。
可修改參數 s 設定散點圖的大小,如果想讓每個點的大小都不一樣,請給定一個長度和散點圖一樣的陣列,陣列內的值為點的大小。
可修改參數 alpha 設定散點的透明度,值為(0~1),數字越小越透明。
使用 bar()
函數建立直條圖。
使用 barh()
函數建立直條圖(橫式)。
改顏色方法和散點圖一樣。
使用 width 參數設定直條寬度(預設為0.8),但如果是橫式則使用 height 參數(預設也為0.8)。
使用 hist()
函數建立直方圖,常用來表示高斯分布。
使用 pie()
函數建立圓餅圖,值加起來必須為100。
使用 labels 參數設定圓餅區塊標籤,通常指向一個標籤陣列。
使用 startangle 參數設定圓餅圖起始角度,預設為0。
使用 explode 參數設定圓餅圖區塊的凸顯效果,數值代表離圓心的距離,預設為0。
使用 shadows 參數設定圓餅圖是否有陰影,預設為False。
改顏色方法和散點圖一樣。
使用 legend()
函數,加入圖示說明在圖上。
另外,使用 title 屬性設定圖示說明的標題。
在 Python 中專門處理科學記號或運算的模組。
如果您已經在系統上安裝了 Python 和 PIP,則 SciPy 的安裝非常簡單。
安裝完即可直接引用。
可以印出 scipy.__version__
檢查是否安裝成功。
常數位於 scipy 底下的 constants 子模組中
常數有非常多,大致分類成這樣:
使用 scipy.optimze.root
可求得該方程式的解,第一個參數為方程式,第二個參數為解的猜測值。
使用 scipy.optimize.minimize()
可簡化方程式,第一個參數為方程式,第二個參數為解的猜測值,第三個參數為簡化方法。
有 CSC 和 CSR 兩種處理方式,範例都使用 CSR。
必須引用 scipy.sparse.csr_matrix()
函數,將一般陣列轉為 CSR 陣列。
使用前必須引用 scipy.sparse.csgraph
模組。
就是資料結構的 Adjacency Matrix,通常是 CSR 陣列。
Connected Components 指的是有連接的最大子圖(Subgragh)。
一樣是走訪圖,但此演算法可以應付邊權重為負的情況:
第一個參數為圖,第二個參數為起始點。
必須引用 scipy.io
模組。
有三個參數:第一個參數是檔名,第二個參數是包含數組的字典,第三個參數是布林值,是否要壓縮(預設為False)。
SciPy 之後的東西太難了,看不懂QQ~,就只寫到這裡。以後學會了再補寫(?)
連結
使用pip安裝用以下指令:
在Python程式中引用:
在Series()
中放入列表型態,轉為Series型態。
執行結果:
索引值預設為0, 1, 2…,也可以用index=
設定索引值。
執行結果:
字典中key是column欄位的名稱,value則是一個iterable,值為欄位的數值。
index預設為0, 1, 2,…,可使用index=list改變index內容。
df["屬性名稱"]
df.iloc[row, col]
iloc參數為索引值(整數)
df.loc[row, col]
loc參數為欄位名稱(字串)
篩選num介於11到19間的列。
輸入dict為要更改的名稱,axis=0是row,axis=1才是column。
第一個參數為刪除之欄位名稱。
當讀進的資料有遺漏項時就會出會NaN值。
執行結果:
執行結果:
執行結果:
如果是 pd.concat([df_1, df_2], ignore_index=True)
,則index會合併後重新排列。
執行結果:
執行結果:
Pandas要匯出資料非常簡單,常見的檔案支援格式有這些,參數輸入檔案名稱即可。
參數一樣輸入檔案名稱即可,如果資料有中文字要特別注意編碼問題,加上encoding="utf-8"
,否則會出現亂碼。