第一步:導入本地的目標數據集

使用pandas庫中的read_excel()函數導入的數據格式會默認為dataframe(數據框),可以直接使用數據框支持的所有方法。
觀察數據可以發現,數據后三列為數值型,但是各個數值的度量單位是不同的,housesize一般以平方米為單位,rental一般以元為單位,houseage一般以年為單位。
第二步:截取出需要進行標准化處理的列

第三步:進行數據標准化
方法一:最小-最大標准化
公式:

min指x所在列的最小值,max指x所在列的最大值。x'指標准化后的x。
代碼如下:

注釋:①標准化后的數據框d還是數據框格式~
②數據框下面的rename()方法可以用於對數據框的列名進行隨意更改~采用字典格式進行列名修改。
colums = {'originalname1':'newname1','originalname3':'newname3'}無需修改的列名可以直接跳過。
inplace = True表示替換原來的列名,直接顯示最新的列名。
最后,需要將標准化后的數據拼接到原數據中去。

注釋:①這里采用的拼接方法concat()為直接拼接,即生硬的將兩張表拼湊在一起。並沒有根據某一列做匹配,與merge()方法是不一樣的~
②pd.set_option('display.max_columns',50),設置顯示的最大列數為50列,如果不設置該參數,直接print()會有很多列被省略無法看到完整的拼接結果。
③pd.set_option('display.width',1000),設置顯示寬度為1000。如果不設置該參數,則最后幾個列會換行顯示。
④補充:pd.set_option('display.max_rows', 500) ,設置打印最大行數為500行。
在sklearn庫中的preprocessing模塊下的minmax_scale()函數可以直接實現最小最大標准化。
第一次嘗試:

百度一下,發現,導入模塊的方法不對,改正如下:

注意:使用該函數后,數據格式發生變化了!不是數據框,而是n維數組了!
那么,如何將n維數組轉換為數據框並添加列名呢?
繼續百度……
大神說,可以使用pandas庫中的DataFrame()函數將數組轉為數據框:

確實成功轉換了~
但是,數據框的列名需要修改一下~

最后一步:把原始數據與標准化數據合並起來~本文之前做過,就不重復了~
方法二:Z-score標准化

其中,x表示具體數值,xbar表示x所在列的均值,σ 表示x所在列的標准差。
采用這種方法處理后的標准化數據特征為:標准差為1,均值為0。
手動Z-score標准化的代碼如下:

同樣,sklearn庫中也有對應的函數可以實現Z-score標准化。

不過,仔細觀察會發現,手動的結果和使用scale()函數的結果並完全不一樣。
我對使用scale()函數的標准化后的數據進行標准差、均值的檢測發現,標准差確實為1,但是均值不等於0,是無限接近0的一個小數。

方法三:小數定標規范化
目的:將任意一個較大的數字,轉換為[-1,1]的小數。
如120,將它除以1000,則為0.12。困難在於,任意給定一組數,如何確定應該除以10的多少倍?
基本思路:先將所給的一組數取絕對值,找出這組數中絕對值最大的數,然后,利用對數+向上取整的思想來確定10的次方。
代碼如下:

注釋:①numpy庫中有ceil()函數,表示向上取整。
②numpy庫中log10()用於計算一個數以10為底數,對應的值是多少。
參考資料: