# -*- coding: utf-8 -*-
# Project: local-spark
# Author: chaoxu create this file
# Time: 2018/6/6
# Company : Maxent
# Email: chao.xu@maxent-inc.com
"""
本文在原始数据基础上，从设备角度出发产生新的隐藏特征
"""

GROUPBY_MAXENT_ID = {

    # 设备指纹与用户的关联度
    {'groupby': ['maxent_id', 'month'], 'select': 'user_id', 'agg': 'count'},
    {'groupby': ['maxent_id', 'month'], 'select': 'user_id', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'month'], 'select': 'user_id', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'month'], 'select': 'user_id', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'month'], 'select': 'user_id', 'agg': 'var'},
    {'groupby': ['maxent_id', 'imei', 'month'], 'select': 'user_id', 'agg': 'count'},
    {'groupby': ['maxent_id', 'imei', 'month'], 'select': 'user_id', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'imei', 'month'], 'select': 'user_id', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'imei', 'month'], 'select': 'user_id', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'imei', 'month'], 'select': 'user_id', 'agg': 'var'},
    {'groupby': ['maxent_id', 'idfa', 'month'], 'select': 'user_id', 'agg': 'count'},
    {'groupby': ['maxent_id', 'idfa', 'month'], 'select': 'user_id', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'idfa', 'month'], 'select': 'user_id', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'idfa', 'month'], 'select': 'user_id', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'idfa', 'month'], 'select': 'user_id', 'agg': 'var'},

    {'groupby': ['maxent_id', 'day'], 'select': 'user_id', 'agg': 'count'},
    {'groupby': ['maxent_id', 'day'], 'select': 'user_id', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'day'], 'select': 'user_id', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'day'], 'select': 'user_id', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'day'], 'select': 'user_id', 'agg': 'var'},
    {'groupby': ['maxent_id', 'imei', 'day'], 'select': 'user_id', 'agg': 'count'},
    {'groupby': ['maxent_id', 'imei', 'day'], 'select': 'user_id', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'imei', 'day'], 'select': 'user_id', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'imei', 'day'], 'select': 'user_id', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'imei', 'day'], 'select': 'user_id', 'agg': 'var'},
    {'groupby': ['maxent_id', 'idfa', 'day'], 'select': 'user_id', 'agg': 'count'},
    {'groupby': ['maxent_id', 'idfa', 'day'], 'select': 'user_id', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'idfa', 'day'], 'select': 'user_id', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'idfa', 'day'], 'select': 'user_id', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'idfa', 'day'], 'select': 'user_id', 'agg': 'var'},

    {'groupby': ['maxent_id', 'hour'], 'select': 'user_id', 'agg': 'count'},
    {'groupby': ['maxent_id', 'hour'], 'select': 'user_id', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'hour'], 'select': 'user_id', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'hour'], 'select': 'user_id', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'hour'], 'select': 'user_id', 'agg': 'var'},
    {'groupby': ['maxent_id', 'imei', 'hour'], 'select': 'user_id', 'agg': 'count'},
    {'groupby': ['maxent_id', 'imei', 'hour'], 'select': 'user_id', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'imei', 'hour'], 'select': 'user_id', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'imei', 'hour'], 'select': 'user_id', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'imei', 'hour'], 'select': 'user_id', 'agg': 'var'},
    {'groupby': ['maxent_id', 'idfa', 'hour'], 'select': 'user_id', 'agg': 'count'},
    {'groupby': ['maxent_id', 'idfa', 'hour'], 'select': 'user_id', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'idfa', 'hour'], 'select': 'user_id', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'idfa', 'hour'], 'select': 'user_id', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'idfa', 'hour'], 'select': 'user_id', 'agg': 'var'},

    {'groupby': ['maxent_id'], 'select': 'user_id', 'roll': '1h', 'agg': 'count'},
    {'groupby': ['maxent_id'], 'select': 'user_id', 'roll': '1h', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id'], 'select': 'user_id', 'roll': '1d', 'agg': 'count'},
    {'groupby': ['maxent_id'], 'select': 'user_id', 'roll': '1d', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id'], 'select': 'user_id', 'roll': '1m', 'agg': 'count'},
    {'groupby': ['maxent_id'], 'select': 'user_id', 'roll': '1m', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id', 'imei'], 'select': 'user_id', 'roll': '1h', 'agg': 'count'},
    {'groupby': ['maxent_id', 'imei'], 'select': 'user_id', 'roll': '1h', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id', 'imei'], 'select': 'user_id', 'roll': '1d', 'agg': 'count'},
    {'groupby': ['maxent_id', 'imei'], 'select': 'user_id', 'roll': '1d', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id', 'imei'], 'select': 'user_id', 'roll': '1m', 'agg': 'count'},
    {'groupby': ['maxent_id', 'imei'], 'select': 'user_id', 'roll': '1m', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id', 'idfa'], 'select': 'user_id', 'roll': '1h', 'agg': 'count'},
    {'groupby': ['maxent_id', 'idfa'], 'select': 'user_id', 'roll': '1h', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id', 'idfa'], 'select': 'user_id', 'roll': '1d', 'agg': 'count'},
    {'groupby': ['maxent_id', 'idfa'], 'select': 'user_id', 'roll': '1d', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id', 'idfa'], 'select': 'user_id', 'roll': '1m', 'agg': 'count'},
    {'groupby': ['maxent_id', 'idfa'], 'select': 'user_id', 'roll': '1m', 'agg': lambda x: x.unique().shape[0]},

    # 设备指纹与ipSeg24的关联度
    {'groupby': ['maxent_id', 'month'], 'select': 'ipSeg24', 'agg': 'count'},
    {'groupby': ['maxent_id', 'month'], 'select': 'ipSeg24', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'month'], 'select': 'ipSeg24', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'month'], 'select': 'ipSeg24', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'month'], 'select': 'ipSeg24', 'agg': 'var'},
    {'groupby': ['maxent_id', 'imei', 'month'], 'select': 'ipSeg24', 'agg': 'count'},
    {'groupby': ['maxent_id', 'imei', 'month'], 'select': 'ipSeg24', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'imei', 'month'], 'select': 'ipSeg24', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'imei', 'month'], 'select': 'ipSeg24', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'imei', 'month'], 'select': 'ipSeg24', 'agg': 'var'},
    {'groupby': ['maxent_id', 'idfa', 'month'], 'select': 'ipSeg24', 'agg': 'count'},
    {'groupby': ['maxent_id', 'idfa', 'month'], 'select': 'ipSeg24', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'idfa', 'month'], 'select': 'ipSeg24', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'idfa', 'month'], 'select': 'ipSeg24', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'idfa', 'month'], 'select': 'ipSeg24', 'agg': 'var'},

    {'groupby': ['maxent_id', 'day'], 'select': 'ipSeg24', 'agg': 'count'},
    {'groupby': ['maxent_id', 'day'], 'select': 'ipSeg24', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'day'], 'select': 'ipSeg24', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'day'], 'select': 'ipSeg24', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'day'], 'select': 'ipSeg24', 'agg': 'var'},
    {'groupby': ['maxent_id', 'imei', 'day'], 'select': 'ipSeg24', 'agg': 'count'},
    {'groupby': ['maxent_id', 'imei', 'day'], 'select': 'ipSeg24', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'imei', 'day'], 'select': 'ipSeg24', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'imei', 'day'], 'select': 'ipSeg24', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'imei', 'day'], 'select': 'ipSeg24', 'agg': 'var'},
    {'groupby': ['maxent_id', 'idfa', 'day'], 'select': 'ipSeg24', 'agg': 'count'},
    {'groupby': ['maxent_id', 'idfa', 'day'], 'select': 'ipSeg24', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'idfa', 'day'], 'select': 'ipSeg24', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'idfa', 'day'], 'select': 'ipSeg24', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'idfa', 'day'], 'select': 'ipSeg24', 'agg': 'var'},

    {'groupby': ['maxent_id', 'hour'], 'select': 'ipSeg24', 'agg': 'count'},
    {'groupby': ['maxent_id', 'hour'], 'select': 'ipSeg24', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'hour'], 'select': 'ipSeg24', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'hour'], 'select': 'ipSeg24', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'hour'], 'select': 'ipSeg24', 'agg': 'var'},
    {'groupby': ['maxent_id', 'imei', 'hour'], 'select': 'ipSeg24', 'agg': 'count'},
    {'groupby': ['maxent_id', 'imei', 'hour'], 'select': 'ipSeg24', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'imei', 'hour'], 'select': 'ipSeg24', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'imei', 'hour'], 'select': 'ipSeg24', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'imei', 'hour'], 'select': 'ipSeg24', 'agg': 'var'},
    {'groupby': ['maxent_id', 'idfa', 'hour'], 'select': 'ipSeg24', 'agg': 'count'},
    {'groupby': ['maxent_id', 'idfa', 'hour'], 'select': 'ipSeg24', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'idfa', 'hour'], 'select': 'ipSeg24', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'idfa', 'hour'], 'select': 'ipSeg24', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'idfa', 'hour'], 'select': 'ipSeg24', 'agg': 'var'},

    {'groupby': ['maxent_id'], 'select': 'ipSeg24', 'roll': '1h', 'agg': 'count'},
    {'groupby': ['maxent_id'], 'select': 'ipSeg24', 'roll': '1h', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id'], 'select': 'ipSeg24', 'roll': '1d', 'agg': 'count'},
    {'groupby': ['maxent_id'], 'select': 'ipSeg24', 'roll': '1d', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id'], 'select': 'ipSeg24', 'roll': '1m', 'agg': 'count'},
    {'groupby': ['maxent_id'], 'select': 'ipSeg24', 'roll': '1m', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id', 'imei'], 'select': 'ipSeg24', 'roll': '1h', 'agg': 'count'},
    {'groupby': ['maxent_id', 'imei'], 'select': 'ipSeg24', 'roll': '1h', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id', 'imei'], 'select': 'ipSeg24', 'roll': '1d', 'agg': 'count'},
    {'groupby': ['maxent_id', 'imei'], 'select': 'ipSeg24', 'roll': '1d', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id', 'imei'], 'select': 'ipSeg24', 'roll': '1m', 'agg': 'count'},
    {'groupby': ['maxent_id', 'imei'], 'select': 'ipSeg24', 'roll': '1m', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id', 'idfa'], 'select': 'ipSeg24', 'roll': '1h', 'agg': 'count'},
    {'groupby': ['maxent_id', 'idfa'], 'select': 'ipSeg24', 'roll': '1h', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id', 'idfa'], 'select': 'ipSeg24', 'roll': '1d', 'agg': 'count'},
    {'groupby': ['maxent_id', 'idfa'], 'select': 'ipSeg24', 'roll': '1d', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id', 'idfa'], 'select': 'ipSeg24', 'roll': '1m', 'agg': 'count'},
    {'groupby': ['maxent_id', 'idfa'], 'select': 'ipSeg24', 'roll': '1m', 'agg': lambda x: x.unique().shape[0]},

    # 设备指纹与城市关联度
    {'groupby': ['maxent_id', 'month'], 'select': 'city', 'agg': 'count'},
    {'groupby': ['maxent_id', 'month'], 'select': 'city', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'month'], 'select': 'city', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'month'], 'select': 'city', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'month'], 'select': 'city', 'agg': 'var'},
    {'groupby': ['maxent_id', 'imei', 'month'], 'select': 'city', 'agg': 'count'},
    {'groupby': ['maxent_id', 'imei', 'month'], 'select': 'city', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'imei', 'month'], 'select': 'city', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'imei', 'month'], 'select': 'city', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'imei', 'month'], 'select': 'city', 'agg': 'var'},
    {'groupby': ['maxent_id', 'idfa', 'month'], 'select': 'city', 'agg': 'count'},
    {'groupby': ['maxent_id', 'idfa', 'month'], 'select': 'city', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'idfa', 'month'], 'select': 'city', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'idfa', 'month'], 'select': 'city', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'idfa', 'month'], 'select': 'city', 'agg': 'var'},

    {'groupby': ['maxent_id', 'day'], 'select': 'city', 'agg': 'count'},
    {'groupby': ['maxent_id', 'day'], 'select': 'city', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'day'], 'select': 'city', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'day'], 'select': 'city', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'day'], 'select': 'city', 'agg': 'var'},
    {'groupby': ['maxent_id', 'imei', 'day'], 'select': 'city', 'agg': 'count'},
    {'groupby': ['maxent_id', 'imei', 'day'], 'select': 'city', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'imei', 'day'], 'select': 'city', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'imei', 'day'], 'select': 'city', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'imei', 'day'], 'select': 'city', 'agg': 'var'},
    {'groupby': ['maxent_id', 'idfa', 'day'], 'select': 'city', 'agg': 'count'},
    {'groupby': ['maxent_id', 'idfa', 'day'], 'select': 'city', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'idfa', 'day'], 'select': 'city', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'idfa', 'day'], 'select': 'city', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'idfa', 'day'], 'select': 'city', 'agg': 'var'},

    {'groupby': ['maxent_id', 'hour'], 'select': 'city', 'agg': 'count'},
    {'groupby': ['maxent_id', 'hour'], 'select': 'city', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'hour'], 'select': 'city', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'hour'], 'select': 'city', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'hour'], 'select': 'city', 'agg': 'var'},
    {'groupby': ['maxent_id', 'imei', 'hour'], 'select': 'city', 'agg': 'count'},
    {'groupby': ['maxent_id', 'imei', 'hour'], 'select': 'city', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'imei', 'hour'], 'select': 'city', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'imei', 'hour'], 'select': 'city', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'imei', 'hour'], 'select': 'city', 'agg': 'var'},
    {'groupby': ['maxent_id', 'idfa', 'hour'], 'select': 'city', 'agg': 'count'},
    {'groupby': ['maxent_id', 'idfa', 'hour'], 'select': 'city', 'agg': 'nunique'},
    {'groupby': ['maxent_id', 'idfa', 'hour'], 'select': 'city', 'agg': lambda x: x.shape[0] / x.unique().shape[0]},
    {'groupby': ['maxent_id', 'idfa', 'hour'], 'select': 'city', 'agg': 'mean'},
    {'groupby': ['maxent_id', 'idfa', 'hour'], 'select': 'city', 'agg': 'var'},

    {'groupby': ['maxent_id'], 'select': 'city', 'roll': '1h', 'agg': 'count'},
    {'groupby': ['maxent_id'], 'select': 'city', 'roll': '1h', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id'], 'select': 'city', 'roll': '1d', 'agg': 'count'},
    {'groupby': ['maxent_id'], 'select': 'city', 'roll': '1d', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id'], 'select': 'city', 'roll': '1m', 'agg': 'count'},
    {'groupby': ['maxent_id'], 'select': 'city', 'roll': '1m', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id', 'imei'], 'select': 'city', 'roll': '1h', 'agg': 'count'},
    {'groupby': ['maxent_id', 'imei'], 'select': 'city', 'roll': '1h', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id', 'imei'], 'select': 'city', 'roll': '1d', 'agg': 'count'},
    {'groupby': ['maxent_id', 'imei'], 'select': 'city', 'roll': '1d', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id', 'imei'], 'select': 'city', 'roll': '1m', 'agg': 'count'},
    {'groupby': ['maxent_id', 'imei'], 'select': 'city', 'roll': '1m', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id', 'idfa'], 'select': 'city', 'roll': '1h', 'agg': 'count'},
    {'groupby': ['maxent_id', 'idfa'], 'select': 'city', 'roll': '1h', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id', 'idfa'], 'select': 'city', 'roll': '1d', 'agg': 'count'},
    {'groupby': ['maxent_id', 'idfa'], 'select': 'city', 'roll': '1d', 'agg': lambda x: x.unique().shape[0]},
    {'groupby': ['maxent_id', 'idfa'], 'select': 'city', 'roll': '1m', 'agg': 'count'},
    {'groupby': ['maxent_id', 'idfa'], 'select': 'city', 'roll': '1m', 'agg': lambda x: x.unique().shape[0]},

}
