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

参考教材

<Python编程——从入门到实践> chapter16 数据可视化

引言

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

原题

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

开始

首先,我们打开这个链接


输入地址:北京
等待一下结果:

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


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

不要怕,必应一下

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


虽然这里也提到了 Comma Delimited File 但是为抓取数据提供了新的思路

现在思路已经很明确了

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

第一步:用爬虫抓取数据

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


我们把网址根据上面的参考资料修改一下:
https://www.wunderground.com/history/airport/ZBAA/2017/5/1/MonthlyHistory.html?format=1
le voila !
CSV 表格出来了

接下就是用爬虫抓取这些数据
虽然我是个小白不怎么懂爬虫,但是网络大神多啊,在仔细拜读了大神 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 文件中,每个月的数据开头都有一行空行和题头


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

第三步:可视化数据

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

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

直接贴代码好了

__author__ = 'Administrator'
#! /usr/bin/python <br># -*- 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()

最后的结果


备注

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

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

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


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容