摘要:對個月份進行抓取后再匯總,就得到了北京年全年的天氣數據,包括最高溫度最低溫度天氣狀況風向等信息。按月查看溫度走勢日期天氣狀況分布天氣狀況晴天和多云是北京一年中主要的天氣。北京的降水天數不多,主要在月份。
本文來自 @范洺源 投稿,在其基礎上做了點修改
最近在學爬蟲和數據分析,看到 天氣網 上有國內城市一年的天氣歷史數據,想以此為數據源練習一下,于是就有了這個項目。今天在此簡單介紹一下實現思路和最終效果。
用到的相關庫包括:
requests
bs4
pandas
matplotlib
seaborn
pyecharts
分析數據源天氣網的 歷史天氣預報查詢 頁面( http:// lishi.tianqi.com/)上有各城市的數據。以 北京 為例,打開頁面之后經過簡單的嘗試就可以發現,每個月的數據是以 http://lishi.tianqi.com/{城市的拼音}/{年份+月份}.html 這樣的地址來展示的,于是可據此構建一個函數,函數的作用是默認返回北京市2018年1月到12月的 url:
def get_url(city="beijing"): for time in range(201801,201813): url = "http://lishi.tianqi.com/{}/{}.html".format(city,time) yield url爬取數據
有了 url 地址就可以用 requests 來抓取。這里要注意,得加上自己的 cookies ,否則會返回 404 頁面,應該是對方網站做了反爬。拿到返回值之后,我用 bs4 庫的 select 函數提取數據。select 函數使用的是 css 選擇器 的語法。由于需要進行一定的數據分析,所以這里沒有將數據保存到文件,而是直接使用 pandas 的 dataframe 進行儲存。
html = requests.get(url=url, headers=header, cookies=cookie) soup = BeautifulSoup(html.content, "html.parser") date = soup.select("#tool_site > div.tqtongji2 > ul > li:nth-of-type(1) > a") max_temp = soup.select("#tool_site > div.tqtongji2 > ul > li:nth-of-type(2)") min_temp = soup.select("#tool_site > div.tqtongji2 > ul > li:nth-of-type(3)") weather = soup.select("#tool_site > div.tqtongji2 > ul > li:nth-of-type(4)") wind_direction = soup.select("#tool_site > div.tqtongji2 > ul > li:nth-of-type(5)") date = [x.text for x in date] max_temp = [x.text for x in max_temp[1:]] min_temp = [x.text for x in min_temp[1:]] weather = [x.text for x in weather[1:]] wind_direction = [x.text for x in wind_direction[1:]] data = pd.DataFrame([date,max_temp,min_temp,weather,wind_direction]).T
對12個月份進行抓取后再匯總,就得到了北京2018年全年的天氣數據,包括 最高溫度、最低溫度、天氣狀況、風向 等信息。適當加工下信息,我們用一些圖表來進行可視化的展示:
平均溫度的分布seaborn.distplot(result["平均溫度"])
平均溫度是使用每日最高溫度和最低溫度取平均的值。北京平均溫度在0度和20多度的日子是最多的。
按月查看溫度走勢result.groupby(result["日期"].apply(lambda x:x.month)).mean().plot(kind="line")天氣狀況分布
seaborn.countplot(result["天氣狀況"])
晴天和多云是北京一年中主要的天氣。
各月降水天數統計line = pyecharts.Line("各月降水天數統計") line.add("降水天數", month, is_rain, is_fill=True, area_opacity=0.7, is_stack=True) line.add("未降水天數", month, no_rain, is_fill=True, area_opacity=0.7, is_stack=True)
這里用 pyecharts 做了一個堆疊折線圖。北京的降水天數不多,主要在7、8月份。可以對比下重慶的數據,差別就很明顯了:
風向統計directions = ["北風", "西北風", "西風", "西南風", "南風", "東南風", "東風", "東北風"] schema = [] v = [] days = result["風向"].value_counts() for d in directions: schema.append((d,100)) v.append(days[d]) v = [v] radar = pyecharts.Radar() radar.config(schema) radar.add("風向統計", v, is_axisline_show=True)
為了讓結果更加直觀,這里采用了 pyecharts 里的 雷達圖 ,并且將8個維度按真實方向的角度來排列。通常認為,北京冬季盛行西北風,夏季盛行東南風。不過從數據上來看,西南風才是北京2018年的最熱門的風向。
以上就是我這個項目所做的工作,內容還是比較基礎的。大家可以做進一步的擴展,比如爬取其他的城市,然后進行全國多城市的天氣比較,或者結合地圖進行可視化。
幾個相關庫的官網都很不錯,供參考:
requests http://cn.python-requests.org/zh_CN/latest/
bs4 https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/
pyecharts http://pyecharts.org/
seaborn http://seaborn.pydata.org/
pandas https://pandas.pydata.org/
文章源碼及相關文件已上傳,獲取代碼及可視化效果可在公眾號( Crossin的編程教室 )回復關鍵字 天氣
本文是我們編程教室新春征稿活動的一篇投稿,來自 @ 范洺源 同學。
我們編程教室會持續向所有人開放,如果有投稿或參與志愿者的意向,歡迎隨時在公眾號里給我們留言。
Python | 新手引導 | 一圖學Python
開發案例:智能防擋彈幕 | 紅包提醒 | 流浪地球 | 漫威
歡迎搜索及關注: Crossin的編程教室
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/43523.html
摘要:在本文中,我們將通過使用一類強大的機器學習算法隱馬爾科夫模型來探索如何識別不同的股市狀況。隱馬爾科夫模型馬爾科夫模型是一個概率過程,查看當前狀態來預測下一個狀態。通過隱馬爾科夫模型,可以深入了解不斷變化的股市狀況。 showImg(https://segmentfault.com/img/bVUlGu?w=913&h=515); 了解不同的股市狀況,改變交易策略,對股市收益有很大的影響...
摘要:全時關店潮氪獲得的一份內部資料顯示,自去年月以來,全時便利店在北京關店約家截至月日,全時在北京的店鋪還有家左右。這意味著該輪關店比例超過。 本博客 貓叔的博客,轉載請申明出處 前言 本系列為貓叔綜合整理的Java面試題系列,如有雷同不勝榮幸。 前言 本系列主要是貓叔對互聯網相關產品(兼任產品經理)路上的視野擴展與信息記錄,每日三篇,記錄分享。 全時關店潮 36氪獲得的一份內部資料顯示,...
摘要:上周,在舊金山召開的人工智能國際較高級會議上,來自微軟亞洲研究院的鄭宇博士及其團隊的論文首創性的將時空數據與深度學習結合起來,利用時空深度殘差網絡用于預測城市人流問題。 上周,在舊金山召開的人工智能國際較高級會議AAAI 2017上,來自微軟亞洲研究院的鄭宇博士及其團隊的論文Deep Spatio-Temporal Residual Networks for Citywide Crowd F...
摘要:日前,簡歷大數據公司巧達科技被警方一鍋端,高管和員工全部被帶走。買賣簡歷,直接違法。三人累計販賣個人簡歷萬余份,智聯招聘由此蒙受損失近日前,簡歷大數據公司巧達科技被警方一鍋端,高管和員工全部被帶走。到底發生了什么? ?一 、為什么公司全員被抓? 3月14日團隊被警方帶走,有HR等非核心成員回家,但核心高管依然失聯中。3月25日,一位巧達科技前員工告訴燃財經。 在天眼查中北京...
閱讀 3093·2023-04-26 00:53
閱讀 3544·2021-11-19 09:58
閱讀 1705·2021-09-29 09:35
閱讀 3302·2021-09-28 09:46
閱讀 3875·2021-09-22 15:38
閱讀 2700·2019-08-30 15:55
閱讀 3022·2019-08-23 14:10
閱讀 3837·2019-08-22 18:17