数据清洗——气温历史数据

news2024/9/25 17:21:17
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams["font.sans-serif"] = ["HarmonyOS Sans SC"]
%matplotlib inline

读取数据

data = pd.read_excel("气温历史数据.xlsx")
data.head()
城市日期当日最高温当日最低温当日平均温
0北京2023-07-0238.024.031.0
1北京2023-07-0139.024.032.0
2北京2023-06-3039.025.032.0
3北京2023-06-2936.022.029.0
4北京2023-06-2827.020.023.0

简单统计分析

data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 27900 entries, 0 to 27899
Data columns (total 5 columns):
 #   Column  Non-Null Count  Dtype         
---  ------  --------------  -----         
 0   城市      27900 non-null  object        
 1   日期      27900 non-null  datetime64[ns]
 2   当日最高温   10032 non-null  float64       
 3   当日最低温   10032 non-null  float64       
 4   当日平均温   27900 non-null  float64       
dtypes: datetime64[ns](1), float64(3), object(1)
memory usage: 1.1+ MB
data.groupby(by=["城市"]).apply(lambda e: e.sort_values("日期"))
城市日期当日最高温当日最低温当日平均温
城市
上饶24609上饶2019-01-01NaNNaN2.5
24608上饶2019-01-02NaNNaN2.5
24607上饶2019-01-03NaNNaN3.8
24606上饶2019-01-04NaNNaN6.4
24605上饶2019-01-05NaNNaN6.3
.....................
青岛6170青岛2023-06-2828.023.025.0
6169青岛2023-06-2926.022.024.0
6168青岛2023-06-3028.021.024.0
6167青岛2023-07-0127.022.023.0
6166青岛2023-07-0225.023.024.0

27900 rows × 5 columns

# 是否存在缺失日期
date_range = pd.date_range(start=data["日期"].min(),end=data["日期"].max(),freq='D')
data["日期"].isin(date_range).value_counts()
True    27900
Name: 日期, dtype: int64
# 画图
n_city = data["城市"].nunique()
fig, ax = plt.subplots(2,n_city, figsize=(49,4))
for i,city in enumerate(data["城市"].unique()):
    city_data = data[data["城市"]==city].sort_values("日期")
    ax[0][i].boxplot([city_data["当日最低温"],city_data["当日平均温"],city_data["当日最高温"]],
                medianprops={'color': 'red', 'linewidth': '1.5'},
                showmeans=True,
                meanline=True,
                flierprops={"marker": "o", "markerfacecolor": "red", "markersize": 10},
                labels=["dMinT","dMeanT","dMaxT"]
               )
    date_interval = city_data["日期"].max()-city_data["日期"].min()
    date_interval = str(date_interval).split(" ")[0]
    ax[0][i].set_title(str(city)+" "+date_interval+"days")

在这里插入图片描述

plt.figure(figsize=(12,5))
plt.scatter(data["日期"],data["当日最低温"])

在这里插入图片描述

plt.figure(figsize=(12,5))
plt.scatter(data["日期"],data["当日平均温"])

在这里插入图片描述

plt.figure(figsize=(12,5))
plt.scatter(data["日期"],data["当日最高温"])

在这里插入图片描述

data[data["城市"]=="长沙"].sort_values("日期").to_excel("长沙.xlsx")
data[data["城市"]=="南京"].sort_values("日期").to_excel("南京.xlsx")
# 检查是否存在空值
data.isnull().sum()
城市           0
日期           0
当日最高温    17868
当日最低温    17868
当日平均温        0
dtype: int64

异常值处理

q3 = data["当日平均温"].quantile(0.75)
q2 = data["当日平均温"].median()
q1 = data["当日最高温"].quantile(0.25)
iqr = q3 - q1
ub = q3 + 1.5 * iqr
lb = q1 - 1.5 * iqr
data.loc[ data["当日平均温"] > ub, ["当日平均温"] ] = q2
data.loc[ data["当日平均温"] < lb, ["当日平均温"] ] = lb
plt.figure(figsize=(12,5))
plt.scatter(data["日期"],data["当日平均温"])

在这里插入图片描述

for i,city in enumerate(data["城市"].unique()):
    city_data = data[data["城市"]==city].sort_values("日期")
    ax[1][i].boxplot([city_data["当日最低温"],city_data["当日平均温"],city_data["当日最高温"]],
                medianprops={'color': 'red', 'linewidth': '1.5'},
                showmeans=True,
                meanline=True,
                flierprops={"marker": "o", "markerfacecolor": "red", "markersize": 10},
                labels=["dMinT","dMeanT","dMaxT"]
               )
    date_interval = city_data["日期"].max()-city_data["日期"].min()
    date_interval = str(date_interval).split(" ")[0]
    ax[1][i].set_title(str(city)+" "+date_interval+"days")
fig.tight_layout(pad=0.4, w_pad=0, h_pad=0)
fig.savefig("城市.svg", bbox_inches="tight")
fig

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/921796.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【golang】for语句和switch语句

使用携带range子句的for语句时需要注意哪些细节&#xff1f; numbers1 : []int{1, 2, 3, 4, 5, 6} for i : range numbers1 {if i 3 {numbers1[i] | i} } fmt.Println(numbers1)这段代码执行后会打印出什么内容&#xff1f; 答案&#xff1a;[1 2 3 7 5 6] 当for语句被执行…

【面试题系列】(一)

Redis有哪些数据结构&#xff1f;其底层是怎么实现的&#xff1f; Redis 系列&#xff08;一&#xff09;&#xff1a;深入了解 Redis 数据类型和底层数据结构 字符串&#xff08;String&#xff09;&#xff1a; 用于存储文本或二进制数据。可以执行字符串的基本操作&#xf…

只需五分钟,了解kafka的环境搭建

〇、前言 在Kafka系列的上一篇文章中&#xff0c;我们介绍了Kafka的体系结构&#xff0c;那么本篇文章呢&#xff0c;我们就着手来把Kafka的运行环境搭建起来。 此处 &#xff0c;我们采用线上环境普遍使用的ZooKeeper作为管理存储和管理kafka集群元数据&#xff0c;或者辅助…

更高效稳定 | 基于ACM32 MCU的编程直流电源应用方案

随着电子设备的多样化发展&#xff0c;面对不同的应用场景&#xff0c;需要采用特定的供电电源。因此&#xff0c;在电子产品的开发测试过程中&#xff0c;必不可少使用编程直流电源来提供测试电压&#xff0c;协助完成初步的开发测试过程。 编程直流电源概述 编程直流电源结构…

收单外包服务机构(第三方支付公司服务商)是什么?

收单外包服务机构&#xff08;第三方支付公司服务商&#xff09;是什么&#xff1f; 伴随着电子商务的迅速发展&#xff0c;越来越多的企业开始认识到收单外包服务机构的重要性。 收单外包是一个重要的服务机构&#xff0c;可以帮助企业解决许多与支付相关的问题。 收单外包服务…

行式存储与列式存储

1.概述 数据处理大致可分为两大类&#xff0c;联机事务处理OLTP(on-line transaction processing) 和联机分析处理OLAP(on-line analytical processing)。 OLTP是传统关系型数据库的主要应用&#xff0c;用来执行一些基本的、日常的事务处理&#xff0c;比如数据库记录的增、删…

漏洞复现 || Franklin Fueling Systems tsaupload.cgi 任意文件读取

漏洞描述 Franklin Electric Franklin Fueling Systems是美国Franklin Electric公司的一个加油系统&#xff0c;Franklin Fueling Systems tsaupload.cgi 存在任意文件读取漏洞&#xff0c;攻击者通过漏洞可以获取服务器敏感文件。 免责声明 技术文章仅供参考&#xff0c;任…

SpringMVC中Controller层获取前端请求参数的几种方式

SpringMVC中Controller层获取前端请求参数的几种方式 1、SpringMVC自动绑定2、使用RequestParam 注解进行接收3、RequestBody注解&#xff08;1&#xff09; 使用实体来接收JSON&#xff08;2&#xff09;使用 Map 集合接收JSON&#xff08;3&#xff09; 使用 List集合接收JSO…

C语言暑假刷题冲刺篇——day4

目录 一、选择题 二、编程题 &#x1f388;个人主页&#xff1a;库库的里昂 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;C语言每日一练 ✨其他专栏&#xff1a;代码小游戏C语言初阶&#x1f91d;希望作者的文章能对你…

iOS逆向初探:揭开iOS App的神秘面纱

逆向是一种分析和还原应用程序的过程&#xff0c;它能够揭示应用程序内部的工作原理和代码结构。接下来我们将全面介绍iOS上的逆向&#xff0c;包括其概念、常用工具和具体实例。 1. 什么是iOS逆向&#xff1f; iOS平台逆向是将应用程序的二进制代码&#xff08;通常是经过编…

无涯教程-Python - Numbers(数字)

数字数据类型存储数值&#xff0c;它们是不可变的数据类型&#xff0c;这意味着更改数字数据类型的值将导致新分配的对象。 数字对象是在您为其分配值时创建的。例如- var11 var210 您也可以使用 del 语句删除对数字对象的引用。 del语句的语法是- del var1[,var2[,var3[..…

基于XML实现SpringIoC配置

目录 SpringIoc创建与使用的大致步骤 一.基于xml配置SpringIoc 二.基于xml配置DI 三.创建IoC容器并获取组件 SpringIoc创建与使用的大致步骤 SpringIoC的创建与使用过程分为3步 1.编写配置信息&#xff08;编写XML&#xff0c;注解、Java类&#xff09; 2.创建IoC容器&…

易基因:WGBS等揭示丹参甲基化表征及DNA甲基化在丹参酮生物合成中的调控机制|科研速递

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 丹参&#xff08;Salvia miltiorrhiza&#xff0c;S. miltiorrhiza&#xff09;是一种具有重要经济价值和药用价值的模式药用植物&#xff0c;丹参的根会合成一组称为丹参酮&#xff08;…

SpringBoot案例-配置文件-参数配置化

前言 目前我们已经完成了部门管理和员工管理功能接口的实现&#xff0c;阿里云OSS工具类中&#xff0c;我们会设置4个参数&#xff0c;分别是云服务域名、云服务ID和密码、文件存储的Bucket、就会存在以下问题&#xff1a;参数配置分散以及参数发生变化&#xff0c;就需要对应…

姜启源数学模型第五版第五章火箭发射升空

姜启源数学模型第五版第五章例题内容复现 数学建模背景1.学习内容火箭发射升空理论知识 2.例题3.问题分析不考虑空气阻力的模型考虑空气阻力的模型 4.代码内容复现不考虑空气阻力考虑空气阻力模型 数学建模背景 首先先简单的介绍数学建模是一个怎么样的内容 数学建模是一种将数…

各种文件类型

1.配置文件 json app.json 是当前⼩程序的全局配置&#xff0c;包括了⼩程序的所有⻚⾯路径、界⾯表现、⽹络超时时间、底 部 tab 等。 普通快速启动项⽬ ⾥边的 app.json 字段的含义 1. pages 字段⸺⽤于描述当前⼩程序所有⻚⾯路径&#xff0c;这是为了让微信客⼾端知道…

NIO原理浅析(一)

IO简介 摘抄了下维基百科对IO的定义&#xff0c;Input/Output&#xff0c;输入和输出&#xff0c;通常指数据在存储器或者其他周边设备之间的输出和输入&#xff0c;输入是系统接收到信号或者数据&#xff0c;输出则是从系统发送的信号或数据。 Java IO 读写原理 Java中文件…

shell邮件发送脚本

先上整体代码 text.sh #!/bin/bash# 设置收件人邮箱 to"123456qq.com"# 设置发件人邮箱 from"21331qq.com"# 设置邮件主题 subject"Test Email"# 设置邮件内容 body"This is a test email."# 发送邮件 echo "${body}" | m…

运动耳机啥样的好用、最适合运动用的耳机推荐

在进行运动时&#xff0c;倾听音乐实际上是一种放松大脑、放松身体的小技巧。毕竟运动是一个耗费体力最多的活动&#xff0c;整个过程也往往令人感到乏味。如果有音乐作伴&#xff0c;你的运动就会变得更加轻松愉快。那么&#xff0c;哪种耳机适合运动呢&#xff1f;我正好对此…

气传导蓝牙耳机哪款好?好用的气传导耳机爆款推荐

​普通入耳式耳机戴久了容易诱发局部炎症。为了防止这些问题&#xff0c;不入耳耳机才是更好选择&#xff0c;不会滋生细菌、不会闷耳&#xff0c;那么&#xff0c;市面上都有哪些好用的气传导耳机呢&#xff1f;下面我为大伙带来最值得入手的气传导耳机&#xff0c;一起来看看…