標準化
1。離差標準化
是對原始數據的線性變換,使結果映射到[0,1]區間。方便數據的處理。消除單位影響及變異大小因素影響。
基本公式爲:
x’=(x-min)/(max-min)
代碼:
#!/user/bin/env python
#-*- coding:utf-8 -*-
#author:M10
import numpy as np
import pandas as pd
import matplotlib.pylab as plt
import mysql.connector
conn = mysql.connector.connect(host='localhost',
user='root',
passwd='123456',
db='python')#鏈接本地數據庫
sql = 'select price,comment from taob'#sql語句
data = pd.read_sql(sql,conn)#獲取數據
#離差標準化
data1 = (data-data.min())/(data.max()-data.min())
print(data1)
運行結果
2。標準差標準化
消除單位影響以及變量自身變異影響。(零-均值標準化)
基本公式爲:
x’=(x-平均數)/標準差
python代碼:
#!/user/bin/env python
#-*- coding:utf-8 -*-
#author:M10
import numpy as np
import pandas as pd
import matplotlib.pylab as plt
import mysql.connector
conn = mysql.connector.connect(host='localhost',
user='root',
passwd='123456',
db='python')#鏈接本地數據庫
sql = 'select price,comment from taob'#sql語句
data = pd.read_sql(sql,conn)#獲取數據
#標準差標準化
data1 = (data-data.mean())/data.std()
print(data1)
運行結果:
3。小數定標標準化
消除單位影響
基本公式爲:
其中j=lg(max(|x|)),即以10爲底的x的絕對值最大的對數
x' = x/10^j
實現代碼爲:
#!/user/bin/env python
#-*- coding:utf-8 -*-
#author:M10
import numpy as np
import pandas as pd
import matplotlib.pylab as plt
import mysql.connector
conn = mysql.connector.connect(host='localhost',
user='root',
passwd='123456',
db='python')#鏈接本地數據庫
sql = 'select price,comment from taob'#sql語句
data = pd.read_sql(sql,conn)#獲取數據
#標準差標準化
j = np.ceil(np.log10(data.abs().max()))#進一取整,abs()爲取絕對值
data1 = data/10**j
print(data1)
結果:
離散化
離散化是程序設計中一個常用的技巧,它可以有效的降低時間複雜度。其基本思想就是在衆多可能的情況中,只考慮需要用的值。離散化可以改進一個低效的算法,甚至實現根本不可能實現的算法
1。等寬離散化
將連續數據按照等寬區間標準離散化數據,好處之一是處理的數據是有限個數據而不是無限多。
使用pandas的cut方法。非等寬只需要更改cut的第二個參數,例如:第二個參數爲[1,100,3000,10000,200000],即劃分爲了四個區間。
#!/user/bin/env python
#-*- coding:utf-8 -*-
#author:M10
import numpy as np
import pandas as pd
import matplotlib.pylab as plt
import mysql.connector
conn = mysql.connector.connect(host='localhost',
user='root',
passwd='123456',
db='python')#鏈接本地數據庫
sql = 'select price,comment from taob'#sql語句
data = pd.read_sql(sql,conn)#獲取數據
#離散化
data1 = data['price'].T.values#獲取價格的一維數組
lable=['很低','低','中','高','很高']
data2 = pd.cut(data1,5,labels=lable)
print(data2)
執行結果:
2。等頻率離散化
將相同數量的數據放進一個區間。
3。一維聚類離散化
按屬性對數據進行聚類離散。