菜鸟笔记Python3——数据可视化(一)

参考教材

chapter16 数据可视化

引言

在参考教材 《Python编程——从入门到实践》的* 第 16 章 —— 数据可视化 进行 Python3 的学习时, 我们发现了一道很值得关注的练习题:从网络上下载一个地方的天气数据,并分析之。 在实现这个功能的时候,我们用到了简单爬虫和数据可视化的方法......

原题

试从 https://www.wunderground.com/history 中下载一个地方的天气数据。为此,请输入相应的地方和日期范围,滚动到页面底部,找到名为 Comma-Delimited File 的链接, 再的那几该链接,将数据储存为CSV文件

开始

首先,我们打开这个链接

菜鸟笔记Python3——数据可视化(一)_第1张图片

输入地址:北京
等待一下结果:
菜鸟笔记Python3——数据可视化(一)_第2张图片

不错嘛!
我们找一找这个 Comma-Delimited File 链接


(ノ=Д=)ノ┻━┻ 未找到此词是什么鬼!

菜鸟笔记Python3——数据可视化(一)_第3张图片

不要怕,必应一下

还真让我找到了相关的材料,,,,虽然是豆丁上的

菜鸟笔记Python3——数据可视化(一)_第4张图片

虽然这里也提到了 Comma Delimited File 但是为抓取数据提供了新的思路
菜鸟笔记Python3——数据可视化(一)_第5张图片

现在思路已经很明确了

用爬虫抓取数据 -> 处理成方便的 CSV文件 ->可视化处理

第一步:用爬虫抓取数据

我们在搜索框中输入 : 北京,选择 Monthly
留心一下网址


我们把网址根据上面的参考资料修改一下:
https://www.wunderground.com/history/airport/ZBAA/2017/5/1/MonthlyHistory.html?format=1
le voila !
CSV 表格出来了
菜鸟笔记Python3——数据可视化(一)_第6张图片

接下就是用爬虫抓取这些数据
虽然我是个小白不怎么懂爬虫,但是网络大神多啊,在仔细拜读了大神 voidsky_很有趣儿所写的

【图文详解】python爬虫实战——5分钟做个图片自动下载器
http://www.jianshu.com/p/19c846daccb3
(若有侵权嫌疑请联系我删除)

之后,我也照猫画虎地写了一个小爬虫出来

#-*- coding:utf8 -*-
import re
import os
import requests
months = range(1,13)

dir_name = 'weather' #建一个文件夹存放文件
if not os.path.exists(dir_name): #检查这个文家尖存不存在,不存在则创建
    os.mkdir(dir_name)

string = ""+dir_name+"\\Beijing_2015.csv" #抓取北京2015年的天气数据
for month in months:
    url = 'https://www.wunderground.com/history/airport/ZBAA/2015/'+str(month)+'/1/MonthlyHistory.html?format=1'
    result = requests.get(url)
    html = requests.get(url).text
    try:
        info = requests.get(url)
    except requests.exceptions.ConnectionError:
        print('【错误】当前数据无法下载')
        continue
    else:
        fp = open(string,'ab') #每次循环都追加写入数据
        fp.write(info.content)
    print('month = ',month)
fp.close()
print('Done')

打开当前目录下的weather文件夹,文件 Beijing_2015.cvs 已经写好啦

第二步:预处理CVS文件

通过之前的代码生成的 Beijing_2015.cvs 文件中,每个月的数据开头都有一行空行和题头

菜鸟笔记Python3——数据可视化(一)_第7张图片

这个可以用python代码处理,也可以用excel处理,都很简单,故不再多说

第三步:可视化数据

这里的操作跟教材几乎一模一样,只有一个地方需要改动 那就是在处理日期的时候
原来的代码需要变成这个样子,因为日期是 2016/x/x 的格式,没错我抓取了2016年跟2015年的数据,但是只处理了2016年的数据。。。。。

current_date = datetime.strptime(row[0],'%Y/%m/%d')

直接贴代码好了

__author__ = 'Administrator'
#! /usr/bin/python 
# -*- coding: utf-8 -*- import csv from matplotlib import pyplot as plt from datetime import datetime import ch ch.set_ch() filename = 'Beijing_2016.csv' with open(filename) as f: reader = csv.reader(f) header_row = next(reader) highs, lows, dates = [], [], [] #逐行统计数据 for row in reader: try: current_date = datetime.strptime(row[0],'%Y/%m/%d')#这里与示范代码不同 high = int(row[1]) low = int(row[3]) except ValueError: print(current_date,'missing data') continue else: dates.append(current_date) highs.append(high) lows.append(low) #根据数据绘制图形 fig = plt.figure(dpi = 64, figsize=(10,6) ) plt.plot(dates, highs, c='red',alpha=0.8) plt.plot(dates, lows, c='blue',alpha=0.8) plt.fill_between(dates,highs,lows,facecolor='blue',alpha=0.3) plt.title(u'北京市日最高最低气温统计图 - 2016',fontsize=24) plt.xlabel('', fontsize=16) plt.xlim([dates[0], dates[-1]]) fig.autofmt_xdate() plt.ylabel(u'温度(摄氏度)',fontsize=16) plt.tick_params(axis='both',which='major',labelsize=16) plt.legend([u'最高气温', u'最低气温'], loc='upper right',fontsize=24) plt.savefig('北京日最高最低气温统计图 - 2016.png',bbox_inches='tight') plt.show()

最后的结果


菜鸟笔记Python3——数据可视化(一)_第8张图片

备注

值得注意的是,除了网页数据抓取之外,我们还发现,matplotlib库本身默认不支持中文显示,经过强大的互联网加持,我们最终还是从吴文敏大神的技术博客里找到了解决方法

https://my.oschina.net/u/1180306/blog/279818
避免侵权,就只给出链接好了,大家可以自行前往学习

Ps: 其实我最后还是把两年的数据都处理了,对比一下,大家看看有什么差别吧

菜鸟笔记Python3——数据可视化(一)_第9张图片

菜鸟笔记Python3——数据可视化(一)_第10张图片

你可能感兴趣的:(菜鸟笔记Python3——数据可视化(一))