百度网站权重,广州seo推广公司,佛山cms建站系统,网络科技一般经营什么接上篇《61、Pandas中DataFrame对象的操作#xff08;二#xff09;》 上一篇我们讲解DataFrame对象的统计分析、可视化以及数据导出与保存相关内容。本篇我们延续之前学习的DataFrame对象的知识#xff0c;结合一个数据案例进行实践操作。
一、案例说明
我们将通过一个股…接上篇《61、Pandas中DataFrame对象的操作二》 上一篇我们讲解DataFrame对象的统计分析、可视化以及数据导出与保存相关内容。本篇我们延续之前学习的DataFrame对象的知识结合一个数据案例进行实践操作。
一、案例说明
我们将通过一个股票数据分析的案例来展示如何使用Pandas的DataFrame和Series对象进行数据分析和处理。在这个案例中我们将分析某只股票的历史价格数据包括开盘价、最高价、最低价和收盘价并计算一些基本的统计指标和可视化结果。
二、准备工作
首先确保你已经安装了Pandas、seaborn和Matplotlib用于数据可视化。如果没有安装可以通过pip安装
pip install pandas seaborn matplotlib
三、案例数据
为了简化我们将直接在代码中定义一只股票假设为“ABC公司”的历史价格数据。这些数据包括日期、开盘价、最高价、最低价和收盘价。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns# 定义数据
data { 日期: [2023-01-01, 2023-01-02, 2023-01-03, 2023-01-04, 2023-01-05], 开盘价: [100, 102, 101, 103, 104], 最高价: [105, 107, 106, 108, 109], 最低价: [98, 100, 99, 101, 102], 收盘价: [103, 105, 104, 107, 108],成交量: [3100, 4300, 3400, 4700, 5400]
} # 创建DataFrame
df pd.DataFrame(data)
df[日期] pd.to_datetime(df[日期]) # 将日期列转换为datetime类型
df.set_index(日期, inplaceTrue) # 设置日期为索引 print(df)
效果
四、数据分析和处理
1.计算日收益率
日收益率是股票分析中常用的一个指标可以通过收盘价计算得到。 这里需要用到pct_change()函数。在Pandas库中DataFrame.pct_change()是一个非常有用的函数它用于计算给定DataFrame中数值列的百分比变化。这个函数通常被用来分析数据的时间序列变化特别是在金融数据分析中非常常见比如股票价格的变化率。 pct_change()函数的基本用法如下●基本语法
DataFrame.pct_change(periods1, fill_methodpad, limitNone)
●参数说明 periods(int, 默认为1)表示向前多少个周期来计算变化率。如果设为1则计算相邻两个周期之间的变化率。 fill_method(str, 默认为pad)填充缺失值的方法。可以是pad使用前一个有效观测值或ffill同pad、backfill或bfill使用后一个有效观测值等。 limit(int, 默认为None)最大连续填充次数。●返回值 返回一个新的DataFrame其中每个数值型列的值都表示相对于前一个时期或指定时期的时期的变化率。非数值型列会被忽略。●示例 我们对案例中股票价格的DataFrame的“收盘价”使用pct_change()函数
# 计算日收益率
df[日收益率] df[收盘价].pct_change()
print(df[[收盘价, 日收益率]])
效果 注意第一个元素的变化率通常是NaN未定义因为没有前期数据进行比较。
2.绘制收盘价走势图
使用Matplotlib绘制收盘价的走势图以便更直观地观察价格变化。
# 设置Matplotlib支持中文
plt.rcParams[font.sans-serif] [SimHei] # 设置为黑体
plt.rcParams[axes.unicode_minus] False # 解决保存图像时负号-显示为方块的问题
# 创建一个新的图形窗口设置窗口大小为10英寸宽和5英寸高
plt.figure(figsize(10, 5))
# 绘制实际的数据。plt.plot() 是用来绘制线图的函数
# df.index表示DataFrame的索引这里索引是日期所以它将作为x轴的坐标。
# df[收盘价] 表示DataFrame中名为“收盘价”的列它将作为y轴的坐标。
# label收盘价 设置了图例标签用于区分不同的数据系列
plt.plot(df.index, df[收盘价], label收盘价)
plt.title(ABC公司股票收盘价走势图) # 设置图表的标题
plt.xlabel(日期) # 设置x轴的标签名
plt.ylabel(价格) # 设置y轴的标签名
plt.grid(True) # 表示启用网格线
plt.legend() # 设置显示图例
plt.show() # 展示图表
效果
3.统计分析
使用Pandas的内置函数进行统计分析如计算收盘价的最大值、最小值、均值和标准差。
print(统计信息:)
print(df[收盘价].describe())
效果
4.筛选特定日期的数据
假设我们只对周一的数据感兴趣可以筛选出周一的数据进行分析。
# 假设数据中的日期是连续的且周一为每周的第一天
monday_df df[df.index.weekday 0]
print(monday_df)
效果 注意这里的weekday方法返回的是0周一到6周日的整数具体取决于你的Pandas版本和设置。
5.相关性分析
分析不同变量之间的相关性以了解它们之间的关系。
corr_matrix df[[开盘价, 最高价, 最低价, 收盘价, 成交量]].corr()
print(corr_matrix) # 可视化相关性矩阵
sns.heatmap(corr_matrix, annotTrue, cmapcoolwarm)
plt.show()
效果
6.成交量分析
分析成交量与股价变动之间的关系寻找潜在的交易信号。
plt.figure(figsize(12, 6))
plt.bar(df.index, df[成交量], colorblue, alpha0.5)
plt.title(ABC公司日成交量)
plt.xlabel(日期)
plt.ylabel(成交量)
plt.grid(True)
plt.show()
# 可以进一步分析成交量与价格变动的关联如“量价背离”等
效果
7.量价背离分析
在成交量分析的小节中当我们进一步探讨成交量与价格变动的关联时“量价背离”是一个非常重要的概念。它指的是成交量与价格走势之间出现了不一致或相反的趋势这往往预示着市场可能即将发生转折。
1定义
●正量价背离当价格创新高或新低但成交量未能同时创出新高或新低即成交量相对前期高点或低点有所减少这通常被视为上涨或下跌动能减弱的信号可能预示着市场即将反转。●负量价背离较为少见但在某些情况下价格可能形成新低或新高而成交量却显著放大这可能是由于恐慌性抛售或积极买入导致的短暂现象也可能预示着市场即将见底或见顶。
2示例分析
假设在我们的模拟数据中我们观察到在股价持续上涨并创出新高时成交量却未能同步放大反而有所减少。这种情况就构成了正量价背离可能意味着上涨动力正在减弱投资者应警惕市场可能出现的回调或反转。
为了更直观地展示这一点我们可以先绘制股价和成交量的对比图。 这里我们将故意将一些数据进行修改方便分析量价背离
# 将2023-01-05的收盘价改为 109
# 将2023-01-04的收盘价改为 108
# 将2023-01-04的成交量改为 2800
df.loc[2023-01-05, 收盘价] 109
df.loc[2023-01-04, 收盘价] 108
df.loc[2023-01-04, 成交量] 2800
# 绘制股价和成交量的对比图
plt.figure(figsize(12, 6))
plt.subplot(2, 1, 1) # 2行1列的第1个图
plt.plot(df.index, df[收盘价], label收盘价, colorblue)
plt.title(ABC公司股票价格走势)
plt.xlabel(日期)
plt.ylabel(价格)
plt.grid(True)
plt.legend() plt.subplot(2, 1, 2) # 2行1列的第2个图
plt.bar(df.index, df[成交量], colorgreen, alpha0.5)
plt.title(ABC公司日成交量)
plt.xlabel(日期)
plt.ylabel(成交量)
plt.grid(True)
plt.tight_layout() # 调整子图布局以避免重叠
plt.show()
效果 注意上述代码并未实际检测量价背离而是展示了如何绘制股价和成交量的对比图。检测量价背离需要额外的逻辑来比较价格和成交量的历史数据。要在上述案例中增加检测量价背离的逻辑代码我们需要编写一个函数来识别股价和成交量之间的不一致趋势。以下是一个简化的示例该函数将遍历DataFrame中的价格和成交量数据以检测正量价背离价格上涨但成交量减少或负量价背离这里我们主要关注正量价背离因为负量价背离在实际应用中较为少见且复杂
def detect_price_volume_divergence(df, price_col收盘价, volume_col成交量, window2):divergences []# 计算价格和成交量的滚动变化这里使用diff而不是滚动平均因为数据量小price_changes df[price_col].diff(periods1)volume_changes df[volume_col].diff(periods1)# 确保我们只在有足够数据的行上进行比较valid_indices price_changes.index[1:] # 从第二天开始因为第一天没有前一天的数据for idx in valid_indices:# 获取基于位置的索引idx_position df.index.get_loc(idx)# 检查价格是否上涨if price_changes.loc[idx] 0:# 检查成交量是否显著减少这里使用简单的百分比减少作为阈值if volume_changes.loc[idx] 0 and df[volume_col].iloc[idx_position] df[volume_col].iloc[idx_position - 1] * 0.9:divergence {date: idx,price_change: price_changes.loc[idx],current_volume: df[volume_col].iloc[idx_position],previous_volume: df[volume_col].iloc[idx_position - 1]}divergences.append(divergence)return divergences# 调用函数并打印结果
divergences detect_price_volume_divergence(df, window2) # 使用较小的窗口大小
for divergence in divergences:print(f在日期 {divergence[date].date()} 检测到量价背离价格上涨但成交量显著减少。)print(f当前成交量: {divergence[current_volume]}, 之前成交量: {divergence[previous_volume]})print(-----------)# 注意这个示例中的背离检测逻辑非常简化并且可能需要根据实际情况进行调整。
# 特别是关于“成交量减少”的判定这里仅使用了简单的平均值比较和硬编码的阈值9%。
# 在实际应用中您可能需要考虑更复杂的逻辑如使用标准差、百分比变化等。
注意由于数据量很小这里使用了window2来确保有足够的数据点进行比较。 效果
3注意事项
量价背离是一个警示信号而非绝对的买卖信号。它需要结合其他技术指标和市场环境进行综合分析。 量价背离的可靠性可能受到市场流动性、投资者情绪、政策变化等多种因素的影响。 在实际应用中建议结合多种分析工具和技术指标来提高分析的准确性和可靠性。 至此关于Pandas中DataFrame和Series的内容全部介绍完毕下一篇我们继续学习Pandas如何实现数据的Merge。
转载请注明出处https://guangzai.blog.csdn.net/article/details/141110236