现学现用,使用 Pandas 对上证指数历史数据进行探索性数据分析(EDA)

现学现用,使用 Pandas 对上证指数历史数据进行探索性数据分析(EDA)

探索性数据分析(Exploratory Data Analysis,简称 EDA)是数据科学中的重要步骤之一,通过对数据的初步探索,揭示数据的分布、趋势和异常。本文将以上证指数为例,使用 Python 中的 Pandas 库进行探索性数据分析,展示 Pandas 在金融数据分析中的应用。

本文参考了《时间序列分析实战:基于机器学习和统计学》一书的3.1.1节和3.1.2节。

(🧧领优惠券购买本书)

数据获取

首先,我们需要获取上证指数的历史数据。

比如我们可以从 cn.investing.com/indices/sha... 下载CSV格式的上证指数的历史数据。

python 复制代码
import matplotlib.pyplot as plt
import pandas as pd

# 将 `上证指数历史数据.csv` 转换为 Pandas 的 DataFrame
df = pd.read_csv('上证指数历史数据.csv')

# 显示数据的前几行
print(df.head())
bash 复制代码
          日期        收盘        开盘         高         低     交易量     涨跌幅
0   2024-2-2  2,730.15  2,773.29  2,791.68  2,666.33  42.62B  -1.46%
1   2024-2-1  2,770.74  2,773.42  2,805.01  2,752.78  35.29B  -0.64%
2  2024-1-31  2,788.55  2,815.50  2,834.01  2,782.59  37.71B  -1.48%
3  2024-1-30  2,830.53  2,866.28  2,881.35  2,829.25  33.57B  -1.83%
4  2024-1-29  2,883.36  2,910.61  2,923.90  2,883.33  41.06B  -0.92%

在进行探索性数据分析之前,我们通常需要对数据进行清洗和整理。

python 复制代码
# 将字符串形式的"收盘价"转换为小数类型
df['收盘'] = df['收盘'].str.replace(',', '').astype(float)

# 将字符串形式的"日期"转换为日期类型
df['日期'] = pd.to_datetime(df['日期'])

接下来,我们分别用折线图和直方图可视化开盘价随时间的变化。

python 复制代码
# 绘制折线图
df.plot(x='日期', y='收盘')
plt.show()
python 复制代码
# 绘制直方图
df['收盘'].hist(bins=30)
plt.show()

在分析时间序列时(尤其是在金融领域),带有趋势的数据不会产生非常有用的可视化结果。

但如果我们计算上证历史数据中前后时间点开盘价的差值(今日和昨日开盘价的差值),并绘制差值的直方图,就会得到一个正态分布。

python 复制代码
df['收盘'].diff().hist(bins=30)
plt.show()

原始数据的直方图非常宽,并未呈现出正态分布。但我们对数据进行差分计算之后,数据就被转换成正态分布了。

在进行时间序列分析时,对差分数据绘制直方图得到的结果通常更有趣。

我们通过直方图从差分后的序列中获得了新的信息。虽然上证指数的折线图描绘了某种经济前景,似乎股票还在跌,但没准、可能、也许差分数据的直方图更接近股民的日常体验。

差分数据的直方图告诉我们,时间序列的值在一段时间内上升(正值)和下降(负值)的幅度大体相同。但整体而言,股票指数的涨跌幅度并不完全相同,这一点可以通过计算偏度(skewness)来衡量。

python 复制代码
print(df['收盘'].skew())
# -0.21625010453647112
# 偏度为正:分布右偏,尾部延伸到右侧。大部分数据位于均值左侧,分布的右侧有一些较大的极端值。
# 偏度为负:分布左偏,尾部延伸到左侧。大部分数据位于均值右侧,分布的左侧有一些较小的极端值。

本文演示了如何使用 Pandas 对上证指数历史数据进行探索性数据分析。当然,EDA 的具体内容和深度取决于具体的研究问题和数据特点。希望通过这个示例,你能够初步掌握 Pandas 在金融数据分析中的应用,为后续深入研究提供基础。

相关推荐
爆打维c4 分钟前
01BFS算法(例题:网格传送门旅游)
c语言·c++·python·算法·leetcode·广度优先
喵手6 分钟前
Python爬虫零基础入门【第六章:增量、去重、断点续爬·第3节】幂等去重:同一条数据反复跑也不会重复入库!
爬虫·python·爬虫实战·python爬虫工程化实战·零基础python爬虫教学·增量、去重、断点续爬·幂等去重
Python毕设指南7 分钟前
基于深度学习的旅游推荐系统
python·深度学习·数据分析·django·毕业设计·课程设计
深蓝电商API12 分钟前
Selenium多窗口切换与Cookie管理
爬虫·python·selenium·测试工具
小北方城市网41 分钟前
Spring Cloud 服务治理实战:构建高可用微服务体系
spring boot·python·rabbitmq·java-rabbitmq·数据库架构
写代码的【黑咖啡】1 小时前
Python中的Statsmodels:统计建模与假设检验
开发语言·python
程序员杰哥1 小时前
Pytest自动化测试框架实战
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
weixin_433179331 小时前
python - 函数 function
开发语言·python
不吃鱼的小时喵2 小时前
【Python】关于python多进程
python
喵手2 小时前
Python爬虫零基础入门【第六章:增量、去重、断点续爬·第1节】增量采集:只抓新增/更新(新手也能做)!
爬虫·python·python爬虫实战·python爬虫工程化实战·python爬虫零基础入门·增量、去重·增量采集