谁是股市的涨跌王?数据分析来解答

数据分析早已成为投资决策的关键工具,而Python,作为一种功能强大的编程语言,为金融分析提供了无限可能。

之前介绍了一些Python中常用的数据分析库,比如pandasnumpy等等,本文将实战演示如何使用这些库来找出股市中涨跌幅度最大的股票。

1. 数据准备

A股的日交易数据来自东方财富的接口,目前已有股票的所有历史交易信息我已经整理成csv文件。

文件的描述和下载请参考:

  1. 2023年日交易数据
  2. 2023年之前的日交易数据

下面的示例选择2023年的数据进行统计分析。

python 复制代码
import pandas as pd
import numpy as np

import matplotlib
import matplotlib.pyplot as plt

# 为了显示中文
matplotlib.rcParams["font.sans-serif"] = ["Microsoft YaHei Mono"]
matplotlib.rcParams["axes.unicode_minus"] = False

# 读取数据
fp = "./data/2023/历史行情数据-东财-前复权-2023.zip"
df = pd.read_csv(fp, compression="zip")

# 将股票代码转成字符串并填充成 6 位
df["股票代码"] = df["股票代码"].apply(lambda x: str(x).zfill(6))

# 排序
df = df.sort_values(["股票代码", "日期"])
df

2. 涨跌天数最多

首先,根据上面数据中的涨跌幅 的正负,确定每天是否涨

python 复制代码
data = df.copy()
data.loc[df["涨跌幅"] >= 0.0, "是否涨"] = 1
data.loc[df["涨跌幅"] < 0.0, "是否涨"] = 0

data = data.loc[:, ["股票代码", "是否涨"]]
data

0和1区分涨跌情况。

然后分组统计每支股票涨的天数,并按照涨的天数从多到少排序。

python 复制代码
data = data.groupby(by="股票代码").sum()
data = data.reset_index()
data = data.sort_values("是否涨", ascending=False)
data

分组统计之后,每行就是一支股票的信息。

然后绘制涨的天数最多前10支股票的柱状图。

python 复制代码
graph_data = data.iloc[:10]
fig = plt.figure(figsize=[8, 6])
plt.bar(
    graph_data["股票代码"],
    height=graph_data["是否涨"],
    color=["b", "c", "g", "m"],
)
plt.xticks(rotation=45)  # 旋转45度
plt.title("涨的天数最多的10支股票")
plt.show()

数据是截止12月初的,横轴的数字是股票代码

跌的天数最多的股票统计方法和上面类似,不再赘述。

3. 连涨/连跌最多

上面是统计总的涨跌天数,比较简单,统计连续涨跌的天数的话,稍微复杂一些。

首先,我们需要封装一个根据是否涨这个标记来计算连续涨跌情况的函数。

python 复制代码
def max_continue_days(s):
    """
    最大连续涨或者跌的天数
    """
    s1 = s.cumsum()
    s = s.mul(s1)
    s = s.diff()
    s = s.where(lambda x: x < 0)
    s = s.ffill()
    s = s.fillna(0)
    s = s.add(s1)
    return s.max()

这个函数的实现参考了:www.bookstack.cn/read/Pandas...

链接的文章中有每个步骤的说明。

有了这个函数,就可以分组统计每支股票的时候计算连涨的天数。

python 复制代码
# 连续涨跌情况
data = df.copy()

# 标记涨跌情况
data.loc[df["涨跌幅"] >= 0.0, "是否涨"] = 1
data.loc[df["涨跌幅"] < 0.0, "是否涨"] = 0

data["是否涨"] = data["是否涨"].astype(int)
data = data.loc[:, ["股票代码", "是否涨"]]
# 用上面的 max_continue_days 函数统计连涨天数
data["连涨天数"] = data.groupby("股票代码")["是否涨"].transform(max_continue_days)
data

进一步统计找出每支股票最大的连涨天数,并按照从大到小排序。

python 复制代码
data = data.groupby("股票代码").max()
data = data.reset_index()
data = data.sort_values("连涨天数", ascending=False)
data

绘制连涨天数最多的前10支股票的柱状图。

python 复制代码
from matplotlib.ticker import MultipleLocator

graph_data = data.iloc[:10]
fig = plt.figure(figsize=[8, 6])
plt.bar(
    graph_data["股票代码"],
    height=graph_data["连涨天数"],
    color=["b", "c", "g", "m"],
)
plt.xticks(rotation=45)  # 旋转45度
plt.gca().yaxis.set_major_locator(MultipleLocator(2))

plt.title("连涨天数最多的10支股票")
plt.show()

今年连涨最多的也就20天。

连跌情况的统计类似,不再赘述。

4. 涨跌幅度最大

这里的示例,我们根据每日的收盘价 来统计每支股票涨跌幅,

也就是根据2023年 每支股票的最低最高收盘价来计算涨跌幅。

python 复制代码
# 统计每支股票收盘价的最低和最高值
data = df.groupby("股票代码")["收盘"].agg(["min", "max"])

# 这里定义 波动 的计算方式
data["波动"] = (data["max"] - data["min"])/data["min"]
data =  data.sort_values("波动", ascending=False)
data =  data.reset_index()
data

绘制柱状图看看波动最大的前10支股票。

python 复制代码
from matplotlib.ticker import FuncFormatter

graph_data = data.iloc[:10]
fig = plt.figure(figsize=[8, 6])
plt.bar(
    graph_data["股票代码"],
    height=graph_data["波动"],
    color=["b", "c", "g", "m"],
)
plt.xticks(rotation=45)  # 旋转45度
plt.gca().yaxis.set_major_formatter(FuncFormatter(lambda x, y: "{}%".format(x*100)))
plt.title("波动最大的10支股票")
plt.show()

波动最大的股票,最低和最高的收盘价差了20多倍

5. 总结

本文没有任何鼓励炒股的意思,只是为了在真实的数据中演示如何用Python 来统计分析。

这样也许比直接看 pandas 的教程更有目的性一些,pandasAPI非常丰富,只看不用的话很快就忘了。

学习数据分析最好的方法是边学边用,身边的任何数据都可以找个目标去分析看看,不要等学完了再想着去分析。

我在这个网站(databook.top/home)上共享了一些自己收集的数据,都是csv格式(UTF-8编码的),

纯粹为了分析练习之用,有需要随时下载。

之前关于pandas的系列:pandas

相关推荐
liuzhenghua662 小时前
Python任务调度模型
java·运维·python
小前端大牛马2 小时前
java教程笔记(十一)-泛型
java·笔记·python
sjtu_cjs2 小时前
Tensorrt python api 10.11.0笔记
开发语言·笔记·python
哆啦A梦的口袋呀2 小时前
深入理解系统:UML类图
开发语言·python·uml
虎冯河2 小时前
怎么让Comfyui导出的图像不包含工作流信息,
开发语言·python
葬爱家族小阿杰3 小时前
python执行测试用例,allure报乱码且未成功生成报告
开发语言·python·测试用例
xx155802862xx3 小时前
Python如何给视频添加音频和字幕
java·python·音视频
酷爱码3 小时前
Python实现简单音频数据压缩与解压算法
开发语言·python
花果山总钻风3 小时前
SQLAlchemy 中的 func 函数使用指南
python
知识中的海王4 小时前
Python html 库用法详解
开发语言·python