【问题标题】:how to handle the missing values like this and date format for regression?如何处理这样的缺失值和回归的日期格式?
【发布时间】:2024-01-20 12:09:02
【问题描述】:

我想从这个数据集制作回归模型(前两个是因变量,最后一个是因变量)。我使用dataset=pd.read_csv('data.csv') 导入数据集 现在我以前也做过模型,但从来没有用日期格式数据集作为自变量,所以我们应该如何处理这些日期格式来制作回归模型。 还有我们应该如何处理给定数据集中的 0 值数据。 我的数据集如下:.csv 格式:

Month/Day, Sales, Revenue
01/01    ,  0    , 0
01/02    , 100000, 0
01/03    , 400000, 0
01/06    ,300000, 0
01/07    ,950000, 1000000
01/08    ,10000,  15000
01/10    ,909000, 1000000
01/30    ,12200,  12000
02/01   ,950000,  1000000
02/09     ,10000, 15000
02/13    ,909000, 1000000
02/15    ,12200,  12000

我不知道如何处理这种格式日期和 0 值

【问题讨论】:

  • 请参阅*.com/help/mcve 了解如何发布好的 SO 问题。你都尝试了些什么?输出是什么?你想要的输出是什么?也就是说,您可以使用 pandas.read_csv() 读取 CSV 文件,并使用 pandas.DataFrame.corr() 查找相关性。我认为这不是 ML 或 DL 问题。
  • 先生,我已经使用 pd.read_csv() 导入了文件。但我也知道如何进行特征缩放、模型选择、Imputer,但我从未使用日期作为自变量制作模型。那么如何转换日期以便我们可以无错误地制作模型
  • 你试过pandas.to_datetime吗? pandas.pydata.org/pandas-docs/stable/generated/…
  • 先生,实际上我是数据科学的新手,所以我整天都在谷歌搜索,我只发现如何处理类型的日期:dd-mm-YYYY 不像 mm/dd.so 你能先生帮忙?

标签: pandas machine-learning scikit-learn deep-learning data-science


【解决方案1】:

如何处理丢失的数据?

有很多方法可以替换它。按平均值,按中值或使用移动平均窗口甚至 RF 方法(或类似,MICE 等)。 对于“销售”列,您可以尝试任何一种方法。 对于“收入”列,最好不要使用其中的任何一个,特别是如果您有很多缺失值(这会损害模型)。只需删除“收入”列中缺少值的行。

顺便说一句,ML 中的一些方法接受缺失值:XGBoost 和某种方式的 Trees/Forests。对于最新的,您可以将零替换为一些非常不同的值,例如 -999999。

如何处理数据?

许多与特征工程相关的事情都可以在这里完成: 1. 星期几 2. 工作日或周末 3. 月中日(数) 4. 节前或节后 5.周数 6.月数 7. 年号 8. 一些因素的指示(例如,如果是水果销售数据,你可以一些与之相关的布尔列) 9. 等等……

这里几乎所有的特征都应该通过 one-hot-encoding 进行预处理。

如果您使用线性模型,当然还要清除相关性。

【讨论】:

  • 所以对于一天和一个月我必须使用一个热编码器进行编码,我应该使用虚拟变量吗?如果我使用那么会有很多列
  • 当然可以对虚拟列使用降维技术。
  • 此外,您可以对每一列进行预处理,使其具有比率 >= 5% 的类。所有稀有值都将被泛化到“其他”类中。
【解决方案2】:

这是一个开始。我将您的数据保存到一个文件中并删除了所有空格。

import pandas as pd
df = pd.read_csv('20180112-2.csv')
df['Month/Day'] = pd.to_datetime(df['Month/Day'], format = '%m/%d')
print(df)

输出:

    Month/Day   Sales  Revenue
0  1900-01-01       0        0
1  1900-01-02  100000        0
2  1900-01-03  400000        0
3  1900-01-06  300000        0
4  1900-01-07  950000  1000000
5  1900-01-08   10000    15000
6  1900-01-10  909000  1000000
7  1900-01-30   12200    12000
8  1900-02-01  950000  1000000
9  1900-02-09   10000    15000
10 1900-02-13  909000  1000000
11 1900-02-15   12200    12000

年份默认为 1900,因为您的数据中未提供该年份。如果你需要改变它,那是一个额外的、不同的问题。要更改年份,请参阅:Pandas: Change day

import datetime as dt
df['Month/Day'] = df['Month/Day'].apply(lambda dt: dt.replace(year = 2017))
print(df)

输出:

    Month/Day   Sales  Revenue
0  2017-01-01       0        0
1  2017-01-02  100000        0
2  2017-01-03  400000        0
3  2017-01-06  300000        0
4  2017-01-07  950000  1000000
5  2017-01-08   10000    15000
6  2017-01-10  909000  1000000
7  2017-01-30   12200    12000
8  2017-02-01  950000  1000000
9  2017-02-09   10000    15000
10 2017-02-13  909000  1000000
11 2017-02-15   12200    12000

最后,要找到列之间的相关性,只需使用df.corr()

print(df.corr())

输出:

            Sales   Revenue
Sales    1.000000  0.953077
Revenue  0.953077  1.000000

【讨论】:

  • 先生,您能告诉我如何处理月/日变量以用其他整数计算
  • 你能更清楚地解释你的意思吗?或者发布一个新问题/搜索旧问题来解决您的需求?
  • 先生想象一下,如果您需要通过使用这些数据来预测收入来构建模型,您需要采取哪些必要步骤:主要是您迄今为止为制作模型所做的工作,要么我们必须转换为任何值,要么只是简单地转换忽略它或其他东西。并且还缺少日期,所以我们如何预测值
  • 大多数模型可以使用日期或时间序列数据。处理缺失值或零值是分析师或数据科学家创建模型的决定。要删除包含零的数据,请参阅此处的解决方案:*.com/questions/22649693/…df = df.loc[(df!=0).all(axis=1)]
  • 我应该将日期值更改为编码值还是必须将其更改为字符串、整数或浮点数。请帮助我使用上述数据集的示例。
最近更新 更多