期末实训作业很多学校都有这个

数据参数

列名    说明
Date    日期
Time    时间
Globalactivepower    该家庭所消耗的总有功功率(千瓦)
Globalreactivepower    该家庭消耗的总无功功率(千瓦)
Voltage    向家庭输送电力的电压(伏特)
Global_intensity    输送到家庭的平均电流强度(安培)
Submetering1    厨房消耗的有功功率(千瓦)
Submetering2    洗衣房所消耗的有功功率(千瓦)
Submetering3    电热水器和空调所消耗的有功功率(千瓦)

 

导入各种库:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from pyecharts.charts import Pie
from pyecharts.charts import *
import pyecharts.options as opts
from statsmodels.tsa.seasonal import seasonal_decompose
plt.rcParams['font.sans-serif'] = ['SimHei']  #设置中文字体为黑体
plt.rcParams['axes.unicode_minus'] = False #正常显示负号
pd.set_option('display.float_format',lambda x : '%.2f' % x)#pandas禁用科学计数法
import matplotlib.cm as cm

导入数据:

这个自己导入

#导入数据
data=pd.read_csv('./household_power_consumption.csv')
data.head(10)

bb0f4b4b0fd54c3db44fde16474e9314.png数据预处理

#数据处理
#1.重命名
#2.时间格式转换
#3.缺失值处理
#4.异常值分析
data.rename(columns={
    'Date':'日期',
    'Time':'时间',
    'Global_active_power':'有功功率',
    'Global_reactive_power':'无功功率',
    'Voltage':'电压',
    'Global_intensity':'电流',
    'Sub_metering_1': '厨房的有功功率',
    'Sub_metering_2': '洗衣房的有功功率',
    'Sub_metering_3': '电热水器和空调的有功功率',
},inplace=1)
data.head()

 8d6c6a5a1a9843afa332fda94289b3b7.png

时间格式转换
 

#时间格式转换
data['日期']=data['日期'].str.replace('/07','/2007')
data['时间']=data['时间'].astype(str)
data['日期']=data['日期'].astype(str)
data['index'] = pd.to_datetime(data['日期'] +' '+ data['时间'],format='%d/%m/%Y %H:%M:%S',errors='coerce')
data=data.drop(['日期','时间'],axis=1)
data.head()

f5a2144dab7e4699886d53ba5e8392f9.png 检查缺失值:

# 首先检查是否有缺失值
print(data.isnull().sum())

 fbf992b79f1841258a3bd01a2c928e90.png

 缺失值处理,我选择的是删除

#缺失值处理

# 删除包含缺失值的行
data = data.dropna()

# 再次检查是否还有缺失值
print(data.isnull().sum())

7a74217dc8ba4354ba906efefaa33729.png

异常值处理:

#异常值处理
import seaborn as sns
# 绘制各个功率相关特征的箱型图
features_to_check = ['有功功率', '无功功率', '电压', '电流', '厨房的有功功率', '洗衣房的有功功率', '电热水器和空调的有功功率']

plt.figure(figsize=(12, 8))
for i, feature in enumerate(features_to_check, 1):
    plt.subplot(2, 4, i)
    sns.boxplot(data[feature])
    plt.title(f'{feature} Boxplot')

plt.tight_layout()
plt.show()

8555492f3dee4a82bc0c419497ea4919.png 

异常值转换成空值 

# 异常值处理
#把异常值转换成空值
data = data.replace('?',np.NAN)
data['厨房的有功功率'] = data['厨房的有功功率'].astype('float64')
data['洗衣房的有功功率'] = data['洗衣房的有功功率'].astype('float64')
data['总功率']=data['厨房的有功功率']+data['洗衣房的有功功率']+data['电热水器和空调的有功功率']

 ae6abe7d3c9344129b7d39ef8dfccf2c.png

数据可视化 

# 用电量可视化
sum_data = data[['厨房的有功功率', '洗衣房的有功功率', '电热水器和空调的有功功率']].sum()

# 自定义颜色
custom_colors = ['#99ff99', '#66b3ff', '#ff9999']  # 红色、蓝色、绿色

plt.figure(figsize=(8, 8))  # 设置图形大小
plt.pie(sum_data, 
        labels=['厨房的有功功率', '洗衣房的有功功率', '电热水器和空调的有功功率'], 
        colors=custom_colors,  # 使用自定义颜色
        autopct='%3.1f%%',  # 显示百分比
        startangle=140,  # 起始角度
        explode=[0.05]*len(sum_data),  # 轻微分离各部分
        shadow=True,  # 添加阴影效果
        wedgeprops={'edgecolor': 'black', 'linewidth': 1})  # 设置边缘颜色和线宽

plt.title('不同家电的有功功率占比', fontsize=16)  # 设置标题
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0.)  # 调整图例位置

plt.tight_layout()  # 自动调整子图参数,使之整齐
plt.show()

 9e60aab54374442990ffff5cdcce253b.png

 折线图表示:

# 创建一个包含四个子图的图形
fig = plt.figure(figsize=(12, 8))
gs = gridspec.GridSpec(2, 2, width_ratios=[1, 1], height_ratios=[1, 1])

#分别表示
ax1 = plt.subplot(gs[0, 0])
ax1.plot(mon_sum.index, mon_sum['厨房的有功功率'], label='厨房的有功功率')
ax1.set_title('厨房的有功功率')
ax1.legend()

ax2 = plt.subplot(gs[0, 1])
ax2.plot(mon_sum.index, mon_sum['洗衣房的有功功率'], label='洗衣房的有功功率')
ax2.set_title('洗衣房的有功功率')
ax2.legend()

ax3 = plt.subplot(gs[1, 0])
ax3.plot(mon_sum.index, mon_sum['电热水器和空调的有功功率'], label='电热水器和空调的有功功率')
ax3.set_title('电热水器和空调的有功功率')
ax3.legend()

# 第四幅子图中绘制所有设备的有功功率
ax4 = plt.subplot(gs[1, 1])
lines = ax4.plot(mon_sum.index, mon_sum['厨房的有功功率'], 'b-',
                 mon_sum.index, mon_sum['洗衣房的有功功率'], 'g-',
                 mon_sum.index, mon_sum['电热水器和空调的有功功率'], 'r-')
ax4.set_title('所有设备的有功功率')
ax4.legend(lines, ['厨房的有功功率', '洗衣房的有功功率', '电热水器和空调的有功功率'])

# 调整子图布局
plt.tight_layout()

# 显示图形
plt.show()

 3127ad959eed49e1bd9cfc53d3b0f8a0.png

后面还可在自己加一点!!!! 

 

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐