用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. 【C++对象模型】第一章 关于对象

    1.C/C++区别 C++较之C的最大区别,无疑在于面向对象,C程序中程序性地使用全局数据.而C++采用ADT(abstract data tpye)或class hierarchy的数据封装.类相较 ...

  2. Struts2.X深入浅出 学习笔记

    第一节.MVC以及Struts2简介 第二节.Action生命周期以及接收表单数据 第三节.Struts2配置以及Struts.xml详解 Struts2 主要配置文件 Web.xml 设置过滤器以及 ...

  3. pyttsx3 winsound win32api.MessageBox使用案例

    import requests,time from lxml import etree import win32api,win32con import winsound import pyttsx3 ...

  4. [BZOJ1087][SCOI2005]互不侵犯King解题报告|状压DP

    在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 好像若干月前非常Naive地去写过DFS... ...

  5. 4、什么是事务?MySQL如何支持事务?

    什么是事务? 事务是由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行.程序和事务是两个不同的概念.一般而言:一段程序中可能包含多个事务.(说白了就是几步的数据库操作 ...

  6. python进行机器学习(四)之模型验证与参数选择

    一.模型验证 进行模型验证的一个重要目的是要选出一个最合适的模型,对于监督学习而言,我们希望模型对于未知数据的泛化能力强,所以就需要模型验证这一过程来体现不同的模型对于未知数据的表现效果. 这里我们将 ...

  7. Django 1.10中文文档-第一个应用Part3-视图和模板

    本教程上接Django 1.10中文文档-第一个应用Part2-模型和管理站点.我们将继续开发网页投票这个应用,主要讲如何创建一个对用户开放的界面. 概览 视图是Django应用中的一“类”网页,它通 ...

  8. 2017中国大学生程序设计竞赛 - 网络选拔赛 HDU 6154 CaoHaha's staff 思维

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6154 题意:在笛卡尔坐标系下,画一个面积至少为  n 的简单多边形,每次只能画一条边或者一个格子的对角 ...

  9. JS常用操作方法

    1.splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目. 注释:该方法会改变原始数组. 1 <script type="text/javascript"& ...

  10. 给mongodb设置密码权限

    昨天装了个mongodb数据库用于测试用,装好后没有密码,现在就讲讲怎么设置密码 1.首先进入C:\mongodb\bin下面运行mongod.exe启动数据库. 2.在相同目录下启动mongo.ex ...