首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何获取个股精准板块概念

如何获取个股精准板块概念

作者头像
子晓聊技术
发布2026-04-23 16:17:48
发布2026-04-23 16:17:48
940
举报
文章被收录于专栏:子晓AI量化子晓AI量化

最近星球同学问我, 虽然问财可以通过query语句获取 个股的概念、行业,但里面的概念实在太多,很多概念其实并没那么重要。 能否提取里面的核心概念。

这里说下我的简单处理思路。 我们做一个核心概念映射, 把相关的概念的 映射到一个自定义的概念,比如你关心的,这样看着相对清晰。 比如我写了一个下面的字典类, 写的并不全, 只是做一下抛砖引玉的效果。

另外像一些国企改革、深股通、沪股通这类的 概念, 其实大部分用不上,我们可以写一个过滤程序把这类概念过滤掉。

代码语言:javascript
复制
# 核心概念映射字典
core_concept_mapping = {
'白酒': [r'白酒'],
'银行': [r'银行', r'商业银行', r'城商行', r'农商行'],
'黄金': [r'黄金', r'贵金属', r'金矿'],
'电力': [r'电力', r'电网', r'输配电', r'智能电网'],
'创新药': [r'创新药', r'生物制药', r'抗体药物', r'基因治疗', r'ADC药物'],
'汽车': [r'汽车整车', r'汽车制造', r'乘用车', r'商用车'],
'电池': [r'锂电池', r'动力电池', r'固态电池', r'钠离子电池'],
'CPO': [r'CPO', r'共封装光学', r'光电共封装'],
'液冷': [r'液冷', r'液冷散热', r'液冷技术', r'冷却技术'],
'食品': [r'食品饮料', r'休闲食品', r'乳制品', r'调味品'],
'芯片': [r'芯片', r'半导体', r'集成电路', r'光刻机', r'EDA', r'封测', r'晶圆'],
'旅游': [r'旅游', r'文旅', r'景区', r'酒店', r'免税', r'旅行社', r'在线旅游'],
'券商': [r'券商', r'证券公司', r'证券经纪', r'投行业务', r'财富管理'],
'保险': [r'保险', r'寿险', r'财险', r'再保险', r'保险代理', r'保险科技'],
'机器人': [r'机器人', r'工业机器人', r'服务机器人', r'人形机器人', r'自动化设备', r'机器视觉'],
'化工': [r'化工', r'化学制品', r'新材料', r'精细化工', r'特种化学品', r'聚氨酯', r'氟化工'],
'基建': [r'基建', r'工程建设', r'路桥建设', r'水利工程', r'轨道交通', r'城市管网'],
'房地产': [r'房地产', r'房地产开发', r'商业地产', r'物业管理', r'保障房', r'REITs'],
'军工': [r'军工', r'航空航天', r'武器装备', r'国防军工', r'军民融合', r'卫星导航']
}

exclude_concepts = ['融资融券', '国企改革', '深股通', '沪股通', '同花顺出海50', '同花顺漂亮100', '同花顺新质50',
'高股息精选', '超级品牌', '证金持股', '同花顺果指数', '同花顺中特估100']

代码形如这样处理

代码语言:javascript
复制
def map_to_core_concepts(concept_str):
    """将原始概念映射到核心概念"""
    if not isinstance(concept_str, str):
        return ""
    matched_concepts = set()
    for concept in concept_str.split(';'):
        for core_concept, patterns in core_concept_mapping.items():
            if any(re.search(pattern, concept) for pattern in patterns):
                matched_concepts.add(core_concept)
    return ";".join(sorted(matched_concepts))
   

另外一些同学喜欢用开盘啦的概念数据, 认识我的同学都知道,我之前写过 开盘啦概念个股分析文章, 一个概念下有多只个股, 一只个股也属于多个概念, 我们可以通过获取的数据,进行一下处理得到自己想要的数据。

上述原数据是 一个概念板块对应具体个股, 我们可以pandas技术处理变成1个个股对应的多个概念。处理结果类似下面的截图

这里写一个例子,假设你已经拥有一个csv文件,

代码语言:javascript
复制
import pandas as pd
from io import StringIO
def merge_stock_concepts(csv_file_path, output_file_path=None):
    """
    读取概念CSV文件,合并同一股票的所有概念信息
    Parameters:
    csv_file_path (str): 输入的CSV文件路径
    output_file_path (str, optional): 输出文件路径,如果不提供则只返回DataFrame
    Returns:
    pandas.DataFrame: 包含合并后概念信息的DataFrame
    """
    try:
        # 读取CSV文件
        df = pd.read_csv(csv_file_path)
        df['股票代码'] = df['股票代码'].str.zfill(6)
        # 打印原始数据信息
        print(f"原始数据形状: {df.shape}")
        print(f"原始数据列名: {list(df.columns)}")
        print("\n前5行数据:")
        print(df.head())
        # 检查必要的列是否存在
        required_columns = ['股票代码', '股票名称', '概念名称']
        for col in required_columns:
            if col not in df.columns:
                raise ValueError(f"CSV文件中缺少必要的列: {col}")
        # 按照股票代码和股票名称分组,合并概念信息
        # 使用agg函数将同一股票的概念名称合并为列表,其他列取第一个值
        grouped_df = df.groupby(['股票代码', '股票名称']).agg({
            '概念名称': lambda x: ', '.join(sorted(set(x))),  # 去重并排序
            '分类名称': 'first',
        }).reset_index()
        # 打印处理后的信息
        print(f"\n处理后的数据形状: {grouped_df.shape}")
        print(f"共处理了 {len(grouped_df)} 只股票的概念信息")
        # 如果提供了输出文件路径,则保存结果
        if output_file_path:
            grouped_df.to_csv(output_file_path, index=False, encoding='utf-8-sig')
            print(f"\n结果已保存到: {output_file_path}")
        return grouped_df
    except FileNotFoundError:
        print(f"错误: 找不到文件 {csv_file_path}")
        return None
    except Exception as e:
        print(f"处理过程中发生错误: {str(e)}")
        return None
# 示例使用
if __name__ == "__main__":
    # 替换为你的CSV文件路径
    input_csv = "concept.csv"
    output_csv = "merged_concepts.csv"
    # 执行合并操作
    result_df = merge_stock_concepts(input_csv, output_csv)
    # 显示处理结果
    if result_df is not None:
        print("\n===== 合并后的概念信息示例 =====")
        print(result_df[['股票代码', '股票名称', '概念名称']].head(10))
        # 显示有哪些股票有多个概念
        multi_concept_stocks = result_df[result_df['概念名称'].str.contains(',')]
        if not multi_concept_stocks.empty:
            print(f"\n===== 拥有多个概念的股票 (共{len(multi_concept_stocks)}只) =====")
            for _, row in multi_concept_stocks.iterrows():
                print(f"{row['股票代码']} {row['股票名称']}: {row['概念名称']}")

分析技术思路为主,希望对你有所帮助。 其实做量化你只要有 稳定的数据源, 学习pandas等数据分析库, 你想怎么玩就怎么玩。

如果我的分享对你投资有所帮助,不吝啬给个点赞关注呗。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 子晓聊技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档