首页 › 论坛 › 置顶 › 使用Python和Streamlit进行股票基本面分析
-
作者帖子
-
2025-02-12 14:28 #12754Q QPY课程团队管理员
使用Python和Streamlit进行股票基本面分析
在当今动态的股市中,进行全面的基本面分析可以为投资者提供竞争优势。本文将探讨如何利用Python、Streamlit以及自定义模块如
YFinance3
来构建一个自动化的股票基本面分析工具。我们将逐步解析代码,并强调每个部分如何促进高效的股票数据收集和处理。
项目的关键特性
- 从CSV文件加载和处理多个股票代码。
- 使用自定义
YFinance3
模块获取每只股票的基本数据。 - 将股票数据保存和加载为JSON文件,以便重复使用。
- 执行关键财务指标计算。
- 展示清晰且结构化的数据洞察。
项目结构
. ├── Data/ │ ├── Datasets/ │ └── sources/ │ └── Index/ │ └── StockList.csv └── main.py
逐步代码解析
1. 目录和文件初始化
DATA_PATH = './Data/Datasets' CSV_BASE_PATH = './Data/sources/Index/'
这些路径定义了存储股票符号的CSV文件的位置以及处理后数据的保存位置。
2. 处理CSV输入
if not os.path.exists(CSV_BASE_PATH):
st.error(f"目录未找到: {CSV_BASE_PATH}") else: csv_files = [file for file in os.listdir(CSV_BASE_PATH) if file.endswith('.csv')] selected_csv = st.selectbox("选择一个CSV文件:", csv_files)
这个代码片段检查目录是否存在,并用可用的CSV文件填充下拉菜单。用户可以选择包含股票符号的文件。
3. 数据下载与存储
for symbol in SYMBOLS:
file_name = os.path.join(folder_path, f'{symbol}.json') if os.path.exists(file_name): existing_files += 1 continue try: data = YFinance3(symbol) with open(file_name, 'w') as file:
在这段代码中,首先定义了一个文件名 `file_name`,它通过 `os.path.join` 函数将文件夹路径 `folder_path` 和一个格式化的字符串组合在一起,形成一个以 `.json` 结尾的文件名。如果该文件名已经存在于指定路径中,则 `existing_files` 的计数会增加 1,并继续执行下一个循环。
接下来,代码尝试使用 `YFinance3` 类获取与 `symbol` 相关的数据,并打开之前定义的 `file_name` 文件以写入模式。如果文件成功打开,将会在文件中写入数据。
json.dump(data.info, file) new_downloads += 1 except Exception as e: st.error(f"处理错误 {symbol}: {e}")
这段代码遍历股票符号,使用
YFinance3
模块下载数据,并以 JSON 格式保存。它跟踪现有文件、新下载和错误,以便进行状态报告。
4. 数据加载与处理
def load_data(json_data): data['Symbol'].append(json_data.get('symbol', np.nan))
data['Name'].append(json_data.get('longName', np.nan)) data['Industry'].append(json_data.get('industry', np.nan)) ...
load_data
函数从 JSON 文件中提取关键财务指标,例如:- 每股收益(前瞻性)
- 市净率(PB)
- 自由现金流收益率(FCFY)
- 52周范围
提取的数据被附加到一个结构化的字典中。
5. 数据框创建和 NaN 处理
df = pd.DataFrame(data) df_exceptions = df[df.isna().any(axis=1)]
df = df.dropna().reset_index(drop=True)
该代码从提取的数据创建一个
pandas
DataFrame,删除缺失值的行,同时记录异常以供用户审核。
6. 计算52周范围
df['52w Range'] = ((df['Price'] - df['52w Low']) / (df['52w High'] - df['52w Low'])) * 100
此计算有助于评估股票在其52周交易区间内的位置。
7. 显示和保存处理后的数据
st.write("### 处理后的数据", df) output_file = os.path.join(folder_path, 'processed_data.csv')
df.to_csv(output_file, index=False) st.success(f"处理后的数据已保存至 {output_file}")
清理和处理后的数据在Streamlit中显示,并保存为CSV文件以供将来参考。
示例输出
股票代码 名称 行业 价格 每股收益(前瞻) 市净率 未来现金流收益率 净资产收益率 AAPL 苹果公司 科技 170.3 6.55 9.8 2.3% 42% MSFT 微软公司 科技 310.0 8.20 7.2 3.1% 40%
潜在增强功能
- 股票筛选: 根据关键指标如净资产收益率和市盈增长比率实现筛选。
- 数据可视化: 绘制关键指标的历史趋势图。
- 策略回测: 使用基本数据作为回测股票策略的输入。
- 实时更新: 自动化每日新财务数据的更新。
结论
本项目提供了一种强大而简洁的基本面股票分析方法,使用Python和Streamlit。它自动化了数据收集、处理和展示,帮助用户做出更明智的投资决策。
如果您希望增强博客的任何部分或向代码添加新功能,请告诉我!
-
作者帖子
- 哎呀,回复话题必需登录。