2017.07.25回顾 骚气EDA研究学习

来源:互联网 发布:c语言词汇 编辑:程序博客网 时间:2024/06/16 18:03

1、上午主要是开发新的rolling variable,算出woe,明天可以完成

2、另外一个主要工作是和新同事交流,关于两个变量分布变化对woe的影响,有一些新的发现,我推翻了昨天自己的猜想,也就是分布变化,woe一定会改变,我发现是能构造出分布改变,但是woe不变的情况,而且分布的变化是能通过卡方检验的,还有就是第二个猜想,分布变化越大,woe变化越大,同事构造的一些数据也说明了不一定成立,我这里衡量分布变化分别用到了卡方检验的p-value,PSI,平均偏差平方和,平均绝对偏差和,woe变化的度量主要是用到平均绝对偏差和、平均偏差平方和,都发现我第二个猜想不成立,于是我想了另外一招,不用构造的方式,而是用随机生成的方式去模拟现实的分布变化,然后让这两个猜想在大概率的情况下成立,这样也是符合我的预期,而且这个实验的方法也是可以解决我第二个问题,大概率服从分布变化越大,woe变化越大,我觉得这是个很有意义的研究内容

3、今天还好,杂事比较少,剩下的大部分时间,开始抄作业,主要学习比较骚气的EDA方法,里面有丰富的画图库使用方法,值得学习,主要就是合理地应用统计图表,还有一些探索思路,这个明天再小结一下

  • pandas提供了一些option设置
    pd.options.mode.chained_assignment = None
    这个设置会关闭掉copywarning,也有人提问到关闭这个warning过后,速度更快,有待验证
  • pd.options.display.max_columns = 999
    这个是DataFrame被输出的时候,如果列数太多,中间的列会被......省略,而这个设置后最后可以显示999列
  • color = sns.color_palette()
    这个是用seaborn生成一个调色盘,这个color是一个可以iterration的object,但是似乎没几种颜色
  • DataFrame也有boxplot方法,原理应该是调用了matplotlib的boxplot方法去生成一个axes对象,我记得那天我看的是不需要去plt.show就可以显示图像啊,可能是看错了,先不管了
  • 阿三的那种图效果一般啊,并没有boxplot和hist效果好啊,但也可以几者结合
  • numpy就有百分位数的算法,叫做np.percentile(list_like,95),参数就和之前我用到的from scipy import stats,stats.scoreatpercentile类似,参数都一样,不知道内在逻辑是否有差别
  • seaborn是matplotlib的封装,sns.distplot(data, bins, kde)封装的是plt.hist,kde是可以拟合出一条核密度函数曲线
  • plt.xlabel plt.ylabel plt.title参数都类似,前面字符串,后面可以跟fontsize控制字体大小
  • 阿三读入csv的用了一个参数parse_dates指出具体的datetime字段,但是我发现用和不用似乎没有差
  • seaborn画柱状图,sns.barplot(data, alpha=0.8, color=),alpha是透明度
  • 对于datetime类型的字段,有方法可以直接提取月份,df[datetime_column].dt.month,这个方法应该是datetime类字段独有的方法,dt.month
  • 阿三这里看重复主键用了一个很骚气的方法,
    (train_df['parcelid'].value_counts().reset_index())['parcelid'].value_counts()
    统计的是仅出现1次的,出现2次 and so on
  • 上面这个重复项的探索还可以深入,把这些重复的输出,看看其他字段是否一样,但是我昨天初步尝试了一下,没能使用出一个pythonic的方法
  • 探索missing_value也是段套路算法,
    missing_df = prop_df.isnull().sum(axis=0).reset_index()missing_df.columns = ['column_name','missing_count']
    然后画横向的柱状图,用barh方法,这个方法plt和axes对象都有,阿三用的axes的barh,再单独说明ticks和tick_label,用axes.set_yticks(ind),axes.set_yticklabels(list_like, rotation='horizontal'),其实建barh的时候就可以通过参数tick_label设定tick_labels,我觉得唯一的缺点是不能rotation。我来后自己用plt也能直接画出barh,如果需要偏转tick_label,也要相对的方法,我IV包中用的就是plt.xticks(x, tick_label, rotation = 30)
  • seaborn的联合分布看起来很高级,sns.jointplot(x,y,size)
  • merge可以df.merge,也可以pd.merge(df1,df2,on,how)
  • pd.options.display.max_rows = 65,改变最大可显示的行数
  • df的groupby方法和SQL很类似,df.groupby(column).aggregate('count'),就是要group by的字段,和要使用的聚合函数
  • 整个dataframe可以求mean,需要指定方向,mean_values = train_df.mean(axis=0)
  • 这个mean_values应该是一个series可以直接带入,train_df.fillna(mean_values, inplace=False)
  • [i for i in iterable if if],这里又学了一招,只能说python太灵活了,这种后面跟if条件可以连续跟两个,其实就等价于if...and...这种条件啊
  • np提供了相关系数计算的方法,np.corrcoef(values1,values2),这个返回的是两个值的交叉矩阵,对角线上必定是1
  • column.unique()和set(column)的输出是类似的
  • 相关系数矩阵可以用热力图呈现,先取出需要两两画出相关性的column_list,直接通过train_df[column_list]就可以获得新df(看来不一定非要用loc的方式去索引啊),其实这个就相当于df[column]变成了df[columns]。df.corr(method='spearman')这里用spearman相关系数,df的corr方法直接可以输出一个相关系数矩阵的DataFrame,然后用sns.heatmap(corrmat, vmax=1., square=True),第一个参数是data,后面两个参数是什么?看了下文档vmax应该是确定颜色的,square的应该是让生成的图纵坐标和横坐标一一对应
  • seaborn的countplot自带配色方案画出来的图只喊一个骚气,方法的参数我观察到略微有点差异,并不是差异,是两种都可以,sns.countplot(x,data),x可以传一个列名,后面就要把整个数据集data传进去,x直接传一个array-like
  • 画一个变量不同value上y值的箱线图,sns.boxplot(x,y,data)
  • 小提琴图,sns.violinplot,这个图我之前还没见过,就是在箱线图的基础上加多了一个核密度函数的估计曲线,看起来像一个小提琴
  • 阿三再最后又使用了一个绘图包,从R上移植过来的ggplot,但是我安装的时候安装成r的版本了,才发现anaconda还可以支持R,真的比较强大
以上,虽然是抄作业,但有很多新东西,和小技巧,下一篇对其整个思路总结一下,看有什么可以改进提升的地方,工具确实用得666