一、项目背景与目标
在全球金融市场分析中,指数数据是衡量市场表现的核心指标。本文通过Python技术栈(akshare + pandas + matplotlib),实现从数据采集、清洗到可视化的完整流程,最终输出以下分析成果:
-
全球主要指数2024年涨跌横向对比图:
2024 年全球主要指数归一化价格条形图(以 2024 年 1 月 1 日价格为基准,对比 2024 年 12 月 31 日各指数相对表现) -
动态走势分析:头部/尾部指数的2024年价格演化折线图
2024年整年表现最好的5个指数走势图
2024年整年表现最差的5个指数走势图
-
数据存储:结构化CSV文件的持久化存储
- 1个实时行情数据文件(包含所有指数最后一个交易日的数据)
- 56个指数的历史行情数据文件
一、代码功能概述
整个程序主要实现了以下几个核心功能:
- 目录操作相关函数: 几个和目录、读写CSV文档相关的基础函数
- 数据获取与存储:从
akshare
库获取全球指数实时行情数据,以及各个指数的历史行情数据,并将数据保存为CSV文件。 - 数据处理:通过
pandas
对读取的历史数据进行清洗和处理,主要目的是日期对齐、数据归一化等操作,以便后续分析。 - 数据可视化:通过
matplotlib
库绘制折线图和条形图,直观展示指数的归一化价格走势以及最后一天各指数的表现情况。
二、代码详细解析
1. 目录及csv读写相关函数
import os
import pandas as pd
import matplotlib.pyplot as plt
import akshare as ak
def ensure_directory_exists(directory):
"""
确保指定目录存在,如果不存在则创建该目录。
:param directory: 目录路径
"""
if not os.path.exists(directory):
os.makedirs(directory)
def save_funds_to_csv(df, filename, directory='data'):
"""
将 DataFrame 保存为 CSV 文件。
:param df: 要保存的 DataFrame
:param filename: 文件名
:param directory: 保存目录
"""
ensure_directory_exists(directory)
file_path = os.path.join(directory, filename)
df.to_csv(file_path, index=False)
def read_funds_from_csv(filename, directory='data'):
"""
从指定目录的 CSV 文件中读取数据。
:param filename: 文件名
:param directory: 目录路径
:return: 包含数据的 DataFrame,如果文件不存在或读取错误则返回空 DataFrame
"""
file_path = os.path.join(directory, filename)
try:
return pd.read_csv(file_path, dtype={
'代码': str})
except FileNotFoundError:
print(f"文件未找到: {
file_path}")
return pd.DataFrame()
except Exception as e:
print(f"读取文件 {
file_path} 时出错: {
e}")
return pd.DataFrame()
上述代码定义了三个函数,用于处理文件和目录操作:
ensure_directory_exists
:检查指定目录是否存在,若不存在则创建该目录,保证数据存储路径的有效性。save_funds_to_csv
:将pandas
的DataFrame
对象保存为CSV文件,调用ensure_directory_exists
确保保存目录存在。read_funds_from_csv
:从指定目录读取CSV文件,若文件不存在或读取过程中出现错误,返回空的DataFrame
,并打印相应的错误信息。
2. 数据提取与存储函数
def extract_and_store_data():
"""
提取全球指数现货数据并存储为 CSV 文件,同时提取每个指数的历史数据并存储。
"""
def index_global_spot():
"""
获取全球指数现货数据并保存为 CSV 文件。
"""
index_global_spot_em_df = ak.index_global_spot_em()
save_funds_to_csv