金融行业数据分析系统技术文档
- 项目概述 本系统目的是为用户提供一个可视化的工具,用于分析特定行业的市场表现和公司财务健康状况。用户可以选择一个行业,查看其指数历史走势、代表性个股的走势,并基于财务指标对行业内公司进行综合排名。
- 技术栈 Python、Streamlit、Pandas、Matplotlib绘制图、Scikit-learn (用于数据标准化和主成分分析)
- 数据源 指数交易数据.csv ————行业指数的历史交易记录; 股票交易数据.csv ————所有上市公司的股票交易记录; 财务数据.csv ————上市公司的财务指标数据; 上市公司基本信息.xlsx ————公司的基本注册和分类信息; 最新个股申万行业分类(完整版-截至7月末).xlsx ————用于映射股票代码与申万一级行业。
- 核心功能模块 该程序主要由三个函数构成: 4.1 数据处理与计算模块: st_data(nm, info, selected_year, top_n) 此函数是数据处理的核心,负责根据用户选择的行业名称获取并处理所有相关数据。 输入参数: nm (str): 申万一级行业名称(例如:“电子”、“医药生物”)。 info (DataFrame): 申万行业分类表。 selected_year (int): 选择的年份(用于财务分析)。 top_n (int): 显示排名前 N 的公司。 处理流程: 数据加载: 读取上述 5 个数据文件。 行业筛选: 从“指数交易数据”中筛选出指定行业的数据,并按日期排序。 数据过滤: 只有当该行业的历史指数记录大于 600 条时,才会继续进行绘图和深度分析。 关联查询: 利用“申万行业分类表”作为桥梁,关联出该行业内所有的上市公司代码,并进一步提取这些公司在“股票交易数据”和“财务数据”中的记录。 返回结果: 返回包含图表对象、数据表格及综合评价结果的元组。 4.2 综合评价引擎: F_score(findata, selected_year, top_n) 该函数实现了基于财务指标的综合打分模型,用于评估公司的“总体规模”与“投资效率”。 算法逻辑: 数据筛选: 根据用户选择的年份筛选财务数据,并剔除缺失值。 指标选取: 总体规模: 使用 总资产 作为衡量指标。 投资效率: 使用 净资产收益率 作为衡量指标。 数据标准化: 使用 MinMaxScaler 将不同量纲的指标归一化到 [0, 1] 区间。 主成分分析: 使用 PCA 将“规模得分”和“效率得分”合并为一个“综合得分”。 输出: 按综合得分降序排列,返回前 N 名的公司列表。 4.3 前端界面模块: st_fig() 该函数负责构建 Streamlit 用户界面。 界面布局: 侧边栏: 包含一个下拉选择框,用于选择申万一级行业。 主区域: 图表区: 左右两栏分别展示“行业指数走势图”和“前6只个股价格走势图”。 数据区: 依次展示原始数据表格(指数数据、公司信息、财务数据、交易数据)。 评价区: 包含年份和排名数量的选择器,以及最终的综合排名结果表格。
- 注意事项与优化建议 文件路径: 代码中使用了相对路径。如果文件不在同一目录,需要修改 pd.read_csv 和 pd.read_excel 中的路径。 数据量检查: 代码中强制要求行业指数数据大于 600 条才进行绘图,这可能会导致部分数据量较小的新兴行业无法显示图表。 图表优化: 当前的 Matplotlib 图表在 Streamlit 中显示时,如果数据点过多(如 600+),X 轴的日期标签可能会重叠。建议使用交互式图表库(如 Plotly)替代 Matplotlib 以获得更好的缩放体验。 缓存机制: 由于数据读取和 PCA 计算可能耗时,建议在 Streamlit 函数上添加 @st.cache_data 装饰器,以避免用户交互时重复计算。
- 总结 该项目代码结构清晰,实现了从数据读取、清洗、分析到可视化的完整流程。它是一个典型的金融量化分析仪表盘雏形,通过简单的配置即可用于分析不同行业的市场表现。