【Python从入门到进阶】62、Pandas中DataFrame对象案例实践
接上篇《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('日期', inplace=True) # 设置日期为索引 print(df)
效果:
四、数据分析和处理
1.计算日收益率
日收益率是股票分析中常用的一个指标,可以通过收盘价计算得到。
这里需要用到pct_change()函数。在Pandas库中,DataFrame.pct_change()是一个非常有用的函数,它用于计算给定DataFrame中数值列的百分比变化。这个函数通常被用来分析数据的时间序列变化,特别是在金融数据分析中非常常见,比如股票价格的变化率。
pct_change()函数的基本用法如下:
●基本语法:
DataFrame.pct_change(periods=1, fill_method='pad', limit=None)
●参数说明:
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, annot=True, cmap='coolwarm')
plt.show()
效果:
6.成交量分析
分析成交量与股价变动之间的关系,寻找潜在的交易信号。
plt.figure(figsize=(12, 6))
plt.bar(df.index, df['成交量'], color='blue', alpha=0.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='收盘价', color='blue')
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['成交量'], color='green', alpha=0.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='成交量', window=2):divergences = []# 计算价格和成交量的滚动变化(这里使用diff而不是滚动平均,因为数据量小)price_changes = df[price_col].diff(periods=1)volume_changes = df[volume_col].diff(periods=1)# 确保我们只在有足够数据的行上进行比较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, window=2) # 使用较小的窗口大小
for divergence in divergences:print(f"在日期 {divergence['date'].date()} 检测到量价背离,价格上涨但成交量显著减少。")print(f"当前成交量: {divergence['current_volume']}, 之前成交量: {divergence['previous_volume']}")print("-----------")# 注意:这个示例中的背离检测逻辑非常简化,并且可能需要根据实际情况进行调整。
# 特别是关于“成交量减少”的判定,这里仅使用了简单的平均值比较和硬编码的阈值(9%)。
# 在实际应用中,您可能需要考虑更复杂的逻辑,如使用标准差、百分比变化等。
注意:由于数据量很小,这里使用了window=2来确保有足够的数据点进行比较。
效果:
(3)注意事项
量价背离是一个警示信号,而非绝对的买卖信号。它需要结合其他技术指标和市场环境进行综合分析。
量价背离的可靠性可能受到市场流动性、投资者情绪、政策变化等多种因素的影响。
在实际应用中,建议结合多种分析工具和技术指标来提高分析的准确性和可靠性。
至此,关于Pandas中DataFrame和Series的内容全部介绍完毕,下一篇我们继续学习Pandas如何实现数据的Merge。
转载请注明出处:https://guangzai.blog.csdn.net/article/details/141110236
相关文章:

【Python从入门到进阶】62、Pandas中DataFrame对象案例实践
接上篇《61、Pandas中DataFrame对象的操作(二)》 上一篇我们讲解DataFrame对象的统计分析、可视化以及数据导出与保存相关内容。本篇我们延续之前学习的DataFrame对象的知识,结合一个数据案例进行实践操作。 一、案例说明 我们将通过一个股…...
使用Python实现深度学习模型:智能环境监测与预警
介绍 智能环境监测与预警是保护生态环境和人类健康的重要手段。通过深度学习技术,我们可以实时获取环境数据,分析环境变化趋势,及时发出预警。本文将介绍如何使用Python和深度学习库TensorFlow与Keras来构建一个简单的环境监测与预警模型。 环境准备 首先,我们需要安装必…...
ThreadLocal的使用场景是什么
ThreadLocal 是 Java 中用于实现线程局部变量的工具,它提供了每个线程独立的变量副本,使得不同线程对该变量的操作不会相互干扰。以下是 ThreadLocal 的常见使用场景: 线程安全的对象共享: ThreadLocal 可以用来避免线程间共享状…...

【网络爬虫篇】逆向实战—某东:滑块验证码(逆向登录)2024.8.7最新发布,包干货,包详细
【网络爬虫篇】更多优秀文章借鉴: 1. 使用Selenium实现黑马头条滑块自动登录 2. 使用多线程采集爬取豆瓣top250电影榜 3. 使用Scrapy爬取去哪儿网游记数据 4. 数据采集技术综合项目实战1:国家水稻网数据采集与分析 5. 数据采集技术综合项目实战2&#x…...
为什么优质的酱香白酒都会带点苦味?
大家好,我是酱酒亮哥,不知大家有没有发现,在制作一杯美味的咖啡或是烘焙一块香脆的面包时,制作过程中都会有一些独特的味道和香气产生,对吧?同样地,酱香白酒的酿造过程也是一个复杂而精细的化学…...
软件测试常见面试题
软件测试阶段分为单元测试,集成测试,系统测试,验收测试。单元测试策略为对代码中的函数方法进行测试,目的是发现代码的问题。集成测试策略是模块中组合起来进行测试,要求发现与接口有关的问题。系统测试策略是子系统的…...

面试经典算法150题系列-接雨水
接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,…...

【C++】 类型转换深度探索:揭开类型转换的奥秘
🌈 个人主页:Zfox_ 🔥 系列专栏:C从入门到精通 目录 一: 🚀 C语言中的类型转换 二: 🔥 为什么C需要四种类型转换 三: 🔥 C强制类型转换 🥝 3.1 st…...
深入探索Webkit的Web Authentication API:安全与便捷的融合
Web Authentication API,通常被称为WebAuthn,是一个新兴的Web标准,旨在通过提供更安全、更便捷的认证方式来改善用户的在线体验。随着Webkit对WebAuthn的支持日益增强,本文将深入探讨这一API的功能、实现方式以及如何在Webkit浏览…...

Vue - 关于v-wave 波浪动画组件
Vue - 关于v-wave 波浪动画组件 这个动画库可以在标签中添加新的v-wave属性,来让点击标签元素后添加漂亮的波纹效果,并且可以根据父元素自动形成波纹的颜色,也可以自定义波纹颜色,持续时间,透明度,触发的对…...

计算机网络408考研 2019
计算机网络408考研2019年真题解析_哔哩哔哩_bilibili 2019 1 1 1 1...

实时捕捉与追溯:得物基于 eBPF 打造云上网络连接异常摄像头
近期我们容器 SRE 团队基于 eBPF 技术建设网络连接异常感知能力,灰度上线过程中发现了生产环境 10 以上的应用配置错误、程序 Bug 等问题。在和应用负责同学同步风险过程中,大家都挺好奇我们如何实现在对应用无侵入的情况下发现服务连接异常的。本篇文档…...
ubuntu14.04图形界面配置
Ubuntu系统启动,输入用户密码后,屏幕显示彩色背景,但是始终不能进入图形界面。 如果你也遇到过这种情况,可以参照以下方法解决(在 ubuntu14.04 验证)。 同时按下 alt ctrl F1,屏幕出现 tty1&a…...

51单片机-第八节-蜂鸣器
一、什么是蜂鸣器? 蜂鸣器是一种将电信号转换为声音信号的器件,常用来产生设备的按键音、报警音等提示信号。 蜂鸣器按驱动方式可分为有源蜂鸣器和无源蜂鸣器: 有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可…...

Windows命令查看WiFi密码
查看所有已保存的WiFi网络 (以管理员身份)输入以下命令 netsh wlan show profiles查看某个WiFi网络的密码 netsh wlan show profile name"你的网络名" keyclear在输出中,在关键内容(Key Content)字段下找…...

不同环境下RabbitMQ的安装-2 ARM架构、X86架构、Window系统环境下安装RabbitMQ
ARM架构、X86架构、Window系统环境下RabbitMQ的安装 RabbitMQ安装1 Erlang语言介绍2 安装Erlang2.1 ARM架构的CentOS虚拟机中安装Erlang2.2 X86架构的CentOS虚拟机中安装Erlang2.3 Windows系统安装Erlang2.3.1 下载Erlang2.3.2 安装Erlang2.3.3 配置Erlang2.3.4 检测Erlang 3.安…...

C++(week16): C++提高:(六) Qt提高
文章目录 四、Qt的元对象系统1.元对象和MOC(1)自省 和 反射(2)Qt是怎样支持元对象系统的?(3)支持元对象系统的三个要求(4)元对象系统的功能(5)动态属性 2.信号和槽机制(1)信号与槽机制的基本原理(2)自定义信号、自定义槽函数①自定义信号②自定义槽③关联 connect (…...
go 时间转时间戳的时区设置问题
昨天遇到一个问题,在完成时间转换时间戳,在后续测试中发现转换后的时间戳转成时间后,时间发生错误,时间和转换时间不一致问题 如下: package mainimport ("fmt""time" )func main() {Start : &q…...
MySQL 常见日志清理策略
前言: MySQL 数据库服务器使用多种类型的日志来记录操作和事件,这对于故障诊断、审计和性能分析非常重要。然而,这些日志文件会随着时间的推移而不断增长,可能会占用大量的磁盘空间。因此,定期清理这些日志是必要的&a…...

3大管人绝招让你的手下心服口服
3大管人绝招让你的手下心服口服 一:差异化管理,玩弄人性 谁赞成,谁反对,看清楚谁顺从自己,谁反对自己之后,接下来要做的便是区别对待。 给听话的下属最好的资源、最轻松简单的工作、最高的待遇…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...