
正文
python抽样函数 python抽取随机数
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
利用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 限制填充的次数
相关问答
Q1: python中的排列组合
在日常的工作学习中,我们肯定会遇到排列组合问题,比如,在5种颜色的球中,任意取3个,共有多少种组合方式,这也包括有放回和无放回抽样。
在python中,自带的排列组合函数,都在python的指导工具包itertools中。
product 笛卡尔积(有放回抽样排列)
permutations 排列(不放回抽样排列)
combinations 组合,没有重复(不放回抽样组合)
combinations_with_replacement 组合,有重复(有放回抽样组合)
python3中返回的为对象,可以通过迭代读取将值输出。
end
Q2: 怎么使用Python中Pandas库Resample,实现重采样,完成线性插值
#python中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,它自动根据python抽样函数你给到的索引类型判断是使用位置还是标签进行切片
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两个包
#其python抽样函数他的一些技巧
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
Q3: 使用Python构造经验累积分布函数(ECDF)
对于一个样本序列 python抽样函数,经验累积分布函数 (Empirical Cumulative Distribution Function)可被定义为
其中 是一个指示函数python抽样函数,如果 ,指示函数取值为1,否则取值为0,因此 能反映在样本中小于 的元素数量占比。
根据格利文科定理(Glivenko–Cantelli Theorem),如果一个样本满足独立同分布(IID),那么其经验累积分布函数 会趋近于真实的累积分布函数 。
首先定义一个类,命名为ECDF:
python抽样函数我们采用均匀分布(Uniform)进行验证,导入 uniform 包,然后进行两轮抽样,第一轮抽取10次,第二轮抽取1000次,比较输出的结果。
输出结果为:
而我们知道,在真实的0到1均匀分布中, 时, ,从模拟结果可以看出,样本量越大,最终的经验累积分布函数值也越接近于真实的累积分布函数值,因此格利文科定理得以证明。
Q4: Python 数据处理(二十四)—— 索引和选择
如果python抽样函数你想获取 'A' 列的第 0 和第 2 个元素python抽样函数,python抽样函数你可以这样做:
这也可以用 .iloc 获取,通过使用位置索引来选择内容
可以使用 .get_indexer 获取多个索引:
警告 :
对于包含一个或多个缺失标签的列表,使用 .loc 或 [] 将不再重新索引,而是使用 .reindex
在以前的版本中,只要索引列表中存在至少一个有效标签,就可以使用 .loc[list-of-labels]
但是现在,只要索引列表中存在缺失的标签将引发 KeyError 。推荐的替代方法是使用 .reindex() 。
例如
索引列表的标签都存在
先前的版本
但是,现在
索引标签列表中包含不存在的标签,使用 reindex
另外,如果你只想选择有效的键,可以使用下面的方法,同时保留了数据的 dtype
对于 .reindex() ,如果有重复的索引将会引发异常
通常,您可以将所需的标签与当前轴做交集,然后重新索引
但是,如果你的索引结果包含重复标签,还是会引发异常
使用 sample() 方法可以从 Series 或 DataFrame 中随机选择行或列。
该方法默认会对行进行采样,并接受一个特定的行数、列数,或数据子集。
默认情况下, sample 每行最多返回一次,但也可以使用 replace 参数进行替换采样
默认情况下,每一行被选中的概率相等,但是如果你想让每一行有不同的概率,你可以为 sample 函数的 weights 参数设置抽样权值
这些权重可以是一个列表、一个 NumPy 数组或一个 Series ,但它们的长度必须与你要抽样的对象相同。
缺失的值将被视为权重为零,并且不允许使用 inf 值。如果权重之和不等于 1 ,则将所有权重除以权重之和,将其重新归一化。例如
当应用于 DataFrame 时,您可以通过简单地将列名作为字符串传递给 weights 作为采样权重(前提是您要采样的是行而不是列)。
sample 还允许用户使用 axis 参数对列进行抽样。
最后,我们还可以使用 random_state 参数为 sample 的随机数生成器设置一个种子,它将接受一个整数(作为种子)或一个 NumPy RandomState 对象
当为该轴设置一个不存在的键时, .loc/[] 操作可以执行放大
在 Series 的情况下,这实际上是一个追加操作
可以通过 .loc 在任一轴上放大 DataFrame
这就像 DataFrame 的 append 操作
由于用 [] 做索引必须处理很多情况(单标签访问、分片、布尔索引等),所以需要一些开销来搞清楚你的意图
如果你只想访问一个标量值,最快的方法是使用 at 和 iat 方法,这两个方法在所有的数据结构上都实现了
与 loc 类似, at 提供了基于标签的标量查找,而 iat 提供了基于整数的查找,与 iloc 类似
同时,你也可以根据这些索引进行设置值
如果索引标签不存在,会放大数据
另一种常见的操作是使用布尔向量来过滤数据。运算符包括:
|(or) 、 (and) 、 ~ (not)
这些必须用括号来分组,因为默认情况下, Python 会将 df['A'] 2 df['B'] 3 这样的表达式评估为 df['A'] (2 df['B']) 3 ,而理想的执行顺序是 (df['A'] 2) (df['B'] 3)
使用一个布尔向量来索引一个 Series ,其工作原理和 NumPy ndarray 一样。
您可以使用一个与 DataFrame 的索引长度相同的布尔向量从 DataFrame 中选择行
列表推导式和 Series 的 map 函数可用于产生更复杂的标准
我们可以使用布尔向量结合其他索引表达式,在多个轴上索引
iloc 支持两种布尔索引。如果索引器是一个布尔值 Series ,就会引发异常。
例如,在下面的例子中, df.iloc[s.values, 1] 是正确的。但是 df.iloc[s,1] 会引发 ValueError 。
Q5: 统计学6-抽样分布
抽样分布也称统计量分布、随机变量函数分布python抽样函数,是指样本估计量的分布。 样本估计量是样本的一个函数python抽样函数,在统计学中称作统计量,因此抽样分布也是指统计量的分布 【1】。以样本平均数为例,它是总体平均数的一个估计量,如果按照相同的样本容量,相同的抽样方式,反复地抽取样本,每次可以计算一个平均数,所有可能样本的平均数所形成的分布,就是样本平均数的抽样分布。
也就是说,python抽样函数我们将 抽样分布 定义为 样本统计量 的分布。
有多种样本统计量:均值,方差,标准差。
如果说我们有随机变量X,和方差 σ 2 ,那么 的分布 (样本平均数的抽样分布) 方差为: σ 2 /n
我们经常使用希腊符号作为 参数 ,使用小写字母作为对应 统计量 。有时候在文学作品中,你也会看到带有 "帽子" 的希腊字母,表示这是对应 参数 的估算。
下面这个表格提供python抽样函数了一些最常见的参数和对应统计量:
大数法则 表示 随着样本容量增加,样本平均数越来越接近总体平均数 。
但是我们首先如何确定样本平均数可以估计总体平均数呢?我们以后如何识别参数与统计量的其他关系呢?
下面是三种最常见的估计技巧:
最大似然估计 (英语:maximum likelihood estimation,缩写为MLE),也称 极大似然估计 、 最大概似估计 ,是用来估计一个概率模型的参数的一种方法【4】。
上文已经提到,似然函数取得最大值表示相应的参数能够使得统计模型最为合理。
最大似然估计的做法是:首先选取似然函数(一般是概率密度函数)或概率质量函数),整理之后求最大值。实际应用中一般会取 似然函数的对数作为求最大值的函数 ,这样求出的最大值和直接求最大值得到的结果是相同的。 似然函数的最大值不一定唯一,也不一定存在 。与矩法估计比较,最大似然估计的精确度较高,信息损失较少,但计算量较大。
贝叶斯估计(Bayesian estimation)是利用贝叶斯定理【7】结合 新的证据 及以前的 先验概率 ,来得到 新的概率 。它提供了一种计算假设概率的方法,基于假设的先验概率、给定假设下观察到不同数据的概率以及观察到的数据本身。
贝叶斯估计将 后验概率 (考虑相关证据或数据后,某一事件的条件机率)推导为 先验概率 (考虑相关证据或数据前,某一事件不确定性的机率)及 似然函数 的共同作用结果。贝叶斯推断根据贝叶斯定理计算后验概率:
针对不同的 H 数值,只有 P(H) 和 P(E|H) (都在分子)会影响 P(H|E) 的数值。假说的 后验概率 和其 先验概率 (固有似然率)和新产生的 似然率 (假说和新得到证据的相容性)乘积成正比。
贝叶斯估计最关键的点是可以利用贝斯定理结合新的证据及以前的先验机率,来得到新的机率(这和频率论推论相反,频率论推论只考虑证据,不考虑先验机率)。
而且贝叶斯估计可以迭代使用:在观察一些证据后得到的后设机率可以当作新的先验机率,再根据新的证据得到新的后设机率。因此贝斯定理可以应用在许多不同的证据上,不论这些证据是一起出现或是不同时出现都可以,这个程序称为 贝叶斯更新 (Bayesian updating)。
中心极限定理表示样本容量足够大,平均数的抽样分布越接近正态分布。
中心极限定理 实际上应用于这些常见的统计量中:
推论统计在于使用我们收集的数据( 样本 )对更大的总体数据( 总体 )得出结论。
使用推论统计要求我们对准确代表感兴趣的总体进行取样。
收集数据的常见方式是调查。然而,根据提问的问题和提问的方式,调查会带有 偏见性 。这是解决项目时你应该想到的话题。
Bootstrap方法是非常有用的一种统计学上的估计方法,是斯坦福统计系的教授Bradley Efron【9】在总结、归纳前人研究成果的基础上提出一种新的非参数统计方法。【8】
Bootstrap是可进行统计量区间估计的统计方法,也称为自助法。
我们往往无法知道总体的参数,因此我们通过抽样来试图对总体的参数进行估计。为此,一种方法是不停的对总体不停的取样,来得出样本统计量的分布。但是,这显然是不可能的。还有两种方法能派上用场:
对于#1,如果你能确定假设成立,即整体服从某一种分布,那么只要计算量在可接受的范围内,就没有问题。比方说,总体服从正态分布,那么样本来自总体,也能以正态分布进行描述,抽样分布为正态分布。然而,当总体分布未知的时候,只能以Bootstrap方法进行分析。
我们有理由采用#2,因为样本是我们仅有的也是最好的关于总体的信息,而且,大多数随机抽取的样本同总体非常的相似。【10】
Bootstrap是放回抽样。这里以一个🌰来描述其基本过程:
假设我们有两个金融资产X和Y,我们现在想要合理配置这两个资产,使得其资产组合的风险最小。也就是找到一个α,使得Var(αX + (1-α) Y)最小。这个问题几十年前马尔可维茨已经在其投资组合理论里给出了解答,最优的α表达式如下:
我们发现,通过Bootstrap方法我们竟然不仅可以估计α的值( 这点普通方法也可以很容易做到),还可以估计α的accuracy也就是其Standard Error。这可是只利用原有的样本进行一次估计所做不到的。那么Bootstrap对于分布特性的估计效果究竟如何呢?请看下图:
左边是真实的α分步,右边则是基于bootstrap方法得到的1000个α的分布,可以看到,二者是比较相近的,也就是说Bootstrap有着不错的估计效果。而且当重复次数增多,Bootstrap的估计效果会更好。
不仅是α的标准差,如果我们想要估计α的中位数、分位数等统计量,也是可以通过Boostrap方法做到的,其整个流程可以用下面一张图诠释:
本质上,Bootstrap方法,是将一次的估计过程,重复上千次上万次,从而便得到了得到上千个甚至上万个的估计值,于是利用这不止一个的估计值,我们就可以估计α均值以外的其他统计量:比如标准差、中位数等。
在 python 中使用 random.choice 实际上是自助法。无论选择多少次,我们数据集中任何数字的概率保持不变。
【1】 抽样分布
【2】 似然函数
【3】 贝叶斯法则
【4】 最大似然估计
【5】 卡尔·皮尔逊
【6】 Method of Moments
【7】 统计学5-贝叶斯法则 : 关于先验概率,后验概率,条件概率的概念及他们之间的关系,可以参考这篇文章。
【8】 Bootstrap详解 :本文的例子来自于这篇文章。
【9】 布拉德利·埃弗龙
【10】
python抽样函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python抽取随机数、python抽样函数的信息别忘了在本站进行查找喔。







