一、项目简介

本项目是一个基于Python Streamlit框架开发的金融数据分析平台,实现了对申万行业指数的可视化分析、相关上市公司股票数据展示以及基于财务指标的综合评价功能。项目适用于金融数据分析、量化研究、行业研究等场景。

二、主要功能

  • 行业指数走势可视化:绘制申万一级行业指数收盘价走势图
  • 个股价格走势展示:展示该行业内6只代表性股票的价格走势
  • 数据表格展示:指数交易数据,相关上市公司基本信息,财务数据,股票交易数据(前2000条)
  • 综合评价系统:基于总体规模与投资效率指标对行业内上市公司进行综合评价与排名

三、项目结构         

├── 数据文件/
│   ├── index_trdata.csv          # 行业指数交易数据
│   ├── stk_trdata.csv            # 个股交易数据
│   ├── fin_data.csv              # 财务数据
│   ├── 上市公司基本信息.xlsx      # 公司基本信息
│   └── 最新个股申万行业分类(完整版-截至7月末).xlsx  # 行业分类信息
├── 44_蒋嘉洋.py                  # 主程序文件
└── requirements.txt              # 依赖包列表

四、核心代码解析

4.1 主函数  st_data(nm, info)

该函数是项目的核心数据处理模块:

def st_data(nm, info):
    # 1. 读取数据文件
    data = pd.read_csv('index_trdata.csv')
    trdata = pd.read_csv('stk_trdata.csv')
    findata = pd.read_csv('fin_data.csv')
    co_data = pd.read_excel('上市公司基本信息.xlsx')
    
    # 2. 筛选指定行业数据(要求>600条记录)
    data_i = data.iloc[data['name'].values == nm, :]
    
    # 3. 绘制行业指数走势图
    # ...(可视化代码)
    
    # 4. 关联获取行业相关上市公司数据
    # ...(数据合并处理)
    
    # 5. 绘制6只代表性股票价格走势图
    # ...(子图绘制)
    
    # 6. 返回处理结果
    return (f1, f2, data_i, findata_m, trdata_hy, co_data.iloc[:, :-1])

4.2 综合评价函数 Fr(tdata, year, trdata_hy)

该函数实现了基于主成分分析(PCA)的综合评价模型:

def Fr(tdata, year, trdata_hy):
    """
    基于总体规模与投资效率的综合评价函数
    参数:
        tdata: 财务数据
        year: 选择的年度
        trdata_hy: 股票交易数据(用于获取股票简称)
    """
    # 1. 数据清洗:删除缺失值和负值数据
    # 2. 数据标准化:使用StandardScaler
    # 3. 主成分分析:提取综合指标
    # 4. 计算综合得分并进行排名
    # 5. 返回包含股票代码、简称、得分和排名的DataFrame
def Fr(tdata, year, trdata_hy):
    """
    基于总体规模与投资效率的综合评价函数
    参数:
        tdata: 财务数据
        year: 选择的年度
        trdata_hy: 股票交易数据(用于获取股票简称)
    """
    # 1. 数据清洗:删除缺失值和负值数据
    # 2. 数据标准化:使用StandardScaler
    # 3. 主成分分析:提取综合指标
    # 4. 计算综合得分并进行排名
    # 5. 返回包含股票代码、简称、得分和排名的DataFrame

4.3 Streamlit界面函数  st_fig()

该函数构建了完整的Web应用界面:

def st_fig():
    # 1. 读取行业分类信息
    info = pd.read_excel('最新个股申万行业分类(完整版-截至7月末).xlsx')
    nm_L = list(set(info['新版一级行业'].values))
    
    # 2. 创建侧边栏选择器
    with st.sidebar:
        nm = st.selectbox("请选择申万一级行业", nm_L)
    
    # 3. 调用st_data函数获取数据
    r = st_data(nm, info)
    
    # 4. 使用两列布局展示图表
    left, right = st.columns(2)
    with left:
        st.subheader('指数走势图')
        st.pyplot(r[0])
    
    # 5. 添加综合评价功能
    available_years = sorted(r[3]['年度'].unique())
    year = st.selectbox("选择年度", available_years)
    
    # 6. 生成综合评价结果
    if st.button('生成综合评价结果'):
        res = Fr(filtered_data, year, r[4])
        st.dataframe(res.head(num))

五、技术要点

5.1 数据处理技术

  • 使用Pandas进行数据读取、清洗和合并
  • 基于行业代码关联多个数据源
  • 数据筛选条件:交易记录>600条,财务指标非负

5.2 可视化技术

  • Matplotlib绘制行业指数走势图
  • 子图方式展示多只股票价格走势
  • Streamlit内嵌图表展示

5.3 综合评价算法 

  • 标准化处理:消除量纲影响
  • 主成分分析(PCA):降维提取综合指标
  • 综合得分计算与排名

5.4 Streamlit应用开发

  • 侧边栏设计:行业选择
  • 多列布局:图表并排展示
  • 交互控件:下拉选择、按钮触发

六、运行步骤

  1. 安装依赖包:

    pip install streamlit pandas numpy matplotlib scikit-learn openpyxl

  2. 准备数据文件:确保所有CSV和Excel文件在项目目录中

  3. 运行程序:

    streamlit run 44_蒋嘉洋.py

  4. 访问应用:浏览器打开  http://localhost:8501

七、项目亮点

     1.一体化分析平台:集数据获取、处理、可视化、分析于一体  

     2.  交互式体验:用户可自由选择行业、年度和排名数量  

     3.  综合评价模型:结合规模指标和效率指标进行多维度评估  

     4.  代码结构清晰:函数模块化设计,便于维护和扩展  

     5.  数据完整性:严格的数据清洗和验证机制

八、扩展建议

  1. 增加更多技术指标:如MACD、RSI等
  2. 添加回测功能:基于综合评价结果进行策略回测
  3. 集成实时数据:对接股票API获取最新数据
  4. 增加导出功能:支持图表和数据的导出
  5. 优化性能:大数据量下的性能优化

九、完整代码

完整代码已在本项目中提供,建议读者下载后根据实际数据路径进行调整运行。


注意:运行前请确保已安装所有依赖包,并将数据文件放置在正确路径下。如有任何问题,欢迎在评论区留言讨论。

实训2行业应收与利润可视化分析平台

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐