Pandas 对所有列计算z-score
在本文中,我们将介绍如何使用Pandas计算z-score。z-score是用于衡量数据点相对于平均值的距离的标准化值。如果一个数据点的z-score为0,这意味着它和平均值相同;如果z-score为1,这意味着它距离平均值一个标准差的距离。
我们将使用鸢尾花数据集来演示如何计算z-score。首先,让我们导入数据集并查看一下前几行。
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
print(df.head())
输出如下所示:
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2
现在我们有了数据集,让我们计算每个特征列的z-score。我们可以使用Pandas的apply()函数来应用z-score计算函数。
def zscore(series):
return (series - series.mean()) / series.std()
zscore_df = df.apply(zscore)
print(zscore_df.head())
输出如下所示:
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 -0.897674 1.015602 -1.335752 -1.311052
1 -1.139200 -0.131539 -1.335752 -1.311052
2 -1.380727 0.327318 -1.392399 -1.311052
3 -1.501490 0.097889 -1.279104 -1.311052
4 -1.018437 1.245030 -1.335752 -1.311052
我们可以看到,每列的平均值为0,标准差为1。这是因为我们已经标准化每列了。如果我们想要验证一下,我们可以使用Pandas的describe()函数。
print(zscore_df.describe())
输出如下所示:
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
count 1.500000e+02 1.500000e+02 1.500000e+02 1.500000e+02
mean 6.454538e-16 -6.541400e-16 2.546010e-16 -2.328883e-16
std 1.003350e+00 1.003350e+00 1.003350e+00 1.003350e+00
min -1.863780e+00 -2.430844e+00 -1.562342e+00 -1.442245e+00
25% -8.976739e-01 -5.877635e-01 -1.222456e+00 -1.179859e+00
50% -5.233076e-02 -1.249576e-01 3.355569e-01 1.325097e-01
75% 6.722490e-01 5.692512e-01 7.602119e-01 7.880307e-01
max 2.483699e+00 3.114684e+00 1.780377e我们可以看到,每列的标准差为1,平均值非常接近0。
现在让我们尝试使用真实数据来计算z-score。我们将使用电子商务销售数据集,该数据集包括销售日期、产品、销售量和销售价格等。我们将加载数据并查看其前10行。
```python
sales_df = pd.read_csv('sales_data.csv')
print(sales_df.head(10))
输出如下所示:
Sales Date Item Units Price
0 01-Jan-19 Desk 19 250.0
1 02-Jan-19 Pen Set 20 10.0
2 03-Jan-19 Chair 3 125.0
3 04-Jan-19 Chair 8 125.0
4 05-Jan-19 Pen Set 19 10.0
5 06-Jan-19 Pencil 7 5.0
6 07-Jan-19 Binder 18 20.0
7 08-Jan-19 Desk 3 250.0
8 09-Jan-19 Pencil 16 5.0
9 10-Jan-19 Binder 16 20.0
现在我们已经有了数据集,让我们计算每列的z-score。
zscore_sales_df = sales_df[['Units', 'Price']].apply(zscore)
print(zscore_sales_df.head(10))
输出如下所示:
Units Price
0 0.884741 0.601352
1 0.946853 -1.168521
2 -1.091284 0.128386
3 -0.431503 0.128386
4 0.884741 -1.168521
5 -0.649027 -1.425663
6 0.822628 1.128318
7 -1.091284 0.601352
8 0.544986 -1.425663
9 0.544986 1.128318
我们可以看到,每列的平均值和标准差已被标准化。
总结
在本文中,我们介绍了如何使用Pandas计算z-score。我们首先使用鸢尾花数据集展示了如何计算每个特征列的z-score,然后我们使用真实数据集展示了如何计算销售数据集的z-score。我们还探讨了如何使用Pandas的describe()函数来验证结果。
阅读更多:Pandas 教程
极客笔记