Python中的数据规范化和重新缩放值

时间:2020-09-21 04:01:37

标签: python pandas normalization sklearn-pandas feature-scaling

我有一个数据集,其中包含带有发布日期(YYYY-MM-DD)和访问的URL。我想计算一整年的访问基准(平均)。页面的发布日期不同。 G。与3月发布的第二页(11,000)相比,8月发布的第一页(具有10,000次访问)的权重/贡献将更大。

这是我的数据集:

Click here to see my dataset

第一步:

因此,我首先要在数据集中添加一列(即时间范围),该列可以从发布日期开始计算时间范围。例如:如果该页面于2019年12月10日发布,则可以给出我今天的日期起的时间范围/持续时间,预期为o / p:( 2019年12月,9个月)。即(发布页面的月份,从今天开始的总月份

第二步:

我想根据步骤1中计算出的时间范围列对我的数据(访问次数)进行标准化/重新调整

如何计算平均值/基准。

1 个答案:

答案 0 :(得分:1)

第一步,您可以使用以下代码: 读取数据框

import pandas as pd
df = pd.read_csv("your_df.csv")

我的示例数据框如下:

            Pub.Dates Type  Visits
0  2019-12-10 00:00:00    A    1000
1  2019-12-15 00:00:00    A    5000
2  2018-06-10 00:00:00    B    6000
3  2018-03-04 00:00:00    B   12000
4  2019-02-10 00:00:00    A    3000

用于标准化日期: 首先,定义一种仅将日期标准化的方法:

from datetime import datetime

def normalize_date(date): # input: '2019-12-10 00:00:00'
    date_obj = datetime.strptime(date,"%Y-%m-%d %H:%M:%S") # get datetime object
    date_to_str = date_obj.strftime("%B %Y") # 'December 2019'
    diff_date = datetime.now() - date_obj # find diff from today 
    diff_month = int(diff_date.days / 30) # convert days to month
    normalized_value = date_to_str + ", " + str(diff_month) + " months"
    return normalized_value # 'December 2019, 9 months'

现在将上述方法应用于日期列的所有值:

df['Pub.Dates'] =list(map(lambda x: normalize_date(x), df["Pub.Dates"].values))

归一化的数据帧将是:

                  Pub.Dates Type  Visits
0   December 2019, 9 months    A    1000
1   December 2019, 9 months    A    5000
2      June 2018, 27 months    B    6000
3     March 2018, 31 months    B   12000
4  February 2019, 19 months    A    3000
5       July 2020, 2 months    C    9000

但是对于第二步,如果每月有多个记录,则可以执行以下步骤,groupby日期和您需要的其他列,然后取其平均值:

average_in_visits = df.groupby(("Pub.Dates", "Type")).mean()

结果将是:

                               Visits
Pub.Dates                Type        
December 2019, 9 months  A       3000
February 2019, 19 months A       3000
July 2020, 2 months      C       9000
June 2018, 27 months     B       6000
March 2018, 31 months    B      12000