Python主要是依靠眾多的第三方庫來增強它的數據處理能力的。常用的是Numpy庫,Scipy庫、Matplotlib庫、Pandas庫、Scikit-Learn庫等。 常規版本的python需要在安裝完成後另外下載相應的第三方庫來安裝庫文件。而若安裝的是Anaconda版本的Python,則不需要 ...
Python主要是依靠眾多的第三方庫來增強它的數據處理能力的。常用的是Numpy庫,Scipy庫、Matplotlib庫、Pandas庫、Scikit-Learn庫等。
常規版本的python需要在安裝完成後另外下載相應的第三方庫來安裝庫文件。而若安裝的是Anaconda版本的Python,則不需要一個一個安裝第三方庫,可能已經同時安裝了這些庫。
Anaconda是專門應用於科學計算的Python版本。
Numpy庫:表達N維數組的最基本的庫。
Numpy庫是專門為應用於嚴格的數據處理開發的,它提供了一個非常強大的N維數組對象array和實用的線性代數、傅里葉變換和隨機數生成函數,可以存儲和處理大型的矩陣,Scipy,matplotlib,pandas庫等均依賴於它。
① 安裝Numpy庫:pip install numpy ,集成安裝方法(anaconda)或者文件安裝方法(先從UCI頁面搜索庫,下載對應版本的文件,使用 pip install <文件名>進行安裝)
② 多維數組:用array函數創建數組,array函數接收一切序列類型的對象(list,tuple,其他數組) import numpy as np
A=np.array(列表、元組或數組)
創建特殊函數:import numpy as np
B=np.ones(n,m),C=np.zeros(n,m) ,I=np.eye/identify(n) 等
SciPy庫:提供了真正的矩陣,以及基於矩運算的對象和函數,Scipy包含的功能有最優化、線性代數、積分、插值、擬合、特殊函數、快速傅里葉變換、信息處理和圖像處理、常微分方程求解和其他科學和工程常用的計算。
註意:Scipy庫依賴於Numpy庫,需先安裝Numpy庫
例:使用Scipy求解線性方程組的方法:
import scipy
from scipy import linalg
a=scipy.mat('[2 1 -5 1;1 -3 0 -6;0 2 -1 2;1 4 -7 6]')
b=scipy.mat('[8;9;-5;0]')
solve=linalg.solve(a,b)
print(solve) #運行結果輸出值矩陣
[ [3.]
[-4.]
[-1.]
[1.] ]
該方程的另一解為:使用LU求解多個線性方程
from numpy import *
import scipy.linalg as s1
A=array([[2,1,-5,1],[1,-3,0,-6],[0,2,-1,2],[1,4,-7,6]])
b=array([8,9,-5,0])
bi=b.reshape(-1,1)
[LU,piv]=s1.lu_factor(A)
print(LU,piv)
xi=s1.lu_solve((LU,piv),bi)
print(xi)
#得到運行結果:[[ 2. 1. -5. 1. ]
[ 0.5 -3.5 2.5 -6.5 ]
[ 0.5 -1. -2. -1. ]
[ 0. -0.57142857 -0.21428571 -1.92857143]] [0 1 3 3]
[[ 3.]
[-4.]
[-1.]
[ 1.]]
在Scipy 中,分解LU的方法有兩種:1.標準方法是scipy.linalg.lu 該方法返回三個矩陣L,U,P。
2.方法lu_factor與lu_solve結合起來使用,L和U一起存儲在n*n的數組中,存儲序列矩陣P的信息只需要一個n整數向量即軸向量來完成。
3.Matplotlib庫:是python的一個2D繪圖庫,它以各種硬拷貝格式和跨平臺的互動式環境生成出版質量級別的圖形。應用: 使用Matplotlib可以實現數據的可視化
例1:使用Matplotlib進行畫圖的一些基本代碼:
iimport matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,10,1000) #設置自變數格式 其中linspace(0,10,1000)表示x由平均分佈在0—10之間的1000個點所組成
y=np.sin(x)+1 #設置因變數y
z=np.cos(x**2)+1 #設置另一因變數z
plt.figure(figsize=(8,4)) #設置圖像大小
plt.plot(x,y,label="sinx+1",color='red',linewidth=2) #作圖(x,y),設置標簽格式
plt.plot(x,z,label="cosx^2+1") #作圖(x,z)
plt.xlabel('Time(s)') #設置x軸名稱
plt.ylabel('Volt') #設置y軸名稱
plt.title('A simple Example') #設置表格標題
plt.ylim(0,2.2) #顯示的y軸範圍
plt.legend() #顯示圖例
plt.show() #顯示作圖結果
運行上述代碼,可以得到如下圖:(註意:該圖可以保存為圖片格式,保存的圖片質量幾乎滿足各種版本要求)
4.pandas 庫:是包含高級的數據結構和精巧的分析工具,支持SQL的數據增、刪、改、查操作,並包含很多處理函數。
(1)Pandas的數據結構series:
Series 由一組數據(各種Numpy數據類型)以及一組與之有關的數據標簽(即索引)組成。它的字元串的表現形式為:索引左邊 值右邊
例1. 創建Series對象:
from pandas import Series
obj_list=[1,2,3,4,5]
obj_tuple=(1.2,2.5,3.3,4.8,5.4)
obj_dict={'Tom':[16,'boy'],'Max':[12,'boy'],'Julia':[18,'girl']}
series_list=Series(obj_list)
series_tuple=Series(obj_tuple,index=['a','b','c','d','e'])
series_dict=Series(obj_dict)
print("(1)通過list建立Series:")
print(series_list)
print('(2)通過tuple建立series:')
print(series_tuple)
print("(3)通過dict建立series:")
print(series_dict)
運行結果為:
(1)通過list建立Series:
0 1 #註意:當沒有給出索引值得時候,series從0開始自動創建索引
1 2
2 3
3 4
4 5
dtype: int64
(2)通過tuple建立series:
a 1.2
b 2.5
c 3.3
d 4.8
e 5.4 dtype: float64
(3)通過dict建立series:
Tom [16, boy]
Max [12, boy]
Julia [18, girl] dtype: object
(2)Pandas的數據結構DataFrame
DataFrame 是pandas的主要數據結構之一,是一種帶有二維標簽的二維對象,DataFrame結構的數據有一個行索引和列索引,且每一行的數據格式可能是不同的。
例:DataFrame的創建和一些基本操作:
from pandas import DataFrame #從pandas庫中引用DataFrame
from pandas import Series #從pandas庫中引用series
obj={'name':['Tom','Peter','Lucy','Max','Anna'],'age':['17','23','44','27','36'],
'status':['student','student','doctor','clerk','performer']}
series_dict1=Series([1,2,3,4,5],index=['a','b','c','d','e'])
series_dict2=Series([6,7,8,9,10],index=['a','b','c','d','e'])
print(series_dict2)
df_obj=DataFrame(obj)#創建dataframe對象
print(df_obj)
df_obj2=DataFrame([series_dict1,series_dict2])
print(df_obj2)
print('---查看前幾行數據,預設5行---')
print(df_obj.head())
print("-----提取一列-----")
print(df_obj.age)
print("------添加列-----")
df_obj['gender']=['m','m','f','m','f'] #直接用鍵來添加
print(df_obj)
print('-----刪除列-----')
del df_obj['status']
print(df_obj)
print("-----轉置-----")
print(df_obj2.T)
運行結果:
a 6 #返回series_dict2
b 7
c 8
d 9
e 10
dtype: int64
name age status #dataframe數據結構
0 Tom 17 student
1 Peter 23 student
2 Lucy 44 doctor
3 Max 27 clerk
4 Anna 36 performer
a b c d e
0 1 2 3 4 5
1 6 7 8 9 10
--查看前幾行數據,預設5行---
name age status
0 Tom 17 student
1 Peter 23 student
2 Lucy 44 doctor
3 Max 27 clerk
4 Anna 36 performer
-----提取一列-----
0 17
1 23
2 44
3 27
4 36
Name: age, dtype: object
------添加列-----
name age status gender
0 Tom 17 student m
1 Peter 23 student m
2 Lucy 44 doctor f
3 Max 27 clerk m
4 Anna 36 performer f
-----刪除列-----
name age gender
0 Tom 17 m
1 Peter 23 m
2 Lucy 44 f
3 Max 27 m
4 Anna 36 f
-----轉置-----
0 1
a 1 6
b 2 7
c 3 8
d 4 9
e 5 10