目录

  • 一、前提准备
  • 二、代码解释
    • 2.1分析CSV文件头
    • 2.2提取并读取数据
    • 2.3绘制气温图表
    • 2.4在图表中添加日期(datetime模块)
      • 2.4.1书上源代码
      • 2.4.2完善代码
    • 2.5覆盖更广的时间
      • 2.5.1书上源代码
      • 2.5.2完善代码
    • 2.6再绘制一个数据系列--添加最低气温数据
      • 2.6.1添加最低气温数据
      • 2.6.2给图表区域着色
    • 2.7错误检查---异常处理

一、前提准备

建立一个文件夹,如图所示,里面包含三个csv文件,我在百度网盘里面分享出来了,可以点击下载

百度网盘:数据文件
链接:点击此处
提取码:cin1

二、代码解释

2.1分析CSV文件头

header_row.py

# coding = utf-8import csv"""分析CSV文件头"""filename = 'sitka_weather_07-2014.csv'# 打开这个文件,将文件对象存储在f中
with open(filename) as f:# 创建一个与该文件相关联的阅读器reader = csv.reader(f)# 返回文件的下一行,前面的代码中,我们只调用了next()一次,因此得到的是文件第一行header_row = next(reader)# 调用enumerate获取每个元素的索引及其值for index, colum_header in enumerate(header_row):print(index, colum_header)

运行结果


注意:
AKDT=阿拉斯加时间(Alaska Daylight Time)

2.2提取并读取数据

max_temperature.py

# coding = utf-8import csv"""提取并读取数据:读取每天的最高气温"""filename = 'sitka_weather_07-2014.csv'# 打开这个文件,将文件对象存储在f中
with open(filename) as f:# 创建一个与该文件相关联的阅读器reader = csv.reader(f)# 返回文件的下一行,前面的代码中,我们只调用了next()一次,因此得到的是文件第一行header_row = next(reader)# 创建一个为max_temperature的空列表max_temperature = []# 遍历文件中余下的各行for row in reader:#每次执行该循环时,我们都将索引1(第二列)的数据附加到max_temperature的末尾max = int(row[1])max_temperature.append(max)print(max_temperature)

运行结果

2.3绘制气温图表

temperature_chart.py

# coding = utf-8import csv
from matplotlib import pyplot as plt"""提取并读取数据:读取每天的最高气温"""filename = 'sitka_weather_07-2014.csv'# 打开这个文件,将文件对象存储在f中
with open(filename) as f:# 创建一个与该文件相关联的阅读器reader = csv.reader(f)# 返回文件的下一行,前面的代码中,我们只调用了next()一次,因此得到的是文件第一行header_row = next(reader)# 创建一个为max_temperature的空列表max_temperature = []# 遍历文件中余下的各行for row in reader:# 每次执行该循环时,我们都将索引1(第二列)的数据附加到max_temperature的末尾max = int(row[1])max_temperature.append(max)"""根据数据绘制图形"""# dpi:每英寸的点数 figsize:宽高fig = plt.figure(dpi=100, figsize=(10, 6))# 将最高气温传给plotplt.plot(max_temperature, c='blue')# 设置图形的格式plt.title("Daily max temperature,july 2014", fontsize=24)plt.xlabel('', fontsize=16)plt.ylabel('Temperature(F)', fontsize=16)plt.tick_params(axis='both', which='major', labelsize=16)plt.show()

运行结果

2.4在图表中添加日期(datetime模块)

模块datetime中设置日期和时间格式的参数(常用):点击此处

2.4.1书上源代码

chart_addtime.py

# coding = utf-8import csv
from matplotlib import pyplot as plt
from datetime import datetime"""提取并读取数据:读取每天的最高气温"""filename = 'sitka_weather_07-2014.csv'# 打开这个文件,将文件对象存储在f中
with open(filename) as f:# 创建一个与该文件相关联的阅读器reader = csv.reader(f)# 返回文件的下一行,前面的代码中,我们只调用了next()一次,因此得到的是文件第一行header_row = next(reader)# 创建两个为dates和max_temperature的空列表,用来存储从文件中提取的日期和最高气温dates, max_temperature = [], []# 遍历文件中余下的各行for row in reader:current_date = datetime.strptime(row[0], "%Y-%m-%d")dates.append(current_date)# 每次执行该循环时,我们都将索引1(第二列)的数据附加到max_temperature的末尾max = int(row[1])max_temperature.append(max)"""根据数据绘制图形"""# dpi:每英寸的点数 figsize:宽高fig = plt.figure(dpi=100, figsize=(10, 6))# 将日期和最高气温传给plotplt.plot(dates, max_temperature, c='blue')# 设置图形的格式plt.title("Daily max temperature,july 2014", fontsize=24)plt.xlabel('', fontsize=16)#使用autofmt_xdate来绘制倾斜的日期标签,以免彼此重叠fig.autofmt_xdate()plt.ylabel('Temperature(F)', fontsize=16)plt.tick_params(axis='both', which='major', labelsize=16)plt.show()

运行结果

注意上面是书上的代码运行之后的原图

2.4.2完善代码

我花了快一天的时间在网上查资料,咋改这东西才能跟书上的图片一模一样,运行书上的代码,我真的醉了我去。以下是更改过后的代码:

# coding = utf-8import csv
from matplotlib import pyplot as plt
from datetime import datetime
from matplotlib import dates as mdates"""提取并读取数据:获取日期和最高气温"""filename = 'sitka_weather_07-2014.csv'# 打开这个文件,将文件对象存储在f中
with open(filename) as f:# 创建一个与该文件相关联的阅读器reader = csv.reader(f)# 返回文件的下一行,前面的代码中,我们只调用了next()一次,因此得到的是文件第一行header_row = next(reader)# 创建两个为dates和max_temperature的空列表,用来存储从文件中提取的日期和最高气温dates, max_temperature = [], []# 遍历文件中余下的各行for row in reader:current_date = datetime.strptime(row[0], "%Y-%m-%d")dates.append(current_date)# 每次执行该循环时,我们都将索引1(第二列)的数据附加到max_temperature的末尾max = int(row[1])max_temperature.append(max)"""根据数据绘制图形"""# dpi:每英寸的点数 figsize:宽高fig = plt.figure(dpi=100, figsize=(10, 6))# 将日期和最高气温传给plotplt.plot(dates, max_temperature, c='red')# 设置图形的格式plt.title("Daily max temperature,July 2014", fontsize=24)# 设置横坐标日期的上下限plt.xlim([datetime(2014, 7, 1), datetime(2014, 7, 31)])  # 日期上下限plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%b %d %Y'))  # 日期格式,%B为月份名,%b为月份名缩写plt.gca().xaxis.set_major_locator(mdates.DayLocator(interval=3))  # 日期间隔plt.xlabel('', fontsize=16)# 使用autofmt_xdate来绘制倾斜的日期标签,以免彼此重叠fig.autofmt_xdate()# 温度上下限和间隔plt.yticks(range(54, 74, 2))plt.ylabel('Temperature(F)', fontsize=16)# pyplot模块中的tick_params()方法可以修改坐标刻度,刻度标签和网格线的外观plt.tick_params(axis='both', which='major', direction='in', labelsize=16)plt.show()

运行结果

2.5覆盖更广的时间

2.5.1书上源代码

这里只需要将表名filename改一下就行了,当然也可以更改一下标题,我这里还改了颜色为red
complete_chart.py

# coding = utf-8import csv
from matplotlib import pyplot as plt
from datetime import datetime"""提取并读取数据:获取日期和最高气温"""filename = 'sitka_weather_2014.csv'# 打开这个文件,将文件对象存储在f中
with open(filename) as f:# 创建一个与该文件相关联的阅读器reader = csv.reader(f)# 返回文件的下一行,前面的代码中,我们只调用了next()一次,因此得到的是文件第一行header_row = next(reader)# 创建两个为dates和max_temperature的空列表,用来存储从文件中提取的日期和最高气温dates, max_temperature = [], []# 遍历文件中余下的各行for row in reader:current_date = datetime.strptime(row[0], "%Y-%m-%d")dates.append(current_date)# 每次执行该循环时,我们都将索引1(第二列)的数据附加到max_temperature的末尾max = int(row[1])max_temperature.append(max)"""根据数据绘制图形"""# dpi:每英寸的点数 figsize:宽高fig = plt.figure(dpi=100, figsize=(10, 6))# 将日期和最高气温传给plotplt.plot(dates, max_temperature, c='red')# 设置图形的格式plt.title("Daily max temperature,--2014", fontsize=24)plt.xlabel('', fontsize=16)#使用autofmt_xdate来绘制倾斜的日期标签,以免彼此重叠fig.autofmt_xdate()plt.ylabel('Temperature(F)', fontsize=16)plt.tick_params(axis='both', which='major', labelsize=16)plt.show()

运行结果

2.5.2完善代码

# coding = utf-8import csv
from matplotlib import pyplot as plt
from datetime import datetime
from matplotlib import dates as mdates"""提取并读取数据:获取日期和最高气温"""filename = 'sitka_weather_2014.csv'# 打开这个文件,将文件对象存储在f中
with open(filename) as f:# 创建一个与该文件相关联的阅读器reader = csv.reader(f)# 返回文件的下一行,前面的代码中,我们只调用了next()一次,因此得到的是文件第一行header_row = next(reader)# 创建两个为dates和max_temperature的空列表,用来存储从文件中提取的日期和最高气温dates, max_temperature = [], []# 遍历文件中余下的各行for row in reader:current_date = datetime.strptime(row[0], "%Y-%m-%d")dates.append(current_date)# 每次执行该循环时,我们都将索引1(第二列)的数据附加到max_temperature的末尾max = int(row[1])max_temperature.append(max)"""根据数据绘制图形"""# dpi:每英寸的点数 figsize:宽高fig = plt.figure(dpi=100, figsize=(10, 6))# 将日期和最高气温传给plotplt.plot(dates, max_temperature, c='red')# 设置图形的格式plt.title("Daily max temperature,2014", fontsize=24)# 设置横坐标日期的上下限plt.xlim([datetime(2014, 1, 1), datetime(2014, 12, 22)])  # 日期上下限plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))  # 日期格式,%B为月份名,%b为月份名缩写plt.xlabel('', fontsize=16)# 使用autofmt_xdate来绘制倾斜的日期标签,以免彼此重叠fig.autofmt_xdate()# 温度上下限和间隔plt.yticks(range(20, 80, 5))plt.ylabel('Temperature(F)', fontsize=16)# pyplot模块中的tick_params()方法可以修改坐标刻度,刻度标签和网格线的外观plt.tick_params(axis='both', which='major', direction='in', labelsize=16)plt.show()

运行结果

2.6再绘制一个数据系列–添加最低气温数据

2.6.1添加最低气温数据

high_low_chart.py

# coding = utf-8import csv
from matplotlib import pyplot as plt
from datetime import datetime
from matplotlib import dates as mdates"""提取并读取数据:获取日期和最高气温和最低气温"""filename = 'sitka_weather_2014.csv'# 打开这个文件,将文件对象存储在f中
with open(filename) as f:# 创建一个与该文件相关联的阅读器reader = csv.reader(f)# 返回文件的下一行,前面的代码中,我们只调用了next()一次,因此得到的是文件第一行header_row = next(reader)# 创建两个为dates和max_temperature的空列表,用来存储从文件中提取的日期和最高气温dates, max_temperature, min_temperature = [], [], []# 遍历文件中余下的各行for row in reader:current_date = datetime.strptime(row[0], "%Y-%m-%d")dates.append(current_date)# 每次执行该循环时,我们都将索引1(第二列)的数据附加到max_temperature的末尾max = int(row[1])max_temperature.append(max)min = int(row[3])min_temperature.append(min)"""根据数据绘制图形"""# dpi:每英寸的点数 figsize:宽高fig = plt.figure(dpi=100, figsize=(10, 6))# 将日期和最高气温传给plotplt.plot(dates, max_temperature, c='red')plt.plot(dates, min_temperature, c='green')# 设置图形的格式plt.title("Daily max temperature and min temperature,2014", fontsize=24)# 设置横坐标日期的上下限plt.xlim([datetime(2014, 1, 1), datetime(2014, 12, 22)])  # 日期上下限plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))  # 日期格式,%B为月份名,%b为月份名缩写plt.xlabel('', fontsize=16)# 使用autofmt_xdate来绘制倾斜的日期标签,以免彼此重叠fig.autofmt_xdate()# 温度上下限和间隔plt.yticks(range(20, 80, 5))plt.ylabel('Temperature(F)', fontsize=16)# pyplot模块中的tick_params()方法可以修改坐标刻度,刻度标签和网格线的外观plt.tick_params(axis='both', which='major', direction='in', labelsize=16)plt.show()

运行结果

2.6.2给图表区域着色

high_low_chart.py

# coding = utf-8import csv
from matplotlib import pyplot as plt
from datetime import datetime
from matplotlib import dates as mdates"""提取并读取数据:获取日期和最高气温和最低气温"""filename = 'sitka_weather_2014.csv'# 打开这个文件,将文件对象存储在f中
with open(filename) as f:# 创建一个与该文件相关联的阅读器reader = csv.reader(f)# 返回文件的下一行,前面的代码中,我们只调用了next()一次,因此得到的是文件第一行header_row = next(reader)# 创建两个为dates和max_temperature的空列表,用来存储从文件中提取的日期和最高气温dates, max_temperature, min_temperature = [], [], []# 遍历文件中余下的各行for row in reader:current_date = datetime.strptime(row[0], "%Y-%m-%d")dates.append(current_date)# 每次执行该循环时,我们都将索引1(第二列)的数据附加到max_temperature的末尾max = int(row[1])max_temperature.append(max)min = int(row[3])min_temperature.append(min)"""根据数据绘制图形"""# dpi:每英寸的点数 figsize:宽高fig = plt.figure(dpi=100, figsize=(10, 6))# 将日期和最高气温传给plotplt.plot(dates, max_temperature, c='red', alpha=0.5)plt.plot(dates, min_temperature, c='green', alpha=0.5)#中间传红色哈哈哈哈plt.fill_between(dates, max_temperature, min_temperature, facecolor='pink', alpha=0.8)# 设置图形的格式plt.title("Daily max temperature and min temperature,2014", fontsize=24)# 设置横坐标日期的上下限plt.xlim([datetime(2014, 1, 1), datetime(2014, 12, 22)])  # 日期上下限plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))  # 日期格式,%B为月份名,%b为月份名缩写plt.xlabel('', fontsize=16)# 使用autofmt_xdate来绘制倾斜的日期标签,以免彼此重叠fig.autofmt_xdate()# 温度上下限和间隔plt.yticks(range(20, 80, 5))plt.ylabel('Temperature(F)', fontsize=16)# pyplot模块中的tick_params()方法可以修改坐标刻度,刻度标签和网格线的外观plt.tick_params(axis='both', which='major', direction='in', labelsize=16)plt.show()

运行结果

2.7错误检查—异常处理

将high_low_chart.py的第十行filename改为death_valley_2014.csv,如
运行的时候就会报错:

Traceback (most recent call last):File "F:/Z/Python/project/project2/csva/high_low_chart.py", line 28, in <module>max = int(row[1])
ValueError: invalid literal for int() with base 10: ''

如图:

报错原因:ValueError:基为10的int()的文本无效:“” ,说明death_valley_2014.csv文件中存在空字符串
death_valley_2014.csv中发现2014-2-16这一天

因此,我们就需要进行异常处理
异常处理

# coding = utf-8import csv
from matplotlib import pyplot as plt
from datetime import datetime
from matplotlib import dates as mdates"""提取并读取数据:获取日期和最高气温和最低气温,异常处理"""filename = 'death_valley_2014.csv'# 打开这个文件,将文件对象存储在f中
with open(filename) as f:# 创建一个与该文件相关联的阅读器reader = csv.reader(f)# 返回文件的下一行,前面的代码中,我们只调用了next()一次,因此得到的是文件第一行header_row = next(reader)# 创建两个为dates和max_temperature的空列表,用来存储从文件中提取的日期和最高气温dates, max_temperature, min_temperature = [], [], []# 遍历文件中余下的各行for row in reader:try:current_date = datetime.strptime(row[0], "%Y-%m-%d")max = int(row[1])min = int(row[3])except ValueError:print(current_date, 'missing data')else:dates.append(current_date)max_temperature.append(max)min_temperature.append(min)"""根据数据绘制图形"""# dpi:每英寸的点数 figsize:宽高fig = plt.figure(dpi=100, figsize=(10, 6))# 将日期和最高气温传给plotplt.plot(dates, max_temperature, c='red', alpha=0.5)plt.plot(dates, min_temperature, c='green', alpha=0.5)#中间传红色哈哈哈哈plt.fill_between(dates, max_temperature, min_temperature, facecolor='pink', alpha=0.8)# 设置图形的格式plt.title("Daily max temperature and min temperature,2014", fontsize=24)# 设置横坐标日期的上下限plt.xlim([datetime(2014, 1, 1), datetime(2014, 12, 22)])  # 日期上下限plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))  # 日期格式,%B为月份名,%b为月份名缩写plt.xlabel('', fontsize=16)# 使用autofmt_xdate来绘制倾斜的日期标签,以免彼此重叠fig.autofmt_xdate()# 温度上下限和间隔plt.yticks(range(20, 80, 5))plt.ylabel('Temperature(F)', fontsize=16)# pyplot模块中的tick_params()方法可以修改坐标刻度,刻度标签和网格线的外观plt.tick_params(axis='both', which='major', direction='in', labelsize=16)plt.show()

运行结果


学习《python编程从入门到实战》16章第一节,通过敲这些代码,发现一句真理:实践是检验真理的唯一标准!
书上的源码有些不足,我以为是我哪里代码打错了,检查了不下三遍,也可真够有耐烦心的,完善代码给整了一天,不过这也锻炼了自己的能力哈哈哈哈!

以上就是全部内容啦,如果有不懂的小伙伴欢迎提出来傲!

数据分析CSV模块的基本使用(以分析复杂的天气情况为例),附完整的Python代码及csv文件详解---数据可视化相关推荐

  1. 数据分析JSON板块的基本使用(以分析比特币收盘价为例),附完整的Python代码及json文件详解---数据可视化

    目录 一.前提准备 二.将收盘价用可视化图表示出来 上代码 运行结果 三.进行时间序列分析 上代码 运行结果 四.收盘价均值 月日均值 周日均值 星期均值 五.数据仪盘表 一.前提准备 btc_clo ...

  2. 数据分析--使用Web API(应用编程接口)以自动请求GitHub网站的特定信息为例爬取数据,附完整的Python代码详解

    https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行! 如有转载,请 ...

  3. Python爬虫实战,pytesseract模块,Python实现BOOS直聘拉勾网岗位数据可视化

    前言 利用Python实现BOOS直聘&拉勾网岗位数据可视化.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: requests模块 pyspider模 ...

  4. 【Android 逆向】使用 Python 代码解析 ELF 文件 ( PyCharm 中进行断点调试 | ELFFile 实例对象分析 )

    文章目录 一.PyCharm 中进行断点调试 二.ELFFile 实例对象分析 一.PyCharm 中进行断点调试 在上一篇博客 [Android 逆向]使用 Python 代码解析 ELF 文件 ( ...

  5. 数据分析最有用的Top 50 Matplotlib图(带有完整的Python代码)(下)

    CSDN博客 作者:zsx_yiyiyi 编辑:python大本营 昨天我们跟大家分享了50个Matplotlib可视化 - 主图(带有完整的Python代码)上  ,详情链接请戳:50个Matplo ...

  6. python编程入门与案例详解-自学Python 编程基础、科学计算及数据分析

    自学Python 编程基础.科学计算及数据分析 epub pdf mobi txt 下载 自学Python 编程基础.科学计算及数据分析 epub pdf mobi txt 下载 ☆☆☆☆☆ 李金 著 ...

  7. python中dns库用法详解(DNS处理模块)

    dnspython是python 实现的一个dns场景的工具包. dnspython(http://www.dnspython.org/)是Python实现的一个DNS工具包,它支持几乎所有的记录类型 ...

  8. 单细胞分析的 Python 包 Scanpy(图文详解)

    文章目录 一.安装 二.使用 1.准备工作 2.预处理 过滤低质量细胞样本 3.检测特异性基因 4.主成分分析(Principal component analysis) 5.领域图,聚类图(Neig ...

  9. python哪里下载import包-详解python中的模块及包导入

    python中的导入关键字:import 以及from import 1.import import一般用于导入包以及模块. 不过有个小问题: (1)当导入的是模块的时候是可以直接可以使用模块内的函数 ...

最新文章

  1. 【pytorch】torch.mean的使用
  2. MCS-51系列特殊功能寄存器(摘抄)
  3. JavaScript 学习笔记3
  4. .NET小笔记之程序集
  5. C++ Primer 5th笔记(chap 15 OOP)抽象基类
  6. codeforces 551 C GukiZ hates Boxes
  7. PostgreSQL递归查询
  8. 《Reids 设计与实现》第四章 整数集合和压缩列表
  9. arm linux samba,嵌入式linux系统教你制作samba服务器
  10. Windows下 ffmpeg + labelImg 提取视频帧 得到图片集 并 标注图片 来 构造数据集
  11. 终于实现了 SpringBoot+WebSocket实时监控异常....
  12. Eclipse中启动tomcat访问404解决及原因
  13. python面向对象——类(上)
  14. Dapper学习 - Dapper.Rainbow(三) - Read
  15. CCNA自学教材推荐(转)
  16. 软考网络工程师笔记-分值分布
  17. 四元数、欧拉角及方向余弦矩阵的相互转换公式
  18. 淘宝差评回复模板,最新最全差评回复话术
  19. idea创建Springboot项目时,出现Error:java: 读取C:\Users\HP\.m2\repository\com\vaadin\external\google\android-js
  20. 数据库的三级封锁协议

热门文章

  1. python统计字数分布可视化展示_数据的概率分布并用python实现概率分布可视化图...
  2. spring cloud微服务_年后进大厂,必备这份微服务面试题:Dubbo+SpringBoot+Cloud
  3. vs 中使用32 位mysql_vs2010连接mysql数据库(含win32和x64两种平台)
  4. python 3.9.0a0_Python 3.9.0 稳定版发布
  5. 输入引脚时钟约束_最强干货分享 | 时钟树例外(exclude pin、stop pin、non_stop pin、float pin)...
  6. vue watch 修改滚动条_Vue 里的 computed 和 watch 的区别
  7. stm32高级定时器 基础知识
  8. HTML+CSS+JS实现 ❤️简单的翻纸牌记忆游戏❤️
  9. 《零基础》MySQL NULL 值处理(二十一)
  10. java8 lambda map排序_Java8新特性第3章(Stream API)