<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用Python分析過去10年地震分布~

          共 5363字,需瀏覽 11分鐘

           ·

          2021-12-25 22:34


          點擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進行關(guān)注

          回復(fù)“書籍”即可獲贈Python從入門到進階共10本電子書

          夕陽無限好,只是近黃昏。

          大家好,我是才哥。

          前段時間在黃海海域發(fā)生了5.2級地震,當(dāng)時朋友圈華東一帶的朋友們都“震動”了。

          今天,就帶大家一起看看過去10年里地震的分布情況!

          目錄:

          • 1. 數(shù)據(jù)獲取

          • 2. 數(shù)據(jù)處理

            • 2.1. 經(jīng)緯度轉(zhuǎn)換

            • 2.2. 發(fā)震時刻數(shù)據(jù)處理

            • 2.3. 地震所在地(省市)

          • 3. 統(tǒng)計與可視化

            • 3.1. 歷年地震數(shù)

            • 3.2. 各省地震數(shù)

            • 3.3. 各城市地震數(shù)

            • 3.4. 地震分布散點圖

            • 3.5. 地址分布熱力圖

            • 3.6. 近10年每月地震分布圖(動態(tài))

          • 4. 補充知識


          1. 數(shù)據(jù)獲取

          直接在中國地震臺網(wǎng)就可以下載到過去10年的地震數(shù)據(jù)。

          中國地震臺網(wǎng):

          https://news.ceic.ac.cn/index.html?time=1637318776

          中國地震臺網(wǎng)

          大家直接在歷史查詢里選擇時間范圍進行查詢后,點擊保存到本地即可獲取數(shù)據(jù)。

          存在本地的數(shù)據(jù)預(yù)覽如下:

          2. 數(shù)據(jù)處理

          在數(shù)據(jù)獲取的時候, 我們發(fā)現(xiàn)獲取的數(shù)據(jù)包含時間、震級、經(jīng)緯度、深度以及參考位置。而經(jīng)緯度是百度地圖下的,考慮到不同地圖的經(jīng)緯度會存在差異,而我們后續(xù)繪圖采用的是高德地圖,所以這里需要對經(jīng)緯度進行轉(zhuǎn)換。

          2.1. 經(jīng)緯度轉(zhuǎn)換

          高德開放平臺有對應(yīng)的經(jīng)緯度轉(zhuǎn)換API,我們可以直接調(diào)用(免費額度夠)。

          坐標(biāo)轉(zhuǎn)換
          import?requests
          import?pandas?as?pd
          #?讀取數(shù)據(jù)
          df?=?pd.read_excel(r'eqList.xlsx')

          longitude_list?=?[]
          latitude_list?=?[]
          #?百度地圖經(jīng)緯度轉(zhuǎn)換為高德地圖經(jīng)緯度
          for?i?,?location?in?enumerate(df[['經(jīng)度(°)','緯度(°)']].values):
          ????location?=?str(location[0])+','+str(location[1])
          ????url?=?'https://restapi.amap.com/v3/assistant/coordinate/convert?'
          ????
          ????parames?=?{
          ????????'locations':location,
          ????????'coordsys':'baidu',
          ????????'key':'你的key',
          ????????}
          ????
          ????r?=?eval(requests.get(url,?params=parames).json()['locations'])
          ????#?經(jīng)度
          ????longitude_list.append(r[0])
          ????#?緯度
          ????latitude_list.append(r[1])
          ????print(f'\r{i+1}',end='')

          df['經(jīng)度(°)']?=?longitude_list
          df['緯度(°)']?=?latitude_list

          如此,我們就成功將百度地圖系的經(jīng)緯度坐標(biāo)轉(zhuǎn)換為了高德地圖系的經(jīng)緯度坐標(biāo)。

          2.2. 發(fā)震時刻數(shù)據(jù)處理

          對于發(fā)震時刻來說,我希望的是精確到月份以及小時,用于后續(xù)統(tǒng)計分析。

          #?轉(zhuǎn)換為時間格式
          df['發(fā)震時刻']?=?pd.to_datetime(df['發(fā)震時刻'])
          #?獲取年月
          df['月份']?=?df['發(fā)震時刻'].apply(lambda?x:?str(x)[:7])
          #?獲取小時
          df['小時']?=?df['發(fā)震時刻'].dt.hour

          這里我感覺我的獲取年月的操作有點low,有小伙伴有更好的方案還請留言哈,我要學(xué)習(xí)。

          2.3. 地震所在地(省市)

          由于在原始數(shù)據(jù)中參考位置無法便捷的解析出省和市,我這邊打算用經(jīng)緯度信息通過高德的API來進行獲取。參考此前《你知道海底撈在全國有多少家店嗎?》。

          citys?=?[]
          provinces?=?[]
          for?i?,?location?in?enumerate(df[['經(jīng)度(°)','緯度(°)']].values):
          ????location?=?str(location[0])+','+str(location[1])
          ????url?=?'https://restapi.amap.com/v3/geocode/regeo?'
          ????params?=?{
          ????????'location':location,
          ????????'key':'你的key',
          ????????'extensions':'base',
          ????????'batch':'false',
          ????????'roadlevel':0,
          ????????}
          ????
          ????r?=?requests.get(url,?params=params)
          ????data?=?r.json()['regeocode']
          ????city?=?data['addressComponent']['city']
          ????province?=?data['addressComponent']['province']
          ????if?len(city)==0:
          ????????city?=?province
          ????citys.append(city)
          ????provinces.append(province)
          ????print(f'\r{i+1}',end='')
          df['城市']?=?citys
          df['省']?=?provinces

          經(jīng)過以上的處理,我們最終得到了以下數(shù)據(jù):


          3. 統(tǒng)計與可視化

          這部分我們只進行簡單的統(tǒng)計展示,不做類似預(yù)測或者別的什么深度分析,畢竟基于現(xiàn)有原始數(shù)據(jù)也得不出太大的有價值結(jié)論。

          3.1. 歷年地震數(shù)

          中小地震次數(shù)

          按照[2, 4.6]作為中小地震等級區(qū)間,近10年一共6188次,年均600余次!

          中小地震次數(shù)
          #?中小地震([2,4.6])
          df['年份']?=?df['發(fā)震時刻'].dt.year
          df_cn?=?df[df['省']!='[]']
          df_xiao?=?df_cn.query('2<=`震級(M)`<=4.6')
          df_xiao.groupby('年份')['發(fā)震時刻'].count().to_frame('次數(shù)').reset_index()

          破壞性地震次數(shù)

          按照[4.7, ∞]作為中小地震等級區(qū)間,近10年一共505次,年均50余次!

          破壞性地震次數(shù)

          3.2. 各省地震數(shù)

          考慮到一些地震發(fā)生在海域,這里統(tǒng)一化為中國海域,另外對于發(fā)生在國外的咱們這里不參與。

          另外,我們只看破壞性地震分布,可以發(fā)現(xiàn)在我國新疆、西藏、云南臺灣四川是地震高發(fā)帶!

          #?各省?破壞性地震
          df_province?=?df_cn.query('`震級(M)`>=4.7').groupby('省')['發(fā)震時刻'].count().to_frame('次數(shù)').sort_values(by='次數(shù)',ascending=False).reset_index()
          省份破壞性地震次數(shù)
          新疆98
          西藏63
          云南47
          臺灣47
          四川45
          青海32
          甘肅10
          吉林9
          內(nèi)蒙古7
          廣西4
          湖北3
          廣東2
          河北2
          貴州2
          重慶2
          黑龍江2
          江蘇1
          福建1
          遼寧1
          陜西1

          3.3. 各城市地震數(shù)

          在我國233個城市發(fā)生過地震,發(fā)生地震次數(shù)最多的城市大多集中在新疆、四川。

          注:這里統(tǒng)計的是全部地震數(shù)據(jù)

          像新疆的克孜勒蘇柯爾克孜自治州、和田地區(qū)

          新疆

          四川的宜賓雅安

          四川
          城市次數(shù)
          新疆維吾爾自治區(qū)克孜勒蘇柯爾克孜自治州491
          新疆維吾爾自治區(qū)和田地區(qū)431
          新疆維吾爾自治區(qū)阿克蘇地區(qū)308
          西藏自治區(qū)那曲市257
          四川省宜賓市237
          新疆維吾爾自治區(qū)喀什地區(qū)234
          新疆維吾爾自治區(qū)巴音郭楞蒙古自治州206
          四川省雅安市188
          臺灣省臺灣省167
          四川省阿壩藏族羌族自治州167

          3.4. 地震分布散點圖

          我們只看破壞性地震分布,根據(jù)經(jīng)緯度坐標(biāo)信息繪制

          地震分布
          import?folium.plugins?as?plugins
          import?folium

          df?=?df[df['震級(M)']>=4.7]
          ss1?=?[[latitude,longitude]?for?latitude,longitude?in?df[['緯度(°)',?'經(jīng)度(°)']].values.tolist()]
          m?=?folium.Map([39.904989,?116.405285],
          ??????????????tiles='https://webrd01.is.autonavi.com/appmaptile?&x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=7',
          ???????????????zoom_start=6,
          ???????????????attr='高德')
          groups?=?folium.FeatureGroup('')
          for?l,label?in?zip(ss1,df['參考位置'].to_list()):
          ????groups.add_child(
          ????????folium.CircleMarker(
          ????????????location=l,
          ????????????radius=1,
          ????????????color='red',
          ????????????fill=True,
          ????????????fill_color='red',
          ????????????fill_opacity=0.4,
          ????????????popup=folium.Popup(html=label,max_width=100),
          ????????)
          ????)
          m.add_child(groups)
          m.add_child(folium.LatLngPopup())?
          m.save('地震分布.html')???????????????

          3.5. 地址分布熱力圖

          可以看到新疆西南部,和臺灣省東部海域?qū)儆诘卣鸲喟l(fā)地段。

          地震分布熱力圖
          data_all?=?df[['緯度(°)',?'經(jīng)度(°)','震級(M)']].values.tolist()
          m?=?folium.Map([39.904989,?116.405285],
          ???????????????tiles='https://webrd01.is.autonavi.com/appmaptile?&x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=7',
          ???????????????zoom_start=6,
          ???????????????attr='高德')
          hm?=?plugins.HeatMap(data_all,?radius=10,?
          ?????????????????????gradient={.1:?'green',?.6:?'yellow',?1:?'red'},
          ?????????????????????)
          hm.add_to(m)
          hm.save('地震熱力圖.html')

          3.6. 近10年每月地震分布圖(動態(tài))

          注:這里統(tǒng)計的是全部地震數(shù)據(jù)

          繪制代碼

          data_move?=?[]
          date_list?=?df['月份'].sort_values().unique()
          for?month?in?date_list:
          ????data_move.append(df[df['月份']?==?month][['緯度(°)',?'經(jīng)度(°)','震級(M)']].values.tolist())
          m?=?folium.Map([39.904989,?116.405285],
          ???????????????tiles='https://webrd01.is.autonavi.com/appmaptile?&x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=7',
          ???????????????zoom_start=6,
          ???????????????attr='高德')
          time_index?=?df['月份'].sort_values().unique().tolist()
          hm?=?plugins.HeatMapWithTime(data_move,?
          ?????????????????????????????index=time_index,
          ?????????????????????????????radius=10)

          hm.add_to(m)
          hm.save('地震動態(tài)熱力圖.html')


          4. 補充知識

          地震帶分布圖

          網(wǎng)圖-地震帶分布圖

          我們篩選 5級以上地震繪制分布圖如下:

          基本吻合~

          ????小伙伴們,快快用實踐一下吧!如果在學(xué)習(xí)過程中,有遇到任何問題,歡迎加我好友,我拉你進Python學(xué)習(xí)交流群共同探討學(xué)習(xí)。

          -------------------?End?-------------------

          往期精彩文章推薦:

          歡迎大家點贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          想加入Python學(xué)習(xí)群請在后臺回復(fù)【入群

          萬水千山總是情,點個【在看】行不行

          /今日留言主題/

          隨便說一兩句吧~~

          瀏覽 102
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  大色鬼在线天堂精品 | 婷婷五月天综合 | 飘花影院伊人网络视频 | 中国老骚逼视频 | 亚洲成人无码精品 |