python从入门到实践16章答案
前言
这里是《Python从入门到实践》的练习答案,如果有错误或者可以改进的地方欢迎在评论区指正
一、16-1锡特卡的降雨量
根据书上的代码稍微改动即可
只需注意降水量应该转换为float型
import csv
import matplotlib.pyplot as plt
from datetime import datetimefilename = 'data/sitka_weather_2018_simple.csv'
with open(filename) as f:reader = csv.reader(f)header_row = next(reader)# 从文件中获取最高温度dates, prcps = [], []for row in reader:current_date = datetime.strptime(row[2], '%Y-%m-%d')try:prcp = float(row[3])except ValueError:print(f"Missing data for {current_date}")else:dates.append(current_date)prcps.append(prcp)# 根据最高温度和最低温度绘制图形
plt.style.use('seaborn')
fig, ax = plt.subplots()
ax.plot(dates, prcps, c='red')# 设置图形的格式
ax.set_title('Daily precipitation in 2018\n Sitka', fontsize=20)
ax.set_xlabel('', fontsize=16)
ax.set_ylabel('Precipitations', fontsize=16)
ax.tick_params(axis='both', which='major', labelsize=16)plt.show()
结果如下:
二、16-2比较锡特卡和死亡谷的温度
我将两幅图合在一起了
大部分代码都能直接复制粘贴
只需要注意设置只需要一遍
比如两个
fig, ax = plt.subplots()会一次生成两个图:
import csv
import matplotlib.pyplot as plt
from datetime import datetimefilename = 'data/sitka_weather_2018_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[5])low = int(row[6])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)
ax.fill_between(dates, lows, highs, facecolor='blue', alpha=0.1)filename_2 = 'data/death_valley_2018_simple.csv'
with open(filename_2) as f_2:reader_2 = csv.reader(f_2)header_row_2 = next(reader_2)# 从文件中获取最高温度dates_2, highs_2, lows_2 = [], [], []for row_2 in reader_2:current_date_2 = datetime.strptime(row_2[2], '%Y-%m-%d')try:high_2 = int(row_2[4])low_2 = int(row_2[5])except ValueError:print(f"Missing data for {current_date}")else:dates_2.append(current_date_2)highs_2.append(high_2)lows_2.append(low_2)ax.plot(dates_2, highs_2, c='green', alpha=0.5)
ax.plot(dates_2, lows_2, c='yellow', alpha=0.5)
ax.fill_between(dates_2, lows_2, highs_2, facecolor='green', alpha=0.1)# 设置图形的格式
ax.set_title('Compare Sitka And Death Valley Temperatures', fontsize=20)
ax.set_xlabel('', fontsize=16)
fig.autofmt_xdate()
ax.set_ylabel('Temperatures(F)', fontsize=16)
ax.tick_params(axis='both', which='major', labelsize=16)
ax.axis([dates[0], dates[-1], 20, 130])
plt.show()
结果如下:
三、16-3旧金山
数据从NOAA Climate Data Online官方下载
官网地址:DOAA Climate Data Online
从DOAA Climate Data Online下载数据
import csv
import matplotlib.pyplot as plt
from datetime import datetimefilename = 'data/3020167.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[1], '%Y-%m-%d')try:high = int(row[2])low = int(row[3])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)
ax.fill_between(dates, lows, highs, facecolor='blue', alpha=0.1)# 设置图形的格式
ax.set_title('Maximum and minimum daily temperature in 2021\n San Francisco',fontsize=20)
ax.set_xlabel('', fontsize=16)
fig.autofmt_xdate()
ax.set_ylabel('Temperatures(F)', fontsize=16)
ax.tick_params(axis='both', which='major', labelsize=16)plt.show()
结果如下:
四、16-4自动索引
index()方法是从 白桃提拉米苏 学来的
import csv
import matplotlib.pyplot as plt
from datetime import datetimefilename = 'data/3020167.csv'
with open(filename) as f:reader = csv.reader(f)header_row = next(reader)# 以下代码借鉴了 白桃提拉米苏t_name = header_row.index('STATION')t_date = header_row.index('DATE')t_high = header_row.index('TMAX')t_low = header_row.index('TMIN')# 从文件中获取最高温度dates, highs, lows = [], [], []for row in reader:current_date = datetime.strptime(row[t_date], '%Y-%m-%d')try:high = int(row[t_high])low = int(row[t_low])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)
ax.fill_between(dates, lows, highs, facecolor='blue', alpha=0.1)# 设置图形的格式
ax.set_title(f'Maximum and minimum daily temperature in 2021\n {row[t_name]}',fontsize=20)
ax.set_xlabel('', fontsize=16)
fig.autofmt_xdate()
ax.set_ylabel('Temperatures(F)', fontsize=16)
ax.tick_params(axis='both', which='major', labelsize=16)plt.show()
结果如下:
五、16-5探索
顺手下了一个旧金山的降雨量数据
Daily precipitation in 2022 San Francisco
文件名自己可以改
import csv
import matplotlib.pyplot as plt
from datetime import datetimefilename = 'data/3020163.csv'
with open(filename) as f:reader = csv.reader(f)header_row = next(reader)# 从文件中获取最高温度dates, prcps = [], []for row in reader:current_date = datetime.strptime(row[1], '%Y-%m-%d')try:prcp = float(row[2])except ValueError:print(f"Missing data for {current_date}")else:dates.append(current_date)prcps.append(prcp)# 根据最高温度和最低温度绘制图形
plt.style.use('seaborn')
fig, ax = plt.subplots()
ax.plot(dates, prcps, c='red')# 设置图形的格式
ax.set_title('Daily precipitation in 2022\n San Francisco', fontsize=20)
ax.set_xlabel('', fontsize=16)
ax.set_ylabel('Precipitations', fontsize=16)
ax.tick_params(axis='both', which='major', labelsize=16)plt.show()
结果如下:
六、16-6重构
重构绝对是我最喜欢的环节,
因为它足够简单还解压
只需要这样即可:
七、16-7自动生成标题
只需做如下修改即可:
import plotly.express as px
import json
import pandas as pd# 探索数据的结构
filename = 'data/eq_data_30_day_m1.json'
with open(filename) as f:all_eq_data = json.load(f)all_eq_dicts = all_eq_data['features']mags, titles, lons, lats = [], [], [], []
for eq_dict in all_eq_dicts:mags.append(eq_dict['properties']['mag'])titles.append(eq_dict['properties']['title'])lons.append(eq_dict['geometry']['coordinates'][0])lats.append(eq_dict['geometry']['coordinates'][1])data = pd.DataFrame(data=zip(lons, lats, titles, mags), columns=['经度', '纬度', '位置', '震级']
)
data.head()fig = px.scatter(data,x='经度',y='纬度',range_x=[-200, 200],range_y=[-90, 90],width=800,height=800,title=all_eq_data['metadata']['title'],size='震级',size_max=10,color='震级',hover_name='位置',
)
fig.write_html('global_earthquakes.html')
fig.show()
结果如下:
八、16-8最近发生的地震
只需更改两处即可:
结果如下:
重新贴一下代码:
import plotly.express as px
import json
import pandas as pd# 探索数据的结构
filename = 'data/significant_month.geojson'
with open(filename) as f:all_eq_data = json.load(f)all_eq_dicts = all_eq_data['features']mags, titles, lons, lats = [], [], [], []
for eq_dict in all_eq_dicts:mags.append(eq_dict['properties']['mag'])titles.append(eq_dict['properties']['title'])lons.append(eq_dict['geometry']['coordinates'][0])lats.append(eq_dict['geometry']['coordinates'][1])data = pd.DataFrame(data=zip(lons, lats, titles, mags), columns=['经度', '纬度', '位置', '震级']
)
data.head()fig = px.scatter(data,x='经度',y='纬度',range_x=[-200, 200],range_y=[-90, 90],width=800,height=800,title=all_eq_data['metadata']['title'],size='震级',size_max=10,color='震级',hover_name='位置',
)
fig.write_html('month_global_earthquakes.html')
fig.show()
九、16-9全球火灾
基本思想:先用csv得到列表,再用plotly.express处理列表
import plotly.express as px
import csv
import pandas as pd
from datetime import datetimefilename = 'data/world_fires_1_day.csv'
lons, lats, brights, dates = [], [], [], []
with open(filename) as f:reader = csv.reader(f)header_row = next(reader)for row in reader:current_date = datetime.strptime(row[5], '%Y-%m-%d')try:lon = float(row[1])lat = float(row[0])brightness = float(row[2])except ValueError:print(f'Missing data for {current_date}')else:lons.append(lon)lats.append(lat)brights.append(brightness)dates.append(current_date)data = pd.DataFrame(data=zip(lons, lats, brights, dates), columns=['经度', '纬度', '火灾强度', '时间']
)
data.head()fig = px.scatter(data,x='经度',y='纬度',range_x=[-200, 200],range_y=[-90, 90],width=800,height=800,title='World Fires',size='火灾强度',size_max=10,color='火灾强度',hover_name='时间',
)
fig.write_html('world_fires.html')
fig.show()
结果如下:
看到最后了就点个赞吧
python从入门到实践16章答案相关推荐
- python从入门到实践13章答案
系列文章目录 python从入门到实践12章答案 python从入门到实践14章答案 目录 前言 一.13-1星星 二.13-2更逼真的星星 三.13-3雨滴 四.13-4连绵细雨 五.13-5 侧 ...
- python从入门到实践19章答案
目录 前言 一.博客 1.建立项目 2.创建应用程序 3.Django管理网站 4.让用户输入数据 二.博客账户 1.应用程序users 2.登录页面 3.注销 4.注册页面 三.重构 四.保护页面n ...
- python从入门到实践18章答案
目录 前言 一.新项目 二.简短的条目 三.Django API 四.比萨店 1.创建虚拟环境.安装Django.创建项目.创建数据库.创建应用程序 2.定义模型 3.激活模型 4.向管理网站注册模型 ...
- python从入门到实践课后题答案第7章_《Python从入门到实践》--第七章 用户输入和while循环 课后练习...
题目: 7-8 熟食店 :创建一个名为sandwich_orders 的列表,在其中包含各种三明治的名字:再创建一个名为finished_sandwiches 的空列表.遍历列 表sandwich_o ...
- python从入门到实践课后题答案第7章_《Python从入门到实践》--第七章 while循环 课后练习...
题目: 7-4 比萨配料 :编写一个循环,提示用户输入一系列的比萨配料,并在用户输入'quit' 时结束循环.每当用户输入一种配料后,都打印一条消息,说我们会在比萨 中添加这种配料. 7-5 电影票 ...
- python从入门到实践课后题答案第7章_【《Python编程: 从入门到实践》习题答案--第七章:】...
#本章节代码中暂不涉及try-catch,所以默认为用户输入的符合所需要的输入类型 # 7-1 汽车租赁 : 编写一个程序, 询问用户要租赁什么样的汽车, 并打印一条消息, 如"Let me ...
- python 数据挖掘 简书_[Python数据挖掘入门与实践]-第一章开启数据挖掘之旅
1.数据挖掘简介(略) 2.使用Python和IPython Notebook 2.1.安装Python 2.2.安装IPython 2.3.安装scikit-learn scikit-learn是用 ...
- python从入门到实践15章的几个自己的小程序
练习15-1自己的答案 #加入python画图的库 pyplot import matplotlib.pyplot as plt #生成一个list input_values= list(range( ...
- python数据挖掘入门与实践-第一章-用最简单OneR算法对Iris植物分类
前言: 这本书其实有配套代码的来着,但是有点坑的是,里面的代码对应的版本是有点旧的,用的时候会警告或者已经报错.甚至有些代码书里提了但是却没有写进去,要自己去摸索.我是每一章都跟着代码示例,把每一个步 ...
- python从入门到实践18章django存在问题_第18章 Django入门 P371
声音简介-感谢粉丝NN娜娜小天使的打赏,此音频即日起以24小时/天,1次/小时的速度更新,直至完结~ 特别说明: 此音频仅作为更好地阅读此书的辅助工具,请大家购买正版书籍. 所有音频全部免费供大家试听 ...
最新文章
- Python报错:NameError: name ‘wraps‘ is not defined
- java opengl书_GitHub - cy-cyx/OpenGlDome: OpenGl的使用练习(安卓 Java opengl3.0)
- 群晖系统挂载NTFS硬盘
- [云炬商业计划书阅读分享]校园快递创业计划书
- iOS之深入解析objc_msgSend消息转发机制的底层原理
- Hyper-V数据文件丢失解决方案(有图有真相)
- Jenkins 详细安装、构建部署 使用教程
- Git使用手册:HTTPS和SSH方式的区别和使用
- m7405d粉盒清零方法_联想打印机计数器怎么清零?一体机硒鼓怎么清零?看这一篇就够...
- Junit 测试时内存溢出解决办法
- IT 从业者要如何在国企「活」下去?
- 在碾压中找到自己,提升自己的思考能力
- LeetCode每周刷题(2019.6.24-2019.6.30)
- 软件研发过程客观体检指标
- Django文档是如何组织的?
- 小武与tfpyth的碰撞----torch.autograd.Function进阶版本
- matlab将图像油画,photoshop图像滤镜——油画算法(含matlab与C代码)
- 小学六年级数学教案:圆柱与圆锥
- HTML中动态图片切换JQuery实现
- 如何取消excel密码_Excel表格技巧—Excel表格如何取消密码
热门文章
- 电脑动态壁纸软件哪个好用:试试Wallpaper Engine离线版吧
- Word自带编辑器设置类Times New Roman字体
- 短视频“音频化”,音乐“视频化”
- levelup游戏资料库项目开发备忘录(10.26)
- 如何调用百度和华为的API?
- 流媒体与实时计算,Netflix公司Druid应用实践
- 视频分割合并软件哪个好用:试试Fast Video Cutter Joiner吧
- MeanTeacher论文学习笔记
- smartbi v7 Linux,配置Smartbi
- 360金融:“巨头”式的快与稳