Files
AIcode/test/module1_dashboard/__pycache__/cardio_dashboard.cpython-310.pyc

171 lines
12 KiB
Plaintext
Raw Normal View History

2026-04-02 17:16:19 +08:00
o
|.<2E>ikE<00>@s<>dZddlZddlZddlZddlmZ ddl
m Z ddl mZddlZddlZejddddd<08>ee<12>jjZej<15>ee<14><01>ejd d
d <0B>ee<12>jjd d Zejdd<0F>dd<11><00>Zdd<13>Zdd<15>Zdd<17>Zdd<19>Zdd<1B>Z dd<1D>Z!e"dkr{e!<21>dSdS)u<>
CardioAI - 心血管疾病智能辅助系统
数据可视化仪表板模块
功能:
1. 数据加载与清洗
2. 特征工程年龄转换、BMI计算、类别转换
3. 交互式数据筛选
4. 可视化分析Plotly图表
<EFBFBD>N)<01>Pathu)CardioAI - 心血管疾病分析仪表板uZwide<64>expanded)Z
page_titleZ page_iconZlayoutZinitial_sidebar_statea<65>
<style>
.main-header {
font-size: 2.5rem;
color: #e63946;
text-align: center;
margin-bottom: 2rem;
font-weight: bold;
}
.sub-header {
font-size: 1.5rem;
color: #457b9d;
margin-top: 1.5rem;
margin-bottom: 1rem;
font-weight: bold;
}
.metric-card {
background-color: #f1faee;
padding: 1.5rem;
border-radius: 10px;
border-left: 5px solid #1d3557;
margin-bottom: 1rem;
}
.stButton>button {
background-color: #1d3557;
color: white;
border: none;
padding: 0.5rem 1rem;
border-radius: 5px;
}
</style>
T<EFBFBD>Zunsafe_allow_html<6D>datau心血管疾病.xlsxu正在加载和清洗数据...)Z show_spinnerc
sN<00>zt<00>dt<02>d<02><03>t<03>t<02><01>gd<03>}<00>fdd<05>|D<00>}|r,t<00>d|<01><00><02>t<03><06>WS<00><00><07>}|dd<00><08><00> t
<EFBFBD>|d <|d
|d d d |d<|d<00>d <0A>|d<|d|dk}|<03> <0B>rrt<00> d|<03> <0A><00>d<12><03>||<00><07>}|ddk|ddk@|ddk@|ddk@}|<04> <0B>r<>t<00> d|<04> <0A><00>d<17><03>||<00><07>}dddd<1B>}|d<00>|<05>|d<dddd<1B>}|d<00>|<06>|d<d d!d"<22>}|d#<00>|<07>|d$<d%d&d'<27>}|d(<00>|<08>|d)<d*d+<2B>} |d<00>| <09>|d,<t<00>d-t|<02><01>d.<2E><03>t<00>d/t<11><00><01>d0t|<02><01>d.<2E><05>|WSt<12>y&}
zt<00>d1t|
<EFBFBD><01><00><02>t<03><06>WYd2}
~
Sd2}
~
ww)3ur
加载Excel数据并进行清洗和特征工程
返回:
pd.DataFrame: 处理后的数据框
u
正在从 u 加载数据...) <09>age<67>gender<65>height<68>weight<68>ap_hi<68>ap_lo<6C> cholesterol<6F>gluc<75>cardiocsg|] }|<01>jvr|<01>qS<00><00><01>columns)<02>.0<EFBFBD>col<6F><01>dfr<00>%module1_dashboard/cardio_dashboard.py<70>
<listcomp>Xsz)load_and_process_data.<locals>.<listcomp>u 数据文件中缺少必要列: rg<00>v@<40> age_yearsr r<00>d<00><00>bmir r
u删除 u) 条舒张压 >= 收缩压的异常记录<E8AEB0>Z<00><><00><<00><>u 条血压极端异常值记录<E8AEB0>正常u 高于正常u极高)<03>r<00>r <00>cholesterol_strr <00>gluc_stru女性u男性)r!rr<00>
gender_str<EFBFBD>无心血管疾病<E796BE>有心血管疾病)rr!r<00>
cardio_strcSsD|dkrdSd|krdkrdSd|krdkr dSdSdS) Ng<00>2@u偏瘦gfffff<66>8@r <00>gfffff<66>=@u超重u肥胖r)rrrr<00>categorize_bmi<6D>s<02><02>z-load_and_process_data.<locals>.categorize_bmi<6D> bmi_categoryu(数据加载和清洗完成!共处理 u
条记录u原始数据: u 条记录, 清洗后: u数据加载失败: N)<14>st<73>info<66> DATA_PATH<54>pdZ
read_excel<EFBFBD>errorZ DataFrame<6D>copy<70>round<6E>astype<70>int<6E>any<6E>warning<6E>sum<75>mapZapplyZsuccess<73>len<65> Exception<6F>str) Zrequired_columnsZmissing_columnsZ df_processedZ
invalid_bpZ bp_outliersZcholesterol_mapZgluc_mapZ
gender_mapZ
cardio_mapr*<00>errr<00>load_and_process_dataHsh


<02>
<06><06><06><06><06>
 <08><02>r=cCs tj<01>d<01>t|d<00><04><00>}t|d<00><05><00>}tjjd||||fdd<05>}|d<00><07><00><08>}tjj d||dd <09>}|d
<00><07><00><08>}tjj d ||d d <09>}|d <00><07><00><08>}tjj d||dd <09>} |d<00><07><00><08>}
tjj d|
|
dd <09>} |d<00><07><00><08>} tjj d| | dd <09>} |||| | | d<16>S)u
创建侧边栏筛选器
参数:
df: 处理后的数据框
返回:
dict: 筛选条件字典
u## 🔍 数据筛选ru选择年龄范围:u$筛选指定年龄范围内的记录)Z min_valueZ max_value<75>value<75>helpr%u 选择性别:u选择要分析的性别)<03>options<6E>defaultr?r(u选择心血管疾病状态:u'选择要分析的心血管疾病状态r+u选择BMI分类:u选择要分析的BMI分类r#u选择胆固醇水平:u!选择要分析的胆固醇水平r$u选择血糖水平:u选择要分析的血糖水平)<06> age_range<67>gendersr<00>bmi_categoriesr r )
r,<00>sidebar<61>markdownr4<00>min<69>maxZslider<65>unique<75>tolist<73> multiselect)rZmin_ageZmax_agerBZgender_optionsZselected_gendersZcardio_optionsZselected_cardioZ bmi_optionsZ selected_bmiZcholesterol_optionsZselected_cholesterolZ gluc_optionsZ selected_glucrrr<00>create_filters<72>sh
<06> <06><06><06><06><06><06>rLcCs<>|<00><00>}||d|ddk|d|ddk@}|dr)||d<00>|d<00>}|dr8||d<00>|d<00>}|d rG||d
<00>|d <00>}|d rV||d <00>|d <00>}|d re||d<00>|d <00>}|S)u<>
应用筛选条件到数据框
参数:
df: 原始数据框
filters: 筛选条件字典
返回:
pd.DataFrame: 筛选后的数据框
rrBrr!rCr%rr(rDr+r r#r r$)r1Zisin<69>r<00>filters<72> filtered_dfrrr<00> apply_filters<72>s" <02><04>rPc Cs<>t<00>d<01>\}}}}|<02>tjdt|<00>d<03>t|<00>t|<01>d<04>d<05>Wd<00>n1s*wY|<03>0t|<00>dkrS|d<00><04>t|<00>d <00>d
<EFBFBD>}tjd |<06>d <0C>d d<0E>ntjd dd<10>Wd<00>n1sdwY|<04>*t|<00>dkr<>|d<00><06><00>d<12>}tjd|<07>d<14>dd<0E>ntjddd<10>Wd<00>n1s<>wY|<05>2t|<00>dkr<>|d<00><06><00>d<12>}tjdt|<08>dd<0E>ntjddd<10>Wd<00>dSWd<00>dS1s<>wYdS)uy
显示关键指标
参数:
filtered_df: 筛选后的数据框
original_df: 原始数据框
<20>u筛选后记录数<E5BD95>,z+,)<03>labelr>ZdeltaNrrrru心血管疾病风险率<E999A9>%u0当前筛选条件下心血管疾病患者比例)rSr>r?zN/A)rSr>rr!u 平均年龄u 岁u$当前筛选条件下的平均年龄ru 平均BMIu0当前筛选条件下的平均身体质量指数)r,rZmetricr9r7r2Zmeanr;) rOZ original_df<64>col1<6C>col2<6C>col3<6C>col4Z risk_rateZavg_ageZavg_bmirrr<00>display_metrics#sT
<08><1C> <08><02><1C> <08><02><1C> <08><0E>"<22>rYc Cs<>t|<00>dkr t<01>d<02>dSt<01>d<04>t<01>d<05>\}}|<01>0t<01>d<06>tj|ddd d
d d d dd<0F>dddd<13>d<14> }|jddd<17>tj|dd<19>Wd<00>n1sNwY|<02>Et<01>d<1A>t j
|d|ddd<1D><03> <0B>}|j dddd <20>}tj |dddd!d"d#d d$<24>d%ddd<13>d&<26>}|jd'dd(<28>tj|dd<19>Wd<00>n1s<>wYt<01>d)<29>tj|d*d+dd,gd-<2D>d.d/d d0d1<64>d2ddd<13>d3<64> }|jdd4<64>tj|dd<19>t<01>d<05>\}} |<08>5t<01>d5<64>|d6<00><0F><00> <0B>}
d7d8g|
_tj|
d8d7d9tjjjd:<3A>} | jd;d<d=<3D>tj| dd<19>Wd<00>n 1<00>swY| <09>6t<01>d><3E>|d?<00><0F><00> <0B>} d@d8g| _tj| d8d@dAtjjjd:<3A>} | jd;d<d=<3D>tj| dd<19>Wd<00>dS1<00>sOwYdS)BuQ
创建可视化图表
参数:
df: 要可视化的数据框
ru$没有可用的数据进行可视化Nu## 📊 数据可视化分析ru### 年龄分布分析rr(<00>Zoverlaygffffff<66>?u年龄u心血管疾病状态u人数)rr(<00>countu$年龄分布与心血管疾病关系z#e63946z#457b9d)r'r&)<08>x<>colorZnbins<6E>barmodeZopacity<74>labels<6C>title<6C>color_discrete_mapu 疾病状态z x unified)<02> legend_titleZ hovermodeT<65>Zuse_container_widthu%### BMI分类与心血管疾病关系r+<00>index)<01> normalize<7A> cardio_status<75>
proportion)Zid_varsZvar_nameZ
value_name<EFBFBD>stacku BMI分类u比例)r+rgrfu$BMI分类对心血管疾病的影响)r\<00>yr]r^r_r`raz.1%)Zyaxis_tickformatrbu### 血压关系分析r
r r)rr%r#u收缩压 (mmHg)u舒张压 (mmHg)ZBMI)r
r r(ru血压关系散点图)r\rir]<00>sizeZ
hover_datar_r`ra)rbu### 胆固醇水平分布r#Zcholesterol_levelr[u胆固醇水平分布)<04>values<65>namesr`Zcolor_discrete_sequenceZinsidez percent+label)Z textpositionZtextinfou### 血糖水平分布r$Z
gluc_levelu血糖水平分布)r9r,r6rFr<00>pxZ histogramZ update_layoutZ plotly_chartr/Zcrosstab<61> reset_indexZmeltZbarZscatterZ value_countsZpieZcolorsZ
sequentialZRdBuZ update_tracesZBlues)rrUrVZfig_ageZbmi_cardio_crossZbmi_cardio_longZfig_bmiZfig_bprWrXZcholesterol_countsZfig_cholZ gluc_countsZfig_glucrrr<00>create_visualizationsXs<> 


<04><04><06><06><1C>
<04><02><06><04><04><06><06><1C>
(<04><04><06> 

<06><1E>

<06>$<24>roc Cs<>t<00>d<01>tjddd<04><02>|t<00>d<05>\}}|<01>&t<00>d|j<05>t<00>d<07>t<00>|j<06>t<08><01> <09>j
dd d
<EFBFBD>d <0B><01>Wd <00>n1s?wY|<02>3t<00>d <0A>|<00> <0B><00> <0C><00> <09>}d dg|_||ddk}t |<03>dkrmt<00>|<03>nt<00>d<10>Wd <00>n1s|wYWd <00>n1s<>wYtjddd<04><02>E|j<03><0E>}gd<12>}tjd||d<14>}|r<>||<00><10>}tj|<07>d<15>dd<17>t<00>dt |<00><01>d<19><03>n t<00>d<1A>Wd <00>d SWd <00>d S1s<>wYd S)uK
显示数据预览
参数:
df: 要预览的数据框
u## 📋 数据预览u 数据摘要F)rru**数据形状:**u**数据类型:**u类型u列名)rrdrNu**缺失值统计:**u缺失值数量ru 无缺失值u查看原始数据) rr%rr+r
r r#r$r(u选择要显示的列:)r@rArTrcu显示前 100 行(共 uu请选择要显示的列)r,rFZexpanderr<00>write<74>shapeZdtypesr3r;rn<00>renameZisnullr7r9rJrKr1Z dataframe<6D>headZcaptionr-)rrUrV<00>missingZavailable_columnsZdefault_columnsZselected_columnsZ
display_dfrrr<00>display_data_preview<65>sH

&<1C>

  
<02><1C><02><1C>
<06>  <0E>"<22>rucCs<>tjddd<03>t<00>d<04>t<00>d<05><01> t<03>}Wd<00>n1swY|jr.t<00>d<07>dSt|<00>}t||<01>}t<00>d<08>t||<00>t |<02>t
|<02>tj <0B>d<04>tj <0B>d <09>tj <0B> d
<EFBFBD>tj <0B>d <0B>tj <0B> d <0C>dS) u
主函数
uS<h1 class="main-header">❤️ CardioAI - 心血管疾病智能分析仪表板</h1>Trz---u!正在加载数据,请稍候...Nu9数据加载失败请检查数据文件路径和格式u## 📈 关键指标u## 使用说明u<E6988E>
1. 使用左侧筛选器选择要分析的数据子集
2. 查看上方的关键指标了解数据概况
3. 探索下方的可视化图表分析趋势和关系
4. 点击数据预览查看详细数据
u## 📊 数据说明u)
- **年龄**: 原始数据为天数,已转换为岁数
- **BMI**: 身体质量指数,计算公式:体重(kg)/身高(m)²
- **血压**: 收缩压(ap_hi)和舒张压(ap_lo)
- **胆固醇/血糖**: 1=正常, 2=高于正常, 3=极高
- **心血管疾病**: 0=无, 1=有
) r,rFZspinnerr=<00>emptyr0rLrPrYrurorEr-rMrrr<00>mains&
 <1C>



    rw<00>__main__)#<23>__doc__Z streamlitr,Zpandasr/ZnumpyZnpZplotly.expressZexpressrmZplotly.graph_objectsZ graph_objectsZgoZpathlibr<00>sys<79>osZset_page_config<69>__file__<5F>parentZ project_root<6F>path<74>appendr;rFr.Z
cache_datar=rLrPrYrorurw<00>__name__rrrr<00><module>sB    <06> <06>"

dM)5 /3
<04>