环境准备:sublime+ipython
打开代码编辑器sublime——本质上,txt文本编辑器也可以写代码,并保存为以.py为后缀的python文件,但专业的代码编辑器可以实现语法高亮、自动补全等功能,并支持项目管理,大大提高编写代码的效率和代码的管理。因此,选择一款合适的代码编辑器便不可少
打开终端并进入ipython模式——ipython可以帮助我进行探索和试误,利用魔术命令%paste(执行剪贴板中的python代码)更是可以帮助我快速查看某段代码的执行效果
如果说普通的代码编辑器支持的是“编辑-编译-运行”的工作模式,那么ipython鼓励的则是“执行-探索”的工作模式。
开始写代码
分析任务:一家电商公司的收入来自不同的部门,每个部门下又有不同的商品类目。收入的波动来自于不同部门或类目的收入涨跌。为了快速定位每天的收入波动来自哪个部门以及哪个类目,需要搭建模型进行自动化分析。
我们的目标是利用python实现收入波动的分析模型(Analysis Model for Income Fluctuation)。
首先,我们需要清晰定义实现最终目标的每个步骤。
计算各个部门的收入变化值(观察日收入-对比日收入)以及整体的收入变化值;
计算各个部门收入变化值占比整体收入变化值的比例,取绝对值;其中,占比最大的就是对整体收入变化影响最大的部门,可以取经验值10%,即占比大于10%的部门就是对整体收入变化影响最大的部门;
计算上述步骤得到的影响最大的部门下每个类目收入变化值和每个部门的收入变化值;
计算每个类目收入变化值占比部门整体收入变化值的比例,取绝对值,找出影响最大的类目。
现在我们用python来实现上述步骤:
导入所需模块和数据:
import pandas as pddf=pd.read_excel('/Users/xiangzhendong/Downloads/income_data.xls')
利用数据框(dataframe)的透视表(pivot_table)方法按部门聚合昨日和前日的收入数据:
df_pivot=df.pivot_table('income',index='department',columns='date',aggfunc='sum')
计算每个部门的收入变化值以及每个部门的变化值占比整体变化值的比例:
df_pivot['change_amt']=df_pivot['2016-11-16']-df_pivot['2016-11-15']df_pivot['change_pct']=abs(df_pivot['change_amt']/df_pivot['change_amt'].sum())
此时,我们的df_pivot数据框多了change_amt和change_pct两列。如果我们要选出change_pct大于10%的部门,可以这样写:
result=df_pivot[df_pivot['change_pct']>=0.1]
对整体变化影响最大部门已经找出来了,接下来寻找每个部门下对部门整体变化影响最大的类目。不难发现,寻找的逻辑其实是一模一样的。在编写代码的过程中,我们要注意识别做事的模式,创造工具简化同类操作。
此时,我们可以创建一个寻找对整体变化影响最大的成分的函数:
def max_change(df, rows): df_pivot=df.pivot_table('income',index=rows,columns='date',aggfunc='sum') df_pivot['change_amt']=df_pivot['2016-11-16']-df_pivot['2016-11-15'] df_pivot['change_pct']=abs(df_pivot['change_amt']/df_pivot['change_amt'].sum()) return df_pivot[df_pivot['change_pct']>=0.1