在现代医学领域,数据可视化已成为理解和分析复杂医疗信息的重要工具。涟漪图(Ripple Map)作为一种直观展示地理空间数据分布的可视化手段,广泛应用于医疗资源规划、疾病监测与防控以及医学研究中。同时,借助云计算平台,如腾讯云的 Cloud Studio,开发者可以高效地构建、部署和管理数据可视化项目。本文将结合涟漪图的绘制方法与腾讯云 Cloud Studio 的使用,指导你如何在云端搭建一个完整的医学数据可视化项目。
本项目的目标是利用Python绘制涟漪图,展示全国各省市三甲医院的分布情况,并通过Flask搭建一个Web服务,将可视化结果集成到Web应用中。整个开发过程将在腾讯云 Cloud Studio 上完成,充分利用其在线编程和部署优势。
登录Cloud Studio后,点击“创建工作空间”,选择合适的语言模板(本文使用Python),并为项目命名,如“MedicalDataVisualization”。完成创建后,进入工作空间环境。
在Cloud Studio的终端中运行以下命令,安装项目所需的Python库:
pip install pandas geopandas matplotlib contextily plotly dash flask
这些库分别用于数据处理、地理数据处理、绘图、添加底图、创建交互式图表、构建Web应用等。
在工作空间中创建以下文件和文件夹:
MedicalDataVisualization/
├── app.py
├── requirements.txt
├── templates/
│ └── index.html
├── static/
│ └── (可选静态文件,如CSS、JS)
├── data/
│ └── hospital_data.csv
└── visualization.py
在data/
文件夹中创建hospital_data.csv
,包含全国各省市三甲医院数量的数据。示例数据如下:
省市,三甲医院数量
北京,70
上海,60
广东,150
江苏,120
浙江,90
山东,100
河南,80
四川,110
湖北,85
湖南,95
在visualization.py
中编写代码,使用Python绘制涟漪图。
import pandas as pd
import geopandas as gpd
import matplotlib.pyplot as plt
import contextily as ctx
def create_ripple_map(data_path, output_path):
# 读取数据
df = pd.read_csv(data_path)
# 添加经纬度(示例数据,实际应用中应使用精确坐标)
coordinates = {
'北京': {'longitude': 116.405285, 'latitude': 39.904989},
'上海': {'longitude': 121.472644, 'latitude': 31.231706},
'广东': {'longitude': 113.280637, 'latitude': 23.125178},
'江苏': {'longitude': 118.763234, 'latitude': 32.041544},
'浙江': {'longitude': 120.153576, 'latitude': 30.287459},
'山东': {'longitude': 117.000923, 'latitude': 36.675807},
'河南': {'longitude': 113.665412, 'latitude': 34.757975},
'四川': {'longitude': 104.066541, 'latitude': 30.572269},
'湖北': {'longitude': 114.298572, 'latitude': 30.584355},
'湖南': {'longitude': 112.982279, 'latitude': 28.194090}
}
df['longitude'] = df['省市'].apply(lambda x: coordinates[x]['longitude'])
df['latitude'] = df['省市'].apply(lambda x: coordinates[x]['latitude'])
# 创建GeoDataFrame
gdf = gpd.GeoDataFrame(
df,
geometry=gpd.points_from_xy(df.longitude, df.latitude),
crs='EPSG:4326'
)
# 转换为Web Mercator坐标系
gdf = gdf.to_crs(epsg=3857)
# 绘制涟漪图
plt.figure(figsize=(12, 8))
ax = gdf.plot(alpha=0.0)
ctx.add_basemap(ax, source=ctx.providers.Stamen.TerrainBackground)
gdf.plot(
ax=ax,
markersize=gdf['三甲医院数量'] * 10,
color='red',
alpha=0.6,
edgecolor='k'
)
plt.title('全国各省市三甲医院分布涟漪图', fontsize=16)
plt.xlabel('经度')
plt.ylabel('纬度')
# 添加图例
import matplotlib.patches as mpatches
sizes = [60, 90, 120, 150]
labels = ['60家', '90家', '120家', '150家']
handles = [plt.scatter([], [], s=size*10, color='red', alpha=0.6, edgecolors='k') for size in sizes]
plt.legend(handles, labels, title='三甲医院数量', scatterpoints=1, loc='lower left', fontsize=10)
# 保存图像
plt.savefig(output_path, dpi=300)
plt.close()
在Cloud Studio的终端中运行以下命令,生成涟漪图并保存为static/ripple_map.png
:
python -c "from visualization import create_ripple_map; create_ripple_map('data/hospital_data.csv', 'static/ripple_map.png')"
利用Flask框架,将生成的涟漪图集成到Web应用中,方便在线查看和分享。
在app.py
中编写Flask应用代码:
from flask import Flask, render_template
import os
from visualization import create_ripple_map
app = Flask(__name__)
@app.route('/')
def home():
# 生成涟漪图
create_ripple_map('data/hospital_data.csv', 'static/ripple_map.png')
return render_template('index.html')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
在templates/
文件夹中创建index.html
,用于展示涟漪图。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>全国三甲医院分布涟漪图</title>
<style>
body {
font-family: Arial, sans-serif;
text-align: center;
}
img {
max-width: 90%;
height: auto;
margin-top: 20px;
}
</style>
</head>
<body>
<h1>全国各省市三甲医院分布涟漪图</h1>
<img src="{{ url_for('static', filename='ripple_map.png') }}" alt="涟漪图">
</body>
</html>
在Cloud Studio的终端中运行Flask应用:
python app.py
Cloud Studio提供端口映射功能。点击终端右上角的“预览”按钮,选择“公开URL”,即可在浏览器中访问运行中的Web应用,查看生成的涟漪图。
为了让更多用户能够访问该Web应用,可以将其部署到腾讯云的云服务器或使用其他托管服务。以下以部署到腾讯云云服务器为例:
登录腾讯云控制台,选择“云服务器CVM”,创建一个新的实例。根据需求选择适当的配置和操作系统(建议使用Ubuntu)。
通过SSH连接到云服务器,安装必要的Python环境和库:
sudo apt update
sudo apt install python3-pip
pip3 install flask pandas geopandas matplotlib contextily plotly dash
将本地项目文件上传到云服务器,可以使用scp
命令或通过Cloud Studio的文件管理功能上传。
在云服务器上运行Flask应用:
python3 app.py
确保云服务器的安全组规则允许外部访问Flask应用所使用的端口(默认5000端口)。在腾讯云控制台中,编辑实例的安全组规则,添加允许5000端口的入站规则。
通过云服务器的公网IP地址和端口号,在浏览器中访问Web应用,查看涟漪图。
为了提升用户体验,可以使用Plotly等库生成交互式涟漪图,并集成到Web应用中。
示例代码:
在visualization.py
中添加交互式涟漪图生成函数:
import plotly.express as px
def create_interactive_ripple_map(data_path, output_html):
df = pd.read_csv(data_path)
coordinates = {
'北京': {'longitude': 116.405285, 'latitude': 39.904989},
'上海': {'longitude': 121.472644, 'latitude': 31.231706},
'广东': {'longitude': 113.280637, 'latitude': 23.125178},
'江苏': {'longitude': 118.763234, 'latitude': 32.041544},
'浙江': {'longitude': 120.153576, 'latitude': 30.287459},
'山东': {'longitude': 117.000923, 'latitude': 36.675807},
'河南': {'longitude': 113.665412, 'latitude': 34.757975},
'四川': {'longitude': 104.066541, 'latitude': 30.572269},
'湖北': {'longitude': 114.298572, 'latitude': 30.584355},
'湖南': {'longitude': 112.982279, 'latitude': 28.194090}
}
df['longitude'] = df['省市'].apply(lambda x: coordinates[x]['longitude'])
df['latitude'] = df['省市'].apply(lambda x: coordinates[x]['latitude'])
fig = px.scatter_mapbox(
df,
lat="latitude",
lon="longitude",
size="三甲医院数量",
color="三甲医院数量",
hover_name="省市",
size_max=50,
zoom=3,
mapbox_style="carto-positron",
title='全国各省市三甲医院分布涟漪图'
)
fig.write_html(output_html)
在app.py
中修改路由,渲染交互式图表:
from flask import Flask, render_template
from visualization import create_ripple_map, create_interactive_ripple_map
app = Flask(__name__)
@app.route('/')
def home():
# 生成静态涟漪图
create_ripple_map('data/hospital_data.csv', 'static/ripple_map.png')
# 生成交互式涟漪图
create_interactive_ripple_map('data/hospital_data.csv', 'templates/ripple_map.html')
return render_template('index.html')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
更新templates/index.html
,嵌入交互式图表:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>全国三甲医院分布涟漪图</title>
<style>
body {
font-family: Arial, sans-serif;
text-align: center;
}
img {
max-width: 90%;
height: auto;
margin-top: 20px;
}
iframe {
width: 90%;
height: 600px;
border: none;
margin-top: 20px;
}
</style>
</head>
<body>
<h1>全国各省市三甲医院分布涟漪图</h1>
<img src="{{ url_for('static', filename='ripple_map.png') }}" alt="静态涟漪图">
<h2>交互式涟漪图</h2>
<iframe src="{{ url_for('static', filename='ripple_map.html') }}"></iframe>
</body>
</html>
可进一步整合医疗资源的其他维度,如床位数、医生数量等,丰富涟漪图的信息表达。
结合数据库和实时数据源,实现医疗资源分布的动态更新与实时监控。
通过本文的介绍,我们成功地在腾讯云 Cloud Studio 上搭建了一个医学数据可视化项目,利用Python绘制涟漪图,并通过Flask构建Web服务,将可视化结果集成到Web应用中。借助腾讯云强大的云端开发环境,整个项目的开发、部署与管理变得更加高效和便捷。
未来,可以进一步优化可视化效果,集成更多数据维度,实现动态数据更新,并将项目扩展至更广泛的医学研究与公共健康管理领域。云端开发与数据可视化的结合,将为医学领域带来更多的创新与突破。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。