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()
#展示
1.2数据分布可视化
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'
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)
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.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表示直接在原数组上对数据进行修改。