python采样函数 python数据采集与处理

利用Python进行数据分析(9)-重采样resample和频率转换

Python-for-data-重新采样和频率转换

创新互联建站是专业的榕江网站建设公司,榕江接单;提供网站设计、成都网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行榕江网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

重新采样指的是将时间序列从一个频率转换到另一个频率的过程。

但是也并不是所有的采样方式都是属于上面的两种

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 限制填充的次数

怎么使用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进阶

这是漫长的一周,本周完成了Python的进阶模块,主要是pandas、numpy、matplotlib、seaborn、pyecharts这些模块的学习以及一个实际的案例:商品销售情况分析,之前一直觉得课程难度不够,但到这一周难度就大大提高了。尤其是案例练习中的RFM模型和用户生命周期建立,看懂不难但是自己写一直出错,在不断出错不断尝试中知识得到了积累,另外可视化部分没有什么练习题,希望后面可以加上一些这方面的练习,接下来分模块来总结一下学习的内容。

重新设置索引:df.set_index()

Series格式转换为DataFrame:df.to_frame()

文件读取:pd.read_csv(filepath, header = 0,skiprows=[1,2]) 

使用位置做索引:df.loc[0]        使用列表做索引:df.loc[[0,1,2]]

使用切片做索引:df.loc[0:4]        使用bool类型索引:df[df['年龄']30]

loc 是基于索引值的,切片是左闭右闭的

iloc 是基于位置的,切片是左闭右开的

修改列索引:df.rename(columns={'姓名':'name', '年龄':'age'},inplace=True)

替换一个值:df.replace({'name':{'小明':'xiaoming'}},inplace=True)

对数据进行排序:df.sort_values('age')

累加求和:df.cumsum(0)

删除列:del df['player']         删除行:df.drop(labels=0) labels 是行列的名字

数据拼接:pd.concat([left,right],axis=1)

# 指定列进行关联,默认是 inner join     result = pd.merge(left,right,on='key')

#多个关联条件:result = pd.merge(left, right, on=['key1', 'key2'])

#左连接:result = pd.merge(left, right, how='left', on=['key1', 'key2'])

# 列名不一样的关联:pd.merge(left,right,left_on = ['key1','key2'],right_on = ['key3','key4'])

#单个分组:groups = df.groupby('district')

# 作用多个聚合函数:groups.agg([np.mean,np.sum,np.std])

# 针对具体列聚合 groups.age.agg([np.mean,np.sum,np.std])

# 不同列不同聚合函数 groups.agg({"age":np.mean,"novip_buy_times":np.sum})

分组后该列值求和显示:groups['vip_buy_times'].transform('sum')

通常用于求占比:transform(lambda x: x /sum(x))

# 填充指定值:np.full([3,4],1)

# 起始为10,5为步长,30为结尾取不到:np.arange(10, 30, 5)

#随机矩阵:np.random.random((2,3))

# 平均划分:np.linspace( 0, 2*pi, 100 )

# 类型及转换:vector.astype('float')

# 多维变一维:matrix.ravel()

# 矩阵的扩展:a = np.arange(0, 40, 10)    b = np.tile(a, (3, 5))    # 行变成3倍,列变成5倍

# 水平拼接:np.hstack((a,b))  竖直拼接:np.vstack((a,b))

# 竖直分割:np.hsplit(a,3)    #水平分割:np.vsplit(a,3)

8. Select the data in rows [3, 4, 8] and in columns ['animal', 'age'].

A:df.loc[df.index[[3,4,8]],['animal','age']]

行采用位置,列采用普通索引,这里利用index函数将位置变化为具体的普通索引,再利用loc函数

19. The 'priority' column contains the values 'yes' and 'no'. Replace this column with a column of boolean values: 'yes' should be True and 'no' should be False

A1:df['priority'].replace(['yes','no'],[True,False],inplace=True) 用replace函数替换

A2:df['priority'] = df['priority'].map({'yes': True, 'no': False}) 用map函数替换

最大最小值的索引:df.idxmax、df.idxmin

找出最大最小的前N个数:nlargest()和nsmallest() 

将原表分组 并设置分段区间 pd.cut(df['A'], np.arange(0, 101, 10))

resample函数 日期重采样:s.resample('M').mean()

TimeGrouper 重组:s.groupby(pd.TimeGrouper('4M')).idxmax()

split 分割函数:temp = df['From_To'].str.split('_', expand=True) True为DataFrame

两个DataFrame拼接用join:df = df.join(temp)

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签

plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

%matplotlib inline 直接显示

折线图:plt.plot(x,y,color = 'r')

柱状图:plt.bar(x,y)  plt.barh(x,y) 多个bar x设置不同 堆积图 bottom设置不同

散点图:plt.scatter(x, y, c=colors, alpha=0.5, s = area)

直方图:plt.hist(a,bins= 20) bin代表分隔的最小单位

plt.legend() 显示图例

for a,b in zip(X+W[i],data[i]):

plt.text(a,b,"%.0f"% b,ha="center",va= "bottom") 添加数据标签

plt.annotate('注释文本',xy=(1, np.sin(1)),xytext=(2, 0.5), fontsize=16,arrowprops=dict(arrowstyle="-")) 添加注释文本

plt.xlabel("Group") x轴标题

plt.ylabel("Num") y轴标题

fig, axes = plt.subplots(nrows=2, ncols=2,facecolor='darkslategray')  绘制多个图形

axes[0,0] axes[0,1] axes[1,0] axes[1,1]

pylab.rcParams['figure.figsize'] = (10, 6) # 调整图片大小

动态展示图表

from pyecharts.charts import Bar

from pyecharts import options as opts

** pyecharts 绘图的五个步骤:**

创建图形对象:bar = Bar()

添加绘图数据:bar.add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"])

                     bar.add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])

                     bar.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])

配置系列参数:对标签、线型等的一些设置

配置全局参数:bar.set_global_opts(title_opts=opts.TitleOpts(title="销售情况"))

渲染图片:生成本地 HTML 文件 bar.render("mycharts.html")  bar.render()

notebook 渲染:bar.render_notebook()

bar = (Bar()

.add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"])

.add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])

.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])

.set_global_opts(title_opts=opts.TitleOpts(title="某商场销售情况"))

)

bar.render_notebook()

柱状图:Bar()

条形图:bar.reversal_axis() #翻转XY轴,将柱状图转换为条形图

折线图:from pyecharts.charts import Line  line=Line()

饼图:from pyecharts.charts import Page, Pie    Pie() 

转换日期类型:df['order_dt']=pd. to_datetime (df.order_dt,format="%Y%m%d")

将日期转换为月为单位:df['month']=df.order_dt.values. astype('datetime64[M]') 所有日期显示为当月第一天

去除日期单元值:order_diff/ np.timedelta64(1,'D')

过滤部分极值:grouped_user.sum() .query('order_products100') .order_amount

数据透视表:rfm=df.pivot_table( index ='user_id', values =['order_products','order_amount'], aggfunc ={'order_amount':'sum','order_products':'sum'})

map() 方法是pandas.series.map()方法, 对DF中的元素级别的操作, 可以对df的某列或某多列

applymap(func) 也是DF的属性, 对整个DF所有元素应用func操作

purchase_r=pivoted_counts.applymap(lambda x: 1 if x1 else np.NaN if x==0 else 0)

apply(func) 是DF的属性, 对DF中的行数据或列数据应用func操作,也可用于Series

apply(lambda x:x.cumsum()/x.sum())    累计占比

apply(lambda x:x/x.sum(),axis=0)     每一列中每行数据占比

下周开始进入数据分析思维的课程,很期待后面的课程以及项目,加油!

python tf.random_uniform与np.random_uniform有什么区别

首先应该是np.random.uniform

这两个回答多少有点大病

两者虽然函数名相同,但属于不同的库,一个是TensorFlow的,一个是numpy的。

就好比你家也有冰箱我家也有冰箱一样。

tf.random.uniform的属性变量包括:

shape: 输出张量的形状,比如矩阵或者向量的维度

mean: 正态分布的均值,默认为0

stddev: 正态分布的标准差,默认为1.0

dtype: 输出的类型,默认为tf.float32

seed: 随机数种子,是一个整数,当设置之后,每次生成的随机数都一样

name: 操作的名称

np.random.uniform的属性变量包括:

low: 采样下界,float类型,默认值为0

high: 采样上界,float类型,默认值为1

size: 输出样本数目,为int或元组(tuple)类型

tensorflow是生成均匀分布,而numpy则是在分布中做随机采样


本文标题:python采样函数 python数据采集与处理
URL分享:http://pwwzsj.com/article/dosiscc.html