1. 程式人生 > >【機器學習】Numpy&Pandas 快速入門筆記

【機器學習】Numpy&Pandas 快速入門筆記

Numpy Pandas

Numpy&Pandas 快速入門筆記

Xu An 2018-4-6


######Numpy部分######


1、創建array

import numpy as np
a=np.array([[2,23,4],[21,3,43],[34,43,234]],dtype=np.int32)  #創建矩陣 使用dtype進行數組內容格式的規定,默認為int64,通常來說位數越小占用空間越小
print(a,a.dtype)
b=np.zeros((3,5))   #按照行列的形式用0填充整個矩陣
print(b)
c=np.ones((3,5))    #生成單位矩陣
print(c)
d=np.arange(0,12,1).reshape((3,4))  #用arange生成從1開始,12結束(不含),步長為1的行矩陣
#reshape 進行行矩陣的二維化(行,列)
print(d) 
e=np.linspace(1,10,6)    #將(start,stop,step)從start到stop均分,生成step個點,被劃分為step-1個線段
print(e)


2、numpy基礎運算

a=np.array([10,20,30,40])
b=np.arange(4)
print(a,b)
c=a-b  #矩陣加減法
print(c)
a=np.array([10,20,30,40]).reshape(2,2)
b=np.arange(4).reshape(2,2)
print(a*b)    #只能進行矩陣的加減法運算或逐個乘法(不按照矩陣原則進行乘法運算)
print(np.dot(a,b))  #如果是矩陣乘法需要使用dot()進行矩陣的運算(只對二維)
print(a.dot(b))     #如果a已經為矩陣,則可以使用a.dot(b)進行矩陣運算
print(a==3)  #判斷每個數據與目標的大小情況,返回布爾類型
a=np.random.random((2,4))  #其會隨機生成數字並進行reshape
print(a)
print(np.max(a))  #找到矩陣中的最大元素max,最小元素min
print(np.sum(a,axis=1)) #當axis=0時,在列數中求和,axis=1時,在行數中求和
a=np.arange(2,14).reshape(3,4)
print(a)
print(np.argmin(a))   #輸出整個矩陣最小元素的索引值
print(np.argmax(a))   #整個矩陣最大元素的索引值
print(np.average(a))  #整個矩陣所有元素的平均值
print(np.median(a))   #求中位數
print(np.cumsum(a))   #累加器,輸出一個數組,每一個是前面的和
print(np.diff(a))     #後面一個和前面一個的差
print(np.nonzero)     #?
print(np.sort(a))     #將矩陣進行逐行排序
b=np.transpose(a)     #矩陣的轉置
print(np.clip(b,3,4)) #clip 將所選矩陣小於3的變為3,大於4的變為4,之間的值不發生變化


3、numpy的索引

a=np.arange(3,15).reshape(3,4)
print(a[2][3])        #索引出該位置的值(不能將索引值降維)
print(a.flatten())    #將矩陣降維變成一維矩陣


4、array的合並

a=np.array([1,1,1])
b=np.array([2,2,2])
print(np.vstack((a,b)))   #vertical stack(垂直堆棧,將兩個行矩陣垂直放置)
print(np.hstack((a,b)))   #horizontial stack (水平堆棧,兩個行矩陣進行左右合並)
print(a[:,np.newaxis])    #在縱向加入一個維度,使其變成垂直數組 也可以使用reshape(3,1)  
c=np.concatenate((a,b,a,c),axis=0) #在縱向維度對每一個元素進行合並


5、array的分割

a=np.arange(12).reshape(3,4)
print(a)
print(np.split(a,4,axis=1))   #對矩陣進行等量分割,axis=1為列分割,axis=0時為行分割
print(np.array_split(a,3,axis=1))  #使用array_split可以將矩陣進行不相等分割
print(np.vsplit(a,3))         #對矩陣進行橫向或者縱向等量分割
print(np.hsplit(a,2))


6、numpy的copy&deep copy

a=np.arange(4)
b=a     #賦值是b就是a,b拷貝了a的地址
c=a 
d=b
a[0]=100
print(a)
print(b)
print(d is a)
b=a.copy()  #深拷貝,拷貝的是地址
######pandas部分######
import pandas as pd

1、pandas基礎

s=pd.Series([1,3,6,np.nan,44,1])
print(s)  #pandas會給列表元素加上序號和dtype
dataes=pd.date_range('20180101',periods=6) #按順序打印日期
print(dataes)
df=pd.DataFrame(np.random.randn(6,4),index=dataes,columns=['a','b','c','d']) #將數據進行名稱化,index是行名稱,colums是列名稱
df=pd.DataFrame(np.arange(12).reshape(3,4)) #默認行標、列表從0開始,或者使用字典導入
print(df)
print(df.dtypes)  #輸出每個元素的類型
print(df.index)   #輸出值(value) 行標(index) 列標(columns)
print(df.T)       #轉置
print(df.sort_index(axis=0,ascending=False)) #對列標進行倒序排序
# print(df.sort_values(by=""))  針對某一個字段進行排序
#panda設置值
datas=pd.date_range('20130101',periods=6)
df=pd.DataFrame(np.arange(24).reshape((6,4)),index=datas,columns=['A','B','C','D'])
df.iloc[2,2]=1111   #使用iloc對第三行第三列的數值進行重新賦值
df.loc['20130101','B']=2222 #通過行列標題對其進行重新賦值
df.A[df.A>4]=0 #將A列所有值大於4的值賦值為0
df['E']=pd.Series([1,2,3,4,5,6],index=pd.date_range('20130101',periods=6))  #加入一行
df['F']=pd.Series([1,2,3,4,5,6],index=pd.date_range('20130101',periods=6))
print(df)


2、處理缺失數據

df.iloc[0,1]=np.nan
df.iloc[1,2]=np.nan  
print(df)
print(df.dropna(axis=0,how='any')) #how={'any','all'}any是只要行中有null就丟棄行,all是僅當一行全部為null時才丟棄該行
print(df.fillna(value=0)) #將所有null值賦值為0
print(df.isnull()) #使用null方法,判斷元素是否為null,返回布爾值
print(np.any(df.isnull())==True)  #判斷數據列表中是否有任意一個為null


3、數據導出導出

#pandas可以導入多種數據原,csv,excel,hdf,sql,json,msgpack,html,gbq,stata,sas,clipboard,pickle
# data=pd.read_csv('class _list.csv') #使用read_csv讀取csv格式的文件,並在讀取時加入一個索引
# print(data)
# data.to_pickle('class _list.pickle') #使用to_pickle將變量存取


4、合並多個數據

#concatenating
df1=pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'])
df2=pd.DataFrame(np.ones((3,4))*1,columns=['a','b','c','d'])
df3=pd.DataFrame(np.ones((3,4))*2,columns=['a','b','c','d'])
print(df1)
print(df2)
print(df3)
res=pd.concat([df1,df2,df3],axis=0,ignore_index=True)
#使用concat對三個矩陣進行合並(axis=0為縱向合並,1為橫向合並)
#ignore_index=True可以忽略之前的標號,對數據進行重新排序
print(res)
#join,['inner','outer']
df1=pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'],index=[1,2,3])
df2=pd.DataFrame(np.ones((3,4))*1,columns=['a','b','c','d'],index=[2,3,4])
res=pd.concat([df1,df2],join='outer')
print(res)
res=pd.concat([df1,df2],join='inner')
print(res)


5、合並數據 merge

#merging two df by keys
left=pd.DataFrame({'key':['KO','K1','K2','K3'],
                    'A':['A0','A1','A2','A3'],
                    'B':['B0','B1','B2','B3']
                })
right=pd.DataFrame({'key':['KO','K1','K2','K3'],
                    'C':['C0','C1','C2','C3'],
                    'D':['D0','D1','D2','D3']
                })
print(left)
print(right)
res=pd.merge(left,right,on='key')
print(res)    #通過key進行合並
# #consider two keys
# left=pd.DataFrame({'key1':['KO','K1','K2','K3'],
#                     'A':['A0','A1','A2','A3'],
#                     'B':['B0','B1','B2','B3']
#                 })
# right=pd.DataFrame({'key2':['KO','K1','K2','K3'],
#                     'C':['C0','C1','C2','C3'],
#                     'D':['D0','D1','D2','D3']
#                 })
# res=pd.merge(left,right,on=['key1','key2'],how='inner')
# print(res)


6、pandas的數據可視化


import matplotlib.pyplot as plt
data =pd.Series(np.random.randn(1000),index=np.arange(1000))
data=data.cumsum()
data.plot()
plt.show()
data=pd.DataFrame(np.random.randn(1000,4),index=np.arange(1000),columns=list('ABCD'))
data=data.cumsum()
#plot的方法
#bar\hist\box\kde\area\scatter\hexbin\pie
ax=data.plot.scatter(x='A',y='B',color="DarkBlue",label='Class1')  #scatter 散點圖
data.plot.scatter(x="A",y='C',color="DarkGreen",label='class2',ax=ax)
plt.show()



【機器學習】Numpy&Pandas 快速入門筆記