目录
数据分析与探索
1. 背景
根据余额宝2013年7月-2014年8月用户的申购赎回数据信息预测未来每日的资金流入流出情况
2.数据的导入
- 导入各种数据科学及可视化库
#读取数据
import pandas as pd
import numpy as np
import datetime,os
import seaborn as snsx
import matplotlib.pyplot as plt
- 读取数据,并添加时间信息,统计每天申购总量和赎回总量
#读取数据
data_balance = pd.read_csv("./Data/user_balance_table.csv")
bank = pd.read_csv(r"./Data/mfd_bank_shibor.csv")
share = pd.read_csv(r"./Data/mfd_day_share_interest.csv")
users = pd.read_csv(r"./Data/user_profile_table.csv")
#给用户申购赎回数据表添加时间信息
data_balance["date"] = pd.to_datetime(data_balance["report_date"],format="%Y%m%d")#日期/年月日
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",as_index=False)["total_purchase_amt","total_redeem_amt"].sum()
3. 绘制时序图
绘制各个时间段的申购总量和赎回总量的时序图观察数据特点
- 2013年8月-2014年8月
#绘制申购总量及赎回总量的时序图观察数据特点
fig = plt.figure(figsize=(20,6))
plt.plot(total_balance["date"],total_balance["total_purchase_amt"],label="purchase")
plt.plot(total_balance["date"],total_balance["total_redeem_amt"],label="redeem")
plt.title("The time series of total amount of purchase and redeem")
plt.legend(loc="best")
plt.xlabel("Time")
plt.ylabel("label")
plt.show()
- 2014年4月份以后
观察数据可以看出,大体上以星期为周期变化 - 2014年4月以后各个月的变化
观察可得:- 每月的月初购买大于赎回,每月月末赎回大于购买
- 每月有4个波峰4个波谷
- 申购与赎回看起来有关联
4.分析一周内申购与赎回的总量差异
4.1分布情况
- 绘制密度分布图
#绘制2014年4月份以后一周内每天数据于整体数据的分布图
fig = plt.figure(figsize=(10,10))
scatter_para = {
"marker":".","s":3,"alpha":0.3}
line_kws = {
"color":"k"}
plt.subplot(2,2,1)
plt.title("The distribution of total purchase")
sns.violinplot(x="weekday",y="total_purchase_amt",data=total_balance_later_month4,scatter_kws=scatter_para,line_kws=line_kws)
plt.subplot(2,2,2)
plt.title("The distribution of total purchase")
sns.distplot(total_balance_later_month4["total_purchase_amt"].dropna())
plt.subplot(2,2,3)
plt.title("The distribution of total redeem")
sns.violinplot(x="weekday",y="total_redeem_amt",data=total_balance_later_month4,scatter_kws=scatter_para,line_kws=line_kws)
plt.subplot(2,2,4)
plt.title("The distribution of total redeem")
sns.distplot(total_balance_later_month4["total_redeem_amt"].dropna())
2. 求中位数后绘制柱状图
#求中位数后绘制柱状图
#对数据按照星期聚合取均值
week_data = total_balance_later_month4[["weekday","total_purchase_amt","total_redeem_amt"]].groupby("weekday",as_index=False).median()
plt.figure(figsize&#