Python:數據標准化


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

使用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為底數,對應的值是多少。

參考資料:

 

[Python:數據標准化 - 知乎](https://zhuanlan.zhihu.com/p/152322266)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM