首页 论坛 置顶 使用Python和Streamlit进行股票基本面分析

正在查看 1 个帖子:1-1 (共 1 个帖子)
  • 作者
    帖子
  • #12754

    使用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。它自动化了数据收集、处理和展示,帮助用户做出更明智的投资决策。


    如果您希望增强博客的任何部分或向代码添加新功能,请告诉我!

正在查看 1 个帖子:1-1 (共 1 个帖子)
  • 哎呀,回复话题必需登录。