请注意本文采用的可视化工具为:pyecharts 0.1.9.4

爬取全国367个城市2019年春节期间的空气质量指数数据(六万条数据全面解析,城市春节禁放烟花爆竹真的有用吗?)

首先是数据获取,贴出爬虫demo,如果有需要数据的请评论

# -*- coding:utf-8 -*-
import time
import requests
import pandas as pd
from lxml import etreeclass AQI(object):"""爬取城市AQI实时数据"""def __init__(self):"""初始化函数:attr encoding: 编码"""self.encoding = Nonedef get_encoding(self):"""获取网页的编码:return: None"""res = requests.get('http://datacenter.mee.gov.cn/aqiweb2/')self.encoding = res.apparent_encodingprint('Successfully crawled encoding!')time.sleep(2)def crawl_aqi(self, sleep_time=3600):"""爬取全国具有监测点的所有城市的AQI实时数据,每小时爬取一次:param sleep_time: 爬取间隔时间,默认3600秒:return: None"""write_header = Truewhile 1:res = requests.get('http://datacenter.mee.gov.cn/aqiweb2/')parsed_text = etree.HTML(res.text)timestamp = parsed_text.xpath('/html/body/div[3]/p/i/text()')[0].replace('年', '-'). \replace('月', '-').replace('日', ' ').replace('时', ':00:00')print('Successfully crawled timestamp!')# 直接使用pandas获取和解析数据data_res = pd.read_html('http://datacenter.mee.gov.cn/aqiweb2/', encoding=self.encoding)data = data_res[0]header = ['city', 'AQI', 'PM2.5', 'PM10', 'SO2', 'NO2', 'CO', 'O3', 'main_pollution']data.columns = headerdata['time'] = timestampif write_header is True:data.to_csv('data2.csv', index=False, mode='a', header=True)write_header = Falseelse:data.to_csv('data2.csv', index=False, mode='a', header=False)print('Successfully crawled data of {} and saved it to file!'.format(timestamp))time.sleep(sleep_time)if __name__ == '__main__':aqi = AQI()aqi.get_encoding()aqi.crawl_aqi()

清洗数据

import pandas as pd
import numpy as npdata = pd.read_csv('AQI_Data.csv')# 打印基本信息
print(data.info())
print(data.head())

# 数据清洗
data['time'] = pd.to_datetime(data['time'])
data = data[data['time'] <= pd.to_datetime('2019-02-11 23:59:59')]  # 选取2月4日——2月12日的数据data = data.replace('—', np.nan)  # 打印全部数据会发现:原始数据中有很多'-'for col in ['AQI', 'PM2.5', 'PM10', 'SO2', 'NO2', 'CO', 'O3']:data[col] = data[col].astype(float)print(data.info())                 # 确认属性信息
print(len(data['city'].unique()))  # 查看城市数量data.to_csv('data_clean.csv', index=False)  # 可以保存清洗好的数据

正式开始分析之旅

共有68155条数据,时间为2月4日到2月11日,每隔1小时收集一次,囊括全国367个城市
包含字段:城市、空气质量指数、PM2.5指数、PM10指数、SO2指数、NO2指数、CO指数、O3指数、主要污染源、时间

请注意:2019年2月4日是除夕夜。

问题:
1 燃放烟花爆竹真的对空气质量有影响吗?
2 烟花爆竹对空气质量的影响体现在哪些指标上?
3 烟花爆竹对空气质量的污染程度有多大?
4 哪些区域污染最严重(轻)?
5 哪些城市属于一秒破功型?
6 除夕中午到初一中午的超标城市个数
7 除夕到初七的超标城市个数

1、燃放烟花爆竹真的对空气质量有影响吗?

# 参考空气质量指数,对所有城市取均值
AQI_total_mean = data[data['time'] <= pd.to_datetime('2019-02-06 23:59:59')].groupby(['time'])['AQI'].mean()# 画出整体趋势
line = Line(title="全国春节期间空气质量指数总体趋势", subtitle="2019年除夕到初二", width=800)
line.add("", AQI_total_mean.index, np.round(AQI_total_mean.values, 0),mark_point=['max'])line.render()  # 生成本地的html文件# 画出具体城市变化
def city_AQI(data, cities):line = Line("春节期间空气质量指数", "2019年除夕到初二", width=800)for city in cities:city_aqi = data[(data['city'] == city) & (data['time'] <= pd.to_datetime('2019-02-06 23:59:59'))]line.add(city, city_aqi.index, np.round(city_aqi['AQI'].values, 0), is_smooth=True, mark_point=["max"])line.render()return linecity_AQI(data=data, cities=['北京市', '天津市'])city_AQI(data=data, cities=['长沙市', '南宁市'])



2、烟花爆竹对空气质量的影响体现在哪些指标上?

data_total_idx = data[data['time'] <= pd.to_datetime('2019-02-06 23:59:59')].groupby(['time']).mean()
print(data_total_idx.columns)  # 查看各种指标line = Line("全国春节期间空气质量各指标(2019年除夕到初二)", "单位:μg/m3(CO为mg/m3)", width=800)
for idx in data_total_idx.columns[1:]:line.add(idx, data_total_idx.index, np.round(data_total_idx[idx].values, 0), is_smooth=True,legend_text_size=18, xaxis_label_textsize=14, yaxis_label_textsize=18, yaxis_min=8, legend_top=30)line.render('各种指标.html')


tianjin_idx = data[(data['city']=='天津市')&(data['time']<=pd.to_datetime('2019-02-06 23:59:59'))]
line = Line("天津市春节期间空气质量各指标(2019年除夕到初二)", "单位:μg/m3(CO为mg/m3)", width=800)
for idx in tianjin_idx.columns[2:8]:line.add(idx, tianjin_idx.index, np.round(tianjin_idx[idx].values, 0), is_smooth=True,legend_text_size=18, xaxis_label_textsize=14, yaxis_label_textsize=18,yaxis_min=8, legend_top=30)line.render('天津.html')

我们可以得到结论:烟花爆竹对PM2.5和PM10影响最大。

main_pol = data.loc[data['time']==pd.to_datetime('2019-02-05 02:00:00'), 'main_pollution'].value_counts()
print(main_pol)from pyecharts import Barbar = Bar("全国城市首要污染物", "2019年2月5日凌晨2点", width=600)
bar.add("", main_pol.index, main_pol.values, is_stack=True, is_label_show=True,bar_category_gap='40%', label_color=['#130f40'], label_text_size=18,legend_text_size=18, xaxis_label_textsize=18, yaxis_label_textsize=18)bar.render('main.html')


3、烟花爆竹对空气质量的污染程度有多大?

data2 = data[data['time'] <= pd.to_datetime('2019-02-05 23:59:59')]
data_AQI_min = data2.groupby('city')['AQI'].min()
data_AQI_max = data2.groupby('city')['AQI'].max()data_AQI_times = np.round(data_AQI_max/data_AQI_min, 1)  # 用最大值/最小值 作为污染增长倍数
data_AQI_times_top10 = data_AQI_times.nlargest(10)print(data_AQI_times_top10)bar = Bar("全国除夕和春节期间空气质量最高最低比Top10城市", "时间:2019年除夕至初一", width=600)
bar.add("", data_AQI_times_top10.index, data_AQI_times_top10.values, is_stack=True, is_label_show=True)bar.render()


def city_AQI(data, cities, name):line = Line("春节期间空气质量指数", "2019年除夕到初二", width=800)for city in cities:city_aqi = data[(data['city'] == city) & (data['time'] <= pd.to_datetime('2019-02-06 23:59:59'))]line.add(city, city_aqi.index, np.round(city_aqi['AQI'].values, 0), is_smooth=True, mark_point=["max"])line.render(name)return line# 分别看一下top10城市
city_AQI(data=data, cities=['伊春市', '鸡西市', '大兴安岭地区'], name='3.html')city_AQI(data=data, cities=['盘锦市', '葫芦岛市', '瓦房店市', '锦州市'], name='4.html')

data_AQI_times_counts = data_AQI_times.value_counts(bins=[1, 5, 10, 15, 20, 25])   # 注意这个方法
print(data_AQI_times_counts)bar = Bar("全国除夕和春节期间空气质量最高最低比的城市数量", "时间:2019年除夕至初一", width=600)
times = ['1-5倍', '5-10倍', '10-15倍', '15-20倍', '20-25倍']
bar.add("", times, data_AQI_times_counts.values, is_stack=True,is_label_show=True, bar_category_gap='40%', label_color=['#130f40'], label_text_size=18,legend_text_size=18, xaxis_label_textsize=18, yaxis_label_textsize=18)bar.render()


4、哪些区域污染最严重(轻)?

start_time = pd.to_datetime('2019-02-04 20:00:00')
end_time = pd.to_datetime('2019-02-05 04:00:00')
AQI_by_city = data[(data['time'] >= start_time) & (data['time'] <= end_time)].groupby('city')['AQI'].mean()# 可视化,但是好像不好使
from pyecharts import Geogeo = Geo("全国各城市空气质量指数","除夕晚上20点至初一凌晨4点平均值",title_color="#fff",title_pos="center",width=800,height=500,background_color="#404a59",
)
attr, value = AQI_by_city.index, AQI_by_city.valuesgeo.add("",attr,value,visual_range=[0, 500],visual_text_color="#fff",symbol_size=10,is_visualmap=True,is_piecewise=True,visual_split_number=10)
geo.render()

def city_AQI(data, cities, name):line = Line("春节期间空气质量指数", "2019年除夕到初二", width=800)for city in cities:city_aqi = data[(data['city'] == city) & (data['time'] <= pd.to_datetime('2019-02-06 23:59:59'))]line.add(city, city_aqi.index, np.round(city_aqi['AQI'].values, 0), is_smooth=True, mark_point=["max"])line.render(name)return lineprint('污染最重top10:')
print(AQI_by_city.nlargest(10))city_AQI(data=data, cities=['呼和浩特市', '包头市', '咸阳市'], name='lagest.html')print('污染最轻top10:')
print(AQI_by_city.nsmallest(10))# 查看小于50的所有城市
# print(AQI_by_city[AQI_by_city <= 50])


5、哪些城市属于一秒破功型?

city1 = data.loc[(data['time'] == pd.to_datetime('2019-02-05 02:00:00')) & (data['AQI']<100), 'city']data3 = data[(data['time'] >= pd.to_datetime('2019-02-05 18:00:00'))&(data['time'] <= pd.to_datetime('2019-02-06 23:59:59'))]
city2 = data3.loc[data3['AQI'] > 200, 'city']# 得到城市
print(list(set(city1).intersection(set(city2))))


提示:其实这些变化究竟是否是因为烟火?需要进一步考量。

6、除夕中午到初一中午的超标城市个数

start_time = pd.to_datetime('2019-02-04 12:00:00')
end_time = pd.to_datetime('2019-02-05 12:00:00')city_over_new_year = data.loc[(data['time'] >= start_time) & (data['time'] <= end_time) &(data['AQI'] > 100)].groupby('time')['AQI'].count().plot(title='The number of city')
plt.show()

7、除夕到初七的超标城市个数

data = data.set_index(data['time'])   # 这里我们将time设置为索引,并删除原列
city_over_count = (data.groupby('city')['AQI'].resample('D').mean() > 100).unstack(level=-1).sum()
print(city_over_count)bar = Bar("全国除夕至初七期间空气质量超标城市数量", "时间: 2019年  总城市数: 367", width=800)
date = ['02-04(除夕)', '02-05(初一)', '02-06(初二)', '02-07(初三)','02-08(初四)', '02-09(初五)', '02-10(初六)', '02-11(初七)']bar.add("", date, city_over_count.values, is_stack=True,is_label_show=True, bar_category_gap='40%', label_color=['#130f40'], label_text_size=18,legend_text_size=18, xaxis_label_textsize=18, yaxis_label_textsize=18)
bar.render('1.html')line = Line("", width=800)
line.add("", date, city_over_count.values+5, is_smooth=True)
line.render('2.html')



数据分析实战(七):城市春节禁放烟花爆竹相关推荐

  1. 六万条数据全面解析,城市春节禁放烟花爆竹真的有用吗? | Alfred数据室

    "爆竹声中一岁除,春风送暖入屠苏",对于我们来说,年总是伴随着烟花爆竹声度过的.而伴随着烟花爆竹的,就是绕不过去的空气污染.我国各城市近年来陆续出台了"禁放令" ...

  2. 【python数据分析实战】城市餐饮店铺选址问题(1)—— 对不同菜系进行比较,并筛选出可开店铺的餐饮类型

    1. 首先将要使用的库全部进行导入,并设置程序运行路径 import os os.chdir(r"C:\Users\86177\Desktop") #设置路径 import pan ...

  3. 【python数据分析实战】城市餐饮店铺选址问题(2)—— 确定餐馆的具体位置

    1. 选址的评价指标如下: 人口密度指标 → 得分越高越好      道路密度指标 → 得分越高越好      餐饮热度指标 → 得分越高越好      同类竞品指标 → 得分越低越好      综合 ...

  4. “禁止燃放烟花爆竹”社会治理创新活动

    春节以燃放烟花爆竹来庆祝过去一年的结束和新年的到来,但是,每年除夕燃放烟花爆竹导致致伤.火灾频发.为有效防范春节燃放烟花爆竹带来的危害,1月5日上午,同悦社工在群力镇"青村茶舍"乡 ...

  5. 沈阳警方严查违法非法烟花爆竹 捣毁多处储存窝点

    在非法储存烟花爆竹黑窝点内民警展示收缴物. 王景巍 摄 在非法储存烟花爆竹黑窝点内民警展示收缴物. 王景巍 摄 中新网沈阳1月24日电(王景巍)大年三十晚上放鞭炮.放烟花是家家必不可少的活动之一.春节 ...

  6. 正月初四 | 2月15日 星期一 | 特斯拉否认推出16万元更便宜车型;中国首位百亿票房导演诞生;冷光烟花纳入烟花爆竹管理...

    国内要闻 1.字节跳动回应"将出售TikTok印度业务给Glance":对传言不予置评 2.陈思诚导演电影作品票房超100亿,成为中国影史首位百亿票房导演 3.刘昊然主演电影票房超 ...

  7. 临床基因组学数据分析实战助力解析Case,快速发表文章

    福利公告:首期<临床基因组学数据分析实战>线上/线下课程已圆满结束.现于2022年春节前,安排第二期和第三期课程,分别为:北京,2021年12月24-26:广州,2022年1月7-9.(线 ...

  8. 北京、广州同时开课 | 临床基因组学数据分析实战助力解析Case,快速发表文章...

    福利公告:首期<临床基因组学数据分析实战>线上/线下课程已圆满结束.现于2022年春节前,安排第二期和第三期课程,分别为:北京,2021年12月24-26:广州,2022年1月7-9.(线 ...

  9. 临床基因组学数据分析实战开课啦!!!

    福利公告:为了响应学员的学习需求,经过易生信培训团队的讨论筹备,现安排<临床基因组学数据分析实战>于2021年11月12-14 线上/线下课程 (线上课是通过腾讯会议实时直播线下课,实时互 ...

最新文章

  1. 委托(一个主窗体统计多个从窗体的按钮单击的次数)
  2. html 字号 宽度 像素,JS根据设备宽度设置根节点(html)font-size字体大小
  3. 程序员法律考试(7)-民法(4)
  4. java security 详解_Spring Security入门教程 通俗易懂 超详细 【内含案例】
  5. 【网易严选】iOS持续集成打包(Jenkins+fastlane+nginx)
  6. 【SpringMVC】SpringMVC基础-SpringMVC项目快速搭建、日志框架为logback
  7. sql 键查找 索引查找_残留谓词对SQL Server索引查找操作的影响
  8. Linux 命令(129)—— passwd 命令
  9. edup网卡 linux,应用笔记--使用USB WiFi网卡
  10. MATLAB—隐函数绘图
  11. wow修改人物模型_《魔兽》3.13Bug发现:人物模型任意修改
  12. STM32入门开发: 采用IIC硬件时序读写AT24C08(EEPROM)
  13. HI3559A源码包编译及问题解决
  14. 思念绵绵,爱在彼此心间漫延
  15. 网页视频进度条禁止拖动----解决
  16. “蔚来杯“2022牛客暑期多校训练营5 A题: Don‘t Starve
  17. 全新的备份利器推荐:Duplicity使用评测
  18. PHP 记录访客的浏览信息
  19. 网络基本功(二十四):Wireshark抓包实例分析TCP重传
  20. chemistry 原子核

热门文章

  1. AD20使用字体图标 Mooretronics 矢量图标标识
  2. win7-64位通过VMware安装Macos系统
  3. Mac如何查看与更高切换输入法的快捷键
  4. 应用程序修改系统环境变量后如何刷新?
  5. 生活不易,一个月薪 12000 的北京程序员的真实生活
  6. 更新apple系统可以用哪些服务器,苹果更新系统怎么更新 小编教你更新苹果系统的方法...
  7. 计算机综合症怎么治,如何防治电脑综合症
  8. Oracle删除用户、表空间以及表空间对应本地文件
  9. 360ARP防火墙1.1Beta版本
  10. Git---如何生成patch文件