0. 數(shù)據(jù)說(shuō)明
本項(xiàng)目所用數(shù)據(jù)集包含了一個(gè)家庭6個(gè)月的用電數(shù)據(jù),收集于2007年1月至2007年6月。
這些數(shù)據(jù)包括有功功率、無(wú)功功率、電壓、電流強(qiáng)度、分項(xiàng)計(jì)量1(廚房)、分項(xiàng)計(jì)量2(洗衣房)和分項(xiàng)計(jì)量3(電熱水器和空調(diào))等信息。該數(shù)據(jù)集共有260,640個(gè)測(cè)量值,可以為了解家庭用電情況提供重要的見解。
我們要感謝databeats團(tuán)隊(duì)提供這個(gè)數(shù)據(jù)集。如果你在你的研究中使用這個(gè)數(shù)據(jù)集,請(qǐng)注明原作者:Georges Hébrail 和 Alice Bérard。
字段含義對(duì)照表:
列名 說(shuō)明
Date 日期
Time 時(shí)間
Globalactivepower 除分項(xiàng)計(jì)量外所消耗的總有功功率(千瓦)
Globalreactivepower 該家庭消耗的總無(wú)功功率(千瓦)
Voltage 向家庭輸送電力的電壓(伏特)
Global_intensity 輸送到家庭的平均電流強(qiáng)度(安培)
Submetering1 廚房消耗的有功功率(千瓦)
Submetering2 洗衣房所消耗的有功功率(千瓦)
Submetering3 電熱水器和空調(diào)所消耗的有功功率(千瓦)
數(shù)據(jù)來(lái)源:
https://www.kaggle.com/datasets/thedevastator/240000-household-electricity-consumption-records
其他說(shuō)明:
有功功率是保持用電設(shè)備正常運(yùn)行所需的電功率,也就是將電能轉(zhuǎn)換為其他形式能量(機(jī)械能、光能、熱能)的電功率。比如:5.5千瓦的電動(dòng)機(jī)就是把5.5千瓦的電能轉(zhuǎn)換為機(jī)械能,帶動(dòng)水泵抽水或脫粒機(jī)脫粒;各種照明設(shè)備將電能轉(zhuǎn)換為光能,供人們生活和工作照明。無(wú)功功率比較抽象,它是用于電路內(nèi)電場(chǎng)與磁場(chǎng)的交換,并用來(lái)在電氣設(shè)備中建立和維持磁場(chǎng)的電功率。它不對(duì)外作功,而是轉(zhuǎn)變?yōu)槠渌问降哪芰俊7彩怯须姶啪€圈的電氣設(shè)備,要建立磁場(chǎng),就要消耗無(wú)功功率。比如40瓦的日光燈,除需40多瓦有功功率(鎮(zhèn)流器也需消耗一部分有功功率)來(lái)發(fā)光外,還需80乏左右的無(wú)功功率供鎮(zhèn)流器的線圈建立交變磁場(chǎng)用。由于它不對(duì)外做功,才被稱之為“無(wú)功”。
1. 前期工作
1.1 導(dǎo)包
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 讀取數(shù)據(jù)
# 數(shù)據(jù)路徑
data_path = r'/home/mw/input/Household_Electricity4767/household_power_consumption.csv'
# 讀取數(shù)據(jù)
df = pd.read_csv(data_path,index_col='index')
# 預(yù)覽數(shù)據(jù)
df.head()
輸出結(jié)果:
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. 數(shù)據(jù)處理
2.1 數(shù)據(jù)預(yù)覽
# 將列名替換為中文
df.rename(columns={
'Date': '日期',
'Time': '時(shí)間',
'Global_active_power': '有功功率',
'Global_reactive_power': '無(wú)功功率',
'Voltage': '電壓',
'Global_intensity': '電流',
'Sub_metering_1': '廚房的有功功率',
'Sub_metering_2': '洗衣房的有功功率',
'Sub_metering_3': '電熱水器和空調(diào)的有功功率',
},inplace=1)
# 再次預(yù)覽前5行數(shù)據(jù)
df.head() # 列名改成中文順眼多了
輸出結(jié)果:
日期 | 時(shí)間 | 有功功率 | 無(wú)功功率 | 電壓 | 電流 | 廚房的有功功率 | 洗衣房的有功功率 | 電熱水器和空調(diào)的有功功率 |
---|---|---|---|---|---|---|---|---|
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、為什么這樣導(dǎo)包?
a:這樣導(dǎo)包的主要原因是為了方便使用這些庫(kù)中的函數(shù)和類。具體來(lái)說(shuō):
- `import numpy as np`:將`numpy`庫(kù)導(dǎo)入,并將其命名為`np`,這樣我們?cè)谡{(diào)用`numpy`庫(kù)中的函數(shù)或類時(shí),可以使用`np`作為前綴,比如`np.array()`。
- `import pandas as pd`:將`pandas`庫(kù)導(dǎo)入,并將其命名為`pd`,這樣我們?cè)谡{(diào)用`pandas`庫(kù)中的函數(shù)或類時(shí),可以使用`pd`作為前綴,比如`pd.DataFrame()`。
- `from pyecharts.charts import *`:從`pyecharts.charts`模塊中導(dǎo)入所有的類和函數(shù),這樣我們?cè)谡{(diào)用`pyecharts`庫(kù)中的函數(shù)或類時(shí),可以直接使用其名稱,比如`Line()`。
- `import pyecharts.options as opts`:將`pyecharts.options`模塊導(dǎo)入,并將其命名為`opts`,這樣我們?cè)谡{(diào)用`pyecharts`庫(kù)中的選項(xiàng)時(shí),可以使用`opts`作為前綴,比如`opts.Title()`。
- `from statsmodels.tsa.seasonal import seasonal_decompose`:從`statsmodels.tsa.seasonal`模塊中導(dǎo)入`seasonal_decompose`函數(shù),這樣我們?cè)谡{(diào)用該函數(shù)時(shí),可以直接使用其名稱。
- `import matplotlib.pyplot as plt`:將`matplotlib.pyplot`模塊導(dǎo)入,并將其命名為`plt`,這樣我們?cè)谡{(diào)用`matplotlib`庫(kù)中的函數(shù)或類時(shí),可以使用`plt`作為前綴,比如`plt.plot()`。
- `plt.rcParams['axes.unicode_minus']=False`和`plt.rcParams['font.sans-serif'] = ['SimHei']`:這兩行代碼是為了設(shè)置`matplotlib`庫(kù)的顯示參數(shù),使得中文可以正常顯示,并且減少負(fù)號(hào)顯示的問(wèn)題。
1、pyecharts.options這個(gè)模塊是做什么的?
a:pyecharts.options
模塊是pyecharts
庫(kù)中的一個(gè)子模塊,主要用于定義可視化圖形的各種選項(xiàng)參數(shù),例如圖形的標(biāo)題、坐標(biāo)軸的標(biāo)簽、圖例的樣式等等。pyecharts
庫(kù)是一個(gè)基于echarts
庫(kù)的Python可視化庫(kù),提供了多種類型的可視化圖表,包括柱狀圖、折線圖、散點(diǎn)圖、地圖等等,pyecharts.options
模塊的作用就是為這些圖表提供各種選項(xiàng)參數(shù),以便用戶可以根據(jù)自己的需求來(lái)自定義圖表的外觀和樣式。例如,可以使用opts.Title()
函數(shù)來(lái)設(shè)置圖表的標(biāo)題,使用opts.Legend()
函數(shù)來(lái)設(shè)置圖例的樣式,使用opts.Toolbox()
函數(shù)來(lái)添加工具欄等等。這些選項(xiàng)參數(shù)可以通過(guò)鏈?zhǔn)秸{(diào)用來(lái)設(shè)置,例如:
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()
函數(shù)設(shè)置了圖表的標(biāo)題,使用opts.Legend()
函數(shù)設(shè)置了圖例的位置,使用opts.Toolbox()
函數(shù)添加了工具欄,并將這些選項(xiàng)參數(shù)傳遞給set_global_opts()
方法來(lái)設(shè)置全局選項(xiàng)。
2、pyecharts.charts呢?
a:pyecharts.charts
模塊是pyecharts
庫(kù)中的一個(gè)子模塊,主要用于創(chuàng)建各種類型的可視化圖表,例如柱狀圖、折線圖、散點(diǎn)圖、地圖等等。pyecharts
庫(kù)是一個(gè)基于echarts
庫(kù)的Python可視化庫(kù),提供了多種類型的可視化圖表,pyecharts.charts
模塊的作用就是為這些圖表提供各種方法和屬性,以便用戶可以根據(jù)自己的需求來(lái)創(chuàng)建和自定義圖表。例如,可以使用Line()
函數(shù)創(chuàng)建一個(gè)折線圖,然后使用add_xaxis()
函數(shù)和add_yaxis()
函數(shù)來(lái)添加數(shù)據(jù),最后使用set_global_opts()
函數(shù)來(lái)設(shè)置圖表的全局選項(xiàng),如下所示:
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()
函數(shù)創(chuàng)建了一個(gè)折線圖,使用add_xaxis()
函數(shù)和add_yaxis()
函數(shù)添加了數(shù)據(jù),使用set_global_opts()
函數(shù)設(shè)置了圖表的標(biāo)題和圖例位置,并將這些選項(xiàng)參數(shù)傳遞給set_global_opts()
方法來(lái)設(shè)置全局選項(xiàng)。最后,使用render()
函數(shù)將圖表渲染成HTML文件。
3、from statsmodels.tsa.seasonal import seasonal_decompose呢?
a:from statsmodels.tsa.seasonal import seasonal_decompose
這行代碼是從statsmodels.tsa.seasonal
模塊中導(dǎo)入了seasonal_decompose
函數(shù)。statsmodels
是一個(gè)Python庫(kù),提供了各種統(tǒng)計(jì)模型和方法,包括時(shí)間序列分析、回歸分析、統(tǒng)計(jì)模型檢驗(yàn)等等。tsa
是time series analysis
的縮寫,表示時(shí)間序列分析,其中seasonal
表示季節(jié)性分析,seasonal_decompose
函數(shù)用于對(duì)季節(jié)性時(shí)間序列進(jìn)行分解,將其分解為趨勢(shì)、季節(jié)和殘差三個(gè)部分。這個(gè)函數(shù)的主要作用是幫助用戶了解時(shí)間序列數(shù)據(jù)的季節(jié)性變化趨勢(shì),從而更好地進(jìn)行數(shù)據(jù)分析和預(yù)測(cè)。在使用該函數(shù)時(shí),需要將時(shí)間序列數(shù)據(jù)作為函數(shù)的參數(shù)傳遞進(jìn)去,并指定季節(jié)周期的長(zhǎng)度。例如:
from statsmodels.tsa.seasonal import seasonal_decompose
import pandas as pd
# 創(chuàng)建一個(gè)季節(jié)性時(shí)間序列
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)]})
# 對(duì)時(shí)間序列進(jìn)行季節(jié)性分解
result = seasonal_decompose(data['value'], model='additive', period=7)
# 輸出分解結(jié)果
print(result.trend)
print(result.seasonal)
print(result.resid)
print(result.observed)
上面的代碼中,我們首先創(chuàng)建了一個(gè)季節(jié)性時(shí)間序列,然后使用seasonal_decompose()
函數(shù)對(duì)其進(jìn)行季節(jié)性分解,其中model
參數(shù)指定了分解模型,可以是additive
或multiplicative
,period
參數(shù)指定了季節(jié)周期的長(zhǎng)度,這里我們指定為7,表示一周的周期。最后,我們輸出了分解結(jié)果中的趨勢(shì)、季節(jié)和殘差三個(gè)部分,以及原始數(shù)據(jù)。
4、import matplotlib.pyplot as plt這個(gè)呢?
a:import matplotlib.pyplot as plt
是將matplotlib.pyplot
模塊導(dǎo)入,并將其命名為plt
,這樣我們?cè)谡{(diào)用matplotlib
庫(kù)中的函數(shù)或類時(shí),可以使用plt
作為前綴,比如plt.plot()
。matplotlib
是一個(gè)Python繪圖庫(kù),提供了各種類型的圖表,包括線性圖、散點(diǎn)圖、柱狀圖、餅圖等等,pyplot
是matplotlib
庫(kù)中的一個(gè)子模塊,提供了一些方便的函數(shù)和工具,可以幫助用戶更方便地進(jìn)行圖表繪制和數(shù)據(jù)可視化。例如,可以使用plot()
函數(shù)來(lái)繪制線性圖,使用scatter()
函數(shù)來(lái)繪制散點(diǎn)圖,使用bar()
函數(shù)來(lái)繪制柱狀圖等等。以下是一個(gè)簡(jiǎn)單的例子:
import matplotlib.pyplot as plt
# 創(chuàng)建數(shù)據(jù)
x = [1, 2, 3, 4, 5]
y = [10, 20, 30, 40, 50]
# 繪制線性圖
plt.plot(x, y)
# 添加標(biāo)題和坐標(biāo)軸標(biāo)簽
plt.title("Line Chart")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
# 顯示圖表
plt.show()
上面的代碼中,我們首先創(chuàng)建了一個(gè)包含5個(gè)數(shù)據(jù)點(diǎn)的線性數(shù)據(jù),然后使用plot()
函數(shù)繪制了這些數(shù)據(jù)的線性圖,使用title()
函數(shù)、xlabel()
函數(shù)和ylabel()
函數(shù)添加了標(biāo)題和坐標(biāo)軸標(biāo)簽,最后使用show()
函數(shù)顯示圖表。
5、df = pd.read_csv(data_path,index_col='index'),index_col是什么?
a:index_col
是pandas.read_csv()
函數(shù)中的一個(gè)參數(shù),用于指定將哪一列作為數(shù)據(jù)的索引(行標(biāo)簽)。默認(rèn)情況下,read_csv()
函數(shù)會(huì)自動(dòng)為數(shù)據(jù)生成一個(gè)整數(shù)索引,但是在某些情況下,我們可能需要將某一列作為數(shù)據(jù)的索引,這時(shí)就可以使用index_col
參數(shù)。例如,如果我們有一個(gè)包含日期和數(shù)值的CSV文件,想要將日期作為數(shù)據(jù)的索引,可以使用以下代碼:
import pandas as pd
data_path = 'data.csv'
df = pd.read_csv(data_path, index_col='date')
在上面的代碼中,我們使用read_csv()
函數(shù)讀取了一個(gè)CSV文件,并將其中的date
列作為數(shù)據(jù)的索引。這樣,我們就可以通過(guò)日期來(lái)索引和操作數(shù)據(jù)了。如果不指定index_col
參數(shù),則默認(rèn)使用第一列作為數(shù)據(jù)的索引。
6、索引是用來(lái)干嘛的,為什么要指定?
a:索引是用來(lái)標(biāo)識(shí)和訪問(wèn)數(shù)據(jù)的標(biāo)簽或鍵,它可以幫助我們更方便地對(duì)數(shù)據(jù)進(jìn)行操作和分析。在pandas
庫(kù)中,索引分為行索引和列索引兩種。行索引用于標(biāo)識(shí)和訪問(wèn)數(shù)據(jù)行,列索引用于標(biāo)識(shí)和訪問(wèn)數(shù)據(jù)列。
在pandas
中,數(shù)據(jù)的索引可以由用戶指定,也可以由系統(tǒng)自動(dòng)生成。如果數(shù)據(jù)沒有指定索引,則默認(rèn)使用從0開始的整數(shù)索引。但是,在某些情況下,我們可能需要根據(jù)數(shù)據(jù)的特性或需求來(lái)指定索引,例如,如果數(shù)據(jù)中包含日期或時(shí)間等信息,我們可以將其作為索引,便于按時(shí)間序列進(jìn)行分析和操作;如果數(shù)據(jù)中有某一列唯一標(biāo)識(shí)每個(gè)數(shù)據(jù)項(xiàng),則可以將其作為索引,便于按照該列進(jìn)行數(shù)據(jù)查找和聚合。
指定索引可以讓我們更方便地訪問(wèn)和操作數(shù)據(jù),例如,可以通過(guò)索引來(lái)選擇特定的行或列,可以通過(guò)索引來(lái)對(duì)數(shù)據(jù)進(jìn)行排序、切片、分組和聚合等操作。因此,在讀取數(shù)據(jù)時(shí),根據(jù)數(shù)據(jù)的特性和需求來(lái)指定索引是一個(gè)很好的選擇。
7、rcParams
plt.rcParams['axes.unicode_minus']=False
plt.rcParams['font.sans-serif'] = ['SimHei']:
這兩行代碼是為了設(shè)置matplotlib庫(kù)的顯示參數(shù),使得中文可以正常顯示,并且減少負(fù)號(hào)顯示的問(wèn)題。
8、inplace = 1什么意思?
a:inplace
是pandas
庫(kù)中很多方法的一個(gè)可選參數(shù),用于指示是否將修改應(yīng)用到原DataFrame中。如果inplace=True
,則會(huì)直接在原DataFrame上進(jìn)行修改,并返回None
;如果inplace=False
(默認(rèn)值),則會(huì)返回一個(gè)新的DataFrame,原DataFrame不會(huì)改變。
使用inplace=True
可以提高代碼的效率,避免在內(nèi)存中創(chuàng)建新的對(duì)象,特別是當(dāng)數(shù)據(jù)集很大時(shí)。但是,需要注意的是,這樣會(huì)直接修改原始數(shù)據(jù),可能會(huì)影響到后續(xù)的操作。因此,在使用inplace
參數(shù)時(shí),需要謹(jǐn)慎考慮是否需要在原始數(shù)據(jù)上進(jìn)行修改。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-710402.html
在上面的代碼中,使用了inplace=1
,這相當(dāng)于inplace=True
,表示直接在原DataFrame上進(jìn)行修改。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-710402.html
到了這里,關(guān)于【數(shù)據(jù)分析】針對(duì)家庭用電數(shù)據(jù)進(jìn)行時(shí)序分析(1)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!