用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获取商品期货价格并可视化的更多相关文章

  1. vivo 商品中台的可视化微前端实践

    一.背景 在电商领域内,商品是一个重要组成部分,与其对应的商品管理系统,则负责商品的新建.编辑.复制等功能.随着商品管理系统的成熟稳定和业务上的扩展需求,催化出了商品中台的诞生.它可以将现有商品功能最 ...

  2. ecshop获取商品销量函数

    以下函数会获取订单状态为已完成的订单中该商品的销量,此函数放在lib_goods.php文件中即可调用 /** * 获取商品销量 * * @access      public * @param    ...

  3. magento获取商品的图片

    获取商品的图片主要从catalog_product_entity_media_gallery 表中 该表中各列的属性代表 value_id:记录 ID,可以留空让数据库自动生成. attribute_ ...

  4. pandas获取groupby分组里最大值所在的行,获取第一个等操作

    pandas获取groupby分组里最大值所在的行 10/May 2016 python pandas pandas获取groupby分组里最大值所在的行 如下面这个DataFrame,按照Mt分组, ...

  5. oracle数据据 Python+Pandas 获取Oracle数据库并加入DataFrame

    import pandas as pd import sys import imp imp.reload(sys) from sqlalchemy import create_engine impor ...

  6. 【跟着stackoverflow学Pandas】 -Get list from pandas DataFrame column headers - Pandas 获取列名

    最近做一个系列博客,跟着stackoverflow学Pandas. 以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序: https://stack ...

  7. pandas 获取不符合条件的dataframe

    pandas 获取不符合条件的dataframe 或将其过滤掉: df[df["col"].str.contains('this'|'that')==False] >> ...

  8. Pandas与Matplotlib结合进行可视化

    前面所介绍的都是以表格的形式中展现数据, 下面将介绍Pandas与Matplotlib配合绘制出折线图, 散点图, 饼图, 柱形图, 直方图等五大基本图形. Matplotlib是python中的一个 ...

  9. pandas 获取数据帧DataFrame的行、列数

    1.创建数据帧 import pandas as pd df = pd.DataFrame([[1, 'A', '3%' ], [2, 'B']], index=['row_0', 'row_1'], ...

随机推荐

  1. jenkins修改job默认名字

    ${GIT_BRANCH,fullName="false"}-${BUILD_NUMBER}-${GIT_REVISION,length=12}-${deploy_rollback ...

  2. Asp.net Web Api 2 FORM Authentication Demo

    最近看了一点 web api 2方面的书,对认证都是简单介绍了下,所以我在这里做个简单Demo,本文主要是FORM Authentication,顺带把基本认证也讲了. Demo 一.FORM Aut ...

  3. Spring Boot 启动报错:LoggingFailureAnalysisReporter

    17:57:19: Executing task 'bootRun'... Parallel execution with configuration on demand is an incubati ...

  4. oracle scott用户不存在

    scott用户拥有一些基础的数据表,可以供我们练习sql.先执行 alter user scott account unlock; 查看scott用户是否存在 当scott用户不存在,我们就需要在$O ...

  5. Winform GDI+

    什么是GDI+ GDI (Graphics Device Interface), 是属于绘图方面的 API (Application Programming Interface). 因为应用程序不能直 ...

  6. bzoj 3524 可持久化线段树

    我们可以先离散化,然后建立权值的可持久化线段树,记录每个数出现的次数,对于区间询问直接判断左右儿子的cnt是不是大于(r-k+1)/2,然后递归到最后一层要是还是大于就有,否则不存在. 反思:挺简单一 ...

  7. 关于win7局域网共享的相关设置

    模式1> 被访问方相关设置步骤: (1)被共享方的电脑开通来宾用户 (2)被共享方的电脑的本地安全策略需要设置成 "仅来宾" (3)被共享方的电脑高级共享设置中 " ...

  8. 第一章:read/sysread/print/syswrite区别

    use strict; use warnings; #将读入的内容添加到原字符串后面 my $buffer='START:'; , length($buffer)); #my $byts = read ...

  9. 【NOIP2016】组合数问题

    写着玩玩…… 反正超级sb题. #include<bits/stdc++.h> typedef long long ll; using namespace std; ll c[][],h[ ...

  10. C后端设计开发 - 第4章-武技-常见轮子下三路

    正文 第4章-武技-常见轮子下三路 后记 如果有错误, 欢迎指正. 有好的补充, 和疑问欢迎交流, 一块提高. 在此谢谢大家了. Moonlight Shadow   纪念那个我爱的, 被我感动的女孩 ...