导读
本篇将详细解释数据集的处理方式。我相信肯定是有小伙伴读过《特征工程入门与实践》,所以这里就拿一些不一样的数据集说明特征理解的过程。
数据集的准备
在这里我们使用的是德国的能源消耗信息,是一个结构化的报表。由于数据在外网,所以这里下载下来给大家:点击查看并全文复制保存在本地。
如果你使用Chrome
浏览器打开,那么你打开的时候应该是这样:
我们可以看到,这个数据中包含了从 2006 / 1 / 1 2006/1/1 2006/1/1开始的所有耗电数据、风力发电数据、太阳能发电数据和风力太阳能混合发电。在准备理解特征之前,我们还是把之前的流程图放在下面供参考:
好的,开搞!
数据读取
在这里,我们使用pandas
库进行数据的读取。
import pandas as pd
# 读取数据集文件
def get_data(path):
datas = pd.read_csv(path)
# 选取耗电作为研究对象
data = datas[['Date', 'Consumption']]
return data
pass
封装了这个方法之后,我们调用就是这样:
# 我的文件保存在了/home/sakebow/python/data/germany_energy.csv
data = get_data('/home/sakebow/python/data/germany_energy.csv')
由于数据本身是用csv
存储的,所以具有一定的结构性。第一步:结构化直接完成
\sqrt{}
紧接着,我们来看看每一列的情况:
- 日期是定序等级,虽然数值有实际的意义,本质上还是类别;
- 能耗是定量数据,在研究的时候还是会觉得数值非常大,所以将所有的能耗数据和 2006 / 01 / 01 2006/01/01 2006/01/01的相减,得到定距等级;
- 风力发电和混合发电也是使用定距等级进行分析。
第二步:每一列的类别分析,完成 \sqrt{}
然后我们就对照特征工程的准备:特征理解中提供的参照表进行图表的绘制。
那么对着表一个个看,发现应当这么操作:
对象 | 使用图表 |
---|---|
日期 | 直方图 |
能耗 | 折线图、散点图、直方图 |
风力 | 折线图、散点图、直方图 |
太阳能 | 折线图、散点图、直方图 |
混合 | 折线图、散点图、直方图 |
看起来还不错。不过我们还是想研究能耗、风力、太阳能和混合发电量随着时间的推移而变化的趋势,所以,重新规划一下:
对象 | 变量类型 |
---|---|
日期 | 自变量(作为 x x x轴) |
能耗 | 因变量(作为 y y y轴之一) |
风力 | 因变量(作为 y y y轴之一) |
太阳能 | 因变量(作为 y y y轴之一) |
混合 | 因变量(作为 y y y轴之一) |
好了,图表确认了,我们直接开始吧。
编码
首先,我们先拉出数据集里面的日期和耗电量。刚刚我们拿到了一共四列数据的DataFrame
对象data
现在我们需要提取其中的几列作为研究对象。
# 使用两个中括号能够同时提取多列作为研究对象
consumptions = data[['Date', 'Consumption']]
# 使用DataFrame封装的plot方法能够非常方便的画出图像
consumptions.plot()
执行!
好嘛,啥都没发生。纠其原因,就是没有显示图像。画归画,显示又是另一回事。所以我们引入matplotlib
作为绘图包。接下来就是完整的代码:
严重警告:这部分代码虽然没问题,但是得出来的结果很奇葩。复制请慎重!
import pandas as pd
import matplotlib.pyplot as pyplot
def get_data(path, x, y):
datas = pd.read_csv(path)
data = datas[[x, y]]
return data
if __name__ == '__main__':
data = get_data('/home/sakebow/python/data/germany_energy.csv', 'Date', 'Consumption')
data.plot()
pyplot.xlabel('date')
pyplot.ylabel('consumption')
pyplot.show()
pass
看起来非常完美!运行!
修正
嗯……虽然线条没什么问题,但是这个横坐标也太奇葩了吧?直接将DataFrame
的索引变成了横坐标。这显然不是什么好图表。
所以,我们稍加修改:
注意:下面这个方法是正确的,请放心复制。
import pandas as pd
import matplotlib.pyplot as pyplot
# 封装读取数据的函数
def get_data(path, x, y):
datas = pd.read_csv(path)
data = datas[[x, y]]
return data
if __name__ == '__main__':
# 获取数据
data = get_data('/home/sakebow/python/data/germany_energy.csv', 'Date', 'Consumption')
# 确认索引,并且替换掉原先的索引
data.set_index('Date', inplace=True)
# 内置函数绘图
data.plot()
# 横坐标备注
pyplot.xlabel('date')
# 纵坐标备注
pyplot.ylabel('consumption')
# 显示图表
pyplot.show()
pass
这就好多了。
能够很明显地看出来,德国能耗有一定的周期性。
再进一步
这也就是特征理解一直在做的事情。通过图表分析数据地走向。如果数据量非常多,我们也可以使用这样的方法:
import pandas as pd
import matplotlib.pyplot as pyplot
if __name__ == '__main__':
# 获取数据
datas = pd.read_csv('/home/sakebow/python/data/germany_energy.csv')
# 确认索引,并且替换掉原先的索引
datas.set_index('Date', inplace=True)
# 内置函数绘图
data.plot()
# 横坐标备注
pyplot.xlabel('date')
# 显示图表
pyplot.show()
pass
像这样就非常明显地表明:从2006年开始德国的耗电有着周期性的、稳定的变化;风力发电和太阳能发电一直都在增长。但是混合发电量依然远远达不到耗电量。
这就是特征理解了。在这个阶段,我们所做的就是使用图表来理解什么数据是什么趋势、通过肉眼大致预测什么数据和什么有关。
是不是有点能理解了?