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()#显示图像

截屏2023-12-27 下午8.17.55.png

这段代码是用于读取并分析一个名为 '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,使用这个可以直接显示散点图

截屏2023-12-27 下午8.18.17.png

这段代码的功能是读取名为 '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 文件,以便进行展示和分享。

相关文章
|
12天前
|
JSON 前端开发 搜索推荐
关于商品详情 API 接口 JSON 格式返回数据解析的示例
本文介绍商品详情API接口返回的JSON数据解析。最外层为`product`对象,包含商品基本信息(如id、name、price)、分类信息(category)、图片(images)、属性(attributes)、用户评价(reviews)、库存(stock)和卖家信息(seller)。每个字段详细描述了商品的不同方面,帮助开发者准确提取和展示数据。具体结构和字段含义需结合实际业务需求和API文档理解。
|
5天前
|
JSON 缓存 API
解析电商商品详情API接口系列,json数据示例参考
电商商品详情API接口是电商平台的重要组成部分,提供了商品的详细信息,支持用户进行商品浏览和购买决策。通过合理的API设计和优化,可以提升系统性能和用户体验。希望本文的解析和示例能够为开发者提供参考,帮助构建高效、可靠的电商系统。
24 12
|
9天前
|
数据采集 Web App开发 数据可视化
Python用代理IP获取抖音电商达人主播数据
在当今数字化时代,电商直播成为重要的销售模式,抖音电商汇聚了众多达人主播。了解这些主播的数据对于品牌和商家至关重要。然而,直接从平台获取数据并非易事。本文介绍如何使用Python和代理IP高效抓取抖音电商达人主播的关键数据,包括主播昵称、ID、直播间链接、观看人数、点赞数和商品列表等。通过环境准备、代码实战及数据处理与可视化,最终实现定时任务自动化抓取,为企业决策提供有力支持。
|
1月前
|
JSON 人工智能 算法
探索大型语言模型LLM推理全阶段的JSON格式输出限制方法
本篇文章详细讨论了如何确保大型语言模型(LLMs)输出结构化的JSON格式,这对于提高数据处理的自动化程度和系统的互操作性至关重要。
|
29天前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
24天前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
|
3月前
|
JSON 数据格式 Python
Python编程:利用JSON模块编程验证用户
Python编程:利用JSON模块编程验证用户
34 1
|
3月前
|
存储 JSON 数据格式
Python 输入输出与文件处理: io、pickle、json、csv、os.path 模块详解
Python 输入输出与文件处理: io、pickle、json、csv、os.path 模块详解
51 0
|
5月前
|
存储 JSON JavaScript
python序列化: json & pickle & shelve 模块
python序列化: json & pickle & shelve 模块
|
8月前
|
JSON 数据格式 Python
Python标准库中包含了json模块,可以帮助你轻松处理JSON数据
【4月更文挑战第30天】Python的json模块简化了JSON数据与Python对象之间的转换。使用`json.dumps()`可将字典转为JSON字符串,如`{"name": "John", "age": 30, "city": "New York"}`,而`json.loads()`则能将JSON字符串转回字典。通过`json.load()`从文件读取JSON数据,`json.dump()`则用于将数据写入文件。
60 1