python-数据可视化-下载数据-CSV文件格式

数据以两种常见格式存储:CSVJSON

CSV文件格式

comma-separated values

python 复制代码
import csv
filename = 'sitka_weather_07-2018_simple.csv'
with open(filename) as f:
    reader = csv.reader(f)
    header_row = next(reader)
    print(header_row)
# ['USW00025333', 'SITKA AIRPORT, AK US', '2018-01-01', '0.45', '', '48', '38']

	for index, column_header in enumerate(header_row):
		# 打印文件位置和文件头
        print(index, column_header)

0 USW00025333

1 SITKA AIRPORT, AK US

2 2018-01-01

3 0.45

4

5 48

6 38

csv.reader():将前面存储的文件对象作为实参传递给它,创建一个与该文件相关联的阅读器对象

next()返回文件中的下一行

第一次调用该函数,返回第一行,依次增加

enumerate()函数可以将一个可迭代对象转换为一个枚举对象,返回的枚举对象包含每个元素的索引和对应的元素值

python 复制代码
enumerate(iterable, start=0)
  • iterable:必需,表示要枚举的可迭代对象
  • start:可选,表示元素索引的起始值

'STATION', 'NAME', 'DATE', 'PRCP', 'TAVG', 'TMAX', 'TMIN'

STATION 记录数据的气象站的编码

NAME 气象站的名称

TMAX 最高温度 TMIN 最低温度

获取某一列的值

python 复制代码
filename = 'sitka_weather_07-2021_simple.csv'
with open(filename) as f:
    reader = csv.reader(f)
    header_row = next(reader)	# 该文件第一行是"STATION","NAME","DATE","TAVG","TMAX","TMIN",没有数字温度,使用next跳过改行
    
    # 从文件中获取最高温度
    highs = []
    for row in reader:
        high = int(row[5])	# 文件里的数据都是以字符串格式储存的
        highs.append(high)
print(highs)
# [53, 52, 54, 55, 55, 54, 53, 53, 53, 51, 51, 54, 52, 51, 50, 54, 56, 57, 55, 56, 54, 55, 56, 54, 52, 49, 57, 52, 52, 60, 48]

绘制温度图表

python 复制代码
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
font = FontProperties(fname='msyh.ttc', size=14) # 假设选择msyh字体,大小为14

# 根据最高温度绘制图形。
plt.style.use('seaborn')
fig, ax = plt.subplots()
ax.plot(highs, c='red')

# 设置图形的格式。
ax.set_title("2018年7月每日最高温度", fontsize=24,fontproperties=font)
ax.set_xlabel('', fontsize=16)
ax.set_ylabel("温度 (F)", fontsize=16,fontproperties=font)
ax.tick_params(axis='both', which='major', labelsize=16)
plt.show()

labelsizexy轴上的数字的大小

模块datetime 将字符串转为日期

python 复制代码
from datetime import datetime
first_date = datetime.strptime('2018-07-01', '%Y-%m-%d')
print(first_date)	# 2018-07-01 00:00:00
# first_date	# datetime.datetime(2018, 7, 1, 0, 0)
实参 含义
%A 星期几,如Monday
%B 月份名,如January
%m 用数表示的月份(01~12)
%d 用数表示的月份中的一天(01~31)
%Y 四位的年份,如2019
%y 两位的年份,如19
%H 24小时制的小时数(00~23)
%I 12小时制的小时数(01~12)
%p am或pm
%M 分钟数(00~59)
%S 秒数(00~61)

在图表中添加日期

python 复制代码
import csv
from datetime import datetime
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
font = FontProperties(fname='msyh.ttc', size=14)

filename = 'sitka_weather_07-2021_simple.csv'
with open(filename) as f:
    reader = csv.reader(f)
    header_row = next(reader)
    
    # 从文件中获取日期和最高温度
    dates, highs = [], []
    for row in reader:
        current_date = datetime.strptime(row[2], '%Y-%m-%d')
        high = int(row[5])
        dates.append(current_date)
        highs.append(high)

# 根据最高温度绘制图形
plt.style.use('seaborn')
fig, ax = plt.subplots()
ax.plot(dates, highs, c='red')

# 设置图形的格式
ax.set_title("2021年7月每日最高温度", fontsize=24,fontproperties=font)
ax.set_xlabel('', fontsize=16)
fig.autofmt_xdate()
ax.set_ylabel("温度 (F)", fontsize=16,fontproperties=font)
ax.tick_params(axis='both', which='major', labelsize=16)
# which可以接收三个值: 'major', 'minor', 'both'

plt.show()

fig.autofmt_xdate():绘制倾斜的日期标签

ax.tick_params()是用来设置坐标轴刻度线和刻度标签的属性的函数

axis='both'表示要设置x轴和y轴的刻度线和刻度标签的属性

which='major'表示要设置的是主刻度线和刻度标签的属性,即显示刻度值的那些刻度线和刻度标签

涵盖更长的时间

python 复制代码
filename = 'sitka_weather_2021_simple.csv'
with open(filename) as f:
    reader = csv.reader(f)
    header_row = next(reader)
    
    # 从文件中获取日期和最高温度和最低温度
    dates, highs, lows = [], [], []
    for row in reader:
        current_date = datetime.strptime(row[2], '%Y-%m-%d')
        high = int(row[4])
        low = int(row[5])
        dates.append(current_date)
        highs.append(high)
        lows.append(low)

# 根据最高温度和最低温度绘制图形
plt.style.use('seaborn')
fig, ax = plt.subplots()
ax.plot(dates, highs, c='red')
ax.plot(dates, lows, c='blue')

# 设置图形的格式
ax.set_title("2021年每日最高温度", fontsize=24,fontproperties=font)
ax.set_xlabel('', fontsize=16)
fig.autofmt_xdate()
ax.set_ylabel("温度 (F)", fontsize=16,fontproperties=font)
ax.tick_params(axis='both', which='major', labelsize=16)

plt.show()

给图表区域着色

方法fill_between()

python 复制代码
# 根据最高温度绘制图形
plt.style.use('seaborn')
fig, ax = plt.subplots()
ax.plot(dates, highs, c='red', alpha=1)
ax.plot(dates, lows, c='blue', alpha=0.5)
ax.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1)

错误检查

数据缺失

try-except-else 代码块

continue跳过数据

remove() 或del 删除数据

python 复制代码
filename = 'death_valley_2021_simple.csv'
with open(filename) as f:
    reader = csv.reader(f)
    header_row = next(reader)
    
    # 从文件中获取日期和最高温度
    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(figsize=(15, 9))
ax.plot(dates, highs, c='red', alpha=1)
ax.plot(dates, lows, c='blue', alpha=0.5)
ax.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1)

# 设置图形的格式
title = "2018年每日最高温度和最低温度\n美国加利福尼亚州死亡谷"
ax.set_title(title, fontsize=20,fontproperties=font)
ax.set_xlabel('', fontsize=16)
fig.autofmt_xdate()
ax.set_ylabel("温度 (F)", fontsize=16,fontproperties=font)
ax.tick_params(axis='both', which='major', labelsize=16)

plt.show()

调整图表大小

figsize 单位为英寸

python 复制代码
fig, ax = plt.subplots(figsize=(8, 5))
相关推荐
sonnet-10299 小时前
堆排序算法
java·c语言·开发语言·数据结构·python·算法·排序算法
熊猫_豆豆9 小时前
Python月球、地球、太阳三天体联动一个月的月相图
python·农历·月亮
海苔苔苔苔9 小时前
数据分析技术面试常问知识点整理
数据挖掘·数据分析
小陈工9 小时前
Python开源代码管理避坑实战:从Git高级操作到Docker环境配置
开发语言·git·python·安全·docker·开源·源代码管理
小陈工9 小时前
2026年3月27日技术资讯洞察:量子计算密码突破、硬件安全新范式与三月网络安全警报
服务器·python·安全·web安全·单元测试·集成测试·量子计算
国际学术会议-杨老师9 小时前
2026年信息科学与数据分析国际会议 (ICISDA 2026)
数据分析·信息科学
倾一生爱恋换一世纯真9 小时前
使用python代码生成ragas的测试文档testset.json
人工智能·python·ragas·rag测试
繁星星繁9 小时前
Python基础语法(一)
c++·笔记·python
未来转换9 小时前
Python 框架 Django 从入门到精通
数据库·python·django
weixin_4577600010 小时前
KenLM简介及安装使用
python·kenlm