[Day28]一寸光阴不可轻-修好你的资料,补值初学上线

今天我们要来解决空缺的部份,我们要使用的素材如下,是一张每隔五分钟就纪录温度的资料表,我结图整张表最上面的一小部份,可以看出表中有几格空缺

解决空缺的部份有许多手段,有些会把当笔资料直接删除,更极端一点有整栏删除的这种作法,这种好处是可以最大的保留资料原始性跟真实度,不过在时间序列分析是很少采用这种方式的,因为时间序列必须确保时间的连续性,所以比起删除有问题的资料,我们更常使用填补遗漏值这种方这种方式,又称为插补技术,就是使用其他样本的值所估计出的数值来填补遗漏值,在这里会介绍一个有名的套件scikit-learn,它是个免费的机器学习套件,我们今天只会使用里面的补值功能,范例如下

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt 
# 载入scikit-learn
# from sklearn.preprocessing import Imputer

from sklearn.impute import SimpleImputer

if __name__ == "__main__":
    data = pd.read_csv("./temp.csv")

    arg = np.array(data["temp"])
    arg = arg.reshape([-1, 1])

    # 平均插补
    imr = SimpleImputer(missing_values=np.nan, strategy='mean')
    imr = imr.fit(arg)
    imputed_data = imr.transform(arg)
    data["mean_imputed_data"] = imputed_data

    # 中位数插补
    imr = SimpleImputer(missing_values=np.nan, strategy='median')
    imr = imr.fit(arg)
    imputed_data = imr.transform(arg)
    data["median_imputed_data"] = imputed_data

    # 众数插补
    imr = SimpleImputer(missing_values=np.nan, strategy='most_frequent')
    imr = imr.fit(arg)
    imputed_data = imr.transform(arg)
    data["most_frequent_imputed_data"] = imputed_data

    data.to_csv("./OK.csv")

各位可以发现补是补回来了,但是效果欠佳,补值不准确是因为拿来推估缺值的样本太多了,举个例子,其实要推算现在的温度,我们大概只需要使用过去半小时的温度就能够大概估计现在温室是几度了,为了估计现在的温度还使用过去两三天的资料,实在是大费周章,而且上个礼拜寒流来,岂不是会对现在要估测的数值造成拉低的影响嘛?简而言之,我们需要缩小样本数,仅保留对现在有估测意义的数值即可,这个方式我们会在明天做分享


<<:  【Day 27】情境模拟:该如何协助设计师,提供可以执行的设计稿 !?

>>:  Day 27. 混血的最萌 - 混合加密系统(hybrid cryptosystem)

[DAY 11] _软件实现I2C协议以三轴感测器为例 (ADXL345)

昨天DAY10讲了控制GPIO口来完成协议,今天来讲实际的例子,以大家最常听过三轴感测器为例,首先介...

铁人赛完赛整理&开源

第12 届iT邦帮忙铁人赛系列文章 (Day30) 终於走到这一天了,每次都觉得铁人赛过程都生不如死...

D24. 学习基础C、C++语言

D24. C++的标准输出 先来看看最原始的C++ Hello World程序码 #include ...

[Day 18] 重构我们的测试程序码

随着我们专案功能的增加,虽然目前只有两个函数,但是我们的测试函数已经增加了不少。 为了减少我们未来阅...

[Day26]-数据图表的设计

绘制简易折线图 基础 座标刻度设定 多组数据应用 图例 legend() 在图表上标记文字 绘制散...