pandas學習(四) 資料的歸一化

2022-04-04 16:28:29 字數 4226 閱讀 9960

歡迎加入python學習*** 667279387

pandas學習(一)–資料的匯入

pandas學習(二)–雙色球資料分析

pandas學習(三)–nab球員薪資分析

pandas學習(四)–資料的歸一化

歸一化方法有兩種形式,一種是把數變為(0,1)之間的小數,一種是把有量綱表示式變為無量綱表示式。主要是為了資料處理方便提出來的,把資料對映到0~1範圍之內處理。

也稱為離差標準化,是對原始資料的線性變換,使結果值對映到[0 - 1]之間。轉換函式如下:x^

=x−x

minx

max−

xmin

' role="presentation">x^=

x−xm

inxm

ax−x

minx

^=x−

xmin

xmax

−xmi

n其中max為樣本資料的最大值,min為樣本資料的最小值。這種方法有個缺陷就是當有新資料加入時,可能導致max和min的變化,需要重新定義。

這種方法給予原始資料的均值(mean)和標準差(standard deviation)進行資料的標準化。經過處理的資料符合標準正態分佈,即均值為0,標準差為1,轉化函式為:x^

=x−μ

σ' role="presentation">x^=

x−μσ

x^=x

−μσ

其中為μ

' role="presentation" style="position: relative">μ

μ所有樣本資料的均值,

σ' role="presentation" style="position: relative">σ

σ為所有樣本資料的標準差。該種歸一化方式要求原始資料的分布可以近似為高斯分布,否則處理的效果會變差。

import numpy as np

import pandas as pd

np.random.seed(1)

df = pd.dataframe(np.random.randn(4, 4) * 4 + 3)

print(df)

""" 0 1 2 3

0 9.497381 0.552974 0.887313 -1.291874

1 6.461631 -6.206155 9.979247 -0.044828

2 4.276156 2.002518 8.848432 -5.240563

3 1.710331 1.463783 7.535078 -1.399565

"""df_norm = (df - df.min()) / (df.max() - df.min())

print(df_norm)

""" 0 1 2 3

0 1.000000 0.823413 0.000000 0.759986

1 0.610154 0.000000 1.000000 1.000000

2 0.329499 1.000000 0.875624 0.000000

3 0.000000 0.934370 0.731172 0.739260

"""print(df_norm2)

""" 0 1 2 3

0 1.000000 0.823413 0.000000 0.759986

1 0.610154 0.000000 1.000000 1.000000

2 0.329499 1.000000 0.875624 0.000000

3 0.000000 0.934370 0.731172 0.739260

"""

2、z-score標準化方法
import numpy as np

import pandas as pd

np.random.seed(1)

df = pd.dataframe(np.random.randn(4, 4) * 4 + 3)

print(df)

""" 0 1 2 3

0 9.497381 0.552974 0.887313 -1.291874

1 6.461631 -6.206155 9.979247 -0.044828

2 4.276156 2.002518 8.848432 -5.240563

3 1.710331 1.463783 7.535078 -1.399565

"""df_norm = (df - df.mean()) / (df.std())

print(df_norm)

""" 0 1 2 3

0 1.213741 0.287871 -1.454237 0.312166

1 0.295115 -1.481492 0.777218 0.866440

2 -0.366215 0.667324 0.499679 -1.442906

3 -1.142640 0.526297 0.177340 0.264301

"""print(df_norm2)

""" 0 1 2 3

0 1.401507 0.332405 -1.679208 0.360458

1 0.340769 -1.710680 0.897454 1.000479

2 -0.422869 0.770560 0.576980 -1.666125

3 -1.319407 0.607716 0.204774 0.305188

"""

比較好奇為啥上面df.std()和np.std()算出來的值不一樣,估計**有點不一樣的地方,還需要研究研究。下面做了乙個簡單的實驗,不知道df.std()具體是怎麼算的。

import numpy as np

import pandas as pd

data = [(1, 2), (3, 4)]

df = pd.dataframe(data)

print(df)

""" 0 1

0 1 2

1 3 4

"""df_std1 = df.std(axis=0)

print(df_std1)

"""0 1.414214

1 1.414214

"""print(df_std2)

"""0 1.0

1 1.0

"""

經過後續學習這篇帖子找到了答案:

import numpy as np

import pandas as pd

data = [(1, 2), (3, 4)]

df = pd.dataframe(data)

print(df)

""" 0 1

0 1 2

1 3 4

"""df_std1 = df.std(axis=0)

print(df_std1)

"""0 1.414214

1 1.414214

"""print(df_std2)

"""0 1.414214

1 1.414214

"""

ddof : int, optional

means delta degrees of freedom. the divisor used in calculations is n - ddof, where n represents the number of elements. by default ddof is zero.

這個是numpy對ddof的解釋。

簡單點說np.std()計算的是標準差,df.std()計算的是標準差的無偏估計

參考資料

1、2、

3、歡迎加入python學習*** 667279387

pandas歸一化某一列 pandas技巧彙總

dataframe reindex和reset index區別 reset index的作用是重新設定dataframe的index,範圍為0 len df df pd.dataframe df2 pd.dataframe print df n df print df2 n df2 df x df,...

pandas 資料歸一化以及行刪除例程

pandas 資料歸一化以及行刪除例程 coding utf8 import pandas as pd import numpy as np from pandas import series,dataframe 如果有id列,則需先刪除id列再進行對應操作,最後再補上 統計的時候不需要用到id列,...

機器學習 資料歸一化

機器學習中,在資料預處理過程中,通過將資料歸一化可以加快梯度下降求最優解的速度,也有可能提高模型計算的精度。常用的歸一化方法主要有兩種 最值歸一化。比如把最大值歸一化成1,最小值歸一化成 1 或把最大值歸一化成1,最小值歸一化成0。適用於本來就分布在有限範圍內的資料。其中常用的方法有 線性比例變換法...