基于Streamlit的智能创业计划生成器开发实践
一、应用概述
在数字经济时代,创业者亟需高效工具进行系统化的商业规划。本文介绍的智能创业计划生成器基于Streamlit框架构建,整合了财务建模、时间轴规划、智能文档生成等核心功能。该工具通过模块化设计实现了九大创业要素的系统化配置,显著提升了商业计划书的编写效率。应用采用会话状态管理技术,支持多步骤交互操作,并内置动态可视化分析,为创业者提供直观的数据决策支持。
二、核心功能模块分析
- 动态财务建模系统
财务模块采用参数化设计,用户可灵活调整启动成本、毛利率等6项核心参数。通过指数增长模型实现未来36个月的财务预测:
df['Revenue'] = [params['startup_cost'] * (1 + params['monthly_revenue_growth']) ** i
for i in range(months)]
系统自动计算毛利润、运营成本和净利润,并通过Plotly生成交互式趋势图。关键指标卡片的实时更新功能,使ROI分析、回本周期等数据一目了然。
- 智能时间轴规划器
甘特图模块采用Pandas进行时间序列处理,支持动态增删任务项。每个任务包含开始/结束时间、负责人等多维度数据:
fig = px.timeline(df, x_start="Start", x_end="End", y="task", color="owner")
数据表格与图形视图的双向联动,配合表单提交验证机制(空任务检测、日期有效性校验),确保规划数据的准确性。
- 结构化文档生成引擎
基于Markdown的文档生成系统,通过会话状态整合各模块输入数据:
def generate_markdown():
content = "# 创业计划\n"
content += f"## 项目概述\n- **项目名称**: {plan_data['project_name']}"
输出文档包含财务参数、时间轴、市场分析等完整章节,支持一键下载为标准化商业计划书。
三、技术实现亮点
- 状态管理机制
应用采用Streamlit的session_state实现跨页面状态持久化:
if 'plan_data' not in st.session_state:
st.session_state.plan_data = {
'timeline': [],
'current_step': 0,
'financial_params': {...}
}
这种设计保证用户在页面导航时数据不丢失,同时支持进度跟踪功能,通过radio组件与进度条联动展示完成度。
- 可视化增强方案
通过Plotly Express和Graph Objects构建专业级图表:
- 时间序列采用Scatter图表展示收入/利润双轴趋势
- 甘特图通过px.timeline实现任务进度可视化
- 关键指标卡片应用CSS阴影效果提升可读性
- 交互设计优化
侧边栏导航菜单采用icon+文字的组合方式,提升用户体验:
steps = ["🏠 项目概览", "🎯 市场分析", "💡 产品设计"...]
current_step = st.radio("当前进度", steps, index=current_step)
内容编辑区采用expand布局,结合智能建议模块,提供实时写作指导。例如市场分析模块内置TAM/SAM/SOM模型说明,降低用户学习成本。
import streamlit as st
import datetime
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
# 必须作为第一个streamlit命令
st.set_page_config(
page_title="创业计划生成器",
layout="wide",
page_icon="🚀"
)
# ================== 初始化会话状态 ==================
if 'plan_data' not in st.session_state:
st.session_state.plan_data = {
'timeline': [],
'current_step': 0,
'financial_params': {
'startup_cost': 500000,
'monthly_revenue_growth': 0.15,
'gross_margin': 0.65,
'cac': 3000,
'salaries': 150000
}
}
# ================== 样式配置 ==================
def local_css():
st.markdown(f"""
<style>
.metric-card {{
border: 1px solid #e6e6e6;
border-radius: 8px;
padding: 15px;
margin: 10px 0;
background: white;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}}
.stSlider>div>div>div>div {{
background: #2B7DE9 !important;
}}
</style>
""", unsafe_allow_html=True)
# ================== 财务计算模块 ==================
def financial_calculator():
params = st.session_state.plan_data['financial_params']
with st.expander("💰 动态财务模型计算器", expanded=True):
col1, col2 = st.columns(2)
with col1:
params['startup_cost'] = st.number_input("启动成本(元)", 100000, 10000000, params['startup_cost'])
params['monthly_revenue_growth'] = st.slider("月收入增长率", 0.0, 1.0, params['monthly_revenue_growth'],
0.01)
params['gross_margin'] = st.slider("毛利率", 0.0, 1.0, params['gross_margin'], 0.01)
with col2:
params['cac'] = st.number_input("客户获取成本(CAC)", 100, 100000, params['cac'])
params['salaries'] = st.number_input("年度人力成本(元)", 50000, 5000000, params['salaries'])
# 生成财务预测
months = 36
df = pd.DataFrame({
'Month': pd.date_range(start=datetime.date.today(), periods=months, freq='M'),
'Revenue': [params['startup_cost'] * (1 + params['monthly_revenue_growth']) ** i for i in range(months)],
'CAC': params['cac']
})
df['Gross Profit'] = df['Revenue'] * params['gross_margin']
df['Operating Cost'] = params['salaries'] / 12 + df['CAC'] * df['Revenue'] / 1000
df['Net Profit'] = df['Gross Profit'] - df['Operating Cost']
# 可视化
tab1, tab2 = st.tabs(["趋势分析", "关键指标"])
with tab1:
fig = go.Figure()
fig.add_trace(go.Scatter(x=df['Month'], y=df['Revenue'], name="收入"))
fig.add_trace(go.Scatter(x=df['Month'], y=df['Net Profit'], name="净利润"))
fig.update_layout(height=400)
st.plotly_chart(fig, use_container_width=True)
with tab2:
kpi1, kpi2, kpi3 = st.columns(3)
with kpi1:
st.metric("累计收入", f"¥{df['Revenue'].sum() / 10000:.1f}万")
with kpi2:
st.metric("平均净利润率", f"{df['Net Profit'].mean() / df['Revenue'].mean() * 100:.1f}%")
with kpi3:
st.metric("回本周期", f"{(params['startup_cost'] / df['Net Profit'].cumsum().max()) * 12:.1f}月")
# ================== 时间轴模块 ==================
def timeline_step():
st.header("📅 时间轴规划")
# 甘特图
if st.session_state.plan_data['timeline']:
df = pd.DataFrame(st.session_state.plan_data['timeline'])
df['Start'] = pd.to_datetime(df['start'])
df['End'] = pd.to_datetime(df['end'])
fig = px.timeline(df, x_start="Start", x_end="End", y="task", color="owner")
fig.update_yaxes(autorange="reversed")
st.plotly_chart(fig, use_container_width=True)
# 任务输入表单
with st.form("任务表单"):
cols = st.columns([3, 2, 2, 2])
task = cols[0].text_input("任务名称*")
start = cols[1].date_input("开始日期", datetime.date.today())
end = cols[2].date_input("结束日期", datetime.date.today())
owner = cols[3].text_input("负责人", "未指定")
if st.form_submit_button("➕ 添加任务"):
if task and start and end:
st.session_state.plan_data['timeline'].append({
"task": task,
"start": start.strftime("%Y-%m"),
"end": end.strftime("%Y-%m"),
"owner": owner
})
# 任务表格
if st.session_state.plan_data['timeline']:
st.dataframe(pd.DataFrame(st.session_state.plan_data['timeline']),
hide_index=True,
use_container_width=True)
# ================== 主界面 ==================
def main_page():
local_css()
# 侧边栏导航
with st.sidebar:
st.title("🧭 导航菜单")
steps = [
"🏠 项目概览", "🎯 市场分析", "💡 产品设计",
"📈 商业模式", "⚙️ 运营计划", "👥 团队架构",
"💰 财务计划", "⚠️ 风险分析", "📅 时间轴"
]
current_step = st.radio("当前进度", steps, index=st.session_state.plan_data['current_step'])
st.session_state.plan_data['current_step'] = steps.index(current_step)
# 进度指示
progress = (st.session_state.plan_data['current_step'] + 1) / len(steps)
st.progress(progress)
# 文档生成
if st.button("📥 生成计划书"):
markdown_content = generate_markdown()
st.download_button(
label="下载文档",
data=markdown_content,
file_name=f"{st.session_state.plan_data.get('project_name', '创业计划')}.md",
mime="text/markdown"
)
# 主内容区
if current_step == "🏠 项目概览":
st.header("项目概览")
col1, col2 = st.columns([3, 2])
with col1:
st.session_state.plan_data['project_name'] = st.text_input("项目名称", "AI供应链优化平台")
st.session_state.plan_data['overview'] = st.text_area("项目简介", height=200)
with col2:
st.image("https://example.com/startup-chart.png", caption="市场趋势分析")
elif current_step == "💰 财务计划":
st.header("财务规划")
financial_calculator()
elif current_step == "📅 时间轴":
timeline_step()
else:
# 其他模块的统一处理
section_map = {
"🎯 市场分析": "market_analysis",
"💡 产品设计": "product_design",
"📈 商业模式": "business_model",
"⚙️ 运营计划": "operation_plan",
"👥 团队架构": "team",
"⚠️ 风险分析": "risk_management"
}
current_key = section_map[current_step]
with st.expander("📝 内容编辑器", expanded=True):
st.session_state.plan_data[current_key] = st.text_area(
"编辑内容",
height=400,
value=st.session_state.plan_data.get(current_key, "")
)
with st.expander("💡 智能建议", expanded=True):
st.write(guidance_content[current_key])
# ================== 文档生成 ==================
def generate_markdown():
# 生成Markdown文档的逻辑
content = "# 创业计划\n"
content += f"## 项目概述\n"
content += f"- **项目名称**: {st.session_state.plan_data.get('project_name', '未知')}\n"
content += f"- **项目简介**: {st.session_state.plan_data.get('overview', '')}\n"
content += f"## 财务计划\n"
content += f"- 启动成本: ¥{st.session_state.plan_data['financial_params']['startup_cost']}元\n"
content += f"- 月收入增长率: {st.session_state.plan_data['financial_params']['monthly_revenue_growth'] * 100}%\n"
content += f"- 毛利率: {st.session_state.plan_data['financial_params']['gross_margin'] * 100}%\n"
content += f"- 客户获取成本(CAC): ¥{st.session_state.plan_data['financial_params']['cac']}元\n"
content += f"- 年度人力成本: ¥{st.session_state.plan_data['financial_params']['salaries']}元\n"
content += f"## 时间轴\n"
for task in st.session_state.plan_data['timeline']:
content += f"- **任务**: {task['task']}, **开始**: {task['start']}, **结束**: {task['end']}, **负责人**: {task['owner']}\n"
return content
# ================== 指导内容 ==================
guidance_content = {
"market_analysis": """### 市场分析指南
1. **目标市场**:使用TAM/SAM/SOM模型
- TAM(总可服务市场) = 潜在客户数量 × 年消费额
2. **竞争分析**:制作SWOT矩阵
3. **用户画像**:包含年龄、职业、行为特征等维度""",
"product_design": """### 产品设计要点
1. **功能定义**:明确产品的核心功能和附加功能
2. **用户体验**:设计简洁易用的用户界面
3. **技术栈选择**:根据需求选择合适的技术方案""",
"business_model": """### 商业模式设计
1. **盈利模式**:确定如何从产品或服务中获利
2. **价值主张**:突出产品或服务的独特卖点
3. **合作伙伴关系**:考虑与其他企业的合作机会""",
"operation_plan": """### 运营计划制定
1. **营销策略**:制定有效的市场推广计划
2. **销售策略**:建立高效的销售渠道
3. **客户服务**:提供优质的售后服务支持""",
"team": """### 团队建设
1. **团队成员**:列出核心团队成员及其职责
2. **组织结构**:描述公司的组织架构
3. **技能要求**:说明各岗位所需的技能和经验""",
"risk_management": """### 风险管理
1. **风险识别**:列出潜在的风险因素
2. **风险评估**:对每个风险进行评估
3. **应对措施**:制定相应的风险管理措施"""
}
# ================== 程序入口 ==================
if __name__ == "__main__":
main_page()