![基于Python的空氣質(zhì)量分析與實(shí)踐_第1頁(yè)](http://file4.renrendoc.com/view/66f449abde2da96f6a9f375cfc15a68c/66f449abde2da96f6a9f375cfc15a68c1.gif)
![基于Python的空氣質(zhì)量分析與實(shí)踐_第2頁(yè)](http://file4.renrendoc.com/view/66f449abde2da96f6a9f375cfc15a68c/66f449abde2da96f6a9f375cfc15a68c2.gif)
![基于Python的空氣質(zhì)量分析與實(shí)踐_第3頁(yè)](http://file4.renrendoc.com/view/66f449abde2da96f6a9f375cfc15a68c/66f449abde2da96f6a9f375cfc15a68c3.gif)
![基于Python的空氣質(zhì)量分析與實(shí)踐_第4頁(yè)](http://file4.renrendoc.com/view/66f449abde2da96f6a9f375cfc15a68c/66f449abde2da96f6a9f375cfc15a68c4.gif)
![基于Python的空氣質(zhì)量分析與實(shí)踐_第5頁(yè)](http://file4.renrendoc.com/view/66f449abde2da96f6a9f375cfc15a68c/66f449abde2da96f6a9f375cfc15a68c5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于Python的空氣質(zhì)量數(shù)據(jù)分析與實(shí)踐 本篇文章利用了Python爬蟲(chóng)技術(shù)對(duì)空氣質(zhì)量網(wǎng)站的數(shù)據(jù)進(jìn)行獲取,獲取之后把數(shù)據(jù)生成CSV格式的文件,然后再存入數(shù)據(jù)庫(kù)方便保存。再?gòu)闹?4小時(shí)的AQI(空氣質(zhì)量指數(shù))的平均值中進(jìn)行分析,把數(shù)據(jù)取出來(lái)后,對(duì)數(shù)據(jù)進(jìn)行數(shù)據(jù)清洗,最后將數(shù)據(jù)提取出來(lái)做可視化的分析。在對(duì)數(shù)據(jù)的獲取的過(guò)程中,使用了Python的request去獲取html的一個(gè)文本,然后利用正則表達(dá)式re庫(kù)和beautifulSoup這兩個(gè)庫(kù)去對(duì)數(shù)據(jù)進(jìn)行篩選,拿到自己需要的一些空氣質(zhì)量的數(shù)據(jù),并且同時(shí)寫入CSV文件。在對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)、分類時(shí),利用了Python的sqlalchemy這個(gè)庫(kù),對(duì)寫入CSV的數(shù)據(jù)去存進(jìn)數(shù)據(jù)庫(kù),更簡(jiǎn)單直接的保存大群數(shù)據(jù),然后再使用pandas這個(gè)庫(kù)去讀取數(shù)據(jù)庫(kù)里面的數(shù)據(jù),并且讀取的數(shù)據(jù)可以直接去清洗、分類。在數(shù)據(jù)可視化的步驟中,則用matplotlib和pyecharts這兩個(gè)庫(kù)去將想要分析的數(shù)據(jù)進(jìn)行可視化,繪制成條形圖,方便比較各個(gè)城市的空氣質(zhì)量差異,將當(dāng)天空氣最好的前十五個(gè)城市可視化出來(lái),并且通過(guò)K-means聚類算法等去分析城市的一些空氣質(zhì)量受到影響的原因,以及對(duì)應(yīng)的治理措施。關(guān)鍵詞:Python;爬蟲(chóng);數(shù)據(jù)分析;數(shù)據(jù)庫(kù);數(shù)據(jù)可視化
目錄20560第1章緒論 第1章緒論1.1課題的研究背景及意義隨著經(jīng)濟(jì)的高速發(fā)展,空氣質(zhì)量這一生存的大問(wèn)題顯得越來(lái)越重要,我們以前發(fā)展太多重工業(yè)的時(shí)候,已經(jīng)犧牲了很多的空氣環(huán)境,到現(xiàn)在由于空氣質(zhì)量引發(fā)的一系列問(wèn)題比比皆是,所以我們現(xiàn)在要注重空氣的質(zhì)量去保護(hù)環(huán)境。特別是現(xiàn)在網(wǎng)絡(luò)飛速發(fā)展的時(shí)代,我們可以隨時(shí)隨地就能獲取到各地的空氣質(zhì)量的信息,方便我們?nèi)チ私飧鞯氐目諝赓|(zhì)量以及對(duì)空氣質(zhì)量進(jìn)行及時(shí)的控制,讓空氣質(zhì)量保持在一個(gè)比較良好的范圍。大氣污染狀況是與我們每一個(gè)人的健康情況息息相關(guān)的,我們每一個(gè)人都有責(zé)任去保護(hù)我們的地球,因此普及一些空氣污染的后果以及如何遏制這種提高空氣質(zhì)量具有重大意義。通過(guò)空氣質(zhì)量分析,可以使更多人了解大氣污染重的地區(qū)以及原因,使大家增強(qiáng)環(huán)境保護(hù)意識(shí),提高公眾的科學(xué)素養(yǎng),便于公眾在線閱讀及參與。收集全省各地市空氣自動(dòng)監(jiān)測(cè)點(diǎn)位的實(shí)時(shí)發(fā)布數(shù)據(jù),儲(chǔ)存進(jìn)空氣質(zhì)量搜集的數(shù)據(jù)庫(kù)。這些數(shù)據(jù)不但可以呈現(xiàn)給用戶們每個(gè)城市實(shí)時(shí)的一些空氣質(zhì)量信息,也可以把獲取到的數(shù)據(jù)儲(chǔ)存起來(lái),方便以后去收集利用,還可以把這些數(shù)據(jù)給有關(guān)的保護(hù)環(huán)境的部門,作為整治空氣環(huán)境的理由。所以對(duì)空氣質(zhì)量的關(guān)注是很有必要的。1.2互聯(lián)網(wǎng)數(shù)據(jù)及其分析的研究現(xiàn)狀隨著互聯(lián)網(wǎng)技術(shù)及應(yīng)用的高速發(fā)展,我們也越來(lái)越容易的可以在網(wǎng)上獲得我們所需要的一些數(shù)據(jù),在每個(gè)行業(yè)都擁有著非常海量的數(shù)據(jù)。數(shù)據(jù)量的愈發(fā)增大而導(dǎo)致分析這些空氣質(zhì)量數(shù)據(jù)難度也會(huì)變得更大,因此出現(xiàn)了一方面不斷地產(chǎn)生大量數(shù)據(jù),另一方面有許多的原因?qū)е铝藳](méi)有辦法及時(shí)去利用剛剛收集到的海量的數(shù)據(jù),然后對(duì)這些數(shù)據(jù)造成了浪費(fèi)。數(shù)據(jù)的可視化技術(shù)可以說(shuō)正好挽救了這種數(shù)據(jù)的浪費(fèi),高效率的從數(shù)據(jù)里面獲取需要的東西,現(xiàn)代的數(shù)據(jù)可視化技術(shù)是把存進(jìn)數(shù)據(jù)庫(kù)里非常海量的數(shù)據(jù)提取出來(lái),以非常直接、人們直接看明白的圖像的形式展示給使用者,以方便在廣大的數(shù)據(jù)里去尋找人們自己需要的數(shù)據(jù),而且數(shù)據(jù)能一眼看出來(lái),不需要逐條的去分析,省時(shí)省力。圖像處理、計(jì)算機(jī)輔助設(shè)計(jì)、計(jì)算機(jī)視覺(jué)及人機(jī)交互技術(shù)等多個(gè)領(lǐng)域。在2010年NASA發(fā)布了由加拿大達(dá)爾豪斯大學(xué)的研究人員AaronvanDaniela和RandallMartin將兩臺(tái)衛(wèi)星儀器監(jiān)測(cè)儀器得到的氣溶膠總量數(shù)據(jù)相加,并且與電腦模型計(jì)算出的氣溶膠垂直分布量結(jié)合在一起。1.3論文主要研究?jī)?nèi)容及框架結(jié)構(gòu)本文主要分析了全國(guó)各個(gè)城市的空氣質(zhì)量,主要為號(hào)召大家對(duì)空氣較差的城市進(jìn)行一些改善,使大家的生活環(huán)境能夠變好,而且分析一些城市空氣質(zhì)量好的原因以及地域分布,使用爬蟲(chóng)對(duì)每個(gè)城市的空氣質(zhì)量數(shù)據(jù)進(jìn)行獲取。同時(shí)圍繞城市空氣質(zhì)量的獲取及其分析結(jié)果可視化,進(jìn)行的一系列工作主要有如下:分析pm25.in這個(gè)天氣網(wǎng)站,爬取此站一天的AQI值,然后寫入CSV文件進(jìn)行行列的數(shù)據(jù)整理,然后再將CSV文件寫入數(shù)據(jù)庫(kù)。對(duì)存儲(chǔ)的數(shù)據(jù)進(jìn)行結(jié)果分析,并將其可視化。可視化過(guò)程將利用目前較為流行Pandas與PyEcharts工具進(jìn)行組合呈現(xiàn)數(shù)據(jù)分析結(jié)果,并在一定程度上驗(yàn)證數(shù)據(jù)的正確性,從多個(gè)角度分析一些空氣質(zhì)量好的城市的共同點(diǎn)以及原因,和一些空氣質(zhì)量差的城市的共同點(diǎn)及原因。本文的大概結(jié)構(gòu)如下:第1章概述介紹了對(duì)空氣質(zhì)量分析的意義,以及對(duì)搜集數(shù)據(jù)到分析數(shù)據(jù)的一些簡(jiǎn)略介紹,還有介紹了如今數(shù)據(jù)分析日漸提升的地位。第3章主要介紹Python爬蟲(chóng)的一些知識(shí),介紹在本文使用的一些爬蟲(chóng)類庫(kù),以及對(duì)爬蟲(chóng)的一些科普,讓大家認(rèn)識(shí)到使用惡意爬蟲(chóng)的一些危害以及后果,對(duì)網(wǎng)絡(luò)有著更深的法律意識(shí),本文還講到對(duì)空氣質(zhì)量爬取的一些做法,為下文可視化提供數(shù)據(jù)。第4章和第5章介紹了一些儲(chǔ)存數(shù)據(jù)的工具、清洗數(shù)據(jù)的工具和可視化工具,以及聚類算法介紹。針對(duì)從網(wǎng)上獲取的數(shù)據(jù)進(jìn)行數(shù)據(jù)的保存、清洗并且可視化,并在可視化數(shù)據(jù)過(guò)程中討論空氣質(zhì)量好的城市的分布情況以及空氣質(zhì)量差的城市的分布規(guī)律,并且將好的城市和空氣質(zhì)量差的城市排列出來(lái),接著分析空氣質(zhì)量差的城市所受到的污染物的影響。第6章為設(shè)計(jì)的總結(jié)與展望。總結(jié)了本文關(guān)于空氣質(zhì)量分析與可視化研究成果,并指出我這次數(shù)據(jù)分析過(guò)程中仍需解決的問(wèn)題和可拓展的功能實(shí)現(xiàn)。
第2章需求分析本系統(tǒng)的目的是方便大家實(shí)時(shí)獲取各個(gè)城市的一些空氣質(zhì)量情況,來(lái)決定是否合適出行。由于新冠肺炎疫情的影響,空氣質(zhì)量的問(wèn)題也應(yīng)該更加值得關(guān)注,若是空氣好,對(duì)肺部的負(fù)擔(dān)更少,讓一些有肺部問(wèn)題的人們擁有更好的環(huán)境。作為一種數(shù)據(jù)分析類的系統(tǒng),它的要在內(nèi)部條件與外部條件進(jìn)行需求分析,下面將分為兩個(gè)部分,一個(gè)部分為功能性需求,另一個(gè)部分為非功能性需求去分析,因?yàn)橛绊憯?shù)據(jù)獲取的不但是程序問(wèn)題,還可能包括一些網(wǎng)絡(luò)狀態(tài)等原因。2.1功能性需求分析(1)空氣質(zhì)量數(shù)據(jù)的獲取。這個(gè)功能部分主要是使用Python的requests庫(kù)去獲取pm25.in這個(gè)網(wǎng)站首頁(yè)的整個(gè)網(wǎng)頁(yè)代碼,提取出首頁(yè)的城市名字以及對(duì)應(yīng)的子鏈接,子鏈接里面就是城市的詳細(xì)AQI空氣質(zhì)量信息,通過(guò)爬蟲(chóng)再次爬取每個(gè)城市的鏈接,得到空氣質(zhì)量的數(shù)據(jù),由于這個(gè)網(wǎng)站公布的是實(shí)時(shí)數(shù)據(jù),所以需要爬取前24小時(shí)空氣質(zhì)量的AQI折線圖,然后得到平均值就是這一天的空氣質(zhì)量的值。(2)數(shù)據(jù)存儲(chǔ)。這個(gè)功能是利用SQLAlchemy去把從網(wǎng)頁(yè)獲取到的空氣質(zhì)量數(shù)據(jù)存進(jìn)數(shù)據(jù)庫(kù)中,方便保存,相比于寫進(jìn)CSV文件,存進(jìn)數(shù)據(jù)庫(kù)能更加的方便利用,而且也不會(huì)因?yàn)椴僮魇д`使數(shù)據(jù)丟失。(3)數(shù)據(jù)分析的結(jié)果。該功能主要是列出前十五個(gè)當(dāng)天的空氣質(zhì)量好的城市排名以及空氣質(zhì)量差的城市,并結(jié)合一些地理分布的情況與算法分析的結(jié)果去總結(jié)規(guī)律。2.2非功能性需求分析(1)網(wǎng)絡(luò)的穩(wěn)定性。網(wǎng)絡(luò)的好壞一定程度上會(huì)影響在線數(shù)據(jù)的獲取,所以需要在一個(gè)相對(duì)穩(wěn)定的網(wǎng)絡(luò)環(huán)境下才方便對(duì)數(shù)據(jù)進(jìn)行獲取。(2)容錯(cuò)率要高。對(duì)于一些網(wǎng)站也暫時(shí)沒(méi)有公布出來(lái)的城市空氣數(shù)據(jù),我們需要采取異常處理,不然會(huì)使得程序一直報(bào)錯(cuò)。第3章介紹BeautifulSoup與爬蟲(chóng)的一些事項(xiàng)3.1BeautifulSoup簡(jiǎn)介簡(jiǎn)單來(lái)說(shuō),BeautifulSoup是Python的一個(gè)對(duì)爬蟲(chóng)的數(shù)據(jù)篩選庫(kù),最主要的功能是把網(wǎng)頁(yè)中下載下來(lái)的數(shù)據(jù)進(jìn)行篩選,獲得自己所需要的數(shù)據(jù)。官方解釋如下:BeautifulSoup里面包含了非常Python方式的簡(jiǎn)單的函數(shù)用來(lái)去標(biāo)記所想找到的一些html節(jié)點(diǎn),把他們?nèi)克鸭鰜?lái),類似于我們?cè)诓檎椅臋n中的關(guān)鍵字ctrl+F一樣。它是一個(gè)查找的工具,通過(guò)解析整個(gè)的文檔為使用者提供使用者所指定想要查找到的數(shù)據(jù),非常的簡(jiǎn)單快捷,所以使用BeautifulSoup是一個(gè)非常簡(jiǎn)單的能夠在爬取到的所有數(shù)據(jù)中篩選數(shù)據(jù)的一個(gè)模塊,一般都是從html的標(biāo)簽中查找標(biāo)簽,然后去過(guò)濾一些不必要的標(biāo)簽,從需要的標(biāo)簽里選擇數(shù)據(jù)。BeautifulSoup的一些特點(diǎn)是會(huì)將字符串變成Unicode編碼寫入自己函數(shù)內(nèi),輸出到用戶的電腦中則是會(huì)變成utf-8編碼。所以我們不需要去考慮我們所寫的程序的編碼方式,除非在我們輸出的字符串中沒(méi)有去指定編碼方式。這時(shí),BeautifulSoup就不能夠去識(shí)別這個(gè)字符串的編碼方式了。所以我們就需要自己去說(shuō)明它的編碼方式,讓bs64去接收。BeautifulSoup如今作為一款出色的Python解釋器,地位已經(jīng)趕上了lxml、html6lib,有著非常強(qiáng)勁的處理速度和提供不同的解析策略。3.2關(guān)于爬蟲(chóng)的一些注意事項(xiàng)以及對(duì)空氣質(zhì)量數(shù)據(jù)的搜集3.2.1區(qū)分惡意爬蟲(chóng)和普通爬蟲(chóng)如果把互聯(lián)網(wǎng)比作一個(gè)非常大的蜘蛛網(wǎng),那么我們所使用的爬蟲(chóng)就相當(dāng)于蜘蛛網(wǎng)上的蜘蛛,每天都有無(wú)數(shù)的蜘蛛(爬蟲(chóng))在互聯(lián)網(wǎng)這個(gè)大網(wǎng)中活動(dòng),獲得這些網(wǎng)上的知識(shí)。所以網(wǎng)頁(yè)爬蟲(chóng)就是一種按照制作者所指定的一些命令,去自動(dòng)化的獲取互聯(lián)網(wǎng)上的一些信息資源的一種程序。網(wǎng)絡(luò)爬蟲(chóng)的功能是通過(guò)網(wǎng)絡(luò)的鏈接去獲取該鏈接的內(nèi)容,并且可以對(duì)獲取的網(wǎng)頁(yè)內(nèi)容做出一些處理。簡(jiǎn)單來(lái)說(shuō)就是直接獲取網(wǎng)頁(yè)的前端顯示的所有內(nèi)容,比如html之類的前端頁(yè)面,html包括一些文字內(nèi)容、圖片鏈接、其他網(wǎng)頁(yè)的鏈接。網(wǎng)絡(luò)爬蟲(chóng)就像一個(gè)蜘蛛一樣,只要有url的地方,他就可以沿著url去獲取這個(gè)網(wǎng)頁(yè)的信息。這個(gè)過(guò)程與蜘蛛在自己的蜘蛛網(wǎng)上爬行非常相似,它又被稱為網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)或者網(wǎng)絡(luò)蜘蛛系統(tǒng)。雖然網(wǎng)絡(luò)爬蟲(chóng)對(duì)于一些研究數(shù)據(jù),想要在網(wǎng)上搜集數(shù)據(jù)去做貢獻(xiàn)的人提供了不小的幫助。但也因?yàn)榕老x(chóng)的善惡程度是由使用者決定的,有的不法分子想要利用爬蟲(chóng)去獲取網(wǎng)站的一些不公開(kāi)的數(shù)據(jù),盜取他人隱私,給這些與爬取網(wǎng)站掛鉤的公司和其他一些政府造成非常重大的損失,這是絕對(duì)惡劣的行為,甚至是違法行為,這種爬蟲(chóng)就稱為惡意爬蟲(chóng)。與普通爬蟲(chóng)不同,普通爬蟲(chóng)是獲取網(wǎng)絡(luò)上公開(kāi)的數(shù)據(jù),而惡意爬蟲(chóng)就去專門搜集別人的隱私數(shù)據(jù)、未公開(kāi)的數(shù)據(jù),這樣就讓被人的網(wǎng)站遭受了重大損失。還有網(wǎng)站的不公開(kāi)信息可能在短短的時(shí)間內(nèi)就被惡意爬蟲(chóng)竊取并悄無(wú)聲息的復(fù)制到別的網(wǎng)站。網(wǎng)站的一些關(guān)鍵內(nèi)容被復(fù)制之后使一些網(wǎng)站的權(quán)重變低,然后偷取內(nèi)容的網(wǎng)站權(quán)重變高,到時(shí)候影響了原網(wǎng)站在搜索引擎中的排行,這個(gè)時(shí)候不但會(huì)使用戶訪問(wèn)量越來(lái)越低,還會(huì)讓自己的廣告收益、銷量等等日漸低下。
在網(wǎng)站注冊(cè)過(guò)的用戶若被找到信息,惡意使用者會(huì)利用這一邏輯漏洞,使用他們的爬蟲(chóng)惡意通過(guò)各類社工庫(kù),還有一些社工的APP,當(dāng)惡意的使用者拿到一部分手機(jī)號(hào)后可以在社工庫(kù)去驗(yàn)證這些手機(jī)號(hào)與手機(jī)號(hào)號(hào)主的身份是否匹配,然后就有很多的騷擾電話打上門來(lái)。除了很明顯的違法欺詐外,爬蟲(chóng)的惡意使用者可以將數(shù)據(jù)打包出售給一些黑心的公司,讓他們做各種違法的事情,這就相當(dāng)于黑產(chǎn)行為。值得注意的是,我們?cè)谄匠J褂梅菒阂獾呐老x(chóng),也需要注意一些問(wèn)題,比如別人網(wǎng)站的負(fù)載,不能為自己的效率而去強(qiáng)行提高線程,這樣可能會(huì)使對(duì)方網(wǎng)站因?yàn)樵L問(wèn)量太大而崩潰,到時(shí)候追究的是我們所使用爬蟲(chóng)的人的責(zé)任,2019年就有許多因?yàn)榘褎e人網(wǎng)站爬取崩潰,從而造成別人運(yùn)營(yíng)的損失,然后構(gòu)成了違法行為。3.2.2關(guān)于反爬蟲(chóng)的一些介紹反爬蟲(chóng)是針對(duì)爬蟲(chóng)所爬取網(wǎng)頁(yè)所制定的一種防御策略,可以通過(guò)多種途徑去防止爬蟲(chóng)去對(duì)網(wǎng)頁(yè)收集數(shù)據(jù),下面介紹部分反爬蟲(chóng)的類型:通過(guò)UserAgentUserAgent是表示http協(xié)議瀏覽器的信息,若是使用的Python爬蟲(chóng),UserAgent則會(huì)變成Python,所以禁止帶Python頭的一些數(shù)據(jù)可以遏制一部分的爬蟲(chóng)。根據(jù)用戶行為若是在一個(gè)IP內(nèi),用戶對(duì)網(wǎng)頁(yè)的訪問(wèn)過(guò)多,就會(huì)被認(rèn)定為是使用了爬蟲(chóng),所以可以判斷短時(shí)間內(nèi)對(duì)同一網(wǎng)頁(yè)訪問(wèn)次數(shù)過(guò)多的“用戶”判定為爬蟲(chóng),所以可以封禁一些訪問(wèn)頻率過(guò)高的ip?;隍?yàn)證碼的反爬蟲(chóng)有些網(wǎng)站設(shè)置的驗(yàn)證碼就是專門防止一些爬蟲(chóng)無(wú)障礙的獲取到網(wǎng)頁(yè)數(shù)據(jù),所以設(shè)立了需要驗(yàn)證碼,這個(gè)時(shí)候就不得不手動(dòng)去輸入驗(yàn)證碼讓驗(yàn)證通過(guò),這樣就可以比較好的防止爬蟲(chóng)?;诘顷懙姆磁老x(chóng)有些網(wǎng)站只能登陸進(jìn)去才能訪問(wèn)到里面的數(shù)據(jù),而過(guò)于簡(jiǎn)單的Python爬蟲(chóng)并不能選擇自動(dòng)登陸,所以也可以攔截住一部分的爬蟲(chóng)。3.2.3對(duì)空氣質(zhì)量以及對(duì)應(yīng)城市數(shù)據(jù)的爬取考慮到上文提到的防止違法行為,我選擇了一個(gè)比較有公開(kāi)性的空氣質(zhì)量檢測(cè)網(wǎng)站pm25.in,以及不提高其線程,防止對(duì)服務(wù)器造成太大負(fù)荷。查看了html的代碼,數(shù)據(jù)來(lái)源就是pm25.in所提供的,下載手法是使用Python的requests模塊對(duì)網(wǎng)頁(yè)的html代碼進(jìn)行下載,而主要爬取思路如下:1.在主頁(yè)爬取城市的pinyin,通過(guò)這個(gè)網(wǎng)站發(fā)現(xiàn),每個(gè)城市的頁(yè)面就是主站+pinyin,如圖2.1所示。2.拿到pinyin的列表之后,再通過(guò)循環(huán)去爬取每個(gè)城市的AQI(空氣質(zhì)量指數(shù))以及污染物的數(shù)值,如圖2.2所示。3.由于網(wǎng)站檢測(cè)的AQI數(shù)值是每個(gè)小時(shí)的,所以需要去爬取24小時(shí)的空氣質(zhì)量數(shù)值,然后去除以一天的24小時(shí),得出來(lái)的AQI平均值比較有代表性,如圖2.3所示。4.還要去搜集一下空氣質(zhì)量較差的城市 圖2.1頁(yè)面前端的規(guī)律圖2.2網(wǎng)站的空氣數(shù)據(jù)圖2.3廣州24小時(shí)的空氣質(zhì)量數(shù)據(jù)爬取的效果如圖2.4所示:圖2.4爬取數(shù)據(jù)效果第4章數(shù)據(jù)處理工具與算法介紹4.1Pandas模塊介紹Pandas是Python當(dāng)中的一個(gè)拓展的庫(kù),Pandas里面包含了大量的標(biāo)準(zhǔn)數(shù)據(jù)類型并且提供了高效操作大型數(shù)據(jù)的工具,對(duì)于數(shù)據(jù)的處理,pandas可以做到非常的高效,并且可以與多種類庫(kù)共同使用,對(duì)編程者非常友好。同時(shí)Pandas也提供了集中數(shù)據(jù)結(jié)構(gòu)供使用者使用: 1.Series:一維數(shù)組,類似于List列表的一種數(shù)據(jù)結(jié)構(gòu),但是Series與List有一些不同之處,就是Series只允許儲(chǔ)存相同數(shù)據(jù)類型的數(shù)據(jù),這樣有利于內(nèi)存分配同時(shí)提高運(yùn)算效率。數(shù)據(jù)庫(kù)中相同列的數(shù)據(jù)也是起著同樣作用。 2.DataFrame:二維數(shù)組,是一種表格型的數(shù)據(jù)結(jié)構(gòu),簡(jiǎn)單來(lái)說(shuō)就是行與列都有一層的Series的數(shù)組,這樣組成新的二維數(shù)組。當(dāng)用戶將所需要的數(shù)據(jù)寫進(jìn)Excel表格文件時(shí),DataFrame這種數(shù)據(jù)結(jié)構(gòu)可以很方便地利用CSV文件格式創(chuàng)建Excel表格,做到了與Excel表格基本沒(méi)有任何的錄入障礙。3.Panel:三維數(shù)組,同理可以理解為DataFrame之間的嵌套。利用爬蟲(chóng)獲取到空氣質(zhì)量的數(shù)據(jù)之后,可以同時(shí)將其寫入已存在的CSV表格。同時(shí)還可以使用sqlalchemy去把CVS文件寫入數(shù)據(jù)庫(kù),方便保存并且以防丟失。4.2SQLAlchemy模塊簡(jiǎn)介及應(yīng)用SQLAlchemy是Python的一種SQL工具包和對(duì)象關(guān)系映射器,是Python的一種ORM(ObjectRelationshipMapping)框架,而ORM是一種為了面向?qū)ο缶幊涕_(kāi)發(fā)方法而產(chǎn)生的一種對(duì)象關(guān)系映射的工具,它的關(guān)系是指關(guān)系數(shù)據(jù)庫(kù),也就是數(shù)據(jù)可以保存在數(shù)據(jù)庫(kù)當(dāng)中。當(dāng)生成一個(gè)對(duì)象時(shí),對(duì)象可以從數(shù)據(jù)庫(kù)當(dāng)中獲取持久化的數(shù)據(jù),不像是我們運(yùn)行一個(gè)程序,里面的變量參數(shù)只存在程序運(yùn)行的時(shí)候,數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)里是持久的,反過(guò)來(lái),數(shù)據(jù)也可以存儲(chǔ)在數(shù)據(jù)庫(kù)當(dāng)中。使用SQLAlchemy的時(shí)候,可以簡(jiǎn)化開(kāi)發(fā)時(shí)候需要使用SQL語(yǔ)句這一步操作,可以直接思考他的代碼邏輯,從而簡(jiǎn)化一些步驟,提高開(kāi)發(fā)中的效率。SQLAlchemy提供了一種非常持久性的模式,用于數(shù)據(jù)庫(kù)訪問(wèn)的時(shí)候,就顯得非常的高效率。使用SQLAlchemy的優(yōu)勢(shì)是即使開(kāi)發(fā)人員不熟悉數(shù)據(jù)庫(kù)操作的語(yǔ)句,SQLAlchemy可以讓開(kāi)發(fā)人員直接使用對(duì)象操作,從而跳過(guò)數(shù)據(jù)庫(kù)語(yǔ)句的操作,不用開(kāi)發(fā)人員去查找數(shù)據(jù)庫(kù)語(yǔ)句,提高了開(kāi)發(fā)的效率。而其中也有它的缺點(diǎn),使用SQLAlchemy的缺點(diǎn)是跳過(guò)了數(shù)據(jù)庫(kù)語(yǔ)句操作之后,不容易進(jìn)行數(shù)據(jù)庫(kù)查詢的優(yōu)化,從而可能帶來(lái)一些性能上、運(yùn)行方面的損失。下面是SQLAlchemy的一些常用的參數(shù):1.create_engine:可以當(dāng)作作為一個(gè)橋梁架起數(shù)據(jù)庫(kù)與Python之間的溝通,使Python可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行連接,里面的數(shù)據(jù)類型為字符串,用來(lái)表示連接的信息:’數(shù)據(jù)庫(kù)類型+數(shù)據(jù)庫(kù)驅(qū)動(dòng)名稱://用戶名:密碼@需要連接主機(jī)的ip(如果是本機(jī)則是localhost或者):端口號(hào)/數(shù)據(jù)庫(kù)名’2.sessionmaker:生成一個(gè)數(shù)據(jù)庫(kù)的會(huì)話類。這個(gè)類相當(dāng)于一個(gè)數(shù)據(jù)庫(kù)連接的session,向數(shù)據(jù)庫(kù)申請(qǐng)一個(gè)會(huì)話,同時(shí)這個(gè)類還會(huì)記錄一些查詢的數(shù)據(jù),并且可以控制執(zhí)行SQL語(yǔ)句的時(shí)間。當(dāng)用這個(gè)類拿到一個(gè)數(shù)據(jù)庫(kù)返回的session之后,就可以用這個(gè)session對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查。4.3關(guān)于PyechartsPyecharts是Python與Echarts交接而成,用于生成Echarts圖表的一個(gè)類庫(kù)。而Echarts是由百度研發(fā),一個(gè)可以生成生動(dòng),直觀,可以交互并且可以高度個(gè)性化定制的web數(shù)據(jù)可視化圖表的可視化庫(kù)。簡(jiǎn)單來(lái)說(shuō)Echarts有著超越許多同行的一些優(yōu)勢(shì),可視化出來(lái)的數(shù)據(jù)圖十分的美觀且炫酷。Pyecharts就是在Echarts的基礎(chǔ)上的一個(gè)Python類庫(kù)。值得注意的是,Pyecharts分為兩個(gè)版本,一個(gè)v0.5x,另一個(gè)為v1,兩個(gè)版本并不兼容,而且v0.5x僅僅支持Python2.7,Python3.4+,而v1的版本僅支持3.6+的版本,導(dǎo)入模塊的方式也不完全相同,所以Python版本限制了Pyecharts的版本。Pyecharts的強(qiáng)大之處在于可以導(dǎo)入全國(guó)甚至全球的地圖包,然后對(duì)其進(jìn)行數(shù)據(jù)可視化,清楚的了解地區(qū)的特點(diǎn)。順帶一提,Pyecharts是Python的一個(gè)拓展庫(kù),需要用pip去自行下載。4.4K-means算法介紹K-means算法是一種基于坐標(biāo)與距離的一種聚類算法,聚類算法就是將數(shù)據(jù)中分散的樣本分類,將每個(gè)特征相似的樣本都分為一組,在K-means算法中,這種組稱為“簇”。算法原理是先在樣本中做k個(gè)隨機(jī)點(diǎn),作為“簇”的中心點(diǎn),然后計(jì)算樣本到這些“簇”的距離,對(duì)于樣本點(diǎn),距離哪個(gè)“簇”最近,就歸類在這個(gè)“簇”內(nèi),分完樣本點(diǎn)后。繼續(xù)在這些“簇”中重新選一個(gè)中心點(diǎn),繼續(xù)計(jì)算離中心點(diǎn)的距離,繼續(xù)劃分“簇”,直到中心點(diǎn)的變化很小為止。第5章數(shù)據(jù)的可視化介紹及數(shù)據(jù)分析數(shù)據(jù)可視化是指利用圖形、動(dòng)畫(huà)等更加形象的一些表達(dá)方式對(duì)數(shù)據(jù)進(jìn)行體現(xiàn),在如今的大數(shù)據(jù)時(shí)代,每秒鐘就有無(wú)數(shù)條數(shù)據(jù),而一條條的去看這些數(shù)據(jù),不但枯燥,而且又難以記住,當(dāng)使用了數(shù)據(jù)可視化,就能將數(shù)據(jù)以圖形或者動(dòng)畫(huà)的方式呈現(xiàn)出來(lái),到時(shí)候我們可以使用圖形記憶去記住這些數(shù)據(jù),而不是將數(shù)字去背下來(lái),這樣的數(shù)據(jù)更容易去使用和理解。現(xiàn)在數(shù)據(jù)可視化應(yīng)用到許多方面,在新聞傳播的行業(yè)中,數(shù)據(jù)可視化不但是一種非常合理的呈現(xiàn)方式,節(jié)省大家的理解,只需幾秒鐘就可以看懂圖中的數(shù)據(jù)所想表達(dá)的意思,還是帶有更強(qiáng)的互動(dòng)性的一張信息圖表,這就說(shuō)明了數(shù)據(jù)可視化的化繁為簡(jiǎn)的一個(gè)優(yōu)點(diǎn),并且增加信息的可讀性和趣味性。信息的表達(dá)形式和手中閱讀信息時(shí)候的受歡迎度、記憶度和參與度存在一定的關(guān)系,可視化的敘事方式不僅降低了受眾的獲知知識(shí)的成本,而且提高了一些用戶對(duì)于這些信息的記憶效率和給其他人分享的欲望,這就為數(shù)據(jù)的傳播提供了非常良好的途徑。有科學(xué)研究表明,注視記錄長(zhǎng)度與喜愛(ài)度之間存在非常正相關(guān)的關(guān)系。用視覺(jué)元素去快速抓住觀眾們的眼球,營(yíng)造不同的興趣點(diǎn),這樣來(lái)實(shí)現(xiàn)自己所喜歡的“悅讀”方式,進(jìn)而延長(zhǎng)信息消費(fèi)的過(guò)程,已然成為當(dāng)下各類媒體爭(zhēng)取受眾的制勝之策。一般地,在人們對(duì)空氣質(zhì)量查看的過(guò)程中,會(huì)著重關(guān)注一些空氣質(zhì)量好的城市所處的位置、空氣質(zhì)量差的城市污染物的排放量、以及空氣質(zhì)量好的城市的排行。而且有些人們打算去某些城市旅游的,自己又不幸?guī)в羞^(guò)敏性鼻炎,這些空氣質(zhì)量對(duì)他們來(lái)說(shuō)影響更加的大,使他們不得不關(guān)注自己意向去到的城市的空氣質(zhì)量情況,以防患上更嚴(yán)重的呼吸類疾病。對(duì)于數(shù)據(jù)的可視化,本著淺顯易懂的原則,本文對(duì)于以下若干問(wèn)題做出了圖標(biāo)化處理,即進(jìn)一步對(duì)所獲取的數(shù)據(jù)進(jìn)行可視化處理。列出空氣質(zhì)量最好的前十五個(gè)城市列出空氣質(zhì)量最壞的前十五個(gè)城市以地區(qū)分析空氣質(zhì)量好的城市的一些分布特點(diǎn)以地區(qū)分析空氣質(zhì)量差的城市的一些分布特點(diǎn)將污染物占比進(jìn)行可視化使用K-means算法分析污染情況相似的城市5.1空氣質(zhì)量最好的前15個(gè)城市排名展示根據(jù)從網(wǎng)上獲取到24小時(shí)的空氣質(zhì)量數(shù)據(jù)的平均值,空氣質(zhì)量最好的前十五個(gè)城市如圖5.1所示:圖5.1空氣質(zhì)量最好的前十五個(gè)城市圖5.1中顯示全國(guó)空氣質(zhì)量最好的前十五個(gè)城市,其中旅游勝地三亞高踞榜首,緊隨其后的湛江、陽(yáng)江兩個(gè)城市也是旅游的大城市,有著非常豐富的水資源,綠化方面做得非常好,從整張圖的角度看來(lái),這15個(gè)城市都處于AQI值35以下,在空氣質(zhì)量的判斷條件當(dāng)中屬于非常優(yōu)秀的水平。從省份分析,在空氣質(zhì)量最好的前十五個(gè)城市當(dāng)中,廣東省所占據(jù)的城市比例最多,有湛江、陽(yáng)江、茂名、汕尾、韶關(guān)五個(gè)城市,共占這十五個(gè)城市的三分之一,由地理環(huán)境所知,廣東的水資源非常豐富,降雨量也非常多,表明空氣質(zhì)量受到水的影響非常大。從城市的發(fā)達(dá)程度看來(lái),以上十五個(gè)城市全部位列三線城市及以下,空氣好的原因可能為經(jīng)濟(jì)發(fā)展比不上一二線城市的水平,所以工業(yè)污染較少,在城市街道的出行車比較少,排放的廢氣少,使得空氣維持在了一個(gè)較好的水平,在一定程度上說(shuō)明了經(jīng)濟(jì)與環(huán)境的關(guān)系。5.2空氣質(zhì)量最差的前15個(gè)城市展示根據(jù)從網(wǎng)上獲取到24小時(shí)的空氣質(zhì)量數(shù)據(jù)的平均值,空氣質(zhì)量最差的前十五個(gè)城市如圖5.2所示:圖5.2空氣質(zhì)量差的前十五個(gè)城市從區(qū)域角度分析,前五名空氣差的城市都屬于新疆維吾爾自治區(qū),具體原因?yàn)樯硥m暴的影響,因?yàn)樾陆涤炅刻?,?dǎo)致沙塵容易揚(yáng)起,到處都是顆粒物,并且在新疆有許多熱電廠、煤化工廠、硅鐵、石油化工廠、水泥廠等重污染的工廠,還有很多附屬?gòu)S;加上其它燃煤鍋爐、家里的燃煤爐子、在街邊飯店的烤肉爐。數(shù)量驚人,外界環(huán)境的條件加上自己使用重污染的一些物資,導(dǎo)致了這些城市空氣質(zhì)量這么差。由數(shù)據(jù)可以知道,有三個(gè)屬于新疆的城市達(dá)到了驚人的500AQI值,這個(gè)屬于嚴(yán)重污染的范圍,后面的幾個(gè)城市污染程度也在150以上,都屬于中度污染以上的級(jí)別。5.3以地區(qū)分析城市空氣質(zhì)量好的特點(diǎn)由圖5.3可知,空氣質(zhì)量好的地區(qū)大多數(shù)分布在空氣濕度較高的地方比如:長(zhǎng)江以南的城市和四川盆地,其中還有西部和東北部的豐水區(qū)。在長(zhǎng)江以南的地方尤為密集。長(zhǎng)江以南的地區(qū)主要以亞熱帶季風(fēng)氣候?yàn)橹?,降水量較多,空氣濕潤(rùn)。主要發(fā)展輕工業(yè),相對(duì)于重工業(yè),輕工業(yè)的污染比較小。降水能夠有效吸收、淋洗空氣中的污染物。因此這些地區(qū)的空氣的自我凈化能力較強(qiáng)。圖5.3空氣質(zhì)量最好的城市分布圖5.4以地區(qū)分析城市空氣質(zhì)量差的特點(diǎn)如圖5.4所示,空氣質(zhì)量不好的地方多數(shù)分布在華北地區(qū)和新疆的荒漠地區(qū)。這些地區(qū)的主要特點(diǎn)是降水少,氣候干燥。這些地區(qū)的氣候是溫帶季風(fēng)性氣候和溫帶大陸性氣候,降水少空氣干燥,風(fēng)沙比較多。因此這些地區(qū)的空氣自我凈化能力弱。由圖所見(jiàn),空氣質(zhì)量差的密集區(qū)在黃河中下游地區(qū)。這部分地區(qū)在冬天的時(shí)候燃煤供暖,會(huì)產(chǎn)生有害氣體和粉塵,其次該地區(qū)是工業(yè)密集區(qū),石油,煤化,冶金工業(yè)發(fā)達(dá),人類活動(dòng)和工業(yè)生產(chǎn)對(duì)空氣質(zhì)量影響大。圖5.4空氣質(zhì)量差的城市分布圖5.5污染物占比的可視化圖5.5是對(duì)存在污染物的城市進(jìn)行歸納,然后將這些污染物的占比可視化出來(lái)。由圖中我們可以看到,存在污染物的城市中,收到PM10影響的城市是最多的,其次是PM2.5,這兩種顆粒物加起來(lái)占污染物的90%以上,說(shuō)明當(dāng)前要對(duì)空氣質(zhì)量的提高,仍需首要解決的還是顆粒物的問(wèn)題。圖5.5空氣質(zhì)量與污染物圖5.6通過(guò)K-means聚類算法的分析結(jié)果要使用K-means算法分析,首先要對(duì)爬取到的數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化,同比例縮小,使得特征相似的城市落入一個(gè)小的特定區(qū)間內(nèi),消除奇異樣本的影響。標(biāo)準(zhǔn)化之后,就是將這些數(shù)據(jù)進(jìn)行聚類算法計(jì)算,是它們特點(diǎn)相似的歸為一類。具體流程圖如5.6所示圖5.6K-means計(jì)算的流程圖下面將著重分析受到污染的城市的“簇”。根據(jù)樣本的標(biāo)準(zhǔn),我把這些城市分為5個(gè)“簇”,如圖5.7所示,右邊是每個(gè)簇包含的城市數(shù)量。圖5.7“簇”內(nèi)城市的數(shù)量由圖5.7和5.8,第一聚類有73座城市,代表城市有白銀、包頭等,群體特點(diǎn)為:所有污染物氣體均大于城市平均水平,但是又不算高太多,可采取溫和控制方法,對(duì)工業(yè)生產(chǎn)流程細(xì)節(jié)進(jìn)行一些改良,減少排放。圖5.8第一聚類城市特點(diǎn)由圖5.7和5.8,第二聚類有31座城市,代表城市有安陽(yáng)、濱州、常熟等,群體特點(diǎn)為:二氧化氮、一氧化碳排放量明顯大于其他城市群體,空氣質(zhì)量也偏差,這類城市可以減少氮氧化物的排放,建議使用清潔能源。圖5.9第二聚類城市特點(diǎn)由圖5.7和圖5.10,第四聚類有10座城市,代表城市有大同、和田地區(qū)等,所代表的群體特征為PM10、PM2.5的排放非常嚴(yán)重??晌腩w粒物在環(huán)境空氣中持續(xù)的時(shí)間很長(zhǎng),對(duì)人體健康和大氣能見(jiàn)度影響都很大。通常在汽車在沙地?fù)P起的沙塵,被風(fēng)卷起的塵土,還有一些重工業(yè)的污染。圖5.10第四聚類城市特點(diǎn)第6章總結(jié)與展望6.1總結(jié)主要實(shí)現(xiàn)了對(duì)pm25.in的城市空氣質(zhì)量和其污染物的搜集,并將其獲取到的數(shù)據(jù)存儲(chǔ)進(jìn)入數(shù)據(jù)庫(kù)。并且使用pandas模塊去將這些數(shù)據(jù)從數(shù)據(jù)庫(kù)中讀取出來(lái),然后使用matplolib和pyecharts進(jìn)行可視化。在獲取數(shù)據(jù)過(guò)程中,用了比較多的時(shí)間花在了獲取整個(gè)網(wǎng)站的全部城市空氣質(zhì)量以及首要污染物的實(shí)時(shí)數(shù)據(jù),并且在該網(wǎng)站的24小時(shí)的空氣質(zhì)量數(shù)據(jù)比較難以獲取,難點(diǎn)主要在于對(duì)全天AQI的獲取。我在這次項(xiàng)目中完成了以下的工作:(1) 對(duì)空氣質(zhì)量網(wǎng)站的全部城市的空氣質(zhì)量進(jìn)行了數(shù)據(jù)爬取,并且配置了數(shù)據(jù)庫(kù)與Python進(jìn)行連接,在這個(gè)過(guò)程中遇到了一些配置上的錯(cuò)誤,后來(lái)發(fā)現(xiàn)需要下載pymysql的類庫(kù)去制造一個(gè)依賴環(huán)境。(2) 對(duì)獲取到的城市空氣質(zhì)量數(shù)據(jù)存放進(jìn)數(shù)據(jù)庫(kù)并使用pandas取出來(lái),方便可視化處理。對(duì)于存放到數(shù)據(jù)庫(kù)的數(shù)據(jù)可視化,本篇文章使用了數(shù)據(jù)可視化工具matplolib和pyecharts進(jìn)行數(shù)據(jù)排名展示和對(duì)數(shù)據(jù)的空間分布展示,并結(jié)合各城市的一些氣候情況,污染物排放量,對(duì)這些城市的空氣質(zhì)量進(jìn)行一些可視化分析和數(shù)據(jù)上的分析。本次數(shù)據(jù)分析對(duì)多個(gè)城市進(jìn)行分析后,在幾個(gè)角度得到一些結(jié)論:(1) 在展示的空氣質(zhì)量最好的15個(gè)城市中,廣東的城市占了最大的一部分,而且這些城市大部分是水資源多的地區(qū),有的沿海地區(qū)空氣環(huán)境更好,而且這15個(gè)城市都是三線城市及以下的城市,說(shuō)明水資源同樣豐富的情況下,經(jīng)濟(jì)不太發(fā)達(dá)的城市要比發(fā)達(dá)的城市空氣質(zhì)量好。(2) 在展示的空氣質(zhì)量最差的15個(gè)城市中,前五名空氣差的城市都屬于新疆維吾爾自治區(qū),具體原因?yàn)樯硥m暴的影響,因?yàn)樾陆涤炅刻?,?dǎo)致沙塵容易揚(yáng)起,到處都是顆粒物,并且根據(jù)一些地方的資料介紹,在新疆有許多熱電廠、煤化工廠、硅鐵、石油化工廠、水泥廠等重污染的工廠,還有很多其他污染嚴(yán)重的附屬?gòu)S;加上其他家里用戶所使用的燃煤鍋爐、家里的燃煤爐子、在街邊飯店的烤肉爐,這樣的排放加上自然環(huán)境就導(dǎo)致了空氣質(zhì)量的惡劣。(3) 從地理位置分布規(guī)律看,空氣質(zhì)量好的地區(qū)大多數(shù)分布在空氣濕度較高的地方比如:長(zhǎng)江以南的城市和四川盆地,其中還有西部和東北部的豐水區(qū)。在長(zhǎng)江以南的地方尤為密集。長(zhǎng)江以南的地區(qū)主要以亞熱帶季風(fēng)氣候?yàn)橹鳎邓枯^多,空氣濕潤(rùn)。主要發(fā)展輕工業(yè),相對(duì)于重工業(yè),輕工業(yè)的污染比較小。降水能夠有效吸收、淋洗空氣中的污染物。因此這些地區(qū)的空氣的自我凈化能力較強(qiáng)。(4) 從地里位置分布規(guī)律看,空氣質(zhì)量不好的地方多數(shù)分布在華北地區(qū)和新疆的荒漠地區(qū)。這些地區(qū)的主要特點(diǎn)是降水少,氣候干燥。這些地區(qū)的氣候是溫帶季風(fēng)性氣候和溫帶大陸性氣候,降水少空氣干燥,風(fēng)沙比較多。因此這些地區(qū)的空氣自我凈化能力弱。由圖所見(jiàn),空氣質(zhì)量差的密集區(qū)在黃河中下游地區(qū)。這部分地區(qū)在冬天的時(shí)候燃煤供暖,會(huì)產(chǎn)生有害氣體和粉塵,其次該地區(qū)是工業(yè)密集區(qū),石油,煤化,冶金工業(yè)發(fā)達(dá),人類活動(dòng)和工業(yè)生產(chǎn)對(duì)空氣質(zhì)量影響大。(5) 在首要污染物占比角度看,存在污染物的城市中,收到PM10影響的城市是最多的,其次是PM2.5,這兩種顆粒物加起來(lái)占污染物的90%以上,說(shuō)明當(dāng)前要對(duì)空氣質(zhì)量的提高,仍需首要解決的還是顆粒物的問(wèn)題。(6)通過(guò)聚類分析算法的結(jié)果看,分成的五個(gè)聚類中,有三個(gè)聚類的空氣質(zhì)量是偏差的,而且這些聚類的污染物排放規(guī)律也不一樣,可以通過(guò)聚類中存在的問(wèn)題,對(duì)情況相似的城市進(jìn)行污染物治理,增加治理的效率。6.2展望通過(guò)本文的研究,可以實(shí)現(xiàn)對(duì)我國(guó)城市的空氣質(zhì)量的數(shù)據(jù)獲取和數(shù)據(jù)可視化研究。對(duì)理解Python爬蟲(chóng)、數(shù)據(jù)儲(chǔ)存數(shù)據(jù)庫(kù)、以及對(duì)數(shù)據(jù)處理方式的理解有了更為深刻的印象。Python作為一種腳本編程語(yǔ)言,在爬蟲(chóng)、數(shù)據(jù)分析上的優(yōu)勢(shì)確實(shí)比其他編程語(yǔ)言要好一些,獲取數(shù)據(jù)的主要來(lái)源也是依靠于爬蟲(chóng)。但由于一些原因,本課題的研究還有許多不足的地方,主要體現(xiàn)在以下的方面:因?yàn)榭諝赓|(zhì)量是和季節(jié)有著比較大的關(guān)系的,所以本次數(shù)據(jù)分析的分布規(guī)律僅限于在這個(gè)季度的天氣當(dāng)中,到了夏天說(shuō)不定規(guī)律就有一定的偏差性。因?yàn)榭紤]到爬蟲(chóng)對(duì)服務(wù)器的影響,我并沒(méi)有提高任何線程,怕給服務(wù)器帶來(lái)壓力,在爬取全國(guó)的375個(gè)城市中,數(shù)據(jù)的處理需要幾分鐘到十幾分鐘的時(shí)間,這個(gè)是比較慢的。參考文獻(xiàn)[1] 周勇.空氣質(zhì)量監(jiān)測(cè)分析系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子世界,2019(18):164-165[2] 尹小妹,田國(guó)祥,王天一,耿輝,賀海蓉,張勇,呂軍.Python爬蟲(chóng)獲取天氣數(shù)據(jù)與兒童肺部疾病門診就診率相關(guān)性分析[J].中國(guó)循證心血管醫(yī)學(xué)雜志,2019,11(09):1047-1049+1061.[3] 張濤.空氣質(zhì)量分析系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].河北科技大學(xué),2016
致謝 本論文能順利完成,首先應(yīng)感謝的是我的導(dǎo)師譚康裕老師,是他給予我很大的幫助,給我指導(dǎo)了分析數(shù)據(jù)的方向和思路,然后還有我的一些同學(xué),是他們?cè)谡{(diào)試數(shù)據(jù)庫(kù)的時(shí)候給了我很大的幫助,讓我在錯(cuò)誤中成功,對(duì)數(shù)據(jù)庫(kù)進(jìn)行連接,也幫助我找到了pyechart與Python版本不兼容的問(wèn)題。最后還要感謝我的父母,在這次論文中給了我很大的支持。 最后再次謝謝幫助我的所有人,因?yàn)槟銈儯业恼撐牟拍茼樌耐瓿桑?/p>
附錄具體的代碼如下:爬取空氣質(zhì)量的信息importrequests
frombs4importBeautifulSoup
importcsv
importre
defget_city_aqi(city_list):
'''
獲取城市AQI
'''
url='http://pm25.in/'+city_list
r=requests.get(url,timeout=30)
soup=BeautifulSoup(r.text,'lxml')
div_list=soup.find_all('div',{'class':'span1'})
div_list2=soup.find('div',{'class':'primary_pollutant'}).text.strip()
pollutant=div_list2.replace('','')
p2=pollutant.replace('首要污染物:','')
p3=p2.strip("\n")
ifp3=='':
p3='無(wú)'
data=r"data:(.*?),\n"
dat=re.findall(data,r.text)
datas=dat[0]
datass=datas.split(",")
datass[0]=datass[0].replace('[','')
datass[-1]=datass[-1].replace(']','')
datas=[int(i)foriindatass]
he=sum(datas)/24
city_aqi=[p3]+[he]
foriinrange(8):
div_content=div_list[i]
caption=div_content.find('div',{'class':'caption'}).text.strip()
value=div_content.find('div',{'class':'value'}).text.strip()
city_aqi.append(value)
returncity_aqi
defget_all_cities():
'''
獲取所有城市的url
'''
url='http://pm25.in/'
city_list=[]
r=requests.get(url,timeout=30)
soup=BeautifulSoup(r.text,'lxml')
city_div=soup.find_all('div',{'class':'bottom'})[1]
city_link_list=city_div.find_all('a')
forcity_linkincity_link_list:
city_name=city_link.text
city_pinyin=city_link['href'][1:]
city_list.append((city_name,city_pinyin))
returncity_list
defmain():
city_list=get_all_cities()
header=['City','首要污染物','AQI/24h','AQI','PM2.5/1h','PM10/1h','C0/1h','NO2/1h','03/1h','03/8h','SO2/1h']
withopen('aqi327.csv','w',encoding='utf-8',newline='')asf:
writer=csv.writer(f)
writer.writerow(header)
fori,cityinenumerate(city_list):
try:
if(i+1)%10==0:
print('已處理{}條記錄.(共{}條記錄)'.format(i+1,len(city_list)))
city_name=city[0]
city_pinyin=city[1]
city_aqi=get_city_aqi(city_pinyin)
#print(city_name,city_aqi)
row=[city_name]+city_aqi
print(row)
writer.writerow(row)
except:
print()
if__name__=='__main__':
main()收集到的數(shù)據(jù)寫入數(shù)據(jù)庫(kù):importtornadoastornado
fromsqlalchemyimportcreate_engine
fromsqlalchemy.ormimportsessionmaker
importpandasaspd
DB_CONNECT_STRING='mysql+pymysql://root:123456@localhost/mysql'
engine=create_engine(DB_CONNECT_STRING,echo=True)
DB_Session=sessionmaker(bind=engine)
print(engine)
df=pd.read_csv("aqi327.csv",sep=',')
df.to_sql('327day',engine,index=False)
print('成功!')對(duì)空氣質(zhì)量城市的前十五名展示:
fromsqlalchemyimportcreate_engine
fromsqlalchemy.ormimportsessionmaker
importpandasaspd
importmatplotlib.pyplotasplt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
DB_CONNECT_STRING='mysql+pymysql://root:123456@localhost/mysql'
engine=create_engine(DB_CONNECT_STRING,echo=True)
DB_Session=sessionmaker(bind=engine)
print(engine)
sql="select*from327day"
df=pd.read_sql_query(sql,engine)
clean_aqi_data=df[df['AQI/24h']>0]
top50_cities=clean_aqi_data.sort_values(by=['AQI/24h']).head(15)
print('空氣質(zhì)量最好的15個(gè)城市:')
print(top50_cities)
bad10_cities=clean_aqi_data.sort_values(by=['AQI/24h'],ascending=False).head(15)
print('空氣質(zhì)量最差的15個(gè)城市:')
print(bad10_cities)
top50_cities.plot(kind='bar',x='City',y='AQI/24h',title='空氣質(zhì)量最好的50個(gè)城市',figsize=(20,10))
plt.savefig('top50_aqi.png')
plt.show()對(duì)空氣質(zhì)量好的城市的地域分布:fromimpimportreload
fromsqlalchemyimportcreate_engine
fromsqlalchemy.ormimportsessionmaker
importpandasaspd
importmatplotlib.pyplotasplt
frompyechartsimportGeo
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
DB_CONNECT_STRING='mysql+pymysql://root:123456@localhost/mysql'
engine=create_engine(DB_CONNECT_STRING,echo=True)
DB_Session=sessionmaker(bind=engine)
sql="select*from327day"
df=pd.read_sql_query(sql,engine)
clean_aqi_data=df[df['AQI/24h']>0]
bad50_cities=clean_aqi_data.sort_values(by=['AQI/24h'],ascending=False).head(50)
city=bad50_cities["City"]
aqi=bad50_cities["AQI/24h"]
geo=Geo("空氣質(zhì)量",title_color="#fff",title_pos="center",width=800,height=600,background_color="#404a59")
geo.add(
"",
city,
aqi,
visua_range=[0,200],
visua_text_color="#fff",
symbol_size=15,
is_visualmap=True,
)
geo.show_config()
geo.render(path="b327.html")
餅圖:fromimpimportreload
fromsqlalchemyimportcreate_engine
fromsqlalchemy.ormimportsessionmaker
importpandasaspd
importmatplotlib.pyplotasplt
frompyechartsimportPie
DB_CONNECT_STRING='mysql+pymysql://root:123456@localhost/mysql'
engine=create_engine(DB_CONNECT_STRING,echo=True)
DB_Session=sessionmaker(bind=engine)
#print(engine)
#session=DB_Session()
sql="select*from517day"
df=pd.read_sql_query(sql,engine)
#print(df)
df1=df[df['首要污染物']!='無(wú)']
df=df1[df1['AQI/24h']>0]
p=df['首要污染物'].value_counts()
p_list=['顆粒物(PM10)','顆粒物(PM2.5)','臭氧8小時(shí)','顆粒物(PM2.5),顆粒物(PM10)']
#print(p)
#num=[p]
wu_list=[]
ci_list=[]
'''
city=df['City']
city_list=list(city.values)
#print(city_list)
aqi=df['AQI/24h']
aqi_list=list(aqi.values)
#print(aqi_list)
data=[]
foriinrange(len(aqi_list)):
data.append((city_list[i],aqi_list[i]))
#print(data)
data=pd.DataFrame(data)
data.columns=['city','aqi']
#print(data)
city=data['city']
aqi=data['aqi']
'''
z=[list(z)forzinzip(p.index,p)]
print(z)
foriinz:
wu=i[0]
ci=i[1]
wu_list.append(wu)
ci_list.append(ci)
pie=Pie("污染物占比可視化")
pie.add("",wu_list,ci_list,is_label_show=True)
pie.render('pie1.html')聚類分析:fromsklearnimportpreprocessing
fromsqlalchemyimportcreate_engine
fromsqlalchemy.ormimportsessionmaker
importpandasaspd
fromsklearn.clusterimportKMeans
DB_CONNECT_STRING='mysql+pymysql://root:123456@localhost/mysql'
engine=create_engine(DB_CONNECT_STRING,echo=True)
DB_Session=sessionmaker(bind=engine)
#print(engine)
#session=DB_Session()
sql="select*from516day"
data=pd.read_sql_query(sql,engine)
#設(shè)置最大顯示
#讀取數(shù)據(jù)
head=data.head(5)
print(head)#查看前五行
#選取要標(biāo)準(zhǔn)化的列
filtered_columns=["AQI/24h","AQI","PM2.5/1h","PM10/1h","C0/1h","NO2/1h","03/1h","03/8h","SO2/1h"
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版數(shù)學(xué)七年級(jí)下冊(cè)第41課時(shí)《用加減法解二元一次方程組(三)》聽(tīng)評(píng)課記錄
- 湘教版數(shù)學(xué)八年級(jí)上冊(cè)2.5《第6課時(shí) 全等三角形的性質(zhì)和判定的應(yīng)用》聽(tīng)評(píng)課記錄1
- 聽(tīng)評(píng)課記錄英語(yǔ)九年級(jí)
- 人教版(廣西版)九年級(jí)數(shù)學(xué)上冊(cè)聽(tīng)評(píng)課記錄21.2 解一元二次方程
- 生態(tài)自然保護(hù)游合同
- 狂犬疫苗打完免責(zé)協(xié)議書(shū)(2篇)
- 蘇科版數(shù)學(xué)八年級(jí)下冊(cè)《10.2 分式的基本性質(zhì)》聽(tīng)評(píng)課記錄
- 部編版道德與法治七年級(jí)上冊(cè)第三單元第七課《親情之愛(ài)第三框讓家更美好》聽(tīng)課評(píng)課記錄
- 【2022年新課標(biāo)】部編版七年級(jí)上冊(cè)道德與法治第三單元師長(zhǎng)情誼6-7課共5課時(shí)聽(tīng)課評(píng)課記錄
- 五年級(jí)數(shù)學(xué)上冊(cè)蘇教版《認(rèn)識(shí)平方千米》聽(tīng)評(píng)課記錄
- 2025年個(gè)人學(xué)習(xí)領(lǐng)導(dǎo)講話心得體會(huì)和工作措施例文(6篇)
- 2025大連機(jī)場(chǎng)招聘109人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2020-2025年中國(guó)中小企業(yè)行業(yè)市場(chǎng)調(diào)研分析及投資戰(zhàn)略咨詢報(bào)告
- 2025-2030年中國(guó)電動(dòng)高爾夫球車市場(chǎng)運(yùn)行狀況及未來(lái)發(fā)展趨勢(shì)分析報(bào)告
- 物流中心原材料入庫(kù)流程
- 河南省濮陽(yáng)市2024-2025學(xué)年高一上學(xué)期1月期末考試語(yǔ)文試題(含答案)
- 長(zhǎng)沙市2025屆中考生物押題試卷含解析
- 2024年08月北京中信銀行北京分行社會(huì)招考(826)筆試歷年參考題庫(kù)附帶答案詳解
- 2024年芽苗菜市場(chǎng)調(diào)查報(bào)告
- 蘇教版二年級(jí)數(shù)學(xué)下冊(cè)全冊(cè)教學(xué)設(shè)計(jì)
- 職業(yè)技術(shù)學(xué)院教學(xué)質(zhì)量監(jiān)控與評(píng)估處2025年教學(xué)質(zhì)量監(jiān)控督導(dǎo)工作計(jì)劃
評(píng)論
0/150
提交評(píng)論