DW数据挖掘学习(一)

0.赛题理解

  • 场景:蚂蚁金服每天需要处理大量的资金流入和流出
  • 条件:为了资金流动的风险达到最低,同时保证每天的正常业务运转
  • 目标:精准预测未来每日的资金流入流出情况
  • 数据:用户基本信息数据、用户申购赎回数据、收益率表、银行间拆借利率表

1.数据探索准备

1.1时间序列图

# 画出每日总购买与赎回量的时间序列图
fig = plt.figure(figsize=(20,6))
#表示figure的大小为长、宽(单位为inch)
plt.plot(total_balance['date'],total_balance['total_purchase_amt'],label='purchase')
#从label可知为图中黄线,横轴为时间,纵轴为购买量
plt.plot(total_balance['date'], total_balance['total_redeem_amt'],label='redeem')
#同上画出图中蓝线
plt.legend(loc='best')
#设置图例位置,best为0, only implemented for axes legends(自适应方式)
plt.title("The lineplot of total amount of Purchase and Redeem from July.13 to Sep.14")
#设置图表标题
plt.xlabel("Time")
#设置横轴
plt.ylabel("Amount")
#设置纵轴
plt.show()
#展示

DW数据挖掘学习(一)_第1张图片

1.2数据分布可视化

  • 直方图 - distplot()
  • rs = np.random.RandomState(10) #设定随机数种子
    s = pd.Series(rs.randn(100) * 100)
    sns.distplot(s, bins = 10, hist = True, kde = True, norm_hist = False,
                rug = True, vertical = True,
                color = 'b', label = 'distplot', axlabel = 'x')
    plt.legend()
    #bins ---> 箱数
    #hist、ked ---> 是否显示箱/密度曲线
    #norm_hist ---> 直方图是否按照密度来显示
    #rug ---> 是否显示数据分布情况
    #vertical ---> 是否水平显示
    #color ---> 设置颜色
    #label ---> 图例
    #axlabel ---> x轴标注
     sns.distplot(s, rug = True,
                 rug_kws = {'color':'y'},
                 #设置数据频率分布颜色
                 kde_kws = {'color':'k', 'lw':1, 'label':'KDE', 'linestyle':'--'},
                 #设置密度曲线颜色、线宽、标注、 线形
                 hist_kws = {'histtype':'stepfilled', 'linewidth':1, 'alpha':1,
                             'color':'g'})
                 # 设置箱子的风格、线宽、透明度、颜色
                 # 风格包括:'bar'、'barstacked'、'step'、'stepfilled'
    
  • 箱形图-boxplot()
     plt.boxplot(x, notch=None, sym=None, vert=None, 
                 whis=None, positions=None, widths=None,
                 patch_artist=None, meanline=None, showmeans=None, 
                 showcaps=None, showbox=None, showfliers=None, 
                 boxprops=None, labels=None, flierprops=None, 
                 medianprops=None, meanprops=None, 
                 capprops=None, whiskerprops=None)
    

    x:指定要绘制箱线图的数据;                                          

    notch:是否是凹口的形式展现箱线图,默认非凹口;

    sym:指定异常点的形状,默认为+号显示;                  

    whis:指定上下须与上下四分位的距离,默认为1.5倍的四分位差;

    vert:是否需要将箱线图垂直摆放,默认垂直摆放;      

    positions:指定箱线图的位置,默认为[0,1,2…];

    widths:指定箱线图的宽度,默认为0.5;                      

    meanline:是否用线的形式表示均值,默认用点来表示;

    patch_artist:是否填充箱体的颜色;                              

    showcaps:是否显示箱线图顶端和末端的两条线,默认显示;

    showmeans:是否显示均值,默认不显示;                  

    filerprops:设置异常值的属性,如异常点的形状、大小、填充色等;

    showbox:是否显示箱线图的箱体,默认显示;            

    capprops:设置箱线图顶端和末端线条的属性,如颜色、粗细等;

    showfliers:是否显示异常值,默认显示;                      

    whiskerprops:设置须的属性,如颜色、粗细、线的类型等;

    boxprops:设置箱体的属性,如边框色,填充色等;    

    medianprops:设置中位数的属性,如线的类型、粗细等;

    labels:为箱线图添加标签,类似于图例的作用;          

    meanprops:设置均值的属性,如点的大小、颜色等;

  • plt.figure(figsize=(12, 5))
    #表示figure 的大小为长、宽(单位为inch)
    ax = plt.subplot(1,2,1)
    #plt.subplot(i,j,n)形式,其中i,j是行列数,n是第几个图,比如(1,2,1)则是一个有两个图,该图位于第一个
    plt.title('The boxplot of total purchase with each weekday')
    #plt.title()函数用于设置图像标题
    ax = sns.boxplot(x="weekday", y="total_purchase_amt", data=total_balance_1)
    #表示第一张图的横坐标为“weekday”,纵坐标为“total_purchase_amt”
    ax = plt.subplot(1,2,2)
    #第二张图同理
    plt.title('The boxplot of total redeem with each weekday')
    ax = sns.boxplot(x="weekday", y="total_redeem_amt", data=total_balance_1)

DW数据挖掘学习(一)_第2张图片

  • 小提琴图
  • sns.violinplot(x=x,y=y,data=Train_data) 
    #在sns.violinplot中,x是类别变量,y是数值型变量,data用于指定数据集
  • # 画出每个翌日的数据分布于整体数据的分布图
    a = plt.figure(figsize=(10,10))
    scatter_para = {'marker':'.', 's':3, 'alpha':0.3}
    #markers = ['o', '.', ',', 'x', '+', 'v', '^', '<', '>', 's', 'd']
    #matplotlib用特殊字符表示散点类型
    line_kws = {'color':'k'}
    #更改线条的颜色
    plt.subplot(2,2,1)
    plt.title('The distrubution of total purchase')
    sns.violinplot(x='weekday', y='total_purchase_amt', data = total_balance_1, scatter_kws=scatter_para, line_kws=line_kws)
    #画出第一张图(小提琴图)
    plt.subplot(2,2,2)
    plt.title('The distrubution of total purchase')
    sns.distplot(total_balance_1['total_purchase_amt'].dropna())
    #画出第二张图(直方图)
    plt.subplot(2,2,3)
    plt.title('The distrubution of total redeem')
    sns.violinplot(x='weekday', y='total_redeem_amt', data = total_balance_1, scatter_kws=scatter_para, line_kws=line_kws)
    plt.subplot(2,2,4)
    plt.title('The distrubution of total redeem')
    sns.distplot(total_balance_1['total_redeem_amt'].dropna())

 

2.数据探索性分析

2.1函数载入

import pandas as pd
import numpy as np 
import datetime
import seaborn as sns
import matplotlib.pyplot as plt 
from scipy import stats
import warnings
warnings.filterwarnings('ignore')

2.2数据载入与总览

data_balance = pd.read_csv("user_balance_table.csv")
bank = pd.read_csv("mfd_bank_shibor.csv")
share = pd.read_csv("mfd_day_share_interest.csv") 
users = pd.read_csv("user_profile_table.csv")

  可以以head()和shape进行简略的观测

#添加时间信息
data_balance['date'] = pd.to_datetime(data_balance['report_date'], format= "%Y%m%d")
#数据类型为“object”,通过pd.to_datetime将该列数据转换为时间类型,即datetime
#下面这种类型的语句可以对操作后的datatime直接进行取数
data_balance['day'] = data_balance['date'].dt.day
data_balance['month'] = data_balance['date'].dt.month 
data_balance['year'] = data_balance['date'].dt.year
data_balance['week'] = data_balance['date'].dt.week 
data_balance['weekday'] = data_balance['date'].dt.weekday
total_balance = data_balance.groupby(['date'])['total_purchase_amt','total_redeem_amt'].sum() 
#按照日期统计申购总量和赎回总量
total_balance.reset_index(inplace=True)

reset_index用来重置索引,因为有时候对dataframe做处理后索引可能是乱的。
drop=True就是把原来的索引index列去掉,重置index;drop=False就是保留原来的索引,添加重置的index。
inplace=False(默认)表示原数组不变,对数据进行修改之后结果给新的数组;inplace=True表示直接在原数组上对数据进行修改。

你可能感兴趣的:(DW数据挖掘学习(一))