PYTHON数据处理:CSV和JSON

#CSV和JSON格式的数据在python上的处理

CSV和JSON数据类型都是都是常见的两种在python中的数据分析类型,这里我有两个入门项目详细讲解这两种数据的处理。

处理一个CSV形式的地方的天气的数据,然后创建一个表格;

分析JSON形式的地震数据,然后用plotly绘制一幅散点图

项目一

javascript 复制代码
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的话你会看到每行都行都有哪些数据,来分析出我们要的最高温和最低温在哪个位置

    # 当分析出来后,我们就可以从文件获取数据了,我们要的数据的在4、5行
    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 绘制了最高温度和最低温度的折线图,以便更直观地展示数据的变化趋势。

项目二

javascript 复制代码
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 文件,以便进行展示和分享。

相关推荐
databook3 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar4 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户8356290780514 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_4 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机11 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机12 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机12 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机12 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i12 小时前
drf初步梳理
python·django
每日AI新事件12 小时前
python的异步函数
python