前言

这里是《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章答案相关推荐

  1. python从入门到实践13章答案

    系列文章目录  python从入门到实践12章答案 python从入门到实践14章答案 目录 前言 一.13-1星星 二.13-2更逼真的星星 三.13-3雨滴 四.13-4连绵细雨 五.13-5 侧 ...

  2. python从入门到实践19章答案

    目录 前言 一.博客 1.建立项目 2.创建应用程序 3.Django管理网站 4.让用户输入数据 二.博客账户 1.应用程序users 2.登录页面 3.注销 4.注册页面 三.重构 四.保护页面n ...

  3. python从入门到实践18章答案

    目录 前言 一.新项目 二.简短的条目 三.Django API 四.比萨店 1.创建虚拟环境.安装Django.创建项目.创建数据库.创建应用程序 2.定义模型 3.激活模型 4.向管理网站注册模型 ...

  4. python从入门到实践课后题答案第7章_《Python从入门到实践》--第七章 用户输入和while循环 课后练习...

    题目: 7-8 熟食店 :创建一个名为sandwich_orders 的列表,在其中包含各种三明治的名字:再创建一个名为finished_sandwiches 的空列表.遍历列 表sandwich_o ...

  5. python从入门到实践课后题答案第7章_《Python从入门到实践》--第七章 while循环 课后练习...

    题目: 7-4 比萨配料 :编写一个循环,提示用户输入一系列的比萨配料,并在用户输入'quit' 时结束循环.每当用户输入一种配料后,都打印一条消息,说我们会在比萨 中添加这种配料. 7-5 电影票 ...

  6. python从入门到实践课后题答案第7章_【《Python编程: 从入门到实践》习题答案--第七章:】...

    #本章节代码中暂不涉及try-catch,所以默认为用户输入的符合所需要的输入类型 # 7-1 汽车租赁 : 编写一个程序, 询问用户要租赁什么样的汽车, 并打印一条消息, 如"Let me ...

  7. python 数据挖掘 简书_[Python数据挖掘入门与实践]-第一章开启数据挖掘之旅

    1.数据挖掘简介(略) 2.使用Python和IPython Notebook 2.1.安装Python 2.2.安装IPython 2.3.安装scikit-learn scikit-learn是用 ...

  8. python从入门到实践15章的几个自己的小程序

    练习15-1自己的答案 #加入python画图的库 pyplot import matplotlib.pyplot as plt #生成一个list input_values= list(range( ...

  9. python数据挖掘入门与实践-第一章-用最简单OneR算法对Iris植物分类

    前言: 这本书其实有配套代码的来着,但是有点坑的是,里面的代码对应的版本是有点旧的,用的时候会警告或者已经报错.甚至有些代码书里提了但是却没有写进去,要自己去摸索.我是每一章都跟着代码示例,把每一个步 ...

  10. python从入门到实践18章django存在问题_第18章 Django入门 P371

    声音简介-感谢粉丝NN娜娜小天使的打赏,此音频即日起以24小时/天,1次/小时的速度更新,直至完结~ 特别说明: 此音频仅作为更好地阅读此书的辅助工具,请大家购买正版书籍. 所有音频全部免费供大家试听 ...

最新文章

  1. Python报错:NameError: name ‘wraps‘ is not defined
  2. java opengl书_GitHub - cy-cyx/OpenGlDome: OpenGl的使用练习(安卓 Java opengl3.0)
  3. 群晖系统挂载NTFS硬盘
  4. [云炬商业计划书阅读分享]校园快递创业计划书
  5. iOS之深入解析objc_msgSend消息转发机制的底层原理
  6. Hyper-V数据文件丢失解决方案(有图有真相)
  7. Jenkins 详细安装、构建部署 使用教程
  8. Git使用手册:HTTPS和SSH方式的区别和使用
  9. m7405d粉盒清零方法_联想打印机计数器怎么清零?一体机硒鼓怎么清零?看这一篇就够...
  10. Junit 测试时内存溢出解决办法
  11. IT 从业者要如何在国企「活」下去?
  12. 在碾压中找到自己,提升自己的思考能力
  13. LeetCode每周刷题(2019.6.24-2019.6.30)
  14. 软件研发过程客观体检指标
  15. Django文档是如何组织的?
  16. 小武与tfpyth的碰撞----torch.autograd.Function进阶版本
  17. matlab将图像油画,photoshop图像滤镜——油画算法(含matlab与C代码)
  18. 小学六年级数学教案:圆柱与圆锥
  19. HTML中动态图片切换JQuery实现
  20. 如何取消excel密码_Excel表格技巧—Excel表格如何取消密码

热门文章

  1. 电脑动态壁纸软件哪个好用:试试Wallpaper Engine离线版吧
  2. Word自带编辑器设置类Times New Roman字体
  3. 短视频“音频化”,音乐“视频化”
  4. levelup游戏资料库项目开发备忘录(10.26)
  5. 如何调用百度和华为的API?
  6. 流媒体与实时计算,Netflix公司Druid应用实践
  7. 视频分割合并软件哪个好用:试试Fast Video Cutter Joiner吧
  8. MeanTeacher论文学习笔记
  9. smartbi v7 Linux,配置Smartbi
  10. 360金融:“巨头”式的快与稳