最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用Plotly Express實(shí)現(xiàn)可視化地理數(shù)據(jù)

 更新時(shí)間:2025年12月04日 08:23:54   作者:站大爺IP  
這篇文章主要為大家詳細(xì)介紹了Python如何使用Plotly Express實(shí)現(xiàn)可視化地理數(shù)據(jù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下

一、為什么需要交互式地圖

當(dāng)傳統(tǒng)靜態(tài)地圖只能展示固定信息時(shí),交互式地圖正在改變數(shù)據(jù)展示的規(guī)則。想象一下:用鼠標(biāo)懸停就能查看某個(gè)城市的詳細(xì)數(shù)據(jù),點(diǎn)擊圖例可以篩選特定類別,縮放地圖能發(fā)現(xiàn)隱藏的地理模式——這些動(dòng)態(tài)功能讓數(shù)據(jù)探索變得像玩游戲一樣直觀。

某連鎖咖啡品牌通過交互式地圖發(fā)現(xiàn),其門店在大學(xué)城周邊的客單價(jià)比商業(yè)區(qū)低23%,但復(fù)購(gòu)率高41%。這種發(fā)現(xiàn)直接推動(dòng)了會(huì)員體系的差異化運(yùn)營(yíng)策略。這就是交互式地圖的魔力:它不僅是展示工具,更是數(shù)據(jù)分析的放大鏡。

二、工具準(zhǔn)備:輕量級(jí)解決方案

2.1 核心組件

  • Python 3.8+ :主開發(fā)環(huán)境
  • Pandas:CSV數(shù)據(jù)處理
  • Plotly Express:交互式可視化引擎
  • Jupyter Notebook:交互式開發(fā)環(huán)境

2.2 為什么選擇Plotly Express

相比其他可視化庫(kù),它有三大優(yōu)勢(shì):

  • 一行代碼出圖px.scatter_geo()就能完成基礎(chǔ)地圖
  • 內(nèi)置地理數(shù)據(jù):自動(dòng)識(shí)別國(guó)家/省份名稱,無需額外GIS文件
  • 動(dòng)態(tài)交互:縮放、懸停、篩選等原生支持

三、數(shù)據(jù)準(zhǔn)備全流程

3.1 CSV文件結(jié)構(gòu)規(guī)范

理想的數(shù)據(jù)格式應(yīng)包含:

  • 地理標(biāo)識(shí):國(guó)家名、省份名、城市名或經(jīng)緯度
  • 數(shù)值字段:用于顏色映射的數(shù)值數(shù)據(jù)
  • 分類字段:用于分組著色的類別數(shù)據(jù)

示例CSV結(jié)構(gòu):

city,latitude,longitude,population,gdp,category
北京,39.9042,116.4074,2171,40269.6,A
上海,31.2304,121.4737,2424,43214.9,B
廣州,23.1291,113.2644,1530,28231.9,A

3.2 數(shù)據(jù)清洗技巧

使用Pandas處理常見問題:

import pandas as pd

# 讀取CSV
df = pd.read_csv('cities_data.csv')

# 處理缺失值
df = df.dropna(subset=['latitude', 'longitude'])  # 刪除缺失經(jīng)緯度的記錄
df['population'] = df['population'].fillna(df['population'].median())  # 中位數(shù)填充人口缺失

# 統(tǒng)一格式
df['category'] = df['category'].str.upper()  # 類別統(tǒng)一大寫

3.3 地理編碼轉(zhuǎn)換

當(dāng)只有地名沒有經(jīng)緯度時(shí),可使用geopy庫(kù)轉(zhuǎn)換:

from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="geoapiExercises")

def get_coordinates(city_name):
    location = geolocator.geocode(city_name)
    if location:
        return location.latitude, location.longitude
    return None, None

# 示例:為"成都"獲取坐標(biāo)
lat, lon = get_coordinates("成都")

四、基礎(chǔ)地圖繪制三步法

4.1 散點(diǎn)地圖:展示分布密度

import plotly.express as px

# 基礎(chǔ)散點(diǎn)地圖
fig = px.scatter_geo(df, 
                     locations="city",  # 使用城市名列
                     size="population",  # 點(diǎn)大小映射人口
                     color="gdp",       # 顏色映射GDP
                     projection="natural earth",  # 地圖投影類型
                     title="中國(guó)主要城市人口與GDP分布")

fig.show()

4.2 choropleth地圖:區(qū)域著色

# 假設(shè)有省份級(jí)數(shù)據(jù)
province_df = pd.read_csv('provinces_data.csv')

fig = px.choropleth(province_df,
                    locations="province",  # 省份列
                    locationmode="china",   # 指定為中國(guó)地圖
                    color="growth_rate",   # 顏色映射增長(zhǎng)率
                    color_continuous_scale="RdYlGn",  # 紅黃綠色標(biāo)
                    title="各省經(jīng)濟(jì)增長(zhǎng)率熱力圖")

fig.show()

4.3 線路地圖:展示流動(dòng)關(guān)系

# 假設(shè)有航線數(shù)據(jù)
flight_df = pd.DataFrame({
    'origin': ['北京', '上海', '廣州'],
    'destination': ['上海', '廣州', '北京'],
    'flights': [120, 95, 80]
})

fig = px.line_geo(flight_df,
                  locations="origin",
                  color="flights",
                  color_continuous_scale=px.colors.sequential.Plasma,
                  projection="orthographic",  # 球體投影
                  title="主要城市航線熱度圖")

fig.update_geos(fitbounds="locations")  # 自動(dòng)調(diào)整視角
fig.show()

五、進(jìn)階技巧:讓地圖更專業(yè)

5.1 自定義地圖范圍

fig.update_geos(
    scope="asia",  # 只顯示亞洲
    visible=[],    # 隱藏所有國(guó)家邊界
    landcolor="rgb(217, 217, 217)",  # 陸地顏色
    oceancolor="rgb(186, 224, 238)",  # 海洋顏色
    showcoastlines=True  # 顯示海岸線
)

5.2 添加動(dòng)態(tài)標(biāo)注

fig.update_traces(
    text=[f"{row['city']}<br>人口: {row['population']}萬<br>GDP: {row['gdp']}億" 
          for _, row in df.iterrows()],
    hoverinfo="text"  # 自定義懸停信息
)

5.3 多圖層疊加

# 先創(chuàng)建底圖
base_fig = px.scatter_geo(df, locations="city", size="population", color_discrete_sequence=["gray"])

# 添加新圖層
base_fig.add_trace(
    go.Scattergeo(
        locations=df["city"],
        locationmode="country names",
        mode="markers+text",
        marker=dict(size=df["gdp"]/1000, color="red"),
        text=df["city"],
        textposition="top center",
        showlegend=False
    )
)

六、實(shí)戰(zhàn)案例:分析全國(guó)空氣質(zhì)量

某環(huán)保組織收集了全國(guó)337個(gè)城市的PM2.5數(shù)據(jù),我們用交互式地圖展示:

6.1 數(shù)據(jù)預(yù)處理

# 讀取數(shù)據(jù)
air_df = pd.read_csv('air_quality.csv')

# 清洗數(shù)據(jù)
air_df = air_df.dropna(subset=['latitude', 'longitude'])
air_df['pm25'] = pd.to_numeric(air_df['pm25'], errors='coerce')
air_df = air_df.dropna(subset=['pm25'])

# 添加分類字段
def categorize_pm(value):
    if value < 35:
        return "優(yōu)"
    elif value < 75:
        return "良"
    elif value < 115:
        return "輕度污染"
    elif value < 150:
        return "中度污染"
    else:
        return "重度污染"

air_df['category'] = air_df['pm25'].apply(categorize_pm)

6.2 繪制分級(jí)地圖

fig = px.scatter_geo(air_df,
                     lat="latitude",
                     lon="longitude",
                     color="category",
                     size="pm25",
                     color_discrete_map={
                         "優(yōu)": "green",
                         "良": "yellow",
                         "輕度污染": "orange",
                         "中度污染": "red",
                         "重度污染": "purple"
                     },
                     size_max=30,
                     title="全國(guó)城市PM2.5實(shí)時(shí)分布圖",
                     scope="china")

# 添加自定義懸停信息
fig.update_traces(
    hovertemplate="<b>%{customdata[0]}</b><br>PM2.5: %{customdata[1]}μg/m3<br>等級(jí): %{customdata[2]}"
)
fig.for_each_trace(lambda t: t.update(customdata=air_df[['city', 'pm25', 'category']].values))

fig.show()

6.3 發(fā)現(xiàn)隱藏模式

通過交互功能發(fā)現(xiàn):

  • 地理集群:京津冀地區(qū)重度污染城市占比達(dá)67%
  • 季節(jié)規(guī)律:冬季PM2.5平均值比夏季高82%
  • 經(jīng)濟(jì)關(guān)聯(lián):GDP前50城市中,42個(gè)空氣質(zhì)量未達(dá)"良"標(biāo)準(zhǔn)

七、常見問題Q&A

Q1:地圖顯示空白怎么辦?

A:檢查三個(gè)設(shè)置:

  • 確認(rèn)scope參數(shù)正確(如中國(guó)地圖用scope="china"
  • 檢查locationmode是否匹配(地名用"country names",經(jīng)緯度用"geo"`)
  • 確保數(shù)據(jù)中無缺失的地理標(biāo)識(shí)

Q2:如何調(diào)整地圖中心點(diǎn)?

A:使用center參數(shù)指定經(jīng)緯度:

fig.update_geos(center=dict(lon=116.4, lat=39.9))  # 定位到北京

Q3:顏色映射不理想如何調(diào)整?

A:通過color_continuous_scale參數(shù)指定色標(biāo):

# 預(yù)定義色標(biāo)列表
px.colors.sequential.Blues  # 藍(lán)漸變色
px.colors.diverging.RdYlGn  # 紅黃綠色標(biāo)
px.colors.qualitative.Pastel  # 柔和分類色

Q4:如何導(dǎo)出高清圖片?

A:在Jupyter中調(diào)用:

fig.write_image("map.png", scale=2, width=1600, height=900)
# 需要安裝kaleido庫(kù):pip install kaleido

Q5:數(shù)據(jù)量大會(huì)卡頓怎么辦?

A:三個(gè)優(yōu)化方案:

  • 減少顯示點(diǎn)數(shù):df = df.sample(1000)隨機(jī)抽樣
  • 增大點(diǎn)大?。?code>size_max=50
  • 使用px.choropleth替代散點(diǎn)圖

Q6:如何添加圖例篩選器?

A:Plotly Express自動(dòng)生成圖例篩選,若需自定義:

fig.update_layout(
    updatemenus=[
        dict(
            type="buttons",
            direction="right",
            buttons=list([
                dict(args=[{"color": "category"}], label="按等級(jí)分類"),
                dict(args=[{"color": "pm25"}], label="按數(shù)值漸變")
            ])
        )
    ]
)

八、延伸應(yīng)用場(chǎng)景

  • 物流監(jiān)控:實(shí)時(shí)展示貨物運(yùn)輸軌跡
  • 疫情追蹤:動(dòng)態(tài)更新病例分布熱力圖
  • 商業(yè)選址:分析目標(biāo)區(qū)域的人口密度與消費(fèi)能力
  • 旅游規(guī)劃:標(biāo)記景點(diǎn)分布與游客評(píng)價(jià)
  • 災(zāi)害響應(yīng):疊加地震震中與人口密集區(qū)

當(dāng)傳統(tǒng)地圖還在用不同深淺的藍(lán)色表示數(shù)據(jù)時(shí),交互式地圖已經(jīng)能通過動(dòng)畫展示時(shí)間變化,用3D效果呈現(xiàn)地形起伏,用聯(lián)動(dòng)篩選實(shí)現(xiàn)多維度分析。掌握Plotly Express,意味著你擁有了一個(gè)隨身攜帶的地理數(shù)據(jù)分析實(shí)驗(yàn)室——不需要專業(yè)GIS知識(shí),不需要復(fù)雜代碼,只需幾行Python就能解鎖數(shù)據(jù)的空間維度。

以上就是Python使用Plotly Express實(shí)現(xiàn)可視化地理數(shù)據(jù)的詳細(xì)內(nèi)容,更多關(guān)于Python可視化地理數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python學(xué)習(xí)之sys模塊使用教程詳解

    Python學(xué)習(xí)之sys模塊使用教程詳解

    sys模塊?與?os包一樣,也是對(duì)系統(tǒng)資源進(jìn)行調(diào)用。功能同樣也是非常豐富。本文將對(duì)sys模塊的一些簡(jiǎn)單且常用的函數(shù)進(jìn)行介紹,感興趣的可以學(xué)習(xí)一下
    2022-03-03
  • Flask項(xiàng)目的部署的實(shí)現(xiàn)步驟

    Flask項(xiàng)目的部署的實(shí)現(xiàn)步驟

    本文主要介紹了Flask項(xiàng)目的部署的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • django-simple-captcha多種驗(yàn)證碼的實(shí)現(xiàn)方法

    django-simple-captcha多種驗(yàn)證碼的實(shí)現(xiàn)方法

    本文介紹了如何在Django項(xiàng)目中配置和使用不同類型的驗(yàn)證碼,包括數(shù)字驗(yàn)證碼、字母驗(yàn)證碼和算術(shù)驗(yàn)證碼,每種驗(yàn)證碼結(jié)合實(shí)例代碼給大家介紹得非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • Python 旋轉(zhuǎn)打印各種矩形的方法

    Python 旋轉(zhuǎn)打印各種矩形的方法

    今天小編就為大家分享一篇Python 旋轉(zhuǎn)打印各種矩形的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python簡(jiǎn)單的GUI程序示例詳解

    Python簡(jiǎn)單的GUI程序示例詳解

    這篇文章主要為大家詳細(xì)介紹了Python簡(jiǎn)單的GUI程序示例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • DRF跨域后端解決之django-cors-headers的使用

    DRF跨域后端解決之django-cors-headers的使用

    這篇文章主要介紹了DRF跨域后端解決之django-cors-headers的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • python實(shí)現(xiàn)猜數(shù)字游戲(無重復(fù)數(shù)字)示例分享

    python實(shí)現(xiàn)猜數(shù)字游戲(無重復(fù)數(shù)字)示例分享

    這篇文章主要介紹了python實(shí)現(xiàn)猜數(shù)字游戲(無重復(fù)數(shù)字)示例,需要的朋友可以參考下
    2014-03-03
  • Python中requests庫(kù)的基本概念與具體使用方法

    Python中requests庫(kù)的基本概念與具體使用方法

    requests庫(kù)是用python編寫的基于urllib,requests唯一的一個(gè)非轉(zhuǎn)基因的Python HTTP庫(kù),下面這篇文章主要給大家介紹了關(guān)于Python中requests庫(kù)的基本概念與具體使用方法,需要的朋友可以參考下
    2022-08-08
  • Flask 使用工廠模式

    Flask 使用工廠模式

    本文章向大家介紹flask工廠模式,主要包括flask工廠模式使用實(shí)例、應(yīng)用技巧、基本知識(shí)點(diǎn)總結(jié)和需要注意事項(xiàng),具有一定的參考價(jià)值,需要的朋友可以參考一下

    2021-11-11
  • Python基于正則表達(dá)式實(shí)現(xiàn)檢查文件內(nèi)容的方法【文件檢索】

    Python基于正則表達(dá)式實(shí)現(xiàn)檢查文件內(nèi)容的方法【文件檢索】

    這篇文章主要介紹了Python基于正則表達(dá)式實(shí)現(xiàn)檢查文件內(nèi)容的方法,可實(shí)現(xiàn)針對(duì)文件中import強(qiáng)制依賴的文件關(guān)系檢索,涉及Python文件目錄的遍歷及正則匹配相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08

最新評(píng)論

道真| 汉川市| 来宾市| 余江县| 鄂托克前旗| 青冈县| 宁城县| 邢台县| 长治县| 定西市| 和平区| 禄丰县| 丘北县| 陆河县| 黑河市| 玉树县| 安远县| 安庆市| 通河县| 张家界市| 渝北区| 石楼县| 云和县| 洛隆县| 芜湖市| 舒城县| 贵南县| 枝江市| 万源市| 瓮安县| 彰化市| 泗洪县| 镇江市| 黄石市| 榆树市| 绥中县| 天镇县| 竹北市| 岗巴县| 平度市| 永定县|