【问题标题】:Data normalization and rescaling value in PythonPython中的数据规范化和重新缩放值
【发布时间】:2021-01-07 04:20:48
【问题描述】:

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

这是我的数据集:

第一步:

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

第二步:

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

如何计算平均值/基准。

【问题讨论】:

  • 第二步,你想要一个表格,显示一年中的平均访问量?
  • 是的,我想根据您在步骤 1 中计算的月份计算平均值。在运行代码时,我在步骤 1 中也遇到错误:- 文件“”,第 14 行,在 normalize_date date_obj = datetime.strptime(date,"%Y-%m-%d % H:%M:%S") # get datetime object TypeError: strptime() argument 1 must be str, not numpy.datetime64
  • 那么每个月,可能有多次访问记录?
  • 我修改答案支持平均!
  • 我收到此错误消息.....文件“”,第 3 行,在 normalize_date date_obj = datetime.strptime(date,"%Y- %m-%d %H:%M:%S") # get datetime object TypeError: strptime() argument 1 must be str, not numpy.datetime64

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


【解决方案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

【讨论】:

  • 感谢 Maryam 在第一步中帮助我,我在运行相同的代码时遇到了这个错误。请帮助 date_obj = datetime.strptime(date,"%Y-%m-%d %H:%M:%S") # get datetime object TypeError: strptime() argument 1 must be str, not numpy.datetime64 .. ...................第二步您还需要什么信息?
  • 您应该将日期列的每个元素传递给normalize_date 方法,因为它的输入只是字符串。请运行这部分代码:df['Pub.Dates'] =list(map(lambda x: normalize_date(x), df["Pub.Dates"].values)) 它为每个元素运行 normalize_date 方法并返回新日期列表。
猜你喜欢
  • 1970-01-01
  • 2011-06-09
  • 2011-08-20
  • 2023-04-04
  • 2018-10-06
  • 1970-01-01
  • 2018-09-06
  • 2017-03-01
  • 2020-05-29
相关资源
最近更新 更多