如何处理这样的缺失值和回归的日期格式?
how to handle the missing values like this and date format for regression?
我想从这个数据集建立回归模型(前两个是因变量,最后一个是因变量)。我使用 dataset=pd.read_csv('data.csv')
导入数据集
现在我以前也制作过模型,但从未将日期格式数据集作为自变量完成,所以我们应该如何处理这些日期格式来制作回归模型。
我们还应该如何处理给定数据集中的 0 值数据。
我的数据集是 like:in .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 值
这是一个开始。我将你的数据保存到一个文件中并删除了所有空白。
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,因为您的数据中未提供该年份。如果您需要更改它,那是另一个不同的问题。要更改年份,请参阅:
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
How to handle missing data?
有多种方法可以替换它。按平均数、中位数或使用移动平均数 window 或什至 RF 方法(或类似的 MICE 等)。
对于 'sales' 列,您可以尝试任何一种方法。
对于 'revenue' 列,最好不要使用其中的任何一个,尤其是当您有很多缺失值时(这会损害模型)。只需删除 'revenue' 列中缺少值的行。
顺便说一句,ML 中的一些方法接受缺失值:XGBoost 和某种方式 Trees/Forests。对于最新的,您可以将零替换为一些非常不同的值,例如 -999999。
What to do with the data?
很多与特征工程相关的事情都可以在这里完成:
1.星期几
2.工作日或周末
3. 月中的第几天(数字)
4. 假期前或 post-假期
5.周数
6.月号
7.年号
8. 一些因素的表示(例如,如果是水果销售数据,你可以与它相关的一些布尔列)
9.等等...
这里的几乎每个特征都应该通过 one-hot-encoding 进行预处理。
如果您使用线性模型,当然要清除相关性。
我想从这个数据集建立回归模型(前两个是因变量,最后一个是因变量)。我使用 dataset=pd.read_csv('data.csv')
导入数据集
现在我以前也制作过模型,但从未将日期格式数据集作为自变量完成,所以我们应该如何处理这些日期格式来制作回归模型。
我们还应该如何处理给定数据集中的 0 值数据。
我的数据集是 like:in .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 值
这是一个开始。我将你的数据保存到一个文件中并删除了所有空白。
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,因为您的数据中未提供该年份。如果您需要更改它,那是另一个不同的问题。要更改年份,请参阅:
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
How to handle missing data?
有多种方法可以替换它。按平均数、中位数或使用移动平均数 window 或什至 RF 方法(或类似的 MICE 等)。 对于 'sales' 列,您可以尝试任何一种方法。 对于 'revenue' 列,最好不要使用其中的任何一个,尤其是当您有很多缺失值时(这会损害模型)。只需删除 'revenue' 列中缺少值的行。
顺便说一句,ML 中的一些方法接受缺失值:XGBoost 和某种方式 Trees/Forests。对于最新的,您可以将零替换为一些非常不同的值,例如 -999999。
What to do with the data?
很多与特征工程相关的事情都可以在这里完成: 1.星期几 2.工作日或周末 3. 月中的第几天(数字) 4. 假期前或 post-假期 5.周数 6.月号 7.年号 8. 一些因素的表示(例如,如果是水果销售数据,你可以与它相关的一些布尔列) 9.等等...
这里的几乎每个特征都应该通过 one-hot-encoding 进行预处理。
如果您使用线性模型,当然要清除相关性。