1. 程式人生 > >python機器學習常用的幾個庫

python機器學習常用的幾個庫

1. import numpy as np 矩陣操作的庫

(1)矩陣乘法: A*B表示矩陣對應位置元素相乘 A.dot(B)表示矩陣的內積(一行乘以一列)

(2)隨機函式: np.random.random((3,4)) 創造一個三行四列的隨機數矩陣,在(-1,1)之間,10*np.random.random((3,4))表示將隨機數擴大十倍

(3)np.floor(a), 表示將元素a向下取整

(4)製造向量或矩陣 np.array([1,2,3]) np.array([[1,2,3],[4,5,6]])

(5)x.shape 輸出行列(3,)或(2,3) x.size 求元素的總個數,
x.reshape((m,n))將原矩陣改成m*n矩陣,只有一個引數,(m,n)

(6)可以通過切片的方式取某行某列 x[:,0:2] 表示取所有行,0,1列,x[1]表示第二行

(7)x.min() x.max() 返回矩陣中的最小值或最大值

(8)x.sum(axis=0)返回對每一列求和的結果 x.sum(axis=1)返回對每一行求和

(9)np.arange(15) 製作一行矩陣,元素為0~14 np.arange(1,10),表示1~9
可以配合reshape使用,np.arange(15).reshape((3,5))
np.range(1,100,5) 表示[1,6,11,16,21,…,96]

(10) np.zeros((4,3)) np.ones((3,4))

(11)x.ravel()表示將一個矩陣鋪成一行輸出,但實際上這個矩陣沒有變,還是原來的行列數

(12)np.hstack((x,y))表示水平拼接矩陣x和y,增加了列數;
np.vstack((x,y))表示豎直拼接矩陣x和y,增加了行數;
np.hsplilt((x,3))表示將矩陣x水平方向切成3份;(實際切分的是列)
np.hsplilt((x,(3,5)))表示將矩陣x水平切成0~2列,3~4列,5~n列;
np.vsplilt((x,3))表示將矩陣x豎直方向切成3份;(實際切分的是行)

(13)複製的三種做法及區別:(判斷a與b是否相同,用a is b 返回True or False)
b = a // a與b完全一致,指向同樣的值,id相同
b = a.view() // a與b指向同樣的值,但是id不同
b = a.copy() // a與b指向不同的值,並且id不同

(14)l.argmax(axis=0) 返回矩陣l每一列的最大值的索引;
l.argmax(axis=1) 返回矩陣l每一行的最大值的索引;
l.argmax() 把矩陣當作一維矩陣返回最大值的索引

(15)b = np.tile(a,(4,3)) ,a是一個矩陣,把a當作一個元素,擴充套件成4行a,3列a的矩陣

(16)np.sort(a ,axis = 0) 將矩陣a的每一列按照從小到大的順序排列
np.sort(a ,axis = 1) 將矩陣a的每一行按照從小到大的順序排列

2. import pandas as pd 資料預處理的庫

* c_name 是列名column_name的簡寫,字串型別
* pandas物件是一個DataFrame物件data,data的每一列取出來,是一個Series物件ss,ss.values又是一個numpy.ndarray物件

(1)data = pandas.read_csv(‘**.csv’) 返回的是DataFrame,看作一個矩陣

(2)data.head(4) 資料的前4行;(DataFrame的物件)
data.tail(3) 資料的後3行;(DataFrame的物件
data.columns 顯示資料的列名(每一列的屬性)
data.shape 顯示資料的(行,列)
data.loc[0] 取第1行的資料(不包含列名那一行)
data.loc[:5] 取第1~5行的資料
data[c_name] 取某一列的的資料,也可以將幾個列名組成一個list,作為引數
data.columns.tolist() 將列名轉為list

刪除pandas DataFrame的某一/幾列:
方法一:直接del DF[‘column-name’]
方法二:採用drop方法,有下面三種等價的表示式:
1. DF= DF.drop(‘column_name’, 1);
2. DF.drop(‘column_name’,axis=1, inplace=True)
3. DF.drop(DF.columns[ -1 ], axis=1,inplace=True) # 刪除最後一列

(3)str.endswith(“(g)”) 判斷字串結尾,返回bool型別

(4)將原資料中加上一個特徵(加入一列):data[‘new_column’] = columns
Columns可以是原資料中的幾列處理得到,新加的一列要保證列數與原資料相同

(5)data[c_name].max() 求某一列的最大值

(6)data.sort_values(c_name,inplace=True) 將c_name對應的一列從小到大排序
ascending引數是升序(從小到大),預設為True;
inplace=True 是否生成新的DataFrame
NaN是pandas認為的缺失值,不管是升序還是降序,NaN都排在最後
排完序之後,資料的index還是原來的,可以呼叫 data.reset_index(drop=True)
drop=True表示原來的index不要了,重新生成index

(7)pd.isnull(data[c_name]) 判斷該列中的元素是不是缺失值,返回將該列value替
換成bool值的DataFrame物件
e.g. age = titanic_survival(‘Age’)
age_is_null = pd.isnull(age)
age_null_true = age[age_is_null],返回age為NaN,索引為True
的DataFrame物件

(8)在計算均值的時候,需要過濾掉缺失值,做法如下:
good_age = titanic_survival[‘Age’][age_is_null == False]
mean_age = sum(good_age[‘Age’])/len(good_age)
pandas裡有個mean()方法,自動過濾掉缺失值
mean_age = titanic_survival[‘Age’].mean()

(9)titanic_survival.pivot_table(index=‘Pclass’,values=’Survived’,
aggfunc=np.mean)
如果沒有指定aggfunc的話,預設的也是求均值;
pivot_table:計算不同船倉等級(此處的index),存活人數(此處的values)的均值
(此處的aggfunc),如果不同的index求和,令 aggfunc=np.sum,values也可以是
一個list,[’Survived’,’Age’]

(10)data.dropna(axis = 0 ,subset=[‘Age’,’Sex’])表示在Age與Sex兩列中有
沒有缺失值,有的話就把該行刪除,subset可以預設,表示所有列

(11)data.loc[83,’Age’],定位第83行,列名為Age的元素

(12)data.apply(yourfunc) apply的引數是你自定義的函式名,然後執行你的函式

(13)data[‘DATE’] = pd.to_datatime(data[‘DATE’])
將日期格式2017/11/02轉成2017-11-02

3.import matplotlib.pyplot as plt 繪製圖像的庫

(1)plt.plot(data[‘DATE’],data[‘VALUE’]) 左邊的引數表示x軸的資料,右邊的
表示y軸的資料

(2)plt.show() 顯示影象

(3)plt.xticks(rotation=45) 將x軸的上座標值傾斜45度顯示

(4)plt.xlable(‘Month’) //x軸加上一個標籤
plt.ylable(‘Unemployment Rate’) //y軸加上一個標籤
plt.title(“Monthly Unemployment Trends,1948”) // 圖形加上標題

(5)fig = plt.figure() //返回預設畫圖的區域
fig = plt.figure(figsize = (3,4)) //畫圖的大小width寬度和depth高度
ax1 = fig.add_subplot(2,2,1) // 將fig劃分成 2*2 大小,這是第1個子圖
ax2 = fig.add_subplot(2,2,2) // 將fig劃分成 2*2 大小,這是第2個子圖
ax3 = fig.add_subplot(2,2,4) // 將fig劃分成 2*2 大小,這是第4個子圖
plt.show()

(6)ax1.plot(np.random.randint(1,5,5),np.arange(5)) // 給子圖填充資料

折線圖
(7)plt.plot(data[‘DATE’],data[‘VALUE’],c = ‘red’) // c是顏色
plt.plot(data[‘DATE’],data[‘VALUE’],c = ‘black’)
plt.plot(data[‘DATE’],data[‘VALUE’],c = ‘black’,label =‘name’)
label標籤是顯示折線圖的中該條線的名稱

柱形圖
(8)ax.bar(data1,data2,width) // 還可以呼叫 plt.bar();
data1,data2 是一個 numpy.ndarray物件,可以用 np.arange(5)創造
width 表示的是柱形圖的寬度(取小數0.5較好)
numpy.ndarray物件輸出的是[1 2 3 4],跟np.array([1,2,3,4])類似,可看作
是一維矩陣,它不是一個list物件,list物件輸出的是[1,2,3]

散點圖
(9)ax.scatter(data1,data2)或者plt.scatter()
ax.set_xlabel(“name1”) || plt.xlabel(‘name1’)
ax.set_ylabel(“name2”) || plt.ylabel(‘name2’)

4. import seaborn as sns 繪製圖像的庫

(1) iris = sns.load_dataset(‘iris’)//sns庫中內建了鳶尾花的資料集
sns.pairplot(iris)//這個函式自動將iris的四個特徵值兩兩組合作為x軸,y軸,畫出函式影象

(2) tips = sns.load_dataset(“tips”)//sns庫中內建了小費tips的資料集

(3) regplot()和 lmplot()都可以繪製迴歸關係,推薦regplot()

(4) sns.regplot(x=’total_bill’,y=’tip’,data=tips)
//引數依次是:x軸,y軸,data,然後繪製擬合數據點的直線

(5) sns.stripplot(x=‘days’,y=‘bill’,data=tips,jitter=True)
jitter讓資料點左右抖動,免得點重疊在一起( 沒有這個屬性的話,資料點就像一條線連在一起)

(6) sns.swarmplot(x=‘days’,y=‘bill’,data=tips)
讓資料點分佈像一棵樹一樣

(7) g = sns.FaceGrid(tips,col=’Time’,hue=‘smoker’)
//tips為pandas物件,col:列,hue:型別名,
hue需要與 g.add_legend()搭配使用才會顯示

(8) g.map(plt.scatter,’x’,’y’)
//引數說明:指定畫圖方式,此處為散點;另外兩個引數分別是:xlabel,ylabel
如果第一個引數是plt.hist表示柱狀圖