利用Python进行数据分析——第十章 时间序列(1)

# coding: utf-8

import pandas as pd
from datetime import datetime
from datetime import timedelta
from dateutil.parser import parse
from pandas import Series,DataFrame

rowdata=pd.read_table(‘C:/Users/xiaoyniu/AG_Forcast/TrainData/TrainingData_0811.txt‘ ,keep_date_col=True)
type(rowdata)
trainingdata=rowdata[[‘pkg_tss_ship_date‘,‘pkg_tss_ship_date.1‘]]
type(trainingdata)
trainingdata[:10]

trainingdata.colnames=[‘na‘,‘cn‘]
trainingdata.colnames

trainingdata[‘pkg_tss_ship_date‘]=pd.to_datetime(trainingdata[‘pkg_tss_ship_date‘])
trainingdata[‘pkg_tss_ship_date.1‘]=pd.to_datetime(trainingdata[‘pkg_tss_ship_date.1‘])
trainingdata[:10]

timedelta=trainingdata[‘pkg_tss_ship_date.1‘]-trainingdata[‘pkg_tss_ship_date‘]
timedelta[:10]

train1=trainingdata
del train1[‘pkg_tss_ship_date‘]
train1[‘timedelta‘]=timedelta
train1[:10]
type(train1[‘timedelta‘])

ts=Series(timedelta.values,index=trainingdata[‘pkg_tss_ship_date.1‘])
type(ts) #series
ts[:10]
ts.index[:10]
ts.values[:10]

stamp=ts.index[0]
stamp

ts[‘2015-08-18 00:00:00‘] #大部分是10天前的货
ts[‘2015-08‘] #无需传入完整日期也能对数据进行切片
#ts.truncate(after=‘2015-09-01‘) #另一种切片方法,去掉9月1号以后的数据

ts.index.is_unique #检查是否唯一

grouped=ts.groupby(level=0)

grouped.count() #不同日期的发货量
# grouped.median() #?????????没办法求中位数或者平均数,怎么解决

index=pd.date_range(‘20160901‘,‘20160930‘)
index #默认产生的是按天计算的时间点

pd.date_range(start=‘20160901‘,periods=10) #往后数10天,包含20160901
pd.date_range(end=‘20160901‘,periods=10) #往前数10天,包含20160901
pd.date_range(start=‘20160401‘,end=‘20160901‘,freq=‘BM‘) #每月的最后一个工作日
pd.date_range(start=‘20160901 10:20:30‘,periods=10) #当起始(终止)日期戳带有时间时,产生的日期戳也带有时间
pd.date_range(start=‘20160901 10:20:30‘,periods=10,normalize=True) #normalize选项可以避免这一问题,将日期规范化到午夜的时间戳

from pandas.tseries.offsets import Hour,Minute

hour=Hour()
hour
four_hour=Hour(4) #一般不用这样显式的创建这样的对象
four_hour #4个小时
pd.date_range(‘20160901‘,‘20160902‘,freq=‘8h‘) #一般这样由一个基础频率和一个乘数组成的字符串参数来结合使用
pd.date_range(‘20160901‘,‘20160902‘,freq=‘8h30min‘)
Hour(4)+Minute(30) #大部分偏移量对象都可以直接用加法连接,区分大小写

rng=pd.date_range(‘20160901‘,‘20161201‘,freq=‘WOM-2FRI‘) #week of month:每月第二个星期五
rng

ts2=ts.shift(2) #时间戳不变,将数据向后移两天
ts2[:10]
tsf2=ts.shift(-2) #时间戳不变,将数据向前移两天
tsf2[:10]

from pandas.tseries.offsets import Day,MonthEnd

datetime.now()+3*Day()
datetime.now()+Day(3)

datetime.now()+MonthEnd() #9月底
datetime.now()+MonthEnd(3) #11月底

offset=MonthEnd()
offset
offset.rollforward(datetime.now()) #向后推一个月,到月底
offset.rollback(datetime.now()) #向前推一个月,到月底
offset2=MonthEnd(3)
offset2
offset2.rollforward(datetime.now()) #向后推一个月,到月底。 为什么不是向后推3个月???
offset2.rollback(datetime.now()) #向前推一个月,到月底。 ???

import pytz #处理时区

pytz.common_timezones[-5:] #通常的几个时区
pytz.timezone(‘US/Eastern‘) #利用时区名,获取时区对象

print(ts.index.tz) #ts的索引中没有时区信息
#可以在创建数据集的时候通过 tz=‘UTC’来创建

ts_utc=ts.tz_localize(‘UTC‘) #本地化时区
ts_utc.tz_convert(‘US/Eastern‘) #本地化后的时间序列才能被转换成别的时区

stamp=pd.Timestamp(‘2011-03-12 04:00‘) #timestamp对象也能通过本地化,转换成其他时区
stamp_utc=stamp.tz_localize(‘US/Eastern‘) #但是timestamp对象是什么东西???
stamp_utc
stamp_utc.tz_convert(‘utc‘)

stamp_moscow=pd.Timestamp(‘2011-03-12 04:00‘,tz=‘UTC‘) #创建timestamp对象时可以传入一个时区信息
stamp_moscow
stamp_moscow.value #UTC时间戳???
stamp_moscow.tz_convert(‘US/Eastern‘).value #时区变换,而这个时间戳不会发生改变。但是为什么???

from pandas.tseries.offsets import Hour
import numpy as np

rng=pd.date_range(‘2016-09-01‘,periods=10,freq=‘B‘)
ts=Series(np.random.randn(len(rng)),index=rng)

ts1=ts[:7].tz_localize(‘Europe/London‘)
ts2=ts1[2:].tz_convert(‘Europe/Moscow‘)
result=ts1+ts2 #当两个不同的时区相加时,
result.index #最后得到的结果是UTC

p=pd.Period(2007,freq=‘A-DEC‘) #period类是一段时间的意思,这是指从2007年1月1日到2007年12月31日
p
p+5
p-2 #根据其频率对时间进行位移
pd.Period(2009,freq=‘A-DEC‘)-p #频率相同时,可以直接相减

rng=pd.period_range(‘2009-09-09‘,‘2010-01-02‘,freq=‘M‘)
rng #period_range 也可以创建规则的时期范围

value=[‘2003‘,‘2004‘,‘2005‘]
index=pd.PeriodIndex(value,freq=‘Q-DEC‘) #periodindex是个什么类???
index

p.asfreq(‘M‘,‘start‘) #将年度数据转换为月度的形式,转换到当年的一月
p.asfreq(‘M‘,‘end‘) #将年度数据转换为月度的形式,转换到当年的十二月
p1=pd.Period(‘2016‘,freq=‘A-JUN‘)
p1.asfreq(‘M‘,‘start‘) #Period(‘2015-07‘, ‘M‘)
p1.asfreq(‘M‘,‘end‘) #Period(‘2016-06‘, ‘M‘)

p2=pd.Period(‘2016-09‘,‘M‘)
p2.asfreq(‘A-JUN‘) #2016年9月进行频率转换,相当于以六月结尾的时间频率中的2017年

rng=pd.period_range(‘2006‘,‘2009‘,freq=‘A-DEC‘)
ts=Series(np.random.randn(len(rng)),index=rng)
ts.asfreq(‘M‘,how=‘start‘)
ts.asfreq(‘M‘,how=‘end‘)

p5=pd.Period(‘2016Q3‘,freq=‘A-MAR‘) #Q n在这里 有什么用???
p5.asfreq(‘d‘,‘start‘) #Period(‘2015-04-01‘, ‘D‘)
p5.asfreq(‘d‘,‘end‘) #Period(‘2016-03-31‘, ‘D‘)

rng=pd.period_range(‘2011Q3‘,‘2012Q4‘,freq=‘Q-JAN‘) #使用period_range生成季度数据
ts=Series(np.arange(len(rng)),index=rng)

rng=pd.date_range(‘2016-01‘,‘2016-09‘,freq=‘m‘)
rng.to_period() #data_range对象才有to_period方法,to_period方法可以将时间戳索引转换为时期索引
p6=pd.Period(‘2016‘,freq=‘A-DEC‘)
p6.to_timestamp(how=‘end‘) #to_timestamp方法可以将时期索引转换为时间戳

rng=pd.date_range(‘2016-01-29‘,periods=6,freq=‘d‘)
rng.to_period(freq=‘m‘) #产生重叠的时间区间

时间: 2024-10-19 15:04:24

利用Python进行数据分析——第十章 时间序列(1)的相关文章

利用Python进行数据分析——第十章 时间序列(2)

# coding: utf-8 import pandas as pdimport numpy as np summary=pd.read_table('C:/Users/AG_Forcast/TrainData/AGS_shipments_summary/qry_1004366250.txt',keep_date_col=True) summary[:10]pd.to_datetime(summary['CN_PKG_TSS_SHIP_DATE'])pd.to_datetime(summary

《利用Python进行数据分析》之pandas的时间序列基础

本章以<利用python进行数据分析>的第10章:时间序列 为基础,整理了pandas 库中时间序列相关用法. 时间序列数据的意义取决于具体的应用场景,主要有以下几种: 时间戳(timestamp) 固定时期(period) 时间间隔(interval) 实验或过程时间 pandas提供了一组标准的时间序列处理工具和算法,可以轻松的对时间序列进行切片.聚合,对定期/不定期的时间序列进行重采样等. 这些工具大部分对金融和经济数据尤为有用,同时也可以用来分析服务器和日志数据. 1.日期和时间数据类

利用python进行数据分析--(阅读笔记一)

以此记录阅读和学习<利用Python进行数据分析>这本书中的觉得重要的点! 第一章:准备工作 1.一组新闻文章可以被处理为一张词频表,这张词频表可以用于情感分析. 2.大多数软件是由两部分代码组成:少量需要占用大部分执行时间的代码,以及大量不经常执行的“粘合剂代码”. cython已经成为python领域中创建编译型扩展以及对接c/c++代码的一大途径. 3.在那些要求延迟性非常小的应用程序中(例如高频交易系统),为了尽最大可能地优化性能,耗费时间使用诸如C++这样更低级.更低生产率的语言进行

利用python进行数据分析——(一)库的学习

总结一下自己对python常用包:Numpy,Pandas,Matplotlib,Scipy,Scikit-learn 一. Numpy: 标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指 针.这样为了保存一个简单的[1,2,3],需要有3个指针和三个整数对象.对于数值运算来说这种结构显然比较浪费内存和CPU计算时间. 此外Python还提供了一个array模块,array对象和列表不同,它直接保存数值,和

利用Python进行数据分析PDF

利用Python进行数据分析PDF百度网盘链接:https://pan.baidu.com/s/1S6iIb69V2ap1yaoIYLVMtg 提取码:zbeq 复制这段内容后打开百度网盘手机App,操作更方便哦内容简介 · · · · · · [名人推荐]"科学计算和数据分析社区已经等待这本书很多年了:大量具体的实践建议,以及大量综合应用方法.本书在未来几年里肯定会成为Python领域中技术计算的权威指南."--Fernando Pérez 加州大学伯克利分校 研究科学家, IPyt

《利用Python进行数据分析&#183;第2版》第四章 Numpy基础:数组和矢量计算

<利用Python进行数据分析·第2版>第四章 Numpy基础:数组和矢量计算 numpy高效处理大数组的数据原因: numpy是在一个连续的内存块中存储数据,独立于其他python内置对象.其C语言编写的算法库可以操作内存而不必进行其他工作.比起内置序列,使用的内存更少(即时间更快,空间更少) numpy可以在整个数组上执行复杂的计算,而不需要借助python的for循环 4.0 前提知识 数据:结构化的数据代指所有的通用数据,如表格型,多维数组,关键列,时间序列等 相关包:numpy pa

《利用python进行数据分析》

今天开始码这本书--<利用python进行数据分析>.R和python都得会用才行,这是码这本书的原因.首先按照书上说的进行安装,google下载了epd_free-7.3-1-win-x86.msi,译者建议按照作者的版本安装.

PYTHON学习(三)之利用python进行数据分析(1)---准备工作

学习一门语言就是不断实践,python是目前用于数据分析最流行的语言,我最近买了本书<利用python进行数据分析>(Wes McKinney著),还去图书馆借了本<Python数据分析基础教程--NumPy学习指南>(第二版),准备将python数据分析工具的门给入了哈哈,闲话少说,直接切入正题. 首先<利用python进行数据分析>此书的译者强烈建议计算机环境的配置最好与书上的一致,所以我找了半天书上要求用的安装包 第一,安装32位的EPDFree(书上的版本就是3

利用 Python 进行数据分析(五)NumPy 基础:ndarray 索引和切片

概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为array[index1:index2],意思是从index1索引位置开始,到index2索引(不包括index2)位置结束的一段数组.例如: 当把一个值赋值为一个切片时,该值会作用于此数组片段里每一个元素,例如: 二维数组 二维数组的索引 当以一维数组的索引方式访问一个二维数组的时候,获取的元素不在