初学者学Python编程如何快速入门?电子书集合|数据科学速查表|迁移学习实战,免费下载
链接:提取码: z9x7
Python进阶精华-编写装饰器为被包装的函数添加参数注意:这种发方法并不是装饰器最常用的功能,但是在降低代码重复上可谓是首屈一指 。比如:如果不使用装饰器 , 上述代码可能会很多:
当然,这里也有一个潜在的风险,就是当装饰器包裹的函数已经用了debug作为参数名,那么装饰器这里将会报错,所以要添加额外的一些判断来完善代码:
最后还剩下一部分比较难理解的地方 , 我将理解的注释在每行代码上方 , 这个问题就是,在打印被修饰函数的参数签名时 , 其实并不能正确显示参数签名,原因是因为被wrapper修饰过后的函数实际上应该使用的是wrapper的参数签名表,例如:
所以,接下来,完成最后最难的一步:
Python 函数进阶-高阶函数高阶函数就是能够把函数当成参数传递python类函数进阶的函数就是高阶函数,换句话说如果一个函数的参数是函数,那么这个函数就是一个高阶函数 。
高阶函数可以是python类函数进阶你使用def关键字自定义的函数,也有Python系统自带的内置高阶函数 。
我们下面的例子中,函数 senior 的参数中有一个是函数,那么senior就是一个高阶函数;函数 tenfold 的参数不是函数,所以tenfold就只是一个普通的函数 。
function:函数,可以是 自定义函数 或者是 内置函数;
iterable:可迭代对象,可迭代性数据 。(容器类型数据和类容器类型数据、range对象、迭代器)
把可迭代对象中的数据一个一个拿出来,然后放在到指定的函数中做处理,将处理之后的结果依次放入迭代器中,最后返回这个迭代器 。
将列表中的元素转成整型类型 , 然后返回出来 。
列表中的每一个数依次乘 2的下标索引 1 次方 。使用自定义的函数,配合实现功能 。
参数的意义和map函数一样
filter用于过滤数据,将可迭代对象中的数据一个一个的放入函数中进行处理,如果函数返回值为真,将数据保留;反之不保留,最好返回迭代器 。
保留容器中的偶数
参数含义与map、filter一致 。
计算数据,将可迭代对象的中的前两个值放在函数中做出运算,得出结果在和第三个值放在函数中运算得出结果,以此类推,直到所有的结果运算完毕,返回最终的结果 。
根据功能我们就应该直到,reduce中的函数需要可以接收两个参数才可以 。
将列表中的数据元素组合成为一个数,
iterable:可迭代对象;
key:指定函数,默认为空;
reverse:排序的方法,默认为False,意为升序;
如果没有指定函数 , 就单纯的将数据安札ASCII进行排序;如果指定python类函数进阶了函数,就将数据放入函数中进行运算,根据数据的结果进行排序 , 返回新的数据,不会改变原有的数据 。
注意 , 如果指定python类函数进阶了函数,排序之后是根据数据的结果对原数据进行排序,而不是排序计算之后的就结果数据 。
将列表中的数据进行排序 。
还有一点就是 sorted 函数可以将数据放入函数中进行处理 , 然后根据结果进行排序 。
既然有python类函数进阶了列表的内置函数sort , 为什么我们还要使用sorted函数呢?
高阶函数就是将函数作为参数的函数 。
文章来自
数据蛙-Python进阶这是漫长的一周,本周完成了Python的进阶模块,主要是pandas、numpy、matplotlib、seaborn、pyecharts这些模块的学习以及一个实际的案例:商品销售情况分析,之前一直觉得课程难度不够 , 但到这一周难度就大大提高了 。尤其是案例练习中的RFM模型和用户生命周期建立,看懂不难但是自己写一直出错,在不断出错不断尝试中知识得到了积累 , 另外可视化部分没有什么练习题 , 希望后面可以加上一些这方面的练习,接下来分模块来总结一下学习的内容 。
重新设置索引:df.set_index()
Series格式转换为DataFrame:df.to_frame()
文件读?。簆d.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)
【python类函数进阶 python 类内函数】 对数据进行排序:df.sort_values('age')
累加求和:df.cumsum(0)
删除列:del df['player']删除行:df.drop(labels=0) labels 是行列的名字
数据拼接:pd.concat([left,right],axis=1)
# 指定列进行关联,默认是 inner joinresult = 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 Lineline=Line()
饼图:from pyecharts.charts import Page, PiePie()
转换日期类型: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类函数进阶的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python 类内函数、python类函数进阶的信息别忘了在本站进行查找喔 。
推荐阅读
- 格斗俱乐部游戏下载,格斗俱乐部图片
- 游戏稳定路由器怎么选购,游戏稳定路由器怎么选购的
- 自营电商如何推广,自营电商如何推广销售
- redis释放锁就是删除key吗,redis内存释放
- linux口令维护命令 linux用户的口令文件
- 小米手机为什么会发烫,小米手机为什么会发烫?
- 绅士冒险污版游戏下载,绅士冒险游戏破解版
- 手机屏幕坏了怎么打开,手机屏幕坏了怎么打开usb调试连接电脑
- linux命令行字符错乱 linux怎么修改命令字符