resample函数MATLAB

4小时前 (02:58:06)阅读1回复0
zaibaike
zaibaike
  • 管理员
  • 注册排名1
  • 经验值222395
  • 级别管理员
  • 主题44479
  • 回复0
楼主
1、MATLAB中 若何利用resample函数 降低摘 样率 2、请问MATLAB中interp和resample有什么区别? 3、pandas-时间序列重构-resample 4、怎么利用Python中Pandas库Resample,实现重摘 样,完成线性插值 5、操纵Python停止数据阐发(9)-重摘 样resample和频次转换 MATLAB中 若何利用resample函数 降低摘 样率

resample为信号降摘 样处置,理解如下:

B=resample(x,90,250); %

摘 样从250Hz降到90Hz,假设 250在前,就是插值从90到250,能够看B的长度,250Hz摘 样4000个数据等于90hz摘 样1440个数据,那就是降摘 样。

resample是抽取decimate和插值interp的两个连系

详细完成如下操做,

先插值90酿成 250*9Hz

然后抽取250酿成速度 90Hz

请问MATLAB中interp和resample有什么区别?

三次样条插值间接用spline函数做。

鸿沟前提加在y的首尾,第一个表达 y'(x0),最初一个表达 y'(xt)。

假设 不加鸿沟前提,默认是not-a-knot鸿沟前提(重视 不是天然鸿沟前提)

天然鸿沟前提的插值要用csape函数才气得到。

假设 用interp1,则只能利用spline函数的默认鸿沟前提,即not-a-knot前提。

下面是例子

x=0:3:9;

y=x.*cos(x);

xx=linspace(0,9);

plot(x,y,'o');%样本点

hold on;

plot(xx,interp1(x,y,xx,'spline'),'r');%interp1只能利用默认鸿沟前提

plot(xx,spline(x,[0 y 0],xx),'r:');%spline能够利用第一类鸿沟前提,那里y'(0)=y'(9)=0

pp=csape(x,y,'second');

plot(xx,fnval(pp,xx))%第二类鸿沟前提要用csape做,那里天然鸿沟前提

legend('样本点','默认鸿沟前提','一阶导为0','天然鸿沟前提','location','south')

pandas-时间序列重构-resample

同样也是上一篇操练碰着 的函数,觉得有点儿复杂,那里进修下。

DataFrame.resample(self, rule, axis=0, closed: Union[str, NoneType] = None, label: Union[str, NoneType] = None, convention: str = 'start', kind: Union[str, NoneType] = None, loffset=None, base: int = 0, on=None, level=None)

Resample time-series data

Convenience method for frequency conversion and resampling of time series. Object must have a datetime-like index (DatetimeIndex, PeriodIndex, or TimedeltaIndex), or pass datetime-like values to the on or level keyword.

那个函数是针对时间序列,对DataFrame停止重构

关于 date_range 能够参考上一篇: pandas - date_range

我们先创建个数据

那里,次要是需要指定一个重构的规则

resample就是根据 2D,2D表达 就是2天,也就是根据 2天从头构建DataFrame

我们那里就挪用sum函数,将契合那个规则的元素乞降

我们来看 察index,本来是1-10,如今酿成1,3,5,7,9,也就是间隔2天一组

label参数

指定,我们利用哪一个做为新的label

closed参数

那个略微有点儿希罕

label的话,是说,我们重组了数据之后,会有多行笔录 停止合并,那应该取哪一行的label来展现 呢?label就是用来指定那个的;

但是closed参数呢?

Which side of bin interval is closed. The default is ‘left’ for all frequency offsets except for ‘M’, ‘A’, ‘Q’, ‘BM’, ‘BA’, ‘BQ’, and ‘W’ which all have a default of ‘right’.

我们再来看一下原始数据:

我们来尝尝closed参数

默认是 closed='left'

那里理解起来仍是能够的,2天为一个间隔,label也默认是left

然后,我们来看看 closed='right'

那里,我就有点儿迷惘 了,数据的重组是我在Excel顶用颜色标出来的,那个我能够理解,但是那个label,为什么往前多取了一个

有点儿希罕 ,我得捋一捋

怎么利用Python中Pandas库Resample,实现重摘 样,完成线性插值

#python中的pandas库次要有DataFrame和Series类(面向对象的的语言更情愿 喊 类) DataFrame也就是

#数据框(次要是借鉴R里面的data.frame),Series也就是序列 ,pandas底层是c写的 性能很棒,有大神

#做过测试 处置亿级此外数据没问题,起性能能够跟同等设置装备摆设的sas媲美

#DataFrame索引 df.loc是标签拔取操做,df.iloc是位置切片操做

print(df[['row_names','Rape']])

df['行标签']

df.loc[行标签,列标签]

print(df.loc[0:2,['Rape','Murder']])

df.iloc[行位置,列位置]

df.iloc[1,1]#拔取第二行,第二列的值,返回的为单个值

df.iloc[0,2],:]#拔取第一行及第三行的数据

df.iloc[0:2,:]#拔取第一行到第三行(不包罗)的数据

df.iloc[:,1]#拔取所有笔录 的第一列的值,返回的为一个Series

df.iloc[1,:]#拔取第一行数据,返回的为一个Series

print(df.ix[1,1]) # 更广义的切片体例是利用.ix,它主动根据 你给到的索引类型揣度 是利用位置仍是标签停止切片

print(df.ix[0:2])

#DataFrame根据 前提拔取子集 类似于sas里面if、where ,R里面的subset之类的函数

df[df.Murder13]

df[(df.Murder10)(df.Rape30)]

df[df.sex==u'男']

#重定名 相当 于sas里面的rename R软件中reshape包的中的rename

df.rename(columns={'A':'A_rename'})

df.rename(index={1:'other'})

#删除列 相当 于sas中的drop R软件中的test['col']-null

df.drop(['a','b'],axis=1) or del df[['a','b']]

#排序 相当 于sas里面的sort R软件里面的df[order(x),]

df.sort(columns='C') #行排序 y轴上

df.sort(axis=1) #各个列之间位置排序 x轴上

#数据描述 相当 于sas中proc menas R软件里面的summary

df.describe()

#生成新的一列 跟R里面有点类似

df['new_columns']=df['columns']

df.insert(1,'new_columns',df['B']) #效率更高

df.join(Series(df['columns'],name='new_columns'))

#列上面的逃加 相当 于sas中的append R里面cbind()

df.append(df1,ignore_index=True)

pd.concat([df,df1],ignore_index=True)

#最典范的join 跟sas和R里面的merge类似 跟sql里面的各类join比照

merge()

#删除重行 跟sas里面nodukey R里面的which(!duplicated(df[])类似

df.drop_duplicated()

#获取更大值 最小值的位置 有点类似矩阵里面的办法

df.idxmin(axis=0 ) df.idxmax(axis=1) 0和1有什么差别 本身摸索 往

#读取外部数据跟sas的proc import R里面的read.csv等类似

read_excel() read_csv() read_hdf5() 等

与之相反的是df.to_excel() df.to_ecv()

#缺失值处置 小我觉得pandas中缺失值处置比sas和R便利多了

df.fillna(9999) #用9999填充

#链接数据库 不多说 pandas里面次要用 MySQLdb

import MySQLdb

conn=MySQLdb.connect(host="localhost",user="root",passwd="",db="mysql",use_unicode=True,charset="utf8")

read_sql() #很典范

#写数据进数据库

df.to_sql('hbase_visit',con, flavor="mysql", if_exists='replace', index=False)

#groupby 跟sas里面的中的by R软件中dplyr包中的group_by sql里面的group by功用是一样的 那里不多说

#求哑变量

dumiper=pd.get_dummies(df['key'])

df['key'].join(dumpier)

#透视表 和穿插表 跟sas里面的proc freq步类似 R里面的aggrate和cast函数类似

pd.pivot_table()

pd.crosstab()

#聚合函数经常跟group by一路组合用

df.groupby('sex').agg({'height':['mean','sum'],'weight':['count','min']})

#数据查询过滤

test.query("0.2

将STK_ID中的值过滤出来

stk_list = ['600809','600141','600329']中的全数笔录 过滤出来,号令是:rpt[rpt['STK_ID'].isin(stk_list)].

将dataframe中,某列停止清洗的号令

删除换行符:misc['product_desc'] = misc['product_desc'].str.replace('\n', '')

删除字符串前后空格:df["Make"] = df["Make"].map(str.strip)

假设 用模糊婚配的话,号令是:

rpt[rpt['STK_ID'].str.contains(r'^600[0-9]{3}$')]

对dataframe中元素,停止类型转换

df['2nd'] = df['2nd'].str.replace(',','').astype(int) df['CTR'] = df['CTR'].str.replace('%','').astype(np.float64)

#时间变更 次要依靠 于datemie 和time两个包

#其他的一些身手

df2[df2['A'].map(lambda x:x.startswith('61'))] #挑选出以61开头的数据

df2["Author"].str.replace(".+", "").head() #replace(".+", "")表达 将字符串中以””开头;以””完毕的肆意子串替代为空字符串

commits = df2["Name"].head(15)

print commits.unique(), len(commits.unique()) #获的NAME的差别个数,类似于sql里面count(distinct name)

#pandas中最核心 最典范的函数apply map applymap

操纵Python停止数据阐发(9)-重摘 样resample和频次转换

Python-for-data-从头摘 样和频次转换

从头摘 样指的是将时间序列从一个频次转换到另一个频次的过程。

但是也并非所有的摘 样体例都是属于上面的两种

pandas中利用resample办法来实现频次转换,下面是resample办法的参数详解:

将数据聚合到一个规则的低频上,例如将时间转换为每个月,"M"或者"BM",将数据分红一个月的时间间隔。

每个间隔是半闭合的,一个数据只能属于一个时间间隔。时间间隔的并集必需是整个时间帧

默认情状 下,左箱体鸿沟是包罗的。00:00的值是00:00到00:05间隔内的值

产生的时间序列根据每个箱体右边的时间戳被标识表记标帜。

传递span class="mark"label="right"/span能够利用右箱体鸿沟标识表记标帜时间序列

向loffset参数传递字符串或者日期偏置

在金融数据中,为每个数据桶计算4个值是常见的问题:

通过span class="girk"ohlc聚合函数/span可以得到四种聚合值列的DF数据

低频转到高频的时候会构成缺失值

ffill() :利用前面的值填充, limit 限造填充的次数

0
回帖

resample函数MATLAB 期待您的回复!

取消