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

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

CSV文件格式

comma-separated values

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()函数可以将一个可迭代对象转换为一个枚举对象,返回的枚举对象包含每个元素的索引和对应的元素值

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

[‘STATION’, ‘NAME’, ‘DATE’, ‘PRCP’, ‘TAVG’, ‘TMAX’, ‘TMIN’]

STATION 记录数据的气象站的编码
NAME 气象站的名称
TMAX 最高温度 TMIN 最低温度

获取某一列的值

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]

绘制温度图表

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轴上的数字的大小
python-数据可视化-下载数据-CSV文件格式_第1张图片

模块datetime 将字符串转为日期

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)

在图表中添加日期

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-数据可视化-下载数据-CSV文件格式_第2张图片

涵盖更长的时间

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()

python-数据可视化-下载数据-CSV文件格式_第3张图片

给图表区域着色

方法fill_between()

# 根据最高温度绘制图形
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)

python-数据可视化-下载数据-CSV文件格式_第4张图片

错误检查

数据缺失
try-except-else 代码块
continue跳过数据
remove() 或del 删除数据

python-数据可视化-下载数据-CSV文件格式_第5张图片

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()

python-数据可视化-下载数据-CSV文件格式_第6张图片

调整图表大小

figsize 单位为英寸

fig, ax = plt.subplots(figsize=(8, 5))

你可能感兴趣的:(python,数据分析)