Python 中 Google 分析数据的数据插补
Data imputation in Python for Google Analytics data
我有一组来自网站的 Google 分析数据,我打算为一个项目进行分析。但是,由于维护和其他因素,有些日期没有数据。我想估算这些数据,同时仍然保持数据的完整性,因为我计划绘制这些集合并将不同集合的曲线随时间相互比较。
Example
我想使用距离每个缺失数据点最近的有效数据点来估算该值,以保持可以从图像中看到的基础形状。
我已经尝试使用 scikit-learn 的 KNN-Imputer 和 Iterative Imputer,但我要么没有理解这些 imputer 应该如何使用,要么它们不适合我正在尝试的做,可能两者兼而有之。
import pandas as pd
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
import numpy as np
df = pd.read_csv('data.csv', names=['Day','Views'],delimiter=',',skiprows=3, usecols=[0,1], skipfooter=1, engine='python', quoting= 1)
df = df.replace(0, np.nan)
da = df.Views.rename_axis('ID').values
da = da.reshape(-1,1)
imputer = IterativeImputer(n_nearest_features = 100, max_iter = 10)
df_imputed = imputer.fit_transform(da)
df_imputed.reshape(1,-1)
df.Views = df_imputed
df
所有 NaN 值都计算为与我当前实现的完全相同的数字。
如有任何帮助,我们将不胜感激。
这里的问题是我重塑了数组。我的数据只是一个一维值数组,所以我通过重塑导致所有 NaN 值被计算为相同的数组来使其成为二维值。当我添加一个索引列并将其作为输入输入到 imputer 时,计算的值 correctly.I 最终也使用来自 sklearn 的 KNN imputer 而不是本例中的迭代 imputer。
我有一组来自网站的 Google 分析数据,我打算为一个项目进行分析。但是,由于维护和其他因素,有些日期没有数据。我想估算这些数据,同时仍然保持数据的完整性,因为我计划绘制这些集合并将不同集合的曲线随时间相互比较。
Example
我想使用距离每个缺失数据点最近的有效数据点来估算该值,以保持可以从图像中看到的基础形状。
我已经尝试使用 scikit-learn 的 KNN-Imputer 和 Iterative Imputer,但我要么没有理解这些 imputer 应该如何使用,要么它们不适合我正在尝试的做,可能两者兼而有之。
import pandas as pd
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
import numpy as np
df = pd.read_csv('data.csv', names=['Day','Views'],delimiter=',',skiprows=3, usecols=[0,1], skipfooter=1, engine='python', quoting= 1)
df = df.replace(0, np.nan)
da = df.Views.rename_axis('ID').values
da = da.reshape(-1,1)
imputer = IterativeImputer(n_nearest_features = 100, max_iter = 10)
df_imputed = imputer.fit_transform(da)
df_imputed.reshape(1,-1)
df.Views = df_imputed
df
所有 NaN 值都计算为与我当前实现的完全相同的数字。
如有任何帮助,我们将不胜感激。
这里的问题是我重塑了数组。我的数据只是一个一维值数组,所以我通过重塑导致所有 NaN 值被计算为相同的数组来使其成为二维值。当我添加一个索引列并将其作为输入输入到 imputer 时,计算的值 correctly.I 最终也使用来自 sklearn 的 KNN imputer 而不是本例中的迭代 imputer。