用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. Little Mathematics Knowledge 数学小常识

    The sum of arithmetic sequence The sum of geometric sequence A special formula : n·n! = (n+1)! - n! ...

  2. [IOS]Xcode各版本官方下载及百度云盘下载, Mac和IOS及Xcode版本历史

    官方下载, 用开发者账户登录,建议用Safari浏览器下载. 官方下载地址: https://developer.apple.com/xcode/downloads/ 百度云盘下载地址 http:// ...

  3. bzoj 1202 并查集

    首先我们知道若干区间和信息,判断给出信息是否合法,可以用并查集维护,我们用dis[x]表示x到father[x]的距离为多少,即区间father[x]到x的长度,这样我们可以在路径压缩的时候维护dis ...

  4. poj 1837 Balance(背包)

    题目链接:http://poj.org/problem?id=1837 Balance Time Limit: 1000MS   Memory Limit: 30000K Total Submissi ...

  5. send,recv,sendto,recvfrom ~转载

     send,recv,sendto,recvfrom send函数 int send( SOCKET s,    const char FAR *buf,    int len,    int fla ...

  6. Django rest framework 权限操作(源码分析)

    知识回顾http://www.cnblogs.com/ctztake/p/8419059.html 这一篇是基于上一篇写的,上一篇谢了认证的具体流程,看懂了上一篇这一篇才能看懂, 当用户访问是 首先执 ...

  7. 自动化测试===uiautomator2类似appium

    项目地址:https://github.com/openatx/uiautomator2 http://mp.weixin.qq.com/s/YKxwW-pL603Fll3QIWapVw https: ...

  8. 用selenium 模块控制浏览器

    11.8 用selenium 模块控制浏览器selenium 模块让Python 直接控制浏览器,实际点击链接,填写登录信息,几乎就像是有一个人类用户在与页面交互.与Requests 和Beautif ...

  9. 如何在本地用vs调试微信接口

    这段时间在研究微信,看了网上很多都是把项目发布之后在服务器上调试,可以我想可以直接在vs上面设置断点调试 刚开始才用 http://www.cnblogs.com/hanzhaoxin/p/45186 ...

  10. tornado 模版继承 函数和类的调用

    模版继承.函数和类的调用 目录结构 lesson5.py # -*- coding:utf-8 -*- import tornado.web import tornado.httpserver imp ...