text: # 这是分析竞拍分红 和 合同交易的脚本
  
  import geshou.data.userdata as gmdata
  import pandas as pd
  import json
  import demjson
  
  excel_reader=pd.ExcelFile('E:\\歌手\\竞拍_合同\\竞拍_合同_0926_1011.xlsx')  # 指定文件
  sheet_names = excel_reader.sheet_names  # 读取文件的所有表单名，得到列表
  # print(sheet_names)
  
  # 读取表单的内容，i是表单名的索引，等价于pd.read_excel('文件.xlsx', sheet_name=sheet_names[i])
  jysj_data = excel_reader.parse(sheet_name='交易合同上架状态') # ['uid','jiaoyi_shangjia']
  jytimes_data = excel_reader.parse(sheet_name='交易次数')   # ['cdate','uid','jiaoyi_num']
  pmfh_data = excel_reader.parse(sheet_name='分红领奖')   # ['cdate','uid','jingpai_fh','laiyuan']
  pmcj_data = excel_reader.parse(sheet_name='竞拍出价')   # ['cdate','uid','how','prize']
  
  # 统计交易合同,平均参与次数，平均参与率
  # 传日活时间,返回 jyht_pivot ，['vip','jiaoyi_num','join_participation']
  # 分两种情况，传how = 'new' 的时候,可以带上注册时间，看一部分用户的情况
  def jyht_pivot(a,b,how='',new_stime='',new_etime = ''):
  
      # 统计每天交易次数的和，因为王能鹏导出的数据源有重复的，必须除以2
      jyht_join_times = jytimes_data.groupby(['cdate','uid'])['jiaoyi_num'].sum()/2
      # 重置索引
      jyht_join_times = jyht_join_times.reset_index()
      # 链接总充值、vip数据
      jyht_join_times = pd.merge(jyht_join_times,gmdata.pay_sum_vip(),how='left',on='uid').fillna(0)
      # 链接用户信息 最后得到['cdate','uid','jiaoyi_num','sum_pay','vip','owner','channel','lv','ctime']
      jyht_join_times = pd.merge(jyht_join_times,gmdata.user_info(),how='left',on='uid').fillna(0)
  
      # 调用login方法,每天登录的人
      login = gmdata.login(a,b)
  
  
      # 如果传了一个 'new',就根据(new_stime,new_etime)，筛选出新用户的的参与
      if how == 'new':
          # 调用时间列表生成方法,生成新用户注册时间
          created_times = gmdata.get_date_list(new_stime,new_etime)
  
          # 筛选新用户的参与情况
          jyht_join_times = jyht_join_times[jyht_join_times['ctime'].isin(created_times)]
  
          # 统计新用户每天登录的vip
          login_vip_count = pd.pivot_table(login[login['ctime'].isin(created_times)], index='vip', columns='cdate', values='uid',aggfunc='count').fillna(0)
      else:
          # 统计全部用户每天登录的vip
          login_vip_count = pd.pivot_table(login, index='vip', columns='cdate', values='uid',aggfunc='count').fillna(0)
  
  
      # 交易合同，平均每天参与次数['vip','jiaoyi_num']
      jyht_join_times_mean = pd.pivot_table(jyht_join_times,index='vip',values='jiaoyi_num',aggfunc='mean').fillna(0)
      # 交易合同，每天参与人数数['vip','cdate']
      jyht_join_users_count = pd.pivot_table(jyht_join_times,index='vip',columns='cdate',values='uid',aggfunc='count').fillna(0)
  
  
      # 交易合同，每天参与率
      jyht_join_percent = (jyht_join_users_count / login_vip_count).T.mean().T.reset_index()
      jyht_join_percent.columns = ['vip','join_participation']
  
      # 最后参与次数与参与率合并，['vip','jiaoyi_num','join_participation']
      jyht_pivot = pd.merge(jyht_join_times_mean,jyht_join_percent,how='left',on='vip')
  
      return jyht_pivot
  
  # 参与过合同交易的，合同当前上架状态
  def jyht_sj():
      data = pd.merge(jysj_data, gmdata.pay_sum_vip(), how='left', on='uid').fillna(0)
      df = pd.pivot_table(data,index='vip',columns='jiaoyi_shangjia',aggfunc='count',values='uid')
      return df
  
  # 拍卖的分析，方法和合同交易类似,也可以指定新用户
  def paimai(a,b,how='',new_stime='',new_etime = ''):
      # 统计每天拍卖的人，在跨服和本服情况下的出价次数
      pm_join_times = pmcj_data.groupby(['cdate','uid','how'])['prize'].count()
      # 重置索引
      pm_join_times = pm_join_times.reset_index()
      # 链接总充值、vip数据
      pm_join_times = pd.merge(pm_join_times,gmdata.pay_sum_vip(),how='left',on='uid').fillna(0)
      # 链接用户信息 最后得到['cdate','uid','prize','sum_pay','vip','owner','channel','lv','ctime']
      pm_join_times = pd.merge(pm_join_times,gmdata.user_info(),how='left',on='uid').fillna(0)
  
      # 调用login方法,每天登录的人
      login = gmdata.login(a,b)
  
  
      # 如果传了一个 'new',就根据(new_stime,new_etime)，筛选出新用户的的参与
      if how == 'new':
          # 调用时间列表生成方法,生成新用户注册时间
          created_times = gmdata.get_date_list(new_stime,new_etime)
  
          # 筛选新用户的参与情况
          pm_join_times = pm_join_times[pm_join_times['ctime'].isin(created_times)]
  
          # 统计新用户每天登录的vip
          login_vip_count = pd.pivot_table(login[login['ctime'].isin(created_times)], index='vip', columns='cdate', values='uid',aggfunc='count').fillna(0)
      else:
          # 统计全部用户每天登录的vip
          login_vip_count = pd.pivot_table(login, index='vip', columns='cdate', values='uid',aggfunc='count').fillna(0)
  
  
      # 拍卖，平均每天参与次数['vip','prize']
      pm_join_times_mean = pd.pivot_table(pm_join_times,index='vip',values='prize',aggfunc='mean').fillna(0)
      # 拍卖，每天参与人数数['vip','cdate']
      pm_join_users_count = pd.pivot_table(pm_join_times,index='vip',columns='cdate',values='uid',aggfunc='count').fillna(0)
  
  
      # 交易合同，每天参与率
      pm_join_percent = (pm_join_users_count / login_vip_count).T.mean().T.reset_index()
      pm_join_percent.columns = ['vip','join_participation']
  
      # 最后参与次数与参与率合并，['vip','jiaoyi_num','join_participation']
      pm_pivot = pd.merge(pm_join_times_mean,pm_join_percent,how='left',on='vip')
  
      return pm_pivot
  
  
  
  # 新增用户的交易合同参与，0930-1003
  新用户合同互换 = jyht_pivot(a='2020-09-30',b='2020-10-11',how='new',new_stime='2020-09-30',new_etime='2020-10-03')
  全部用户合同互换 = jyht_pivot(a='2020-09-26',b='2020-10-11')
  参与拍卖用户当前上架状态 = jyht_sj()
  新用户拍卖 = paimai(a='2020-09-30',b='2020-10-11',how='new',new_stime='2020-09-30',new_etime='2020-10-03')
  全部用户拍卖 = paimai(a='2020-09-26',b='2020-10-11')
  
  
  def to_excel(*args):
      import datetime
  
      xlsx = pd.ExcelWriter("C:\\Users\\mayn\\Desktop\\歌手\\数据分析\\合同交换 & 集团竞拍%s.xlsx"%str(datetime.date.today()))
  
      新用户合同互换.to_excel(xlsx, sheet_name="新用户合同互换",index=False)
      全部用户合同互换.to_excel(xlsx, sheet_name="全部用户合同互换",index=False)
      参与拍卖用户当前上架状态.to_excel(xlsx, sheet_name="参与拍卖用户当前上架状态",index=False)
      新用户拍卖.to_excel(xlsx, sheet_name="新用户拍卖",index=False)
      全部用户拍卖.to_excel(xlsx, sheet_name="全部用户拍卖",index=False)
  
      print("保存完成")
      xlsx.close()
  
  to_excel()
  
  
  