第十六章 下载数据
一、CSV
模块datetime中strptime()设置日期和时间格式的实参
实参 | 含义 |
---|---|
%A | 星期的名称,如Monday |
%B | 月份名,如January |
%m | 用数字表的月份(01-12) |
%d | 用数字表示月份中的一天(01-31) |
%Y | 四位年份,如2015 |
%y | 两位年份,如15 |
%H | 24小时制的小时数(00-23) |
%I | 12小时制的小时数(01-12) |
%p | am或pm |
%M | 分钟数(00-59) |
%S | 秒数(00-61) |
读取文件并显示
import csv
from matplotlib import pyplot as plt
from datetime import datetime
filename = 'sitka_weather_2014.csv'
#打开读取文件
with open(filename) as f:
#reader():创建与文件相关联的阅读器
reader = csv.reader(f)
#next():读取下一行数据,并以列表形式存储到header_row
header_row = next(reader)
#print(header_row)
#打印文件头及位置
#enumerate():获取每个元素的索引及值
#for index,col in enumerate(header_row):
# print(index,col)
#读取数据,读取日期、最低和最高气温
dates,lows,highs = [],[],[]
for row in reader:
#异常处理:空值,转换错处理
try:
date = datetime.strptime(row[0],'%Y-%m-%d')
low = int(row[3])
high = int(row[1])
except ValueError:
print(date,'missing data')
else:
dates.append(date)
lows.append(low)
highs.append(high)
fig = plt.figure(dpi = 128, figsize=(10,6))
#alpha:指定颜色的透明度,0表示完全透明,1表示不透明
plt.plot(dates,highs,c='red',alpha = 0.5)
plt.plot(dates,lows,c='green',alpha = 0.5)
#fill_between():用facecolor来填充两个列表间区域
plt.fill_between(dates,highs,lows,facecolor='blue',alpha=0.1)
plt.title('Daily high temperatures,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()
二、读取JSON格式,制作世界人口地图
import json
#pygam 2.0.0以后版本
from pygal.maps.world import World
from pygal.maps.world import COUNTRIES
from pygal.style import RotateStyle as RS, LightColorizedStyle as LCS
#依据图家名称获取国别代码
def get_country_code(country_name):
for code,name in COUNTRIES.items():
if name == country_name:
return code
return None
filename = 'population_data.json'
with open(filename) as f:
pop_data = json.load(f)
cc_data = {}
for pop_dict in pop_data:
if pop_dict['Year'] == '2010':
country = pop_dict['Country Name']
population = int(float(pop_dict['Value']))
code = get_country_code(country)
if code:
cc_data[code] = population
#按人口数量分组
cc_pop_1,cc_pop_2,cc_pop_3 = {},{},{}
for cc,pop in cc_data.items():
if pop < 10000000:
cc_pop_1[cc] = pop
elif pop < 1000000000:
cc_pop_2[cc] = pop
else:
cc_pop_3[cc] = pop
#创建世界地图
#设置基色和主题
wm_style = RS('#336699',base_style=LCS)
wm = World(style=wm_style)
wm.title = 'World Population in 2010,by Country'
#wm.add('2010',cc_data)
wm.add('0-10m',cc_pop_1)
wm.add('10m-1bn',cc_pop_2)
wm.add('>1bn',cc_pop_3)
wm.render_to_file('World.svg')