datawhale数据挖掘

直接上项目:

import pandas as  pd
import numpy as np
import warnings 
import datetime
import seaborn as sns
import matplotlib.pyplot as plt
import datetime 
from scipy import stats

import warnings
warnings.filterwarnings('ignore')
# 设置数据集路径

dataset_path = '/kaggle/input/prdata/Purchase Redemption Data/'
# 读取数据

data_balance = pd.read_csv(dataset_path+'user_balance_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'])['total_purchase_amt','total_redeem_amt'].sum().reset_index()
# 生成测试集区段数据

start = datetime.datetime(2014,9,1)
testdata = []
while start != datetime.datetime(2014,10,1):
    temp = [start, np.nan, np.nan]
    testdata.append(temp)
    start += datetime.timedelta(days = 1)
testdata = pd.DataFrame(testdata)
testdata.columns = total_balance.columns

# 拼接数据集

total_balance = pd.concat([total_balance, testdata], axis = 0)

# 为数据集添加时间戳

total_balance['day'] = total_balance['date'].dt.day
total_balance['month'] = total_balance['date'].dt.month
total_balance['year'] = total_balance['date'].dt.year
total_balance['week'] = total_balance['date'].dt.week
total_balance['weekday'] = total_balance['date'].dt.weekday

import matplotlib.pylab as plt
# 画出每日总购买与赎回量的时间序列图

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.legend(loc='best')
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()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JXIUQSN4-1597938713726)(C:%5CUsers%5C29146%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200820233633327.png)]

# 画出4月份以后的时间序列图

total_balance_1 = total_balance[total_balance['date'] >= pd.to_datetime('2014-4-1')]
fig = plt.figure(figsize=(20,6))
plt.plot(total_balance_1['date'], total_balance_1['total_purchase_amt'])
plt.plot(total_balance_1['date'], total_balance_1['total_redeem_amt'])
plt.legend()
plt.title("The lineplot of total amount of Purchase and Redeem from April.14 to Sep.14")
plt.xlabel("Time")
plt.ylabel("Amount")
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QNpz2Zmr-1597938713729)(C:%5CUsers%5C29146%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200820233832868.png)]

# 分别画出每个月中每天购买赎回量的时间序列图

fig = plt.figure(figsize=(15,15))

plt.subplot(4,1,1)
plt.title("The time series of total amount of Purchase and Redeem for August, July, June, May respectively")

total_balance_2 = total_balance[total_balance['date'] >= pd.to_datetime('2014-8-1')]
plt.plot(total_balance_2['date'], total_balance_2['total_purchase_amt'])
plt.plot(total_balance_2['date'], total_balance_2['total_redeem_amt'])
plt.legend()


total_balance_3 = total_balance[(total_balance['date'] >= pd.to_datetime('2014-7-1')) & (total_balance['date'] < pd.to_datetime('2014-8-1'))]
plt.subplot(4,1,2)
plt.plot(total_balance_3['date'], total_balance_3['total_purchase_amt'])
plt.plot(total_balance_3['date'], total_balance_3['total_redeem_amt'])
plt.legend()


total_balance_4 = total_balance[(total_balance['date'] >= pd.to_datetime('2014-6-1')) & (total_balance['date'] < pd.to_datetime('2014-7-1'))]
plt.subplot(4,1,3)
plt.plot(total_balance_4['date'], total_balance_4['total_purchase_amt'])
plt.plot(total_balance_4['date'], total_balance_4['total_redeem_amt'])
plt.legend()


total_balance_5 = total_balance[(total_balance['date'] >= pd.to_datetime('2014-5-1')) & (total_balance['date'] < pd.to_datetime('2014-6-1'))]
plt.subplot(4,1,4)
plt.plot(total_balance_5['date'], total_balance_5['total_purchase_amt'])
plt.plot(total_balance_5['date'], total_balance_5['total_redeem_amt'])
plt.legend()

plt.xlabel("Time")
plt.ylabel("Amount")
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kQ6c4F7g-1597938713732)(C:%5CUsers%5C29146%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200820234026779.png)]

# 分别画出13年8月与9月每日购买赎回量的时序图

fig = plt.figure(figsize=(15,9))

total_balance_last8 = total_balance[(total_balance['date'] >= pd.to_datetime('2013-8-1')) & (total_balance['date'] < pd.to_datetime('2013-9-1'))]
plt.subplot(2,1,1)
plt.plot(total_balance_last8['date'], total_balance_last8['total_purchase_amt'])
plt.plot(total_balance_last8['date'], total_balance_last8['total_redeem_amt'])
plt.legend()

total_balance_last9 = total_balance[(total_balance['date'] >= pd.to_datetime('2013-9-1')) & (total_balance['date'] < pd.to_datetime('2013-10-1'))]
plt.subplot(2,1,2)
plt.plot(total_balance_last9['date'], total_balance_last9['total_purchase_amt'])
plt.plot(total_balance_last9['date'], total_balance_last9['total_redeem_amt'])
plt.legend()

plt.xlabel("Time")
plt.ylabel("Amount")
plt.show()
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-naw8sxVN-1597938713735)(C:%5CUsers%5C29146%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200820234249449.png)]

# 画出每个翌日的数据分布于整体数据的分布图

a = 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 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())

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eHkWwoZa-1597938713737)(C:%5CUsers%5C29146%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200820234405742.png)]

# 按翌日对数据聚合后取均值

week_sta = total_balance_1[['total_purchase_amt', 'total_redeem_amt', 'weekday']].groupby('weekday', as_index=False).mean()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PDnwa884-1597938713739)(C:%5CUsers%5C29146%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200820234502509.png)]

ps.写写我自己遇到的错误吧。严重至极:

源代码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PTPmcD8P-1597938713740)(C:%5CUsers%5C29146%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200820234719934.png)]

这里的datetime.data得换成pd.to_datetime。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值