Pandas 对所有列计算z-score

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 教程

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程