PYTHON数据处理:CSV和JSON

news2024/11/19 9:22:20

#CSV和JSON格式的数据在python上的处理
CSV和JSON数据类型都是都是常见的两种在python中的数据分析类型,这里我有两个入门项目详细讲解这两种数据的处理。
处理一个CSV形式的地方的天气的数据,然后创建一个表格;
分析JSON形式的地震数据,然后用plotly绘制一幅散点图

项目一

import csv#csv这个模块是用于分析这种格式分析的模块
from datetime import datetime#处理事件的模块

from matplotlib import pyplot as plt#我们要画折线图,需要用到这个库的画图功能

filename = 'death_valley_2018_simple.csv'#文件的地址可以根据需求设置
with open(filename) as f:#打开文件,把它赋给f
    reader = csv.reader(f)#传递给reader
    header_row = next(reader)
    #读取文件相关的文件头,这里如果用print的话你会看到每行都行都有哪些数据,来分析出我们要的最高温和最低温在哪个位置

    # 当分析出来后,我们就可以从文件获取数据了,我们要的数据的在45行
    dates, highs, lows = [], [], []#创建列表收录数据、最高、最低值
    for row in reader:
        current_date = datetime.strptime(row[2], '%Y-%m-%d')
        try:
            high = int(row[4])
            low = int(row[5])
        except ValueError:
            print(f"Missing data for {current_date}")
        else:
            dates.append(current_date)
            highs.append(high)
            lows.append(low)
            #把数据写入列表中

# 绘制图形
plt.style.use('seaborn')
fig, ax = plt.subplots()
ax.plot(dates, highs, c='red', alpha=0.5)
ax.plot(dates, lows, c='blue', alpha=0.5)
plt.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1)

# 设置一些表头、横轴、纵轴的名称等信息
title = "Daily high and low temperatures - 2018\nDeath Valley, CA"
plt.title(title, fontsize=20)
plt.xlabel('', fontsize=16)
fig.autofmt_xdate()
plt.ylabel("Temperature (F)", fontsize=16)
plt.tick_params(axis='both', which='major', labelsize=16)

plt.show()#显示图像

在这里插入图片描述
这段代码是用于读取并分析一个名为 ‘death_valley_2018_simple.csv’ 的文件,并绘制该文件中的数据所代表的最高温度和最低温度的折线图。

首先,代码导入了必要的模块。csv 模块用于处理以逗号分隔的文件(CSV格式),datetime 模块用于处理日期和时间,matplotlib.pyplot 模块用于绘制图表。

然后,代码指定了要读取的文件名为 ‘death_valley_2018_simple.csv’。接下来使用 with open(filename) as f 打开文件,并将其赋值给变量 f。这样做可以确保在代码块结束后自动关闭文件。

接着,代码通过 csv.reader(f) 创建了一个 CSV 读取器对象 reader,用于逐行读取文件中的数据。通过调用 next(reader),我们可以获取文件的头部信息,即第一行的数据,以便进行进一步分析。

在获取了文件头部信息之后,代码通过循环遍历 reader 对象,逐行读取文件中的数据。在每一行中,使用 datetime.strptime(row[2], ‘%Y-%m-%d’) 将日期字符串转换为 datetime 对象,方便后续的处理。然后,通过 int(row[4]) 和 int(row[5]) 将最高温度和最低温度转换为整数类型,并将它们分别存储到 highs 和 lows 列表中。如果转换过程中出现错误(比如数据缺失或格式不正确),则会打印出相应的错误信息。

循环结束后,代码得到了日期、最高温度和最低温度的列表,即 dates、highs 和 lows。接下来,使用 plt.style.use(‘seaborn’) 设定绘图的样式,然后通过 plt.subplots() 创建一个包含单个子图的图表对象 fig 和子图对象 ax。

使用 ax.plot(dates, highs, c=‘red’, alpha=0.5) 和 ax.plot(dates, lows, c=‘blue’, alpha=0.5) 分别绘制了最高温度和最低温度的折线图。在 plt.fill_between(dates, highs, lows, facecolor=‘blue’, alpha=0.1) 中,使用蓝色填充了最高温度和最低温度之间的区域,以增强可视化效果。

接下来,代码设置了图表的标题、横轴和纵轴的标签,并通过 fig.autofmt_xdate() 自动调整横轴日期的显示方式,以免重叠。最后,通过 plt.show() 显示绘制的图表。

总结来说,这段代码从文件中读取并解析数据,然后使用 matplotlib 绘制了最高温度和最低温度的折线图,以便更直观地展示数据的变化趋势。

项目二

import json#这是在处理json数据时要用的模块
import plotly.express as px#这个plotly的高级接口需要用来绘制图像
import pandas as pd#我们这里对图像进行优化会用到这个数据分析工具


filename = 'eq_data_30_day_m1.json'
with open(filename) as f:
    all_eq_data = json.load(f)
    #把文件的数据写入all_eq_data中

   #根据对数据的分析展开,我们会获得一系列的重要的信息,这里我就直接给出了,数据与键‘features'有关,所以把它储存下来
all_eq_dicts = all_eq_data['features']
mags, titles, lons, lats = [], [], [], []#创建空列表
for eq_dict in all_eq_dicts:
    mag = eq_dict['properties']['mag']
    title = eq_dict['properties']['title']
    lon = eq_dict['geometry']['coordinates'][0]
    lat = eq_dict['geometry']['coordinates'][1]
    mags.append(mag)
    titles.append(title)
    lons.append(lon)
    lats.append(lat)
    #提取震级、位置标题、经纬度

data = pd.DataFrame(
    data=zip(lons, lats, titles, mags), columns=['经度', '纬度', '位置', '震级']
)
#因为我们这里要使用到pandas数据分析工具,我们这里对数据进行封装
fig = px.scatter(
    data,
    x='经度',
    y='纬度',
    range_x=[-200, 200],
    range_y=[-90, 90],
    #我们假定了经纬度的绘制范围
    width=800,
    height=800,
    title='全球地震散点图',
    size='震级',
    size_max=10,
    color='震级',#这里定制标记颜色,震级可以按照不同颜色显示,数值越大颜色越黄,从蓝到红到黄渐变
    hover_name='位置',
)
fig.write_html('global_earthquakes.html')#将视图保存为html文件,可以在浏览器打开
fig.show()#如果用的是jupyter,使用这个可以直接显示散点图

在这里插入图片描述

这段代码的功能是读取名为 ‘eq_data_30_day_m1.json’ 的 JSON 文件,并将其中地震数据的经度、纬度、位置和震级等信息提取出来,然后使用 Plotly 库绘制全球地震散点图,并将图表保存为 HTML 文件。

首先,代码导入了必要的模块。json 模块用于处理 JSON 数据,plotly.express 用于绘制图表,pandas 用于数据分析。

接着,代码打开名为 ‘eq_data_30_day_m1.json’ 的文件,并将其中的数据加载到变量 all_eq_data 中。

随后,代码从 all_eq_data 中提取出与键 ‘features’ 相关的地震数据,并将其存储在列表 all_eq_dicts 中。

接下来,代码创建了空列表 mags、titles、lons 和 lats,用于分别存储地震的震级、位置标题、经度和纬度信息。然后通过循环遍历 all_eq_dicts,逐个提取出每个地震事件的震级、位置标题、经度和纬度,并将它们分别添加到对应的列表中。

在获取了所有地震事件的相关信息之后,代码使用 pd.DataFrame 创建了一个 DataFrame 对象 data,并将提取到的地震数据进行了封装。

然后,代码使用 px.scatter 创建了一个散点图对象 fig,并指定了散点图的横轴、纵轴、范围、宽度、高度、标题、点大小、颜色和悬停文本等属性。接着,通过 fig.write_html(‘global_earthquakes.html’) 将绘制的散点图保存为 HTML 文件,以便在浏览器中打开查看。

最后,代码调用 fig.show() 来显示绘制的散点图。

总而言之,这段代码通过处理 JSON 文件中的地震数据,使用 Plotly 库绘制了全球地震散点图,并将图表保存为 HTML 文件,以便进行展示和分享。

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

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

相关文章

扩展mybatis-plus,保留逻辑删、逻辑查的前提下,扩展硬删除、硬查询

引入相关依赖 <!-- 提示&#xff1a;1. common-mybatis-plus:2100.8.8 中只有4个类文件&#xff0c;是对硬删除、硬查询的扩展支持&#xff0c;如果你不想引入依赖的话&#xff0c;你可以把这四个文件复制到自己的项目中即可2. common-mybatis-plus:2100.8.8 对应mybatis-p…

CEEMDAN +组合预测模型(CNN-LSTM + ARIMA)

目录 往期精彩内容&#xff1a; 前言 1 风速数据CEEMDAN分解与可视化 1.1 导入数据 1.2 CEEMDAN分解 2 数据集制作与预处理 3 基于CEEMADN的 CNN-LSTM 模型预测 3.1 定义CEEMDAN-CNN-LSTM预测模型 3.2 定义模型参数 3.3 模型训练&#xff0c;训练结果 4 基于ARIMA的…

数据结构与算法:基于比较的排序算法:选择、冒泡、插入、归并的动图演示和java代码,排序时间复杂度、空间复杂度、稳定性总结表格

选择排序 选择排序是先在0~N-1上选择一个最小值排到最前面&#xff0c;然后再在1到N-1上选一个次小的&#xff0c;以此类推。 public static selectionSort(int[] arr){if(arrnull||arr.length<2){return;} //每次从i n-1 选一个最小的放前面for(int i0;i<arr.length-…

深入Apache Commons Config:管理和使用配置文件

第1章&#xff1a;引言 咱们都知道&#xff0c;在软件开发中&#xff0c;管理配置文件是一件既重要又让人头疼的事。想象一下&#xff0c;咱们的应用程序有一堆设置需要调整&#xff0c;比如数据库的连接信息、应用的端口号&#xff0c;或者是一些功能的开关。如果这些信息硬编…

Spring高手之路-SpringBean的生命周期

目录 SpringBean的生命周期 整体介绍 详细介绍 1.实例化Bean 2.设置属性值 3.检查Aware 4.调用BeanPostProcessor的前置处理方法 5.调用InitializingBean的afterPropertiesSet方法 6.调用自定义init-method方法 7.调用BeanPostProcessor的后置处理方法 8.注册Destru…

【深入之Java进阶篇】fastjson的反序列化漏洞(详解总结)

✔️ fastjson的反序列化漏 1️⃣典型解析2️⃣拓展知识仓1️⃣AutoType2️⃣AutoType 有何错?3️⃣ 绕过checkAutotype&#xff0c;黑客与fastjson的博弈4️⃣autoType不开启也能被攻击?5️⃣利用异常进行攻击6️⃣AutoType 安全模式? 1️⃣典型解析 当我们使用fastjson进行…

ueditor富文本编辑器中图片上传地址配置以及抓取远程图片地址的配置

一&#xff1a;图片上传保存地址配置 打开文件ueditor.php,找到imagePathFormat进行修改即可 一&#xff1a;远程抓取图片配置 打开文件ueditor.config.js,找到catchRemoteImageEnable&#xff0c;取消注释即可

Unity之ShaderGraph如何实现瓶装水效果

前言 有一个场景在做效果时,有一个水瓶放到桌子上的设定,但是模型只做了个水瓶,里面是空的,所以我就想办法,如何做出来瓶中装睡的效果,最好是能跟随瓶子有液体流动的效果。 如下图所示: 水面实现 水面效果 液体颜色设置 因为液体有边缘颜色和内里面颜色,所以要分开…

strlen和sizeof的初步理解

大家好我是Beilef&#xff0c;一个美好的下我接触到编程并且逐渐喜欢。我虽然不是科班出身但是我会更加努力地去学&#xff0c;有啥不对的地方请斧正 文章目录 目录 文章目录 前言 想必大家对sizeof肯定很了解&#xff0c;那对strlen又了解多少。其实这个问题应该让不少人困扰。…

内网穿透的应用-Ubuntu安装XRDP远程桌面结合内网穿透实现远程桌面Ubuntu

文章目录 一、 同个局域网内远程桌面Ubuntu二、使用Windows远程桌面连接三、公网环境系统远程桌面Ubuntu1. 注册cpolar账号并安装2. 创建隧道&#xff0c;映射3389端口3. Windows远程桌面Ubuntu 四、 配置固定公网地址远程Ubuntu1. 保留固定TCP地址2. 配置固定的TCP地址3. 使用…

python 通过opencv及face_recognition识别人脸

效果&#xff1a; 使用Python的cv2库和face_recognition库来进行人脸检测和比对的 0是代表一样 认为是同一人。 代码&#xff1a; pip install opencv-python pip install face_recognition# 导入cv2库&#xff0c;用于图像处理 import cv2 # 导入face_recognition库&#…

【MySQL】数据库之事务

目录 一、什么是事务 二、事务的ACID是什么&#xff1f; 三、有哪些典型的不一致性问题&#xff1f; 第一种&#xff1a;脏读 第二种&#xff1a;不可重复读 第三种&#xff1a;幻读 第四种&#xff1a;丢失更新 四、隔离级别有哪些&#xff1f; &#xff08;1&#xf…

Sublime Text 4 中文汉化教程(Version: Build 4169)

Sublime Text 4汉化 1 知识小课堂1.1 sublim简介1.2 其他编辑器 2 安装过程2.1 安装Install Package Control2.2 Install Package2.3 安装工具包2.4 常用的插件2.5 安装中文包 1 知识小课堂 1.1 sublim简介 Sublime是一款代码编辑器&#xff0c;致力于为开发人员提供快速、高…

IDEA 控制台中文出现乱码问题解决

一、问题概述 请看下图 二、问题分析 IDEA控制台输出乱码一般会有三种来源&#xff1a; ① IDEA本身编码错误 ② Tomcat日志输出编码错误 ③ 项目本身原因。 终极原因&#xff1a;IDEA编码和Tomcat编码不一致&#xff0c;统一设置为UTF-8即可。 三、解决思路 修改…

双向循环链表实现C语言关键字中英翻译机 ฅ( ̳• · • ̳ฅ)

目录 1.双向循环链表的声明与定义&#xff1a; 2. 创建链表并对节点中的数据赋初值 3. 插入节点并链接 4.中英翻译 5. 小游戏的实现 6.菜单的实现 7. 释放内存 8.在主函数中用刚才定义的函数实现各种代码 输入样例&#xff1a; 实现方法&#xff1a;双向循环链表来实…

同城配送小程序解决方案

前言 同城配送小程序解决方案。 一、用户用车 用户打开小程序后发货地址自动定位到用户当前位置&#xff0c;用户可通过地址后的>号在地图上选择新的发货地址和卸货地址&#xff0c;小程序会自动规划出行线路&#xff0c;计算距离和运费价格。 用户仅用简单操作后就可以…

【网络协议】远程登录安全连接协议SSH(Secure Shell)

文章目录 什么是SSH协议&#xff1f;SSH为何是安全的&#xff1f;SSH由哪些组件构成&#xff1f;SSH可以帮助实现的功能SSH的工作原理SSH的历史版本常用的SSH工具有哪些SSH配置案例参考Windows 安装SSHUbuntu系统SSH配置Cisco Switch SSH配置华为Switch SSH配置 客户端启用SSH连…

uni-app 命令行创建

1. 首先创建项目&#xff0c;命令如下: npx degit dcloudio/uni-preset-vue#vite-ts uni-app-demo如果出现报错&#xff0c;如下图. 大概率就是没有目录C:\Users\Administrator\AppData\Roaming\npm 解决办法&#xff1a; 创建目录 C:\Users\Administrator\AppData\Roaming\n…

cpp_05_类_string类

1 类的定义 1.1 构造函数 定义&#xff1a;函数名必须与类名相同&#xff0c;且没有返回值类型 &#xff0c;连void也没有。 构造函数调用时间&#xff1a; 在定义对象的同时自动被调用&#xff0c;而且仅被调用一次&#xff1a; 1&#xff09;对象定义语句 2&#xff09;n…

20231226在Firefly的AIO-3399J开发板上在Android11下调通后摄像头ov13850

20231226在Firefly的AIO-3399J开发板上在Android11下调通后摄像头ov13850 2023/12/26 8:22 开发板&#xff1a;Firefly的AIO-3399J【RK3399】 SDK&#xff1a;rk3399-android-11-r20211216.tar.xz【Android11】 Android11.0.tar.bz2.aa【ToyBrick】 Android11.0.tar.bz2.ab And…