产品表
#!/usr/bin/env python
# coding: utf-8
# In[75]:
import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings('ignore')
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
pd.set_option('max_colwidth', 100)
# ### A产品表1
# In[76]:
g_data = pd.read_csv('g.csv')
g_data.head()
# In[77]:
g_columns = ['prod_code', '计价类型', '周期类型', '模式', '风险等级', '是否滚存', '是否允许变更分红方式', '产品品种', '持有天数', '数据日期']
# In[78]:
g_data.columns = g_columns
# In[79]:
g_data.head()
# In[80]:
g_data.info()
# In[81]:
g_data['prod_code'].apply(lambda x:x[:5]).nunique()
# ### A产品表2
# In[82]:
k_data = pd.read_csv('k.csv')
k_data.head()
# In[83]:
k_columns = ['prod_code', '募集方式', '管理方式', '业务模式', '收益特点', '期限', '投资模式', '预期收益率', '最高收益率', '最低收益率', '展示等级', '数据日期']
# In[84]:
k_data.columns = k_columns
# In[85]:
k_data.head()
# In[86]:
k_data.info()
# In[87]:
k_data['prod_code'].apply(lambda x: x[:5]).nunique()
# In[88]:
a_prod = pd.merge(g_data, k_data, on=['prod_code', '数据日期'], how='outer')
# In[89]:
a_prod.head()
# In[90]:
a_prod['prod_class'] = 'A'
# In[91]:
a_prod.info()
# ### B产品表1
# In[92]:
h_data = pd.read_csv('h.csv')
h_data.head()
# In[93]:
h_columns = ['prod_code', '计价类型', '周期类型', '模式', '风险等级', '是否允许变更分红方式', '产品品种', '模式2', '数据日期']
# In[94]:
h_data.columns = h_columns
# In[95]:
h_data.head()
# In[96]:
h_data.info()
# In[97]:
h_data['prod_code'].apply(lambda x:x[:3]).unique()
# ### B产品表2
# In[98]:
l_data = pd.read_csv('l.csv')
l_data.head()
# In[99]:
l_columns = ['prod_code', '募集方式', '管理方式', '业务模式', '收益特点', '期限', '投资模式', '数据日期']
# In[100]:
l_data.columns = l_columns
# In[101]:
l_data.head()
# In[102]:
l_data.info()
# In[103]:
l_data['prod_code'].apply(lambda x:x[:3]).unique()
# In[104]:
b_prod = pd.merge(h_data, l_data, on=['prod_code', '数据日期'], how='outer')
# In[105]:
b_prod['prod_class'] = 'B'
# In[106]:
b_prod.info()
# In[107]:
b_prod.nunique()
# ### C产品表1
# In[108]:
i_data = pd.read_csv('i.csv')
i_data.head()
# In[109]:
i_columns = ['prod_code', '计价类型', '周期类型', '模式', '风险等级', '是否允许变更分红方式', '份额冻结比率', '产品品种', '持有天数', '数据日期']
# In[110]:
i_data.columns = i_columns
# In[111]:
i_data.head()
# In[112]:
i_data.info()
# In[113]:
i_data['prod_code'].apply(lambda x:x[:4]).unique()
# ### C产品表2
# In[114]:
m_data = pd.read_csv('m.csv')
m_data.head()
# In[115]:
m_columns = ['prod_code', '募集方式', '管理方式', '业务模式', '收益特点', '期限', '投资模式', '预期收益率', '展示等级', '数据日期']
# In[116]:
m_data.columns = m_columns
# In[117]:
m_data.head()
# In[118]:
m_data.info()
# In[119]:
m_data['prod_code'].apply(lambda x:x[:4]).unique()
# ### C 产品总表
# In[120]:
c_prod = pd.merge(i_data, m_data, on=['prod_code', '数据日期'], how='outer')
# In[121]:
c_prod['prod_class'] = 'C'
# In[122]:
c_prod.head()
# In[123]:
c_prod.info()
# ### D产品表
# In[124]:
j_data = pd.read_csv('j.csv')
j_data.head()
# In[125]:
j_columns = ['prod_code', '计价类型', '周期类型', '模式', '风险等级', '是否允许变更分红方式', '收益计息基数', '最低收益率', '最高收益率',
'产品面值', '发行价格', '预期收益率', '持有天数', '数据日期']
# In[126]:
j_data.columns = j_columns
# In[127]:
j_data.head()
# In[128]:
d_prod = j_data.copy()
# In[129]:
d_prod['prod_class'] = 'D'
# In[130]:
d_prod.info()
# In[131]:
d_prod.nunique()
# In[132]:
a_prod.columns
# In[133]:
b_prod.columns
# In[134]:
c_prod.columns
# In[135]:
d_prod.columns
# ### A产品流水表
# In[144]:
n_data = pd.read_csv('n.csv')
n_data.head()
# In[145]:
n_columns = ['流水号', '业务代码', '渠道标识', 'core_cust_id', 'prod_code', '净值', '申请金额', '资金状态', '交易状态', '总金额', '交易日期']
# In[146]:
n_data.columns = n_columns
# In[147]:
n_data.head()
# In[148]:
n_data['prod_class'] = 'A'
# In[224]:
n_data.info()
# In[225]:
n_data['交易日期'].min(), n_data['交易日期'].max()
# In[226]:
n_data.describe()
# ### B产品流水表
# In[149]:
o_data = pd.read_csv('o.csv')
o_data.head()
# In[150]:
o_columns = ['流水号', '业务代码', '渠道标识', 'core_cust_id', 'prod_code', '净值', '申请金额', '交易状态', '资金状态', '总金额', '超额管理费', '交易日期']
# In[151]:
o_data.columns = o_columns
# In[152]:
o_data['prod_class'] = 'B'
# In[153]:
o_data.head()
# In[221]:
o_data.info()
# In[227]:
o_data.nunique()
# In[222]:
o_data['交易日期'].min(), o_data['交易日期'].max()
# In[223]:
#净值里面有异常值
o_data.describe()
# ### C产品流水表
# In[154]:
q_data = pd.read_csv('q.csv')
q_data.head()
# In[155]:
q_columns = ['流水号', '业务代码', '渠道标识', 'core_cust_id', 'prod_code', '净值', '申请金额', '资金状态', '交易状态', '交易日期']
# In[156]:
q_data.columns = q_columns
# In[157]:
q_data['prod_class'] = 'C'
# In[158]:
q_data.head()
# In[219]:
q_data.info()
# In[220]:
q_data['交易日期'].min(), q_data['交易日期'].max()
# In[ ]:
# In[ ]:
# ### D产品流水表
# In[159]:
p_data = pd.read_csv('p.csv')
p_data.head()
# In[160]:
p_columns = ['流水号', '业务代码', '渠道标识', 'core_cust_id', 'prod_code', '净值', '申请金额', '折扣率', '交易状态', '资金状态', '费率', '交易日期']
# In[161]:
p_data.columns = p_columns
# In[162]:
p_data['prod_class'] = 'D'
# In[163]:
p_data.head()
# In[216]:
p_data.info()
# In[218]:
p_data['交易日期'].min(), p_data['交易日期'].max()
# In[ ]:
# In[ ]:
# ### A产品基本信息+流水表
# In[180]:
A_df = pd.merge(a_prod, n_data, on=['prod_code', 'prod_class'], how='outer')
# In[181]:
A_df.head()
# In[182]:
A_df.info()
# In[183]:
A_df.nunique()
# ### B产品基本信息+流水表
# In[184]:
B_df = pd.merge(b_prod, o_data, on=['prod_code', 'prod_class'], how='outer')
# In[185]:
B_df.head()
# In[186]:
B_df.info()
# In[187]:
B_df.nunique()
# In[ ]:
# In[ ]:
# ### C产品基本信息+流水表
# In[188]:
C_df = pd.merge(c_prod, q_data, on=['prod_code', 'prod_class'], how='outer')
# In[189]:
C_df.head()
# In[190]:
C_df.info()
# In[191]:
C_df.nunique()
# In[ ]:
# ### D产品基本信息+流水表
# In[192]:
D_df = pd.merge(d_prod, p_data, on=['prod_code', 'prod_class'], how='outer')
# In[193]:
D_df.head()
# In[194]:
D_df.info()
# In[195]:
D_df.nunique()
# In[198]:
prod_df = pd.concat([A_df, B_df, C_df, D_df], ignore_index=True)
# In[204]:
prod_df.head(20)
# In[200]:
prod_df.info()
# In[201]:
prod_df.nunique()
# In[ ]:
#产品品种、份额冻结比率,只有一个值,可以删除
#A/B/C/D客户的重合度
a_num = A_df['core_cust_id'].value_counts().index.tolist()
# In[232]:
b_num = B_df['core_cust_id'].value_counts().index.tolist()
c_num = C_df['core_cust_id'].value_counts().index.tolist()
d_num = D_df['core_cust_id'].value_counts().index.tolist()
# In[235]:
len(set(a_num) & set(b_num)), len(set(a_num) & set(c_num)), len(set(a_num) & set(d_num)), len(set(b_num) & set(c_num)), len(set(d_num) & set(b_num)), len(set(c_num) & set(d_num))
# In[237]:
len(set(a_num) & set(b_num) & set(c_num) & set(d_num))
# In[238]:
len(set(a_num) | set(b_num) | set(c_num) | set(d_num))
# ### 客户信息表
# In[241]:
d_data = pd.read_csv('d.csv')
d_data.head()
# In[242]:
d_columns = ['core_cust_id', '性别', '客户等级', '年龄']
# In[243]:
d_data.columns = d_columns
# In[244]:
d_data.head()
# In[245]:
d_data.info()
# In[246]:
d_data.nunique()
# ### 客户风险表
# In[247]:
e_data = pd.read_csv('e.csv')
e_data.head()
# In[248]:
e_columns = ['core_cust_id', '客户风险等级', '评估日期']
# In[249]:
e_data.columns = e_columns
# In[250]:
e_data.head()
# In[251]:
e_data.info()
# In[281]:
e_data.nunique()
# In[253]:
e_data['客户风险等级'].value_counts()
# ### F资产信息表
# In[267]:
#去除千分位的逗号:df = df.applymap(lambda x: x.replace(',', ''));或者用下面方法
f_data = pd.read_csv('f.csv', thousands=',')
f_data.head()
# In[268]:
f_columns = ['core_cust_id', '客户编号创建日期', '定期季日均', '大额存单季日均', 'A理财产品季日均', '代销资管季日均', '代销基金季日均', '定期时点余额',
'大额存单时点余额', 'A理财产品时点余额', '代销资管时点余额', '代销基金时点余额', '定期月日均', '大额存单月日均', 'A理财产品月日均', '代销资管月日均',
'代销基金月日均', '定期年日均', '大额存单年日均', 'A理财产品年日均', '代销资管年日均', '代销基金年日均', '数据日期']
# In[269]:
f_data.columns = f_columns
# In[270]:
f_data.head()
# In[271]:
f_data.info()
# In[272]:
f_data.nunique()
# In[279]:
#A产品的core_cust_id有多少
len(set(a_num))
# In[280]:
f_data[~f_data['A理财产品年日均'].isnull()].nunique()
# In[282]:
#corr_f = f_data.corr().abs()
#high_f = np.where(corr_f > 0.999)
#high_f;
# In[284]:
#f_data.corr();
# In[286]:
r_data = pd.read_csv('r.csv')
r_data.head()
# In[287]:
r_columns = ['id编码', 'core_cust_id', '点击事件类型', 'prod_code', '点击时间']
# In[288]:
r_data.columns = r_columns
# In[289]:
r_data.head()
# In[290]:
r_data.info()
# In[291]:
r_data.nunique()
# In[293]:
len(a_num), len(b_num), len(c_num), len(d_num)