利用pandas处理日期数据,并根据日期绘制增长率曲线。

处理的json文本内容如下:

# pd.json

[
{"name": "A", "date": "注册于 2011-6-9"},
{"name": "B", "date": "注册于 2011-6-23"},
{"name": "C", "date": "注册于 2011-7-2"},
{"name": "D", "date": "注册于 2011-10-3"},
{"name": "E", "date": "注册于 2011-8-23"},
{"name": "F", "date": "注册于 2011-9-2"},
{"name": "G", "date": "注册于 2011-10-3"},
{"name": "H", "date": "注册于 2011-11-23"},
{"name": "I", "date": "注册于 2011-12-2"},
{"name": "J", "date": "注册于 2011-12-3"},
{"name": "K", "date": "注册于 2011-12-23"},
{"name": "L", "date": "注册于 2011-10-2"},
{"name": "M", "date": "注册于 2011-8-3"},
{"name": "Y", "date": "注册于 2011-12-23"},
{"name": "U", "date": "注册于 2011-10-9"},
{"name": "W", "date": "注册于 2011-8-6"},
{"name": "K", "date": "注册于 2011-12-21"},
{"name": "L", "date": "注册于 2011-12-5"},
{"name": "M", "date": "注册于 2011-8-3"},
{"name": "Y", "date": "注册于 2011-12-23"},
{"name": "U", "date": "注册于 2011-10-9"},
{"name": "W", "date": "注册于 2011-12-6"}
]

1. 读取json文件的数据(对于自己构建的json文件,里面的键值对字符串必须是双引号)

dt = pd.read_json('pd.json', orient='records', encoding='utf-8')

顺便说一下 orient 参数:不一样的文件内容格式,这个参数的值是不一样的,不然会读取失败。

'split' : 索引,列字段,和数据
如: '{"index": [1, 2, 3], "columns": ["a", "b"], "data": [[1, 4], [2, 5], [3, 6]]}'
'records' : 元素为字典的列表
如: '[{"a": 1}, {"b": 2}, {"c": 3}]'
'index' : 索引为键, 值为键值对
如: '{"0": {"a": 3, "b": 5}, "1": {"a": 7, "b": 9}}'
'columns' : 索引为键,值为键值对(注意:输出的数据行列与'index'的不一样)
如: '{"a": {"2": 3, "4": 5}, "b": {"6": 7, "8": 9}}',结果与index的例子相同
'values' : 两层的嵌套列表
如: '[["a": 1], ["b": 2]]'

2. 处理日期

# 正则表达式处理
patt = r'(\d{4}-\d{1,2})' # 匹配到月份,也可以匹配到日,再加上 '-\d{1,2}'即可
dt['date'] = dt['date'].str.extract(patt, expand=True)
# 把字符串格式转换为日期格式
dt['date'] = pd.to_datetime(dt['date']) # 由于只匹配到月份,to_datetime函数默认日为 01,

此时输出 dt 为:

0  2011-06-01    A
1 2011-06-01 B
2 2011-07-01 C
.....

3. 新增一列 cnt 来统计相同月份的个数,并按日期排序

dl = dt.groupby(['date'], as_index=False)['date'].agg({'cnt': 'count'}).sort_values(by='date')

4. 插入一列 rise 来计算相邻月份总数的差

dl.insert(2, 'rise', (dl['cnt']-dl['cnt'].shift(1))/dl['cnt'].shift(1))

shift()函数对数据进行移动操作,dl['cnt'].shift(1) 表示 dl['cnt'] 列的数据向下移动一个单位

计算差值也可以直接使用 diff() 函数:对数据进行某种移动之后与原数据进行比较得出的差异数据, dl['cnt'].diff()

5. matplotlib绘图

import matplotlib.pyplot as plt

dl.plot(x=dl['date'], y='rise', kind='line', linestyle='-', markerfacecolor='red', marker='o', color='green', figsize=(8, 4), grid=True)
plt.show()
plt.close()

matplotlib + pandas绘图的更多相关文章

  1. pandas绘图总结

    转自:http://blog.csdn.net/genome_denovo/article/details/78322628 pandas绘图总结 pandas中的绘图函数(更加详细的绘图资料可参考p ...

  2. pandas 绘图 机器学习看特征相关性

    pandas 绘图 import numpy as np import tflearn from tflearn.layers.core import dropout from tflearn.lay ...

  3. Matplotlib:绘图和可视化

    Matplotlib:绘图和可视化 简介 简单绘制线形图 plot函数 支持图类型 保存图表 一 .简介 Matplotlib是一个强大的Python绘图和数据可视化的工具包.数据可视化也是我们数据分 ...

  4. 数据分析与展示——Matplotlib基础绘图函数示例

    Matplotlib库入门 Matplotlib基础绘图函数示例 pyplot基础图表函数概述 函数 说明 plt.plot(x,y,fmt, ...) 绘制一个坐标图 plt.boxplot(dat ...

  5. Python3 matplotlib的绘图函数subplot()简介

    Python3 matplotlib的绘图函数subplot()简介 一.简介 matplotlib下, 一个 Figure 对象可以包含多个子图(Axes), 可以使用 subplot() 快速绘制 ...

  6. 转:使用 python Matplotlib 库 绘图 及 相关问题

     使用 python Matplotlib 库绘图      转:http://blog.csdn.net/daniel_ustc/article/details/9714163 Matplotlib ...

  7. matplotlib动态绘图

    目录 package Process 解决中文乱码问题 simple_plot() scatter_plot() three_dimension_scatter() Jupyter notebook ...

  8. 【Python开发】使用python中的matplotlib进行绘图分析数据

    matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中. 它的文档相当完备, ...

  9. 吴裕雄--天生自然python学习笔记:Matplotlib 基本绘图

    使用 Matplotlib 组件绘图时,经常要与 Numpy 组件搭配使用 . 使用 Matplotlib 绘图首先要导入 Matplotlib 组件 , 由于大部分绘图功能是在 matplotlib ...

随机推荐

  1. linux 修改文件最大数

    ulimit -a 查看所有 open files (-n) 1024 是linux操作系统对一个进程打开的文件句柄数量的限制(也包含打开的套接字数量) ulimit -SHn 10000 ##临时修 ...

  2. wordpress4.4+版本自动生成一个768w像素缩略图的解决办法

    4.4版本以后,wordpress增加了响应式图片的功能,目的是让图片能适应手机.平板等不同屏幕,但是我不想要这个功能,把缩略图大小全调成0,function.php里的相关函数全删除了, 上传图片还 ...

  3. Controller层@PathVariable使用

    @PathVariable 映射 URL 绑定的占位符 带占位符的 URL 是 Spring3.0 新增的功能,该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义通过 @Pa ...

  4. JDBC Mysql 驱动连接异常

    在做JDBC连接Mysql的时候遇到了三个异常: 第一个是:mysql8.0 caching_sha2_password 这个异常是由于是因为在mysql8.0之前的密码规则是mysql_native ...

  5. Workbook对象的方法总结(一)

    import openpyxlwb=openpyxl.Workbook()print('1.添加前所有工作簿的名称是:',wb.get_sheet_names())wb.create_sheet('F ...

  6. VS2010+WinXP+MFC程序 无法定位程序输入点于动态链接库

    1.问题描述 原开发环境:Win7 64位旗舰版,VS2010,ThinkPad T460 出现问题:自己开发的MFC程序在WinXP环境下无法正常运行,弹框“无法定位程序输入点InitializeC ...

  7. iOS应用程序内打开指定qq聊天、给某人打电话

    -(void)btn2Clik { UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero]; NSURL *url = [N ...

  8. H-ui框架制作选项卡

    本案例运用H-ui框架,写了一个选项卡案例 1. html代码(固定这样写,用一个div包裹控制条tabBar和内容条tabCon) <div id="tab-index-carteg ...

  9. 面向对象程序设计第三次作业-Calculator

    题目: 最终代码: Scan.h: Print.h: Calaulator.cpp: 解题过程 看到题目后,在查询之后明白了这是多文件的题目,然后通过翁凯老师的视频讲解知道了.h和.cpp文件的区别和 ...

  10. arcgis for android apk太大

    原来大概都要20多M, 太大的原来是.so文件 arcgis for android api里面有armeabi armeabi-v7a  x86的 每个so都接近10m 要是都保留就20多m了 由于 ...