利用pyecharts库对京津冀上广深空气质量数据进行可视化
本文以當(dāng)前熱門編程語(yǔ)言Python作為開發(fā)工具,利用Python的BeautifulSoup庫(kù)進(jìn)行網(wǎng)頁(yè)爬蟲以獲取空氣質(zhì)量數(shù)據(jù)(AQI、PM2.5),然后綜合運(yùn)用第三方庫(kù)Pandas進(jìn)行數(shù)據(jù)處理,最后利用Python的pyecharts庫(kù)對(duì)空氣質(zhì)量數(shù)據(jù)進(jìn)行可視化圖形的呈現(xiàn),該設(shè)計(jì)具體實(shí)現(xiàn)了京津冀上廣深空氣質(zhì)量數(shù)據(jù)的爬取、處理以及圖形的輸出。
本文將簡(jiǎn)單介紹整個(gè)流程,重點(diǎn)介紹可視化部分。
目錄
- 1 數(shù)據(jù)獲取
- 1.1 網(wǎng)頁(yè)爬取
- 1.2 數(shù)據(jù)存儲(chǔ)
- 1.3 數(shù)據(jù)處理
- 2 數(shù)據(jù)可視化
- 2.1 數(shù)據(jù)可視化步驟
- 2.1.1 導(dǎo)入相關(guān)包或類庫(kù)
- 2.1.2 讀取京津冀上廣深六個(gè)城市的.csv文件
- 2.1.3 獲取文件中所需要的信息
- 2.1.4 統(tǒng)計(jì)月均PM2.5
- 2.1.5 設(shè)置橫縱坐標(biāo)
- 2.1.6 添加標(biāo)題
- 2.1.7 添加相關(guān)數(shù)據(jù)
- 2.1.8 在根目錄下生成.html文件
- 2.2 數(shù)據(jù)可視化結(jié)果
- 3 地圖可視化
- 3.1 導(dǎo)入相關(guān)地圖庫(kù)
- 3.2 導(dǎo)入地址和相應(yīng)的PM2.5數(shù)據(jù)
- 3.3 設(shè)置地圖名字以及畫布大小
- 3.4 設(shè)置可視化點(diǎn)的大小和動(dòng)態(tài)效果以及顏色條顯示范圍
- 3.5 生成.html格式的文件
- 3.6 可視化地圖結(jié)果
1 數(shù)據(jù)獲取
選取天氣后報(bào)網(wǎng),進(jìn)行相關(guān)數(shù)據(jù)的爬取。該網(wǎng)頁(yè)最大的優(yōu)點(diǎn)是可以查詢歷史數(shù)據(jù),天氣數(shù)據(jù)種類豐富,數(shù)據(jù)清楚,包含的城市甚至城鎮(zhèn)都較為全面,方便查詢所需要的數(shù)據(jù)。其中,歷史天氣中可以查詢每日的天氣狀況和氣溫等;空氣質(zhì)量可以查詢AQI和PM2.5的歷史數(shù)據(jù)和空氣質(zhì)量等級(jí),很方便 大家日常生活中的讀取,數(shù)據(jù)清晰簡(jiǎn)潔。
1.1 網(wǎng)頁(yè)爬取
利用BeautifulSoup解析器解析URL(互聯(lián)網(wǎng)上的每個(gè)文件都有唯一的URL)包含的文本信息,分析網(wǎng)頁(yè)HTML文本和頁(yè)面的設(shè)置規(guī)則,導(dǎo)入相關(guān)庫(kù)
抓取目標(biāo)數(shù)據(jù),獲取需要的數(shù)據(jù)信息:日期、質(zhì)量等級(jí)、AQI指數(shù)、PM2.5等
1.2 數(shù)據(jù)存儲(chǔ)
將所獲取的數(shù)據(jù)信息組合生成.csv文件格式,最終實(shí)現(xiàn)結(jié)果是抓取到的數(shù)據(jù)信息形成了一個(gè)二維表,方便后面進(jìn)行數(shù)據(jù)處理
1.3 數(shù)據(jù)處理
導(dǎo)入Numpy包,用于進(jìn)行科學(xué)計(jì)算,包括了一個(gè)強(qiáng)大的N維數(shù)組對(duì)象Array,并且擁有成熟的函數(shù)庫(kù),比如矩陣數(shù)據(jù)類型和矢量處理
導(dǎo)入Pandas數(shù)據(jù)分析包,它包含了許多高級(jí)數(shù)據(jù)結(jié)構(gòu)和操作工具,能夠使得數(shù)據(jù)分析更加容易與快捷
2 數(shù)據(jù)可視化
2.1 數(shù)據(jù)可視化步驟
2.1.1 導(dǎo)入相關(guān)包或類庫(kù)
import numpy as np import pandas as pd from pyecharts import Line2.1.2 讀取京津冀上廣深六個(gè)城市的.csv文件
citys=['beijing','tianjin','shijiazhuang','shanghai','guangzhou','shenzhen'] v=[] for i in range(6):filename=citys[i]+'_2018.csv'df=pd.read_csv(filename,header=None,names=["Date","Quality_grade","AQI","AQI_rank","PM"])2.1.3 獲取文件中所需要的信息
dom=df[['Date','PM']] list1=[] for j in dom['Date']:time=j.split('-')[1]list1.append(time) df['month']=list1注:
1、split()方法通過(guò)指定分隔符對(duì)字符串進(jìn)行切片。time=j.split(’-’)[1]表示以’-'為分隔符,并取序列為1的項(xiàng)
2、list.append(obj)表示在列表末尾添加新的對(duì)象
2.1.4 統(tǒng)計(jì)月均PM2.5
month_message=df.groupby(['month']) month_com=month_message['PM'].agg(['mean']) month_com.reset_index(inplace=True) month_com_last=month_com.sort_index()注:
1、groupby是pandas中的一個(gè)分組函數(shù),對(duì)原DataFrame進(jìn)行打包分組。df.groupby([‘month’])表示按照月份進(jìn)行分組
2、DataFrame對(duì)象groupby.agg方法為聚合(其操作包括max、min、std、sum、count)month_message[‘AQI’].agg([‘mean’])表示根據(jù)Dataframe的列’AQI’進(jìn)行劃分,再進(jìn)行均值聚合操作
3、pandas中inplace參數(shù)為True,表示不創(chuàng)建新的對(duì)象,直接對(duì)原始對(duì)象進(jìn)行修改
4、reset_index表示還原索引,變?yōu)槟J(rèn)的整型索引
5、month_com.sort_index()方法表示按month_com的行索引進(jìn)行排序
2.1.5 設(shè)置橫縱坐標(biāo)
v1=np.array(month_com_last['mean']) v1=["{}".format(int(i)) for i in v1] v.append(v1)attr = ["{}".format(str(i) + '月') for i in range(1, 13)]2.1.6 添加標(biāo)題
line=Line("2018年京津冀上廣深PM2.5全年走勢(shì)圖",title_pos='center',title_top='0',width=800,height=400)2.1.7 添加相關(guān)數(shù)據(jù)
line.add("北京",attr,v[0],line_color='red',legend_top='8%') line._option['series'][0]['itemStyle']={'color': 'red'}其余,天津、石家莊、上海、廣州、深圳五個(gè)城市的說(shuō)明與北京類似,只是將線條顏色依次改為’green’、‘pink’、‘purple’、‘blue’、‘orange’
2.1.8 在根目錄下生成.html文件
line.render("2018年京津冀上廣深PM2.5全年走勢(shì)圖.html")注:pyecharts的一些基本操作
1、add()主要方法,用于添加圖表的數(shù)據(jù)和設(shè)置各種配置項(xiàng)
2、render()默認(rèn)將會(huì)在根目錄下生成一個(gè) .html 的文件
2.2 數(shù)據(jù)可視化結(jié)果
pyecharts是一個(gè)用于生成Echarts圖表的類庫(kù),包含了很多的圖表類型,而Echarts是開源的一個(gè)數(shù)據(jù)可視化JS庫(kù),主要用于數(shù)據(jù)可視化,擁有良好的交互性和精巧的圖表設(shè)計(jì)
gif格式
說(shuō)明:因格式轉(zhuǎn)換器問(wèn)題,呈現(xiàn)的效果略微模糊,但是程序運(yùn)行出來(lái)的html格式的圖是十分清楚的。
常規(guī)格式
分析:從圖1中可以看出,2018年南北部地區(qū)月均PM2.5值差異明顯。京津冀地區(qū)的PM2.5值“名列前茅”,位居前三,走勢(shì)較為一致,呈現(xiàn)秋冬高值春夏低值的特點(diǎn)。其中石家莊奪得“桂冠”,較為“高調(diào)”,全年P(guān)M2.5值走勢(shì)最為突出,1月份達(dá)到最大值104,8、9月份達(dá)到最低值35。根據(jù)空氣質(zhì)量標(biāo)準(zhǔn),石家莊全年都差不多在「優(yōu)」(0~35)以下了。上廣深情況較為樂觀,走勢(shì)一致且較為平穩(wěn),最高值均出現(xiàn)在1月份。上海和廣州情況差不多(5、6月份除外),5、6月份上海月均PM2.5值高于廣州且相差較大,廣州情況相對(duì)較好。深圳情況最為樂觀,1月份達(dá)到最大值38,5月份達(dá)到最低值16,PM2.5月均值都在40以下,全年空氣質(zhì)量等級(jí)差不多都在「優(yōu)」,與石家莊形成了鮮明對(duì)比。較南部地區(qū)而言,北部地區(qū)空氣質(zhì)量有待改善。
3 地圖可視化
3.1 導(dǎo)入相關(guān)地圖庫(kù)
from pyecharts import Geo3.2 導(dǎo)入地址和相應(yīng)的PM2.5數(shù)據(jù)
data = [("北京", 88),("天津", 74), ("石家莊", 104),("上海", 57), ("廣州", 59), ("深圳", 38) ]3.3 設(shè)置地圖名字以及畫布大小
geo = Geo("京津冀上廣深城市空氣質(zhì)量","data from pm2.5",title_color="#fff",title_pos="center",width=1200,height=600,background_color="#404a59", )3.4 設(shè)置可視化點(diǎn)的大小和動(dòng)態(tài)效果以及顏色條顯示范圍
attr, value = geo.cast(data) geo.add(" ",# 注意與""的區(qū)別,在圖頂部中間的scatter點(diǎn)attr,value,type="effectScatter",is_random=True,# symbol="pin",symbol_size=10,effect_scale=5,effect_period=2.5,is_more_utils=True,is_visualmap=True,visual_range=[0, 120],visual_text_color="#fff", )3.5 生成.html格式的文件
geo.show_config() geo.render(path="2018年京津冀上廣深PM2.5.html")3.6 可視化地圖結(jié)果
分析:我們可以清楚看到京津冀上廣深每一城市在地圖上的位置,以及它們的經(jīng)緯度(前兩個(gè)數(shù)據(jù)代表經(jīng)緯度,第三個(gè)數(shù)據(jù)是2018年每個(gè)城市最大月均PM2.5值)。根據(jù)顏色的映射,京津冀地區(qū)的PM2.5污染較為嚴(yán)重,而上廣深的空氣質(zhì)量較為良好。
注:該圖在本人另一篇博客基于Python的京津冀上廣深空氣質(zhì)量可視化分析是以gif格式進(jìn)行展示的,可以看到其動(dòng)態(tài)的一個(gè)效果。
總結(jié)
以上是生活随笔為你收集整理的利用pyecharts库对京津冀上广深空气质量数据进行可视化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何清理ubunu的空间--使用磁盘使用
- 下一篇: Python3,一行代码解析地址信息,原