Python+Streamlit实现项目成本管理挣值分析可视化

一、简介及相关技术

        许多人都苦恼于前端基础差而无法制作一个好看的WEB界面,本文参考如下博客实现项目成本管理中的挣值分析。从EXCEL表格中录入数据后,即可生成对应的WEB界面。

用 Python 读取 Excel 自动生成 Web 可视化页面!_涛哥聊Python-CSDN博客

        挣值分析是项目成本管理中成本控制的重要工具,企业项目成本挣值分析可视化网页具体功
能如下:
1.打开 Web 界面,点击“下载模板文件”按钮即可下载“Template.xlsx”文件,之后即可打
开文件按要求录入项目数据,保存文件。回到 Web 界面,点击“上传分析文件”按钮,即可上传
更新的Template.xls”文件,便可看到整个项目的挣值分析图。
2.在饼图中,显示各活动 PV。
3.在进度图中,显示各活动的进度条。
4.在挣值分析指标图中,可以显示 BAC、EV、CV、SV、典型性 ETC、非典型性 ETC、典型性 EAC、
非典型性 EAC、典型性 VAC、非典型性 VAC,而且项目经理可以只勾选自己需要的指标。
5.在绩效评估图中,可以显示 CPI、SPI、TCPI。
6.显示成本绩效执行状态。
        关键技术如下:
1.Python+Streamlit库的运用。
2. Python 对 Excel 数据进行操作,将其转化为Streamlit中的图表。
3.本设计将 Python 工具与项目管理知识想结合,要求将挣值分析原理与编程相联系,旨在
帮助项目经理快速分析项目运行情况。

二、设计

        在D盘中建立Eexcel_Web文件夹。包含如下文件:

 

1.EXCEL模板表格设计

2.代码设计

import pandas as pd
import streamlit as st
import plotly.express as px
from PIL import Image


#网页名称、标题、子标题
def head_set():
    
    st.set_page_config(page_title='企业项目成本挣值分析可视化展示')
    st.header('企业项目成本挣值分析可视化展示')
    st.subheader('Designed by Garvey.Wu')

#下载模板文件
def template_download():
    
    with open("template.xlsx", "rb") as file:
        btn=st.download_button(label="下载模板文件",
                           data=file,file_name="template.xlsx")
#上传分析文件    
def excel_upload():
    global uploaded_file#全局变量
    uploaded_file=st.file_uploader("上传分析文件",
                                   type="xlsx")
    
#读取上传文件    
def upload_read():
    
    global df#全局变量
    #读取xlsx文件
    df=pd.read_excel(uploaded_file)
    #展示导入的表格
    st.dataframe(df)
    
#在饼图中,显示各活动PV   
def pv_pieShow():

    pv_df=pd.read_excel(uploaded_file,usecols="A:B")
    pv_piechart=px.pie(pv_df,title="各活动PV(计划价值)比例",values="PV(计划价值)(万元)",names="活动名称")
    st.plotly_chart(pv_piechart)

#在进度图中,显示各活动实际进度
def progress_barShow():

    progress_df=pd.read_excel(uploaded_file,usecols=[0,5])
    progress_bar=px.bar(progress_df,title="实际进度图(0到1)*100%",
                        x='活动名称', y='当前进度')
    st.plotly_chart(progress_bar)

#挣值分析指标图
def figure1_barShow():

    #挣值分析指标图
    figure1_df=pd.read_excel(uploaded_file,usecols="I:J")
    figure1_df=figure1_df.head(9)
    st.markdown("挣值分析指标表格")
    st.table(figure1_df)
    
    #streamlit的多重选择(选项数据)
    figure1=figure1_df['挣值分析指标'].unique().tolist()
    figure1_selection=st.multiselect("挣值分析指标",figure1,default=figure1)#多选,默认全选
    mask=figure1_df['挣值分析指标'].isin(figure1_selection)#根据某属性选取指定条件的行,完成过滤
    figure1_bar=px.bar(figure1_df[mask],title="挣值分析指标可视化",x='指标值(万元)', y='挣值分析指标',text="指标值(万元)",
                       orientation="h",color_discrete_sequence=['#F63366']*len(figure1_df),template='plotly_white')
    st.plotly_chart(figure1_bar)
    
#绩效指数展示
def performShow():
    global cpi_data,spi_data,tcpi_data#全局变量,便于performJudge()调用
    cpi_data=df.iloc[[9],[9]].values[0][0]#选取在excel中cpi值
    spi_data=df.iloc[[10],[9]].values[0][0]#选取在excel中spi值
    tcpi_data=df.iloc[[11],[9]].values[0][0]#选取在excel中tcpi值
    col1, col2, col3 = st.columns(3)
    col1.metric("CPI",cpi_data,"成本绩效指数")
    col2.metric("SPI",spi_data,"进度绩效指数")
    col3.metric("TCPI",tcpi_data,"完工尚需绩效指数")

#判断绩效执行状态
def performJudge():

    st.markdown("绩效执行状态:")
    #成本绩效判断
    if cpi_data>1:st.write("成本节约")
    elif  cpi_data<1:st.write("成本超支")
    else:st.write("成本平衡")

    #进度绩效判断
    if spi_data>1:st.write("进度提前")
    elif spi_data<1:st.write("进度落后")
    else:st.write("进度平衡")

#图片展示
def imageShow():
    image=Image.open("image.jpg")#在未导入excel时,展示图片
    st.image(image, clamp=False,
             channels="RGB",output_format="auto")



#调用
head_set()
template_download()
excel_upload()

#如果文件已上传
if uploaded_file is not None:
    upload_read()
    pv_pieShow()
    progress_barShow()
    figure1_barShow()
    performShow()
    performJudge()

#否则展示图片   
else:imageShow()

 3. 图片

                               

三、运行

在cmd下通过cd到文件夹目录,通过Streamlit run app.py启动。

首先,下载要导入的表格。

 然后,导入按照要求导入如下实例:

结果显示:

 

 

 

 

对于挣值分析指标,还可以只勾选自己需要的,去掉不需要的,生成对应的图表。

 

四、源码及测试用例

链接:https://pan.baidu.com/s/1AdtsbZ2W4Be_2CpVzXQbqg 
提取码:8878

 

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GarveyPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值