用Pandas获取商品期货价格并可视化
用Pandas获取商品期货价格并可视化
摘 要
1、用pandas从excel中读取数据;
2、用pandas进行数据清洗、整理;
3、用bokeh进行简单的可视化。
1、数据读取
本文主要是将获取到的商品期货价格进行整理,获取报价当日对应的当年度年底期货价格,并进行简单的可视化。最终,我们要获取的数据结果为,(a)对于非12月份的报价,获取当年度12月的期货价格;(b)对于12月份的报价,获取第二年12月的报价,如下图所示:
原始数据是从网站上直接copy到excel表格中,所以有些数据在excel中的显示值和实际存储信息有些不一致。
如上图所示,excel中B4单元格中,“Strip”列显示的是“18-Dec”,代表的意思是2018年12月,对应的“Price”是2018年12月的期货价格。但excel中实际存储的数据是“2017-12-18”,与显示值不一致。需要后续进行整理。
1.1 导入pandas和bokeh:
1.2 用pd.read_excel()方法从excel中读取相关数据:
2、数据清洗、整理
2.1 整理数据,使strip列显示跟excel中一致:
用pandas从excel中读取数据后,发现“Strip”列的数据值跟excel中实际保存的信息是一致的,但这并不是我们所需要的结果,需要进行调整,使之跟excel中显示值一致,也是我们需要的对应的期货价格。
运行结果如下:
2.2 获取年底期货价格:
从excel表格中获取的数据,通过观察,可以发现“Date”列的数据类型并不是日期类型,需要进行转化,以便后续分析中对日期进行操作。将“Date”列转换成日期格式,代码如下:
从运行结果可以看出,经过转换后,“Date”列的数据类型是datetime类型了,可以在后续分析中继续使用。
为了获取“Date”列对应日期当年度或次年度年底的期货价格,我们先添加2个辅助列,命名为“Year”和“Month”,对应的值分别是“Date”列的年份和月份,便于在后续分析中使用。
为啥要添加辅助列呢,为啥要添加辅助列呢,不要问为啥了,我也是遇到好多坑之后,觉得直接设置辅助列可能更方便。
添加辅助列后如下:
处理特殊情况,12月数据:
12月属于特殊情况,此处代码属于观察12月数据使用(数据未调整前),如下:
将12月的数据进行处理后,结果如下:
在将处理后的数据跟未进行调整前进行对比查看,发现报价日期是12月的价格,没有当年度年底的价格,而是第二年12月的价格,从而获取我们所需的信息。如下:
接下来,用pandas的replace()方法将“Year”列的格式调整,使之跟“Strip”列一致,方便后续进行分析、判断:
当Strip列和Year列两者相等时,即为对应日期的当年度或次年度12月的期货价格,最后将整理好的数据保存到csv文件中,如下:
至此,针对原始数据的清洗和整理已完毕,上述是在jupyter notebook中分步骤的演示,为了方面查看,将上述代码合并如下(在代码中,将代码选中后,按 Ctrl+"/" 可以取消注释):
3、数据可视化
最后,在bokeh中针对数据信息进行可视化显示,当然,用matplotlib或者其他绘图包来可视化也是ok的。至于bokeh的进一步用法,本文暂不做详细描述。
bokeh中用timeseries可视化后如下:
闲谈:
从上述曲线图来看,2006-2008年期间,价格经历了剧烈的波动,如果是在期初买入,期末卖出,估计要跳楼了~~~。笔者当年虽未买入,但也经历了这么一波,想起来也是哇凉哇凉的。
4、源码分享
最后,为了方便大家查看,本文的源代码及所用数据源,请从微信公众号获取:

用Pandas获取商品期货价格并可视化的更多相关文章
- vivo 商品中台的可视化微前端实践
一.背景 在电商领域内,商品是一个重要组成部分,与其对应的商品管理系统,则负责商品的新建.编辑.复制等功能.随着商品管理系统的成熟稳定和业务上的扩展需求,催化出了商品中台的诞生.它可以将现有商品功能最 ...
- ecshop获取商品销量函数
以下函数会获取订单状态为已完成的订单中该商品的销量,此函数放在lib_goods.php文件中即可调用 /** * 获取商品销量 * * @access public * @param ...
- magento获取商品的图片
获取商品的图片主要从catalog_product_entity_media_gallery 表中 该表中各列的属性代表 value_id:记录 ID,可以留空让数据库自动生成. attribute_ ...
- pandas获取groupby分组里最大值所在的行,获取第一个等操作
pandas获取groupby分组里最大值所在的行 10/May 2016 python pandas pandas获取groupby分组里最大值所在的行 如下面这个DataFrame,按照Mt分组, ...
- oracle数据据 Python+Pandas 获取Oracle数据库并加入DataFrame
import pandas as pd import sys import imp imp.reload(sys) from sqlalchemy import create_engine impor ...
- 【跟着stackoverflow学Pandas】 -Get list from pandas DataFrame column headers - Pandas 获取列名
最近做一个系列博客,跟着stackoverflow学Pandas. 以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序: https://stack ...
- pandas 获取不符合条件的dataframe
pandas 获取不符合条件的dataframe 或将其过滤掉: df[df["col"].str.contains('this'|'that')==False] >> ...
- Pandas与Matplotlib结合进行可视化
前面所介绍的都是以表格的形式中展现数据, 下面将介绍Pandas与Matplotlib配合绘制出折线图, 散点图, 饼图, 柱形图, 直方图等五大基本图形. Matplotlib是python中的一个 ...
- pandas 获取数据帧DataFrame的行、列数
1.创建数据帧 import pandas as pd df = pd.DataFrame([[1, 'A', '3%' ], [2, 'B']], index=['row_0', 'row_1'], ...
随机推荐
- jenkins修改job默认名字
${GIT_BRANCH,fullName="false"}-${BUILD_NUMBER}-${GIT_REVISION,length=12}-${deploy_rollback ...
- Asp.net Web Api 2 FORM Authentication Demo
最近看了一点 web api 2方面的书,对认证都是简单介绍了下,所以我在这里做个简单Demo,本文主要是FORM Authentication,顺带把基本认证也讲了. Demo 一.FORM Aut ...
- Spring Boot 启动报错:LoggingFailureAnalysisReporter
17:57:19: Executing task 'bootRun'... Parallel execution with configuration on demand is an incubati ...
- oracle scott用户不存在
scott用户拥有一些基础的数据表,可以供我们练习sql.先执行 alter user scott account unlock; 查看scott用户是否存在 当scott用户不存在,我们就需要在$O ...
- Winform GDI+
什么是GDI+ GDI (Graphics Device Interface), 是属于绘图方面的 API (Application Programming Interface). 因为应用程序不能直 ...
- bzoj 3524 可持久化线段树
我们可以先离散化,然后建立权值的可持久化线段树,记录每个数出现的次数,对于区间询问直接判断左右儿子的cnt是不是大于(r-k+1)/2,然后递归到最后一层要是还是大于就有,否则不存在. 反思:挺简单一 ...
- 关于win7局域网共享的相关设置
模式1> 被访问方相关设置步骤: (1)被共享方的电脑开通来宾用户 (2)被共享方的电脑的本地安全策略需要设置成 "仅来宾" (3)被共享方的电脑高级共享设置中 " ...
- 第一章:read/sysread/print/syswrite区别
use strict; use warnings; #将读入的内容添加到原字符串后面 my $buffer='START:'; , length($buffer)); #my $byts = read ...
- 【NOIP2016】组合数问题
写着玩玩…… 反正超级sb题. #include<bits/stdc++.h> typedef long long ll; using namespace std; ll c[][],h[ ...
- C后端设计开发 - 第4章-武技-常见轮子下三路
正文 第4章-武技-常见轮子下三路 后记 如果有错误, 欢迎指正. 有好的补充, 和疑问欢迎交流, 一块提高. 在此谢谢大家了. Moonlight Shadow 纪念那个我爱的, 被我感动的女孩 ...