大數據告訴你,颱風最喜歡在我國哪個省市登陸

2021-02-26 Python大數據分析

【前言】

每年夏季,颱風就如期而至。今年八月份,「風王」利奇馬真的如脫韁野馬,讓大家見識到颱風的可怕之處。

這次收集到1945~2015年在中國登陸的所有颱風數據,並通過Python對這些數據進行可視化分析,希望能得到一些有意思的結論。

【數據來源】

該數據集來自於上海追風團隊,在其官網颱風數據中心下載。

網站提到某些數據年代久遠,會有缺失和誤差,請甄別使用。所以這裡無法對數據的精確性和完整性做保證,主要是想運用python對數據做分析展示,看看颱風在等級、地點、時間上的分布。槓精勿擾~

部分數據展示

【分析工具】

本文使用python及其第三方庫做分析展示,分析平臺是Jupyter notebook,用到爬蟲、詞雲、可視化、地理空間分析等技術。

主要工具:Python 3.6、pandas、numpy、matplotlib、seaborn、urllib、geopandas、wordcloud

【分析流程】

1、導入相關庫

# 導入相關庫import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport geopandas import seaborn as snsfrom urllib import requestimport refrom shapely.geometry import LineString,Pointfrom urllib import parsefrom urllib.request import urlopenimport hashlibimport jsonfrom wordcloud import WordCloudimport warningswarnings.filterwarnings('ignore')# 顯示中文標籤plt.rc('font', family='SimHei', size=18)sns.set()%matplotlib inline

2、加載數據集

data = pd.read_excel(r'case\taifeng.xlsx')data.shape

3、查看數據集

4、數據整理

我們可以看到數據集裡只有登陸地址,沒有確切的經緯度信息 。
這裡需要通過地理編碼的方式獲取經緯度,使用的是百度地圖API。
# 地理編碼,通過登陸地址信息得到經、緯度def get_coor(address):    # 需填入自己申請應用後生成的ak    ak = 'mcH6sBNaAfsbkSndFI5zO90j9wUpRMFy1'    url = 'http://api.map.baidu.com/geocoder/v2/?address='    output = 'json'    add = parse.quote(address)  # 本文城市變量為中文,為防止亂碼,先用quote進行編碼    url2 = url + add + '&output=' + output + "&ak=" + ak    req = urlopen(url2)    response = req.read().decode()    #將返回的數據轉化成json格式    responseJson = json.loads(response)    # 獲取經緯度    lon = responseJson.get('result')['location']['lng']    lat = responseJson.get('result')['location']['lat']    return (lat,lon)
# 添加經、緯度欄位data['coor'] = data['登陸地點'].apply(lambda x:get_coor(x))data['lat'] = data['coor'].apply(lambda x: list(x)[0])data['lon'] = data['coor'].apply(lambda x: list(x)[1])

獲取到登陸經緯度信息後,再通過地理逆編碼的方式獲取省、市、區縣三級信息 。
有人可能會覺得「登陸地點」欄位已經有地址信息,為什麼不直接截取欄位?往往地址信息比較複雜,沒有辦法用簡單的正則表達式去截取,而地理逆編碼的方式卻能很好的捕捉省、市、區縣三級信息。
def get_address(lon,lat):        your_ak = 'mcH6sBNaAfsbkSndFI5zO90j9wUpRMFy1'    url = 'http://api.map.baidu.com/geocoder/v2/?callback=renderReverse&extensions_town=true&location={},{}&output=json&pois=1&latest_admin=1&ak={}'.format(lat,lon,your_ak)    rp = request.urlopen(url).read().decode('utf-8')    rp = re.findall(r"\((.*)\)",rp)[0]    rpjson= json.loads(rp)        province = rpjson['result']['addressComponent']['province']        city = rpjson['result']['addressComponent']['city']        district = rpjson['result']['addressComponent']['district']    data = (province, city, district)    return data
data['area'] = data['coor'].apply(lambda x:get_address(x[1],x[0]))data['省'] = data['area'].apply(lambda x:x[0])data['市'] = data['area'].apply(lambda x:x[1])data['區縣'] = data['area'].apply(lambda x:x[2])

5、颱風登陸地點分布

使用geopandas將颱風登陸點放到地圖上,這裡會用到經、緯度數據。

xy = [Point(xy) for xy in zip(data.lon,data.lat)]geo_data = geopandas.GeoDataFrame(data,geometry=xy)gdf = geopandas.read_file(r"case\exportedBoundaries_shp_single_land_20190911_031017\Taiwan_AL2-AL4.shp")ax = gdf.plot(figsize=(20, 20), alpha=0.5, edgecolor='white',color='g',linewidth=1)geo_data.plot(ax=ax,color='red',markersize=7)plt.rc('font', family='SimHei', size=18)plt.title('1945-2015 全國沿海省份颱風登陸地點分布圖',size=30)plt.show()


6、颱風登陸地點詞雲展示

詞雲字體越大代表登陸該地點的颱風數量越多。

words = ','.join(data['省'].values.tolist())wc = WordCloud(    background_color="white",     max_words=300,     font_path='./fonts/simhei.ttf',    min_font_size=5,    max_font_size=100,    width=500      )x = wc.generate(words)image = x.to_image()image

words = ','.join(data['市'].values.tolist())wc = WordCloud(    background_color="white",     max_words=300,     font_path='./fonts/simhei.ttf',    min_font_size=5,    max_font_size=100,    width=500      )x = wc.generate(words)image = x.to_image()image

words = ','.join(data['區縣'].values.tolist())wc = WordCloud(    background_color="white",     max_words=300,     font_path='./fonts/simhei.ttf',    min_font_size=5,    max_font_size=100,    width=500      )x = wc.generate(words)image = x.to_image()image

7、數據可視化分析

# 新建data_1data_1 = data[['登陸時間','登陸強度','巔峰強度','省']].dropna()data_1['登陸等級'] = data_1['登陸強度'].apply(lambda x:int(re.match('\d+',str(x).split(',')[0]).group()))data_1['巔峰等級'] = data_1['巔峰強度'].apply(lambda x:int(re.match('\d+',str(x).split(',')[0]).group()))data_1['登陸年份'] = data_1['登陸時間'].apply(lambda x:x.year)data_1['登陸月份'] = data_1['登陸時間'].apply(lambda x:x.month)

plt.figure(figsize=(18,6))sns.swarmplot(x='省',y='登陸等級',data=data_1,palette='Set1')plt.title("1945-2015 各省颱風登陸等級分類散點圖(點數多少代表颱風數量)",size=20)plt.show()

year_counts = data['登陸時間'].apply(lambda x:x.year).value_counts().sort_index()plt.figure(figsize=(15,6))plt.plot(year_counts,lw=2)plt.plot(year_counts,'ro',color='b')x = year_counts.index.tolist()y_mean = [year_counts.mean()]*year_counts.shape[0]plt.plot(x,y_mean,'--')plt.xlabel('年份')plt.ylabel('次數')plt.rc('font', family='SimHei', size=18) plt.title('1945-2015 全國每年颱風登陸數量',size=20)plt.show()

data_3 = data_1.groupby(['登陸月份','登陸等級'],as_index=False)['登陸時間'].count()data_3 = data_3.rename(columns={'登陸時間':'登錄次數'})data_3_pivot = data_3.pivot('登陸等級','登陸月份','登錄次數')plt.figure(figsize=(8,6))sns.heatmap(data_3_pivot)plt.title('1945-2015 全國颱風登陸次數熱力圖(按月份-登陸等級)',size=20)plt.show()

plt.figure(figsize=(8,6))sns.boxplot(x='登陸月份',y='登陸等級',data=data_3)plt.title('1945-2015 全國颱風登陸等級分布箱圖',size=20)plt.show()

data_2 = data_1.groupby(['登陸月份','巔峰等級'],as_index=False)['登陸時間'].count()data_2 = data_2.rename(columns={'登陸時間':'登錄次數'})data_2_pivot = data_2.pivot('巔峰等級','登陸月份','登錄次數')plt.figure(figsize=(8,6))sns.heatmap(data_2_pivot)plt.title('1945-2015 全國颱風登陸次數熱力圖(按月份-巔峰等級)',size=20)plt.show()

plt.figure(figsize=(8,6))sns.boxplot(x='登陸月份',y='巔峰等級',data=data_2)plt.title('1945-2015 全國颱風巔峰等級箱圖',size=20)plt.show()

【結論】

從地理位置上看,1945-2015 颱風主要登陸地點集中在廣東省、海南省、臺灣省,在臺灣省登陸的颱風等級較高,廣東省數量最多。湛江市和臺東縣是颱風最喜歡登陸的市、縣。

從時間上看,年平均登陸颱風數量9次左右,主要集中在8、9月份,8月份的颱風等級中位數較高,並且強颱風主要出現在9月份前後。

想要該項目完整文件(含代碼、颱風數據、地圖)的童鞋,在公眾號後臺回覆:颱風

Python大數據分析

data creat value

相關焦點

  • 數據告訴你颱風最愛登陸我國哪裡?
    颱風扎堆廣東是受TA引導中國天氣網的數據帝看了一下日曆,突然恍然大悟!颱風「帕卡」和「瑪娃」都是處女座,它們一定是因為要和颱風「天鴿」保持隊型才硬往廣東跑的!大數據顯示廣東一直是颱風專業戶實際上,不僅僅是今年,1949年以來,廣東也是我國颱風最偏愛的地區。根據統計,從1949年開始到今年8月為止,共有166個颱風直接登陸廣東沿海,平均每年有2到3個,遠超其他省份。
  • 71年大數據告訴你:初颱風最偏愛在哪裡登陸?
    中國天氣網訊 中央氣象臺預計,今年第2號颱風「鸚鵡」將於14日中午前後在廣東珠海到湛江一帶沿海登陸,並成為今年首個登陸我國的颱風。那麼,今年的初颱風登陸時間偏早還是偏晚,登陸時颱風的強度與常年相比又如何?中國天氣網深扒1949-2019年大數據,告訴您答案。
  • 71年大數據解析,颱風最愛從哪兒登陸
    每年7月至9月是颱風影響我國最頻繁的時期,颱風往往給登陸點及其周邊地區帶來強風雨天氣和嚴重災害,因此颱風一旦生成,其未來是否登陸及其登陸點都備受關注。那麼,颱風到底「偏愛」登陸哪裡呢?登陸我國的颱風有多強?我們特邀請中國天氣網氣象分析師張慧和邵鵬,通過1949年至2019年的天氣大數據,為讀者剖析颱風的各種「偏好」。
  • 70年大數據告訴你 初颱風最偏愛哪裡?
    中國天氣網訊 目前,南海熱帶低壓已經生成,並有可能加強為今年第4號颱風,將於3日凌晨在海南島東部一帶沿海登陸,成為今年的初颱風。那麼,今年的初颱風登陸時間是否偏晚,登陸強度與常年相比又如何?中國天氣網深扒1949-2018年大數據,告訴你答案。
  • 「巴威」或成史上最強登陸東北颱風?數據告訴你!
    今年第8號颱風「巴威」於8月22日8時在臺灣以東海面上生成,隨後一路北上,8月27日上午將在遼寧東部到朝鮮西部一帶沿海地區登陸(颱風級,12-13級,33-38米/秒)。如果登陸遼寧, 「巴威」或將成為1949年以來登陸遼寧的「一手」颱風中最強的一個。颱風登陸東北是否罕見?有哪些特點?
  • 颱風「鸚鵡」明日上午將登陸廣東 大數據揭秘廣東哪裡最招颱風
    中國天氣網深扒71年大數據告訴你答案。颱風「偏愛」廣東 登陸次數全國最多中國天氣網大數據顯示,1949-2019年,共有491個颱風登陸我國,其中有189個登陸過廣東,佔比38.5%,為全國颱風登陸最多的省份。由於部分颱風存在多次登陸的情況,這189個颱風共計登陸廣東194次,也為全國之首。
  • 當颱風遇上冷空氣!大數據告訴你秋颱風有多「狠」
    中國天氣網訊 通常,我們把6-8月生成的颱風稱為「夏颱風」,9-11月生成的颱風稱為「秋颱風」。剛進入9月,颱風「玲玲」、「劍魚」、「法茜」便你方唱罷我方登場,拉開了秋颱風的大幕。眼下,秋颱風「玲玲」已加強為超強颱風級,一路北上,並將和冷空氣「強強聯手」給我國東北地區製造一波強降水,或破當地9月降水紀錄。那麼,今年秋颱風的「戰鬥力」如何?秋颱風有何特點?
  • 「木恩」開啟中國颱風季 大數據看颱風登陸
    據新華社受颱風影響,廣州一天之內下了好幾場雨。據《廣州日報》颱風影響資料圖。據中新社初臺青睞廣東登陸據《央視財經》。今年初臺登陸偏晚。據中央氣象臺監測:第四號颱風「木恩」已於7月3日凌晨0時45分前後在海南省萬寧市和樂鎮沿海登陸,登陸時中心附近最大風力8級(18米/秒)。「木恩」成為今年首個登陸我國的颱風。
  • 颱風「摩羯」登陸浙江 浙皖豫魯等6省市有暴雨
    中國天氣網訊 今年第14號颱風「摩羯」已於今天(12日)23時35分左右登陸浙江溫嶺沿海附近。登陸後,「摩羯」將深入內陸,受其影響,明後天,浙江、安徽、河南等6省市將出現強風雨,山東至福建沿海將出現風暴增水。「摩羯」登陸時強度不是很強,但恰逢天文大潮期,且降雨影響區域較廣。
  • 數據新聞:今年颱風有點個性 還會有颱風登陸我國嗎?
    未來還會有颱風登陸我國嗎?今年颱風偏少與暴雨偏多有何關係? 我們找專家來一探究竟。今年颱風偏少強度偏弱 要麼不來要麼亂來截至10月20日,今年西北太平洋和南海共生成17個颱風,比多年同期偏少,其中有5個颱風在我國登陸,也比多年同期偏少。今年颱風生成位置整體較常年平均偏西10個經度左右,極值強度整體偏弱,出現多個近海快速加強颱風。
  • 利奇馬為2019我國「颱風王」!權威數據:登陸時16級
    而登陸我國最強的颱風為於8月10日凌晨登陸浙江溫嶺的1909號超強颱風利奇馬,登陸強度為超強颱風級別,中心附近最大風速52米/秒,16級,中心最低氣壓百帕。 颱風論壇網友1420鸚鵡整理 2019年雖然西太平洋颱風活動活躍,但登陸我國的颱風其實不是很多,在這當中,颱風利奇馬是最受關注的一個。
  • 今年颱風季結束?權威數據:或只是暫停,12月還有颱風登陸過我國
    不過,任颱風海貝思再怎麼撲騰,它和我國以及我國近海都沒有什麼直接聯繫了,中央氣象臺的圖冊認為,從今天開始颱風海貝思路徑中的偏北向量增加,將開始逐漸轉北並且轉向登陸日本。按照中央氣象臺的預測,颱風海貝思最西可能只能抵達東經135度,這對於我國來說是一個非常偏東的位置。
  • 中央氣象臺發布登陸我國最強的颱風排名:利奇馬排第5位
    中央氣象臺發布消息,昨天夜間,今年第9號颱風「利奇馬」在山東青島二次登陸,登陸時強度為9級(熱帶風暴級)。今晨,「利奇馬」進入渤海,預計未來兩天,它將在渤海內繼續漫遊北上,趨向遼寧,強度還將繼續減弱。 雖然昨天「利奇馬」完成備受矚目的二次登陸,但青島人民並沒有感受到颱風所應有的強烈影響,仿佛登陸了一個「假颱風」。
  • 中央氣象臺發布登陸我國最強的颱風排名:利奇馬排第 5 位
    中央氣象臺發布消息,昨天夜間,今年第9號颱風「利奇馬」在山東青島二次登陸,登陸時強度為9級(熱帶風暴級)。今晨,「利奇馬」進入渤海,預計未來兩天,它將在渤海內繼續漫遊北上,趨向遼寧,強度還將繼續減弱。 雖然昨天「利奇馬」完成備受矚目的二次登陸,但青島人民並沒有感受到颱風所應有的強烈影響,仿佛登陸了一個「假颱風」。
  • 「利奇馬」逼近 大數據解讀69年來登陸浙江的43個颱風
    但在浙江登陸的颱風愛在哪扎堆,哪些地方易損程度較高,數量上有什麼變化,這些你都了解嗎?之江匯梳理了1949年以來登陸浙江的颱風大數據,為你一一解讀。 1949-2018年,共有43個颱風登陸浙江。梳理歷史數據發現,颱風在浙江的登陸地點非常集中,最常撲向台州、溫州、寧波等中南部沿海城市。
  • 11月也能刮颱風!超強颱風玉兔正在逼近,登陸我國可能性大增
    10月28日晚8點,颱風玉兔已來到菲律賓呂宋島以東,距廣東汕頭約1360公裡。過去一天,玉兔掉進了康妮颱風留下、至今仍未恢復的「冷水坑」,雲系迅速枯萎,變成了「兔乾菜」;但由於玉兔的底子太厚,結構非常紮實,因此只是從17級降到16級,仍然維持超強颱風強度。
  • 數據:第7號颱風「海高斯」登陸,這些「颱風之最」你知道嗎?
    新京報快訊(記者 鄧琦)8月以來,第3號、4號、5號、6號、7號颱風接踵而至。今年第7號颱風「海高斯」今晨6時前後以巔峰狀態(35米/秒,12級,颱風級)登陸廣東省珠海市金灣區沿海。從今年7月罕見零颱風到8月颱風「扎堆」,颱風會帶來氣象災害,也能有效改善陸地的淡水供給和生態環境。哪些是史上最早或最晚生成的颱風?哪個颱風威力最大?中國氣象局盤點了史上「颱風之最」。
  • 12級颱風「海高斯」即將登陸我國,最新颱風實時路徑登陸時間地點
    12級颱風「海高斯」即將登陸我國,最新颱風實時路徑,登陸時間地點從最新的衛星實況,我們看到,今年的7號颱風「海高斯」已經極端逼近我國廣東沿海地區,颱風外圍雲系,開始覆蓋廣東沿海多個地市,並將正面登陸廣東,狂風暴雨即將來襲。
  • 首個秋颱風「海神」成今年來風王 大數據揭示秋颱風有多猛
    統計顯示,過去71年間,夏季生成颱風個數為825個,為颱風最活躍季節,而秋季也有808個颱風生成,僅次於夏季。從登陸我國的情況來看,秋颱風的影響力也不容小覷。1949年至2019年數據顯示,平均每年夏季約有4.44個颱風登陸我國,是颱風登陸我國最多的季節;而每年秋季平均有2.38個颱風登陸我國,為颱風第二活躍的季節;每年春季和冬季的颱風平均登陸個數不足0.2個。
  • 數據新聞:3號颱風問世 8月或迎颱風暴發期
    會登陸我國哪些省市?我們通過71年颱風大數據一起看看。  8月,颱風打卡最頻繁的月份  說到颱風打卡最多的月份,那非8月莫屬了。統計數據顯示,1949年至2019年71年間,西北太平洋和南海8月共生成403個颱風,平均每年8月有近6個颱風生成。