20数学建模校赛C题数据清理思路

2023-11-16

也就是这个看起来平平无奇的题目,我们觉得C题还能做
在这里插入图片描述
首先导入文件,导入库

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pandas import DataFrame,Series
import seaborn as sns
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
data=pd.read_csv(r"D:/markdown/数学建模/附件3.3:2020校赛C题/2020校赛C题/附件/list1.csv",encoding="gbk")

第一步,显然是删nan值了(excel里是NULL,也不知道为啥导到pandas里就变成了NAN,不慌,影响不大),顺便看看还剩多少数据

data=data.dropna(axis=0,how='any')
data.shape

然后删完了nan,下一步干啥,这是一个问题

我们思考了好久这个问题

先看看数据分布吧

data.describe()

沉默。沉默是今晚的康桥……

我们分析的核心是室内温度,呐看看室内温度

print(data["ROOM_TEMPERATURE"].skew())
sns.distplot(data["ROOM_TEMPERATURE"].dropna())

在这里插入图片描述
那么问题来了
我们知道自然条件下数据趋近正态分布,有点偏度无所谓,你这么大一片0杵在这有点突兀啊!

那么为什么

于是按时间排序,室内温度给画个图

 data_ROOM_TEMPERATURE = data.groupby('SYS_READ_TIME').mean()['ROOM_TEMPERATURE']

也没看出啥玩意来

然后注意到了这个在这里插入图片描述
呐分户吧,按地址

def func_address(x):
    data1=data[(data.address_2nd==x)]
    #按时间排序
    data1_ROOM_TEMPERATURE = data1.groupby('SYS_READ_TIME').mean()['ROOM_TEMPERATURE']
    # 按照索引排序
#     data1_ROOM_TEMPERATURE.sort_index(inplace=True)
    # 画出趋势图
    # 图太小了,设置下size
    plt.figure(figsize=(20,5))
    data1_ROOM_TEMPERATURE.plot(title=x)
    
address = [15311251,15310819,15310974,15310804,15311234,15311289,15311072,15311061,15310846,15311065,15311477,15311342,15311245,15310966,
15311191,15311361,15310827,15311411,15311196,15311471,15311235,15311403,15311233,15310808,15311383,15311473,15310839,15310815,15310845,
15311082]
for i in range(len(address)):
    x = address[i]
    func_address(x)
    i+=1

于是发现,有的户大片时间室温为0

为什么呢?室温自然条件下一定是波动的,你连续几天几个月一整个冬天都为0怎么
这显然是不正常的啊!

只能是供暖公司没去获得他的室温

这玩意应该跟设置室温有关系吧
画个图整到一块儿瞅瞅

def func_all(x):
    data1=data[(data.address_2nd==x)]
    #按时间排序
    data1_ROOM_TEMPERATURE = data1.groupby('SYS_READ_TIME').mean()['ROOM_TEMPERATURE']
    data1_ROOM_SET_TEMPERATURE = data1.groupby('SYS_READ_TIME').mean()['ROOM_SET_TEMPERATURE']
    # 按照索引排序
#     data1_ROOM_TEMPERATURE.sort_index(inplace=True)
    # 画出趋势图
    # 图太小了,设置下size
    plt.figure(figsize=(20,5))
    data1_ROOM_TEMPERATURE.plot(title=x,color = 'red',label='ROOM_TEMPERATURE')
    data1_ROOM_SET_TEMPERATURE.plot(title=x,color = 'blue',label='ROOM_SET_TEMPERATURE')
    
address = [15311251,15310819,15310974,15310804,15311234,15311289,15311072,15311061,15310846,15311065,15311477,15311342,15311245,15310966,
15311191,15311361,15310827,15311411,15311196,15311471,15311235,15311403,15311233,15310808,15311383,15311473,15310839,15310815,15310845,
15311082]
for i in range(len(address)):
    x = address[i]
    func_all(x)
    i+=1

于是惊奇的发现,室温为0跟设置室温为0的时间段是重合的

于是我们认为,设置室温为0就是这一家人不想用暖气了,于是公司就没必要去获得他们家室温了

emmmmmmmmm很完美

那就删了吧,顺便看看还剩多少数据

data= data.drop(data[(data['ROOM_TEMPERATURE']==0) & (data['ROOM_SET_TEMPERATURE']==0)].index)
data.shape

现在室温就差不多是正态分布了(看图说话)
于是看看均值以外三倍标准差的数据

mean, std = data["ROOM_TEMPERATURE"].mean(), data["ROOM_TEMPERATURE"].std()
lower, upper = mean - 3 * std, mean + 3 * std

print("均值:", mean)
print("标准差:", std)
print("下限:", lower)
print("上限:", upper)
data["ROOM_TEMPERATURE"][(data["ROOM_TEMPERATURE"] < lower) | (data["ROOM_TEMPERATURE"] > upper)]

画个箱线图

sns.boxplot(data=data["ROOM_TEMPERATURE"])

于是我们认为这部分数据是异常

(实际操作中我们是在删完其他影响后最后箱线图去除了这部分数据)

删了吧,顺便看看还剩多少数据

data = data.drop(data[(data["ROOM_TEMPERATURE"] < lower) | (data["ROOM_TEMPERATURE"] > upper)].index)
data.shape

接下来我们瞅瞅,看看这些影响室温的因素

阀门状态,进出水温度,进出水温差,设置室温,流速,功率

其中,我们认为阀门状态,进出水温差,设置室温,流速,这些影响可以体现在功率上(经过队友严格和不严格的公式推导及联系实际的猜测)

于是我们按以上分析温度的方法分析了功率的异常

首先看看功率的分布

print(data["ROOM_TEMPERATURE"].skew())
sns.distplot(data["ROOM_TEMPERATURE"].dropna())

在这里插入图片描述
又是一大片0杵在这啊!

那么为什么
根据之前分析温度的经验,我们分户画功率图,跟温度画在一起

def func_all(x):
    data1=data[(data.address_2nd==x)]
    #按时间排序
    data1_ROOM_TEMPERATURE = data1.groupby('SYS_READ_TIME').mean()['ROOM_TEMPERATURE']
    data1_ROOM_SET_TEMPERATURE = data1.groupby('SYS_READ_TIME').mean()['ROOM_SET_TEMPERATURE']
    data1_POWER = data1.groupby('SYS_READ_TIME').mean()['POWER']
    # 按照索引排序
#     data1_ROOM_TEMPERATURE.sort_index(inplace=True)
    # 画出趋势图
    # 图太小了,设置下size
    plt.figure(figsize=(20,5))
    data1_ROOM_TEMPERATURE.plot(title=x,color = 'red',label='ROOM_TEMPERATURE')
    data1_ROOM_SET_TEMPERATURE.plot(title=x,color = 'blue',label='ROOM_SET_TEMPERATURE')
    data1_POWER.plot(title=x,color = 'green',label='POWER')
    
address = [15311251,15310819,15310974,15310804,15311234,15311289,15311072,15311061,15310846,15311065,15311477,15311342,15311245,15310966,
15311191,15311361,15310827,15311411,15311196,15311471,15311235,15311403,15311233,15310808,15311383,15311473,15310839,15310815,15310845,
15311082]
for i in range(len(address)):
    x = address[i]
    func_all(x)
    i+=1

于是看到,除了个别家里功率一直为0或一大段时间为0,所有户家里功率为0都是集中在前面17年十一月,和18年四月

于是我们认为,这段时间公司还没开始供暖,或供暖已经结束了

删了吧,顺便看看还剩多少数据

data= data.drop(data[(data['POWER']<=0)].index)
data.shape

emmmmmmm右偏有点严重,没事删完异常就好了(或许也可以对数转换,既然题目说删了就行那就不费劲了黑黑黑)

(实际操作中这一部分也是删完其他最后搞的)

还是先看看均值以外三倍标准差的数据

mean, std = data["POWER"].mean(), data["POWER"].std()
lower, upper = mean - 3 * std, mean + 3 * std

print("均值:", mean)
print("标准差:", std)
print("下限:", lower)
print("上限:", upper)
data["POWER"][(data["POWER"] < lower) | (data["POWER"] > upper)]

箱线图

sns.boxplot(data=data["POWER"])

删数据,顺便看看还剩多少

data = data.drop(data[(data["POWER"] < lower) | (data["POWER"] > upper)].index)

emmmmm呐还有什么问题嘛

在这里插入图片描述
温差怎么能小于0呢?

于是队长查资料去了,回来说进水温度小于出水温度,这是异常

好说,删了吧,顺便看看还剩多少数据

data= data.drop(data[(data['dtemp']<=0)].index)
data.shape

队长:等等,怎么还有阀门全关流速不为0的?

于是队长excel一番骚操作,发现这一波一共50个数据,集中在一户人家里的两天时间

队长说,可能是热表坏了,那两天去修热表了吧

在这里插入图片描述
好说,删删删!

data= data.drop(data[(data['ROOM_TEMPERATURE']==0) & (data['ROOM_SET_TEMPERATURE']==0)].index)
data.shape

至此,附件一的数据完美就处理完了

嗨皮!!!

当然,把整理完的附件二左连接过来之后又发现了一部分室外温度的缺失,也就删了

完美!!!
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

20数学建模校赛C题数据清理思路 的相关文章

随机推荐

  • 关于error: possibly undefined macro: AC_PROG_LIBTOOL问题解决

    通过baidu或者google 大多数解决方案都是通过安装libtool 不同的平台有不同的安装方式 比如ubuntu安装 sudo apt get install libtool 大多数情况下都能解决问题 但是通过安装libtool也不能
  • 关于list理论最大大小Integer.MAX_VALUE - 8

    今天看源码对list最大大小为什么是Integer MAX VALUE 8产生了兴趣 目前得出以下结论 首先数组头需要存储数组大小信息以及其它的一些信息 假设数组达到了最大则数组大小需要8个字节来存储 而当留下8个数组大小时则可保证至少有8
  • CMAKE之add_dependencies使用

    CMAKE之add dependencies使用 问题引入 问题解决 总结 问题引入 在项目中通常会遇见这样的情况 例如一个项目中有 main libhello a libworld a 当项目过小的时候 编译顺序是 a 然后是main 但
  • 也谈免拆机破解中兴B860av1.1(解决不能安装软件/解决遥控)

    20170221更新 部分用户 自己恢复出厂测试过 操作后仍然无法直接在当贝市场安装应用了 在第8条 最后两步 先改为中国通用市场 后面再改为未知局方 如果开机想优先启动当贝桌面 就把导出的0 ini里AutoStartIptv 1改为0
  • Ubuntu修改环境变量后命令不可用的解决办法

    方法一 导入临时变量 但是重启虚拟后会失效 export PATH PATH usr local sbin usr local bin sbin bin usr sbin usr bin 方法二 根本方法 普通用户 root用户都适用 解决
  • word打印

    package com stonewomb business outerContract contractApply utils import java io IOException import java text SimpleDateF
  • 【LeetCode】9月 每日一题

    LeetCode 9月 每日一题 9 1 题目 1475 商品折扣后的最终价格 思路 模拟即可 代码 function finalPrices prices number number let len number prices lengt
  • 设计模式(一)

    1 适配器模式 1 概述 适配器中有一个适配器包装类Adapter 其包装的对象为适配者Adaptee 适配器作用就是将客户端请求转化为调用适配者中的接口 当调用适配器中的方法时 适配器内部会调用适配者类的方法 这个调用对客户端是透明 实现
  • Python爬虫技术及其原理探

    导言 随着互联网的发展 大量的数据被存储在网络上 而我们需要从中获取有用的信息 Python作为一种功能强大且易于学习的编程语言 被广泛用于网络爬虫的开发 本文将详细介绍Python爬虫所需的技术及其原理 并提供相关的代码案例 1 HTTP
  • Tomcat日志配置远程rsyslog采集

    Tomcat日志数据的采集有很多种方式 使用tail是最简单的方法 但必须保证catalina out日志中的每行都是以日期格式开头的 除了tail方法外 还可以通过对rsyslog配置实现 本博客主要通过配置rsyslog进行Tomcat
  • 经验分享:解决 错误0x80071AC3:无法完成操作,请运行chkdsk并重试

    在Windows系统电脑下 使用移动硬盘或者U盘复制拷贝文件的时候 如果遇到一个这样的提示 一个意外错误使您无法移动该文件夹 如果您继续收到此错误 可以使用错误代码来搜索有关此问题的帮助 错误0x80071AC3 无法完成操作 因为卷有问题
  • Unity shader系列:内置Shader代码查看

    官网下载 https unity3d com cn get unity download archive 对自己使用的unity版本进行下图操作
  • centos7 将home的空间扩容到根目录

    Centos7把home目录下多余的空间转移到 根目录下 通过df h发现 根目录只有35G 而home目录可用的 居然有19G 我现在想分出8G给根目录 把你需要挂载的机器的逻辑卷记住 上面的图 左边是逻辑卷 右边是虚拟磁盘 dev ma
  • 图像处理-State of the Art

    https github com BlinkDL BlinkDL github io 目前常见图像任务的 State of the Art 方法 从 Super resolution 到 Captioning CV 二维图像任务 Image
  • 【Java】【NIO】【04】通过SocketChannel读写Socket

    package easing common java demo import lombok SneakyThrows import java net InetSocketAddress import java nio ByteBuffer
  • 全局变量 multiple definition of 问题解决方法

    解决方法 1 给每一个头文件加上条件编译 注 此方法不是解决上述问题的方法 只是解决multiple definition of的一个方法 当多个文件包含同一个头文件时 而头文件中没有加上条件编译 就会独立的解释 然后生成每个文件生成独立的
  • 江西武功山旅游攻略(周末两日游)

    一 往返路线 1 出发路线 周五晚上上海出发坐火车 到江西萍乡 11 5小时 卧铺550左右 打车到江西武功山景区 120 150元左右 人均30元 1小时10分左右到达 或者 到达萍乡北之后 出站后步行200米到长途汽车站 乘旅游巴士直达
  • RestHighLevelClient初始化http参数的含义

    high level rest client 初始化 一般初始化时需要设置验证信息 http相关参数 Bean public RestHighLevelClient createClient return new RestHighLevel
  • etcd学习和实战:3、go使用etcd实现服务发现和管理

    etcd学习和实战 3 go使用etcd实现服务发现和管理 文章目录 etcd学习和实战 3 go使用etcd实现服务发现和管理 1 前言 2 代码及编译运行问题总结 2 1 服务注册 2 2 服务发现 2 3 问题 2 4 运行结果 1
  • 20数学建模校赛C题数据清理思路

    也就是这个看起来平平无奇的题目 我们觉得C题还能做 首先导入文件 导入库 import pandas as pd import numpy as np import matplotlib pyplot as plt from pandas