专栏名称: 数据STUDIO
点击领取《Python学习手册》,后台回复「福利」获取。『数据STUDIO』专注于数据科学原创文章分享,内容以 Python 为核心语言,涵盖机器学习、数据分析、可视化、MySQL等领域干货知识总结及实战项目。
51好读  ›  专栏  ›  数据STUDIO

使用 Python 进行财务数据分析实战

数据STUDIO  · 公众号  ·  · 2024-07-01 11:30

正文


本文云朵君将和大家一起学习股票市场分析和交易策略开发。本文分享基础内容,更进阶的内容欢迎大家一起探讨学习。

在迅速变化的金融领域中,数据分析和解释的能力至关重要。本文探讨了Python在金融数据分析中的应用,包括使用Pandas、NumPy和Matplotlib等Python库,它们能够处理股票市场数据、展示趋势并构建交易策略。无论你是经验丰富的金融分析师还是初入投资领域者,这些见解和技巧都将增强你的分析技能,拓宽对金融市场动态的理解,并帮助你在股票市场做出明智的决策。

import pandas as pd
import numpy as np
import datetime
import matplotlib.pyplot as plt

以下代码使用 Python 中常用的库来处理数据,执行数值计算、日期时间操作和数据可视化。这些包括 pas、numpy、datetime、matplotlib.pyplot。Pas 提供强大的数据结构(例如 DataFrames)来组织分析数据,而 numpy 允许对数组进行有效的数学运算。datetime 模块允许涉及日期时间的操作计算,而 matplotlib.pyplot 可用于在 Python 中创建各种类型的可视化,尤其是数据的图表。

导入数据

from pandas_datareader import data as pdr
import yfinance

aapl = pdr.get_data_yahoo('AAPL'
                          start=datetime.datetime(2006101), 
                          end=datetime.datetime(201211))
aapl.head()

此代码使用 pas_datareader 从 Yahoo Finance 检索 Apple Inc. 的历史股价数据。它获取 2006 年 10 月至 2012 年 1 月的每日数据,显示数据框的前五行。这里使用yfinance 库用于访问 Yahoo Finance 的数据,没使用pas_datareader 的默认方法。

import quandl 
aapl = quandl.get("WIKI/AAPL", start_date="2006-10-01",
                  end_date="2012-01-01")
aapl.head()

这里演示了如何使用 Qul 库从 WIKI 数据库中提取 Apple Inc. 的历史股票市场数据。数据涵盖 2006 年 10 月 1 日至 2012 年 1 月 1 日之间的日期。

使用时间序列数据

aapl.index
aapl.columns
ts = aapl['Close'][-10:]
type(ts)

aapl 为 Apple Inc. 的股票市场数据。代码使用 aapl.index 选择索引,使用 aapl.columns 选择列名,其中包括 'Open', 'Close', 'High', 'Low', 'Volume' (“开盘价”、“收盘价”、“最高价”、“最低价”、“成交量”)等字段。然后,它将“收盘价”列中的最后 10 个条目分配给变量 ts,并使用 type(ts) 确定其类型,该变量可能是 pandas Series 对象。请注意,代码缺少正确的标点符号语法,仅作为概念解释,而不是可执行代码的一部分。

aapl['diff'] = aapl.Open - aapl.Close
del aapl['diff']

这段代码创建一个名为“diff”的新列,该列表示“开盘价”和“收盘价”值之间的差异。填充此列后,它会立即从 DataFrame 中删除,保留其原始结构。

import matplotlib.pyplot as plt 
aapl['Close'].plot(grid= True ) 
plt.show()

这里创建了一个显示 Apple Inc. 股票收盘价的图表。图表中添加了网格,有助于分析 AAPL 股价在一段时间内的模式。

daily_close = aapl[['Adj Close']]

daily_pct_c = daily_close.pct_change()

daily_pct_c.fillna(0, inplace=True)
print(daily_pct_c)

daily_log_returns = np.log(daily_close.pct_change()+1)
print(daily_log_returns)

这段代码对苹果公司股票的财务数据进行了分析,特别关注了调整后的收盘价。首先选择了调整后的收盘价列,然后计算了每日的百分比变化,对任何缺失值用 0 进行了替换。接下来,将百分比变化数据框打印到控制台。另外,使用 np.log() 函数计算了每日的对数收益,并将结果数据框打印出来。这段代码提供了苹果股票每日收益的两个不同角度。

monthly = aapl.resample('BM').apply(lambda x: x[-1])
monthly.pct_change()
quarter = aapl.resample("4M").mean()
quarter.pct_change()

该代码处理了代表苹果公司(Apple Inc.)股票价格的变量aapl的时间序列数据。首先,对数据进行重新采样,以获取每个月的最后一个工作日,并使用lambda函数选择每个月的最后一个数据点,创建了名为 monthly 的新时间序列。然后,计算了每个月度数据点之间的百分比变化,以显示aapl的月度增长或下降。接下来,对原始时间序列重新采样,以计算四个月的平均值,创建了名为 quarter 的新时间序列。最后,计算了每个四个月期间的平均值之间的百分比变化,表示了每个四个月期间的比例增加或减少。需要进一步编写代码才能存储或输出这些计算结果。

import matplotlib.pyplot as plt
daily_pct_c.hist(bins=50)
plt.show()
print(daily_pct_c.describe())

在 daily_pct_c 表示的数据集上调用 hist() 方法,创建一个具有 50 个间隔的直方图。然后使用 plt.show() 显示直方图。最后,使用 describe() 方法打印数据集的描述性统计数据,从而深入了解其分布情况。

cum_daily_return = (1 + daily_pct_c).cumprod()

print(cum_daily_return)
import matplotlib.pyplot as plt 

cum_daily_return.plot(figsize=(12,8))

plt.show()

可见的代码段使用了 matplotlib 库来实现数据可视化。它调用了名为 cum_daily_return 的 Pandas DataFrame 或 Series 上的 plot 方法,用于生成累积每日收益图。图形的尺寸被设定为 12 x 8 英寸,并使用 plt.show() 来显示图形。需要注意代码中可能存在缺失部分。

cum_monthly_return = cum_daily_return.resample("M").mean()

print(cum_monthly_return)

代码从财务数据集中提取每日累计收益,并将其重新采样以计算每月的平均累计收益。在重新采样过程中,每日收益的频率被更改为每月,并计算每个月的平均每日收益。最终结果将打印出每月平均收益。

from pandas_datareader import data as pdr
import yfinance

def get(tickers, startdate, enddate):
    def data(ticker):
        return (pdr.get_data_yahoo(ticker, start=startdate, end=enddate))
    datas = map(data, tickers)
    return(pd.concat(datas, keys=tickers, names=['Ticker''Date']))

tickers = ['AAPL''MSFT''IBM''GOOG']
all_data = get(tickers, datetime.datetime(2006101), datetime.datetime(201211))
all_data.head()

使用了 pas_datareader 库中的 yfinance 作为数据源从 Yahoo Finance 获取股票代码列表的历史财务数据。该函数需要股票代码列表、开始和结束日期作为参数,并使用子函数 data 检索每个股票代码的数据。

接下来,函数 map 将应用于每个股票代码,将生成的数据组合成具有分层索引的单个 DataFrame。此外,还提供了该函数的示例用法,其中获取了四家科技公司的数据,并显示了组合数据集的前几行。

daily_close_px = all_data[['Adj Close']].reset_index().pivot('Date''Ticker''Adj Close')

daily_pct_change = daily_close_px.pct_change()

daily_pct_change.hist(bins=50, sharex=True, figsize=(12,8))

plt.show()

通过分析财务数据,我们使用股票调整后收盘价的每日百分比变化计算,并将结果呈现在一个直方图中。

  • 首先,我们从包含股票市场数据的名为 all_data 中选择 Adj Close 列,该列反映了考虑股息股票分割等因素后股票的调整后收盘价。
  • 然后,我们重置指数数据,以便每行代表一个日期,每列代表一个股票代码。
  • 接着,我们使用 pct_change() 方法计算股票价格的每日百分比变化,并将其呈现在一个有 50 个箱的直方图中。这些直方图共享相同的 x 轴,大小为 12x8 英寸,便于进行比较。

这段代码有效地总结了给定数据集中调整后收盘价的每日百分比变化分布。

pd.plotting.scatter_matrix(daily_pct_change, diagonal='kde', alpha=0.1,figsize=(12,12))

plt.show()

此代码为 daily_pct_change 数据集创建散点图矩阵。每个单元格显示两个变量的散点图,对角线图显示 KDE 图以可视化单个变量的分布。点的透明度值为 0.1 以显示密度,图形大小设置为 12 x 12 英寸。

adj_close_px = aapl['Adj Close'

moving_avg = adj_close_px.rolling(window=40).mean() 

moving_avg[-10:]

代码对 Apple Inc. (AAPL) 的财务数据进行了处理。它使用了名为“aapl”的数据集,并选择了其中的“调整后的收盘价”,这代表了股票分割和红利调整后的收盘价。接着,它计算了这些价格的 40 周期移动平均值。最后,它提取了移动平均线的最后 10 个值,以观察股票价格近期趋势的变化。移动平均线有助于平滑短期波动,并凸显长期趋势。

aapl['42'] = adj_close_px.rolling( window = 40 ).mean() 
aapl['252'] = adj_close_px.rolling( window = 252 ).mean() 
aapl[['Adj Close''42''252']].plot() 
plt. show ()

以下代码对财务数据(特别是 Apple Inc. (AAPL) 的股票价格)进行操作。这包括计算调整后的收盘价的 40 天移动平均线和 252 天移动平均线,然后将其存储在aapl 的“42”和“252”列中。然后使用这些移动平均线和调整后的收盘价生成图表,以直观的方式分析随时间变化的股价趋势。







请到「今天看啥」查看全文