在金融数据分析领域,获取准确且全面的数据是进行有效分析的前提。本文将介绍如何利用Python的相关库,特别是akshare库,来获取同花顺和东方财富平台的金融数据,并进行数据处理与保存,为后续的金融数据分析奠定基础。
本人写这篇代码的目的主要是去获取一些股票研究的基本信息,比如各行业、各板块、各概念、各成分股的股票类目等等。
一、同花顺行业一览表获取
同花顺作为国内知名的金融信息服务提供商,其行业数据具有较高的参考价值。通过akshare库,我们可以方便地获取同花顺行业的汇总信息。
import pandas as pd
#同花顺行业一览表
stock_board_industry_summary_ths_df = ak.stock_board_industry_summary_ths()
stock_board_industry_summary_ths_df.to_excel("同花顺行业一览表.xlsx")
print(stock_board_industry_summary_ths_df)
二、东方财富行业板块获取
东方财富网提供了丰富的金融数据和分析工具。以下代码展示了如何获取东方财富的行业板块信息,并将其保存到Excel文件中,便于后续的数据处理和分析。
import akshare as ak
#东方财富行业板块
stock_board_industry_name_em_df = ak.stock_board_industry_name_em()
stock_board_industry_name_em_df.to_excel("东方财富行业板块.xlsx")
print(stock_board_industry_name_em_df)
三、东方财富成分股获取
在获取了行业板块信息后,我们往往需要进一步获取每个板块的成分股,以便进行更深入的分析。以下代码通过遍历之前获取的行业板块信息,获取每个板块的成分股,并将所有数据整合后保存到一个新的Excel文件中。
需要遍历"东方财富行业板块.xlsx"
import pandas as pd
import akshare as ak
# 读取data.xlsx文件
try:
data_df = pd.read_excel("东方财富行业板块.xlsx", sheet_name=0) # 假设数据在第一个工作表中
except FileNotFoundError:
print("文件未找到,请确保data.xlsx文件存在且路径正确。")
exit()
except Exception as e:
print(f"读取文件时出错:{e}")
exit()
# 检查是否包含"板块名称"列
if "板块名称" not in data_df.columns:
print("Excel文件中未找到'板块名称'列,请检查列名是否正确。")
exit()
# 创建一个空的DataFrame用于存储所有数据
all_data_df = pd.DataFrame()
# 遍历"板块名称"列中的每个板块
for value in data_df["板块名称"]:
try:
# 获取板块数据
stock_board_industry_cons_em_df = ak.stock_board_industry_cons_em(symbol=value)
# 检查是否获取到数据
if stock_board_industry_cons_em_df is None or stock_board_industry_cons_em_df.empty:
print(f"未获取到数据:板块名称为'{value}'")
continue
# 添加一列,存放板块名称(value值)
stock_board_industry_cons_em_df["板块名称"] = value
# 将数据追加到总DataFrame中
all_data_df = pd.concat([all_data_df, stock_board_industry_cons_em_df], ignore_index=True)
print(f"成功获取并添加数据:板块名称为'{value}'")
except Exception as e:
print(f"处理板块名称'{value}'时出错:{e}")
# 保存到新的Excel文件
try:
all_data_df.to_excel("output_data.xlsx", index=False)
print("数据已成功保存到'output_data.xlsx'文件中。")
except Exception as e:
print(f"保存文件时出错:{e}")
四、沪深300-东方财富-个股人气榜-热门关键词获取
沪深300指数是中国A股市场的重要指标之一,涵盖了沪深两市300家规模大、流动性好的代表性企业。获取沪深300成分股的热门关键词,可以帮助我们了解市场关注点和投资热点。
需要遍历“沪深300股票类目表.xlsx”
import pandas as pd
import akshare as ak
# 读取data.xlsx文件
try:
data_df = pd.read_excel("沪深300股票类目表.xlsx", sheet_name=0) # 假设数据在第一个工作表中
except FileNotFoundError:
print("文件未找到,请确保data.xlsx文件存在且路径正确。")
exit()
except Exception as e:
print(f"读取文件时出错:{e}")
exit()
# 检查是否包含"板块名称"列
if "code1" not in data_df.columns:
print("Excel文件中未找到'code1'列,请检查列名是否正确。")
exit()
# 创建一个空的DataFrame用于存储所有数据
all_data_df = pd.DataFrame()
# 遍历"板块名称"列中的每个板块
for value in data_df["code1"]:
try:
# 获取板块数据
stock_hot_keyword_em_df = ak.stock_hot_keyword_em(symbol=value)
# 检查是否获取到数据
if stock_hot_keyword_em_df is None or stock_hot_keyword_em_df.empty:
print(f"未获取到数据:板块名称为'{value}'")
continue
# 添加一列,存放板块名称(value值)
stock_hot_keyword_em_df["code1"] = value
# 将数据追加到总DataFrame中
all_data_df = pd.concat([all_data_df, stock_hot_keyword_em_df], ignore_index=True)
print(f"成功获取并添加数据:板块名称为'{value}'")
except Exception as e:
print(f"处理板块名称'{value}'时出错:{e}")
# 保存到新的Excel文件
try:
all_data_df.to_excel("东方财富-个股人气榜-热门关键词(沪深300).xlsx", index=False)
print("数据已成功保存到'output_data.xlsx'文件中。")
except Exception as e:
print(f"保存文件时出错:{e}")
五、概念板块类目表及成分股获取
概念板块反映了市场对特定主题或行业的关注和投资热情。以下代码首先获取所有概念板块的类目表,然后针对特定概念板块,获取其成分股信息,并保存到相应的Excel文件中。
import akshare as ak
import pandas as pd
def fetch_and_save_concept_stocks(name):
"""
获取指定股票概念的成分股,并保存至Excel文件。
:param name: 股票概念名称
"""
# 获取所有股票概念及其成分股信息
concept_stocks_df = ak.stock_board_concept_name_em()
spath = f"./概念板块.xlsx"
concept_stocks_df.to_excel(spath, index=False)
# 检查指定概念是否存在
if name not in concept_stocks_df['板块名称'].values:
print(f"未找到板块名称'{name}',请检查输入是否正确。")
return
# 筛选出指定概念的成分股
df = ak.stock_board_concept_cons_em(name)
# 保存至Excel文件
spath = f"./{name}.xlsx"
df.to_excel(spath, index=False)
print(f"成功将股票概念'{name}'的成分股保存至'{spath}'。")
# 示例:获取并保存“低空经济”概念的成分股
fetch_and_save_concept_stocks("低空经济")
为了获取所有概念板块的成分股,我们可以遍历概念板块类目表,并对每个板块调用上述函数。
import pandas as pd
import akshare as ak
# 读取概念板块文件
input_file = "概念板块.xlsx" # 输入文件名
output_file = "概念板块成分股.xlsx" # 输出文件名
# 读取 Excel 文件中的“板块名称”列
try:
concept_df = pd.read_excel(input_file)
if "板块名称" not in concept_df.columns:
raise ValueError("Excel 文件中没有找到 '板块名称' 列!")
except Exception as e:
print(f"读取 Excel 文件时出错:{e}")
exit()
# 初始化一个空的 DataFrame 用于存储所有概念的成分股
all_concept_stocks = pd.DataFrame()
# 遍历每个板块名称,获取成分股
for index, row in concept_df.iterrows():
concept_name = row["板块名称"]
print(f"正在获取 {concept_name} 的成分股...")
try:
# 调用 AKShare 获取成分股
concept_stocks = ak.stock_board_concept_cons_em(symbol=concept_name)
if concept_stocks is not None and not concept_stocks.empty:
concept_stocks["板块名称"] = concept_name # 添加板块名称列
all_concept_stocks = pd.concat([all_concept_stocks, concept_stocks], ignore_index=True)
else:
print(f"未找到 {concept_name} 的成分股数据。")
except Exception as e:
print(f"获取 {concept_name} 的成分股时出错:{e}")
# 保存到 Excel 文件
try:
all_concept_stocks.to_excel(output_file, index=False)
print(f"所有概念的成分股已成功保存到 {output_file}")
except Exception as e:
print(f"保存到 Excel 文件时出错:{e}")
六、总结
通过上述代码,我们成功地获取了同花顺和东方财富平台的金融数据,包括行业板块、成分股、热门关键词等信息,并将这些数据保存到Excel文件中,为后续的金融数据分析和策略制定提供了丰富的数据基础。在实际应用中,这些数据可以进一步用于构建投资组合、进行风险评估、挖掘投资机会等,帮助投资者做出更加明智的投资决策。