Python爬虫+Pandas 空气污染分析
本文最后更新于 411 天前,其中的信息可能已经有所发展或是发生改变。

多图预警

前一阵子报名参加了无锡市政府举办的2016年的大数据分析竞赛,那天正愁不知道什么参赛主题,突然看见的带了一个礼拜的3M口罩给我了灵感。
找不到口罩了·····估计是扔了吧,本来还想着给大家拍张照片看看,外面一圈是白的,过滤呼吸的那一部分的是黑的。
要是能找到在补图吧。

言归正传,我看到这个了以后,就想着要不要做一个雾霾分析的项目,反正是比赛呢,我也没想着获啥奖,就那样写吧。

可是,数据从哪里来呢?

经过我的百般寻找,找到一个平台:https://www.aqistudy.cn/historydata/,这上面的数据比较方便的可以获取下来,前提是需要一个爬虫。

也有不需要爬,直接给你数据的,可是要钱,我本来想着一点钱就算了,省那个功夫,后来我发现:
青悦:然后我只获取广东一个省:我的哥啊,我要是像现在一样获取全国190个监测点,是不是还要问我要85K啊,虽然这个是小时级别,但是我买不起啊!

我知道他们有免费申请,可是我要交项目的时间,就剩10天了啊,这审批需要多长时间啊······
而且你看,申请成功的单位是如下的:

我觉得我没有把握·····

自己动手,丰衣足食!

看看这个网页,数据全都是在tr标签里面套着的,然后我用BeatifulSoup和正则成功分析出来这个所需的数据,既然一个网页都成功了,那就开始爬吧~

我构造一个线程池,主进程获取每个城市的日链接列表,分派给线程去爬,为什么不同时工作呢?我害怕爬虫占用带宽太大,对网站运行有不好影响,咱们毕竟是爬人家的东西,最好不要给别人造成麻烦。

然后,还是发生了我害怕的事:在我跟网站管理员诚恳的沟通了之后,网站恢复了正常,然后我把线程从8个降到了4个。

这下正常了,我给每个线程又加了一点休眠时间,然后虽然慢了点,但是在也没有出什么问题了。

经过了12个小时的辛苦工作,我的爬虫获取到了全国190个城市监测点,从2013/12/01到2017/01/07的天密度空气污染数据,一共是个20多万条数据,存在sqlite里,也就是20MB左右。

这也能算大数据?

好吧,对于pandas的运算能力来说,这不算是大数据,我们就暂且称他为大数据吧·····

通过图表的方式,我们来看一些结论吧:
1.越往工业污染的城市,PM10的污染越严重(对AQI的贡献程度):西安


石家庄

2.臭氧和二氧化硫呈现极其明显的反比关系:

3.冬天雾霾的污染绝大程度上(很有把握说)是供暖烧煤产生:海口


桂林


北京


石家庄

你看越冷的地方,到冬季雾霾的增长速度越迅速。

3.看看临汾的毒气:空气吸死人

4.限行没啥用:15号开始限行20%,17号下雨….


限行了50%之后,也就是增长速度慢了点,看起来并没有啥用,我觉得更多是对老百姓的一个交代。

还有挺多的,贴出来太多了,就不写了……

通过这个比赛,我对数据更深的认识啊(废话)

祝大家过个好年!

帖子就到这里吧?

正片开始(贴一点代码):

def queryByDate(startDate, endingDate, city, freq = "D"):
    QueryResult = [list(item) for item in DataBase.Query(city, int(startDate), int(endingDate))]
    index = pd.date_range(startDate, endingDate)
    df = pd.DataFrame(QueryResult)
    Date = df[[0]]
    Data = df[[1,2,3,4,5,6,7,8,9]]
    Data.columns = Head
    ChangeList = ['AQI','PM2.5','PM10','SO2','CO','NO2','O3']
    Data = Data.apply(lambda x: pd.to_numeric(x, errors = 'ignore'))
    Date = pd.to_datetime(Date[0], format='%Y%m%d', errors='ignore')
    Data.index = Date
    Data = Data.resample(freq).mean()
    return Data

——pandas修复数据日期缺值

def CreateCommand(self, struct):
    latter = " TEXT NOT NULL,"
    for item in struct:
        yield item + latter

——用Python生成器迭代SQL命令

剩下也没啥写的,就这样吧。

评论

  1. crystal
    5月前
    2020-5-01 12:54:06

    同学 您好!我也在做空气污染方面的研究。也需要这些数据,不知道您方不方便share一下您的code?或者怎么和您私下联系一下?

    • 桂小方 博主
      5月前
      2020-5-01 12:55:49

      你好,可以添加我的微信 doge-gui 进行联系

  2. 4年前
    2017-1-12 22:01:13

    不错的小数据分析~

    • 桂 QQ 博主
      4年前
      2017-1-12 22:06:12

      嘿嘿,被发现了

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇