【数据分析】针对家庭用电数据进行时序分析(1)

这篇具有很好参考价值的文章主要介绍了【数据分析】针对家庭用电数据进行时序分析(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0. 数据说明

本项目所用数据集包含了一个家庭6个月的用电数据,收集于2007年1月至2007年6月。
这些数据包括有功功率、无功功率、电压、电流强度、分项计量1(厨房)、分项计量2(洗衣房)和分项计量3(电热水器和空调)等信息。该数据集共有260,640个测量值,可以为了解家庭用电情况提供重要的见解。

我们要感谢databeats团队提供这个数据集。如果你在你的研究中使用这个数据集,请注明原作者:Georges Hébrail 和 Alice Bérard。

字段含义对照表:

列名 说明
Date 日期
Time 时间
Globalactivepower 除分项计量外所消耗的总有功功率(千瓦)
Globalreactivepower 该家庭消耗的总无功功率(千瓦)
Voltage 向家庭输送电力的电压(伏特)
Global_intensity 输送到家庭的平均电流强度(安培)
Submetering1 厨房消耗的有功功率(千瓦)
Submetering2 洗衣房所消耗的有功功率(千瓦)
Submetering3 电热水器和空调所消耗的有功功率(千瓦)
数据来源:
https://www.kaggle.com/datasets/thedevastator/240000-household-electricity-consumption-records

其他说明:
有功功率是保持用电设备正常运行所需的电功率,也就是将电能转换为其他形式能量(机械能、光能、热能)的电功率。比如:5.5千瓦的电动机就是把5.5千瓦的电能转换为机械能,带动水泵抽水或脱粒机脱粒;各种照明设备将电能转换为光能,供人们生活和工作照明。无功功率比较抽象,它是用于电路内电场与磁场的交换,并用来在电气设备中建立和维持磁场的电功率。它不对外作功,而是转变为其他形式的能量。凡是有电磁线圈的电气设备,要建立磁场,就要消耗无功功率。比如40瓦的日光灯,除需40多瓦有功功率(镇流器也需消耗一部分有功功率)来发光外,还需80乏左右的无功功率供镇流器的线圈建立交变磁场用。由于它不对外做功,才被称之为“无功”。

1. 前期工作

1.1 导包

import numpy as np
import pandas as pd
from pyecharts.charts import *
import pyecharts.options as opts
from statsmodels.tsa.seasonal import seasonal_decompose
import matplotlib.pyplot as plt
# plt.rcParams['axes.unicode_minus']=False
# plt.rcParams['font.sans-serif'] = ['SimHei']```

1.2 读取数据

# 数据路径
data_path = r'/home/mw/input/Household_Electricity4767/household_power_consumption.csv'
# 读取数据
df = pd.read_csv(data_path,index_col='index')
# 预览数据
df.head()

输出结果:

index Date Time Global_active_power Global_reactive_power Voltage Global_intensity Sub_metering_1 Sub_metering_2 Sub_metering_3
0 16/12/2006 17:24:00 4.216 0.418 234.840 18.400 0.000 1.000 17.000
1 16/12/2006 17:25:00 5.360 0.436 233.630 23.000 0.000 1.000 16.000
2 16/12/2006 17:26:00 5.374 0.498 233.290 23.000 0.000 2.000 17.000
3 16/12/2006 17:27:00 5.388 0.502 233.740 23.000 0.000 1.000 17.000
4 16/12/2006 17:28:00 3.666 0.528 235.680 15.800 0.000 1.000 17.000

2. 数据处理

2.1 数据预览

# 将列名替换为中文
df.rename(columns={
    'Date': '日期',
    'Time': '时间',
    'Global_active_power': '有功功率',
    'Global_reactive_power': '无功功率',
    'Voltage': '电压',
    'Global_intensity': '电流',
    'Sub_metering_1': '厨房的有功功率',
    'Sub_metering_2': '洗衣房的有功功率',
    'Sub_metering_3': '电热水器和空调的有功功率',
    },inplace=1)
# 再次预览前5行数据
df.head()  # 列名改成中文顺眼多了

输出结果:

日期 时间 有功功率 无功功率 电压 电流 厨房的有功功率 洗衣房的有功功率 电热水器和空调的有功功率
16/12/2006 17:24:00 4.216 0.418 234.84 18.4 0.0 1.0 17.0
16/12/2006 17:25:00 5.36 0.436 233.63 23.0 0.0 1.0 16.0
16/12/2006 17:26:00 5.374 0.498 233.29 23.0 0.0 2.0 17.0
16/12/2006 17:27:00 5.388 0.502 233.74 23.0 0.0 1.0 17.0
16/12/2006 17:28:00 3.666 0.528 235.68 15.8 0.0 1.0 17.0

解惑:

0、为什么这样导包?
a:这样导包的主要原因是为了方便使用这些库中的函数和类。具体来说:

- `import numpy as np`:将`numpy`库导入,并将其命名为`np`,这样我们在调用`numpy`库中的函数或类时,可以使用`np`作为前缀,比如`np.array()`。
- `import pandas as pd`:将`pandas`库导入,并将其命名为`pd`,这样我们在调用`pandas`库中的函数或类时,可以使用`pd`作为前缀,比如`pd.DataFrame()`。
- `from pyecharts.charts import *`:从`pyecharts.charts`模块中导入所有的类和函数,这样我们在调用`pyecharts`库中的函数或类时,可以直接使用其名称,比如`Line()`。
- `import pyecharts.options as opts`:将`pyecharts.options`模块导入,并将其命名为`opts`,这样我们在调用`pyecharts`库中的选项时,可以使用`opts`作为前缀,比如`opts.Title()`。
- `from statsmodels.tsa.seasonal import seasonal_decompose`:从`statsmodels.tsa.seasonal`模块中导入`seasonal_decompose`函数,这样我们在调用该函数时,可以直接使用其名称。
- `import matplotlib.pyplot as plt`:将`matplotlib.pyplot`模块导入,并将其命名为`plt`,这样我们在调用`matplotlib`库中的函数或类时,可以使用`plt`作为前缀,比如`plt.plot()`。
- `plt.rcParams['axes.unicode_minus']=False`和`plt.rcParams['font.sans-serif'] = ['SimHei']`:这两行代码是为了设置`matplotlib`库的显示参数,使得中文可以正常显示,并且减少负号显示的问题。

1、pyecharts.options这个模块是做什么的?
a:pyecharts.options模块是pyecharts库中的一个子模块,主要用于定义可视化图形的各种选项参数,例如图形的标题、坐标轴的标签、图例的样式等等。pyecharts库是一个基于echarts库的Python可视化库,提供了多种类型的可视化图表,包括柱状图、折线图、散点图、地图等等,pyecharts.options模块的作用就是为这些图表提供各种选项参数,以便用户可以根据自己的需求来自定义图表的外观和样式。例如,可以使用opts.Title()函数来设置图表的标题,使用opts.Legend()函数来设置图例的样式,使用opts.Toolbox()函数来添加工具栏等等。这些选项参数可以通过链式调用来设置,例如:

from pyecharts.charts import Bar
import pyecharts.options as opts

bar = Bar()
bar.add_xaxis(["A", "B", "C", "D", "E"])
bar.add_yaxis("Series", [10, 20, 30, 40, 50])
bar.set_global_opts(title_opts=opts.Title(text="Bar Chart", subtext="Example"),
                     legend_opts=opts.Legend(pos_right="10%"),
                     toolbox_opts=opts.Toolbox())
bar.render("bar.html")

上面的代码中,我们使用opts.Title()函数设置了图表的标题,使用opts.Legend()函数设置了图例的位置,使用opts.Toolbox()函数添加了工具栏,并将这些选项参数传递给set_global_opts()方法来设置全局选项。
2、pyecharts.charts呢?
a:pyecharts.charts模块是pyecharts库中的一个子模块,主要用于创建各种类型的可视化图表,例如柱状图、折线图、散点图、地图等等。pyecharts库是一个基于echarts库的Python可视化库,提供了多种类型的可视化图表,pyecharts.charts模块的作用就是为这些图表提供各种方法和属性,以便用户可以根据自己的需求来创建和自定义图表。例如,可以使用Line()函数创建一个折线图,然后使用add_xaxis()函数和add_yaxis()函数来添加数据,最后使用set_global_opts()函数来设置图表的全局选项,如下所示:

from pyecharts.charts import Line
import pyecharts.options as opts

line = Line()
line.add_xaxis(["A", "B", "C", "D", "E"])
line.add_yaxis("Series", [10, 20, 30, 40, 50])
line.set_global_opts(title_opts=opts.Title(text="Line Chart", subtext="Example"),
                     legend_opts=opts.Legend(pos_right="10%"))
line.render("line.html")

上面的代码中,我们使用Line()函数创建了一个折线图,使用add_xaxis()函数和add_yaxis()函数添加了数据,使用set_global_opts()函数设置了图表的标题和图例位置,并将这些选项参数传递给set_global_opts()方法来设置全局选项。最后,使用render()函数将图表渲染成HTML文件。
3、from statsmodels.tsa.seasonal import seasonal_decompose呢?
a:from statsmodels.tsa.seasonal import seasonal_decompose这行代码是从statsmodels.tsa.seasonal模块中导入了seasonal_decompose函数。statsmodels是一个Python库,提供了各种统计模型和方法,包括时间序列分析、回归分析、统计模型检验等等。tsatime series analysis的缩写,表示时间序列分析,其中seasonal表示季节性分析,seasonal_decompose函数用于对季节性时间序列进行分解,将其分解为趋势、季节和残差三个部分。这个函数的主要作用是帮助用户了解时间序列数据的季节性变化趋势,从而更好地进行数据分析和预测。在使用该函数时,需要将时间序列数据作为函数的参数传递进去,并指定季节周期的长度。例如:

from statsmodels.tsa.seasonal import seasonal_decompose
import pandas as pd

# 创建一个季节性时间序列
data = pd.DataFrame({'date': pd.date_range(start='2022-01-01', end='2022-12-31', freq='D'),
                     'value': [i % 7 + 1 for i in range(365)]})

# 对时间序列进行季节性分解
result = seasonal_decompose(data['value'], model='additive', period=7)

# 输出分解结果
print(result.trend)
print(result.seasonal)
print(result.resid)
print(result.observed)

上面的代码中,我们首先创建了一个季节性时间序列,然后使用seasonal_decompose()函数对其进行季节性分解,其中model参数指定了分解模型,可以是additivemultiplicativeperiod参数指定了季节周期的长度,这里我们指定为7,表示一周的周期。最后,我们输出了分解结果中的趋势、季节和残差三个部分,以及原始数据。
4、import matplotlib.pyplot as plt这个呢?
a:import matplotlib.pyplot as plt是将matplotlib.pyplot模块导入,并将其命名为plt,这样我们在调用matplotlib库中的函数或类时,可以使用plt作为前缀,比如plt.plot()matplotlib是一个Python绘图库,提供了各种类型的图表,包括线性图、散点图、柱状图、饼图等等,pyplotmatplotlib库中的一个子模块,提供了一些方便的函数和工具,可以帮助用户更方便地进行图表绘制和数据可视化。例如,可以使用plot()函数来绘制线性图,使用scatter()函数来绘制散点图,使用bar()函数来绘制柱状图等等。以下是一个简单的例子:

import matplotlib.pyplot as plt

# 创建数据
x = [1, 2, 3, 4, 5]
y = [10, 20, 30, 40, 50]

# 绘制线性图
plt.plot(x, y)

# 添加标题和坐标轴标签
plt.title("Line Chart")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")

# 显示图表
plt.show()

上面的代码中,我们首先创建了一个包含5个数据点的线性数据,然后使用plot()函数绘制了这些数据的线性图,使用title()函数、xlabel()函数和ylabel()函数添加了标题和坐标轴标签,最后使用show()函数显示图表。
5、df = pd.read_csv(data_path,index_col='index'),index_col是什么?
a:index_colpandas.read_csv()函数中的一个参数,用于指定将哪一列作为数据的索引(行标签)。默认情况下,read_csv()函数会自动为数据生成一个整数索引,但是在某些情况下,我们可能需要将某一列作为数据的索引,这时就可以使用index_col参数。例如,如果我们有一个包含日期和数值的CSV文件,想要将日期作为数据的索引,可以使用以下代码:

import pandas as pd

data_path = 'data.csv'
df = pd.read_csv(data_path, index_col='date')

在上面的代码中,我们使用read_csv()函数读取了一个CSV文件,并将其中的date列作为数据的索引。这样,我们就可以通过日期来索引和操作数据了。如果不指定index_col参数,则默认使用第一列作为数据的索引。
6、索引是用来干嘛的,为什么要指定?
a:索引是用来标识和访问数据的标签或键,它可以帮助我们更方便地对数据进行操作和分析。在pandas库中,索引分为行索引和列索引两种。行索引用于标识和访问数据行,列索引用于标识和访问数据列。

pandas中,数据的索引可以由用户指定,也可以由系统自动生成。如果数据没有指定索引,则默认使用从0开始的整数索引。但是,在某些情况下,我们可能需要根据数据的特性或需求来指定索引,例如,如果数据中包含日期或时间等信息,我们可以将其作为索引,便于按时间序列进行分析和操作;如果数据中有某一列唯一标识每个数据项,则可以将其作为索引,便于按照该列进行数据查找和聚合。

指定索引可以让我们更方便地访问和操作数据,例如,可以通过索引来选择特定的行或列,可以通过索引来对数据进行排序、切片、分组和聚合等操作。因此,在读取数据时,根据数据的特性和需求来指定索引是一个很好的选择。
7、rcParams

plt.rcParams['axes.unicode_minus']=False
plt.rcParams['font.sans-serif'] = ['SimHei']:
这两行代码是为了设置matplotlib库的显示参数,使得中文可以正常显示,并且减少负号显示的问题。

8、inplace = 1什么意思?
a:inplacepandas库中很多方法的一个可选参数,用于指示是否将修改应用到原DataFrame中。如果inplace=True,则会直接在原DataFrame上进行修改,并返回None;如果inplace=False(默认值),则会返回一个新的DataFrame,原DataFrame不会改变。

使用inplace=True可以提高代码的效率,避免在内存中创建新的对象,特别是当数据集很大时。但是,需要注意的是,这样会直接修改原始数据,可能会影响到后续的操作。因此,在使用inplace参数时,需要谨慎考虑是否需要在原始数据上进行修改。

在上面的代码中,使用了inplace=1,这相当于inplace=True,表示直接在原DataFrame上进行修改。文章来源地址https://www.toymoban.com/news/detail-710402.html

到了这里,关于【数据分析】针对家庭用电数据进行时序分析(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 时序分析 43 -- 时序数据转为空间数据 (二) 马尔可夫转换场

    MRF     马尔可夫转换场(MRF, Markov Transition Fields)比GAF要简单一些,其数学模型对于从事数据科学的工程师来说也并不陌生,诸如马尔可夫模型或隐含马尔可夫模型(HMM)也是我们经常会用到的建模方法,在自然语言处理、机器学习等数据科学任务中也会经常遇到。     我们假

    2024年01月17日
    浏览(38)
  • 时序分析 42 -- 时序数据转为空间数据 (一) 格拉姆角场

         我们通常认为时序数据为一维数据,实际上时序数据隐含另外一个维度就是时间。但有时我们可能需要从其他维度来解读单变量时序数据,例如我们可以把时序数据转换为空间数据,就是类似图像的数据,后续可以使用卷积神经网络来进行特征提取。达到这一目的有两

    2024年02月02日
    浏览(30)
  • python数据分析之产品销量时序分析与商品关联分析

    这是我们之前的课后作业,根据自己的想法对这个数据进行分析,只要求写出五个点出来就可以了,因此我就对这些数据进行了分析一番。涉及的python知识点还是挺多的,包括了python连接数据库,SQL提取数据并保存为csv格式,pandas处理数据,matplotlib画图以及购物篮分析与关联

    2024年02月07日
    浏览(36)
  • 【数据挖掘】如何修复时序分析缺少的日期

            我撰写本文的目的是通过引导您完成一个示例来帮助您了解 TVF 以及如何使用它们,该示例解决了时间序列分析中常见的缺失日期问题。         我们将介绍: 如何 生成日期 以填补数据中缺失的空白 如何 创建 TVF  和参数的使用

    2024年02月15日
    浏览(37)
  • 空间时序数据分析技术综述Spatiotemporal data analysis technologies s

    作者:禅与计算机程序设计艺术 随着科技的飞速发展,在人类活动与社会经济中的种种数据呈现出一种新的模式,其中空间时序数据的处理及分析具有十分重要的作用。与传统时间序列数据不同的是,空间时序数据往往含有更多的维度信息,如位置、时间、年龄、设备等,因

    2024年02月07日
    浏览(50)
  • 机器学习:多项式拟合分析中国温度变化与温室气体排放量的时序数据

    ​ 当分析数据时,如果我们找的不是直线或者超平面,而是一条曲线,那么就可以用多项式回归来分析和预测。 ​ 多项式回归可以写成: Y i = β 0 + β 1 X i + β 2 X i 2 + . . . + β k X i k Y_{i} = beta_{0} +beta_{1}X_{i}+beta_{2}X_{i}^2+...+beta_{k}X_{i}^k Y i ​ = β 0 ​ + β 1 ​ X i ​ + β 2 ​

    2023年04月21日
    浏览(27)
  • Python-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 Python数据分析实战 数据可视化 时序数据预测 变种RNN 股票预测

    Python-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 Python数据分析实战 数据可视化 时序数据预测 变种RNN 股票预测 近些年,随着计算机技术的不断发展,神经网络在预测方面的应用愈加广泛,尤其是长短期记忆人工神经网络(Long Short-Term Memory,LSTM)在各领域、各

    2024年02月03日
    浏览(35)
  • 使用Python进行数据分析——方差分析

    大家好,方差分析可以用来判断几组观察到的数据或者处理的结果是否存在显著差异。本文介绍的方差分析(Analysis of Variance,简称ANOVA)就是用于检验两组或者两组以上样本的均值是否具备显著性差异的一种数理统计方法。 根据影响试验条件的因素个数可以将方差分析分为

    2024年02月15日
    浏览(46)
  • 使用Python进行数据分析——线性回归分析

    大家好,线性回归是确定两种或两种以上变量之间互相依赖的定量关系的一种统计分析方法。根据自变量的个数,可以将线性回归分为一元线性回归和多元线性回归分析。 一元线性回归:就是只包含一个自变量,且该自变量与因变量之间的关系是线性关系。例如通过广告费这

    2023年04月10日
    浏览(79)
  • 需要数据分析的同学看过来,怎么使用RPA进行数据分析!

    RPA(机器人流程自动化)是一种新兴的技术,可以模拟人类在计算机上执行操作,从而提高工作效率。使用RPA进行数据分析,可以快速、高效地处理大量数据,提高数据分析的准确性和效率。下面,本文将从以下几个方面详细介绍如何使用RPA进行数据分析。 RPA在数据分析中有

    2024年02月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包