Example #1
0
def fe2():
    def recruiting_numbers(x):
        if '若干' == x:
            return np.nan
        if '人' in x:
            return x[:-1]
        return x
    prefix = '招聘数据'
    df, train_num = utils.get_df(prefix, ['企业名称', '招聘人数', '招聘日期'])
    df[prefix + '_招聘人数'] = df[prefix + '_招聘人数'].fillna('若干').astype('str').apply(
        recruiting_numbers).astype('float32')
    df[prefix + '_招聘日期'] = df[prefix + '_招聘日期'].apply(utils.get_date)
    group = df.groupby('企业名称', as_index=False)
    df = pd.merge(df, group['企业名称'].agg({prefix + '_count': 'count'}), on='企业名称', how='left')
    df = pd.merge(df, utils.get_agg(group, prefix + '_招聘人数', ['mean', 'sum']),
                  on='企业名称', how='left')
    df = pd.merge(df, utils.get_agg(group, prefix + '_招聘日期', ['max', 'min', 'mean', 'diff_mean']),
                  on='企业名称', how='left')
    df[prefix + '_freq'] = df[prefix + '_count'] / (
            df[prefix + '_招聘日期_max'] - df[prefix + '_招聘日期_min'] + 1)
    for f in ['招聘人数', '招聘日期']:
        del df[prefix + '_' + f]
    train_df, test_df = df[:train_num], df[train_num:]
    train_df.drop_duplicates('企业名称', inplace=True)
    test_df.drop_duplicates('企业名称', inplace=True)
    return prefix, train_df, test_df
Example #2
0
def fe4():
    prefix = '双公示-法人行政许可信息'
    df, train_num = utils.get_df(prefix, ['企业名称', '许可决定日期', '许可截止期'])
    df[prefix + '_许可决定日期'] = df[prefix + '_许可决定日期'].astype('str').apply(
        lambda x: utils.get_date(x) if x != 'nan' else np.nan)
    df[prefix + '_许可截止期'] = df[prefix + '_许可截止期'].astype('str').apply(
        lambda x: utils.get_date(x) if x != 'nan' else np.nan)
    df[prefix +
       '_许可决定日期_许可截止期_diff'] = df[prefix + '_许可决定日期'] - df[prefix + '_许可截止期']
    group = df.groupby('企业名称', as_index=False)
    df = pd.merge(df,
                  utils.get_agg(group, prefix + '_许可决定日期',
                                ['max', 'min', 'mean', 'diff_mean']),
                  on='企业名称',
                  how='left')
    df = pd.merge(df,
                  utils.get_agg(group, prefix + '_许可截止期',
                                ['max', 'min', 'mean']),
                  on='企业名称',
                  how='left')
    df = pd.merge(df,
                  utils.get_agg(group, prefix + '_许可决定日期_许可截止期_diff',
                                ['max', 'min', 'mean']),
                  on='企业名称',
                  how='left')
    for f in ['许可决定日期', '许可截止期', '许可决定日期_许可截止期_diff']:
        del df[prefix + '_' + f]
    train_df, test_df = df[:train_num], df[train_num:]
    train_df.drop_duplicates('企业名称', inplace=True)
    test_df.drop_duplicates('企业名称', inplace=True)
    return prefix, train_df, test_df
Example #3
0
def fe7():
    prefix = '分支机构信息'
    df, train_num = utils.get_df(prefix, ['企业名称', '分支机构状态', '分支成立时间', '分支死亡时间'])
    df[prefix + '_分支机构状态'] = df[prefix + '_分支机构状态'].apply(lambda x: 1 if 1 == x else 0)
    df = pd.get_dummies(df, prefix=['dummy_' + prefix + '_分支机构状态'], columns=[prefix + '_分支机构状态'])
    df[prefix + '_分支成立时间'] = df[prefix + '_分支成立时间'].astype('str').apply(
        lambda x: utils.get_date(x) if x != 'nan' and x != '1899/12/30' else np.nan)
    df[prefix + '_分支死亡时间'] = df[prefix + '_分支死亡时间'].astype('str').apply(
        lambda x: utils.get_date(x) if x != 'nan' else np.nan)
    df[prefix + '_分支成立时间_分支死亡时间_diff']\
        = df[prefix + '_分支成立时间'] - df[prefix + '_分支死亡时间']
    raw_features = df.columns.values[1:]
    group = df.groupby('企业名称', as_index=False)
    for f in raw_features:
        if 'dummy' in f:
            df = pd.merge(df, utils.get_agg(group, f, ['sum', 'mean']), on='企业名称', how='left')
    df = pd.merge(df, group['企业名称'].agg({prefix + '_count': 'count'}), on='企业名称', how='left')
    df = pd.merge(df, utils.get_agg(group, prefix + '_分支成立时间', ['max', 'min', 'mean', 'diff_mean']),
                  on='企业名称', how='left')
    df = pd.merge(df, utils.get_agg(group, prefix + '_分支死亡时间', ['max', 'min', 'mean', 'diff_mean']),
                  on='企业名称', how='left')
    df = pd.merge(df, utils.get_agg(group, prefix + '_分支成立时间_分支死亡时间_diff', ['max', 'min', 'mean']),
                  on='企业名称', how='left')
    for f in raw_features:
        del df[f]
    train_df, test_df = df[:train_num], df[train_num:]
    train_df.drop_duplicates('企业名称', inplace=True)
    test_df.drop_duplicates('企业名称', inplace=True)
    return prefix, train_df, test_df
Example #4
0
def fe6():
    prefix = '许可资质年检信息'
    df, train_num = utils.get_df(prefix, ['企业名称', '年检结果', '年检事项名称', '年检日期'])
    df[prefix + '_年检结果'] = df[prefix + '_年检结果'].astype('str').apply(
        lambda x: '合格' if '合格' in x else '通过')
    df[prefix + '_年检事项名称'] = df[prefix + '_年检事项名称'].astype('str').apply(
        lambda x: x if '单位年检' == x or '对道路' in x else '其他')
    df = pd.get_dummies(df, prefix=['dummy_' + prefix + '_年检事项名称', 'dummy_' + prefix + '_年检结果'],
                        columns=[prefix + '_年检事项名称', prefix + '_年检结果'])
    del df['dummy_' + prefix + '_年检事项名称_其他']
    df[prefix + '_年检日期'] = df[prefix + '_年检日期'].astype('str').apply(
        lambda x: utils.get_date(x) if x != 'nan' else np.nan)
    raw_features = df.columns.values[1:]
    group = df.groupby('企业名称', as_index=False)
    for f in raw_features:
        if 'dummy' in f:
            df = pd.merge(df, utils.get_agg(group, f, ['sum', 'mean']), on='企业名称', how='left')
    df = pd.merge(df, group['企业名称'].agg({prefix + '_count': 'count'}), on='企业名称', how='left')
    df = pd.merge(df, utils.get_agg(group, prefix + '_年检日期', ['max', 'min', 'mean', 'diff_mean']),
                  on='企业名称', how='left')
    for f in raw_features:
        del df[f]
    train_df, test_df = df[:train_num], df[train_num:]
    train_df.drop_duplicates('企业名称', inplace=True)
    test_df.drop_duplicates('企业名称', inplace=True)
    return prefix, train_df, test_df
Example #5
0
def fe9():
    def date_proc(x1, x2):
        if 'nan' == x1 and 'nan' == x2:
            return np.nan
        if x1 != 'nan':
            return utils.get_date(x1)
        return utils.get_date(x2)

    def cert_name(x):
        if '高新技术' in x:
            return '高新技术'
        if '建筑施工' in x:
            return '建筑施工'
        return '其他'

    prefix = '资质登记(变更)信息'
    df, train_num = utils.get_df(prefix,
                                 ['企业名称', '资质名称', '资质生效期', '资质截止期', '认定日期'])
    df[prefix + '_资质名称'] = df[prefix + '_资质名称'].astype('str').apply(cert_name)
    df = pd.get_dummies(df,
                        prefix=['dummy_' + prefix + '_资质名称'],
                        columns=[prefix + '_资质名称'])
    df[prefix + '_资质生效期'] = df[[
        prefix + '_资质生效期', prefix + '_认定日期'
    ]].astype('str').apply(
        lambda x: date_proc(x[prefix + '_资质生效期'], x[prefix + '_认定日期']), axis=1)
    df[prefix +
       '_资质截止期'] = df[prefix +
                      '_资质截止期'].astype('str').apply(lambda x: utils.get_date(
                          x) if x != 'nan' and x[:4] != '1950' else np.nan)
    df[prefix +
       '_资质生效期_资质截止期_diff'] = df[prefix + '_资质生效期'] - df[prefix + '_资质截止期']
    raw_features = df.columns.values[1:]
    group = df.groupby('企业名称', as_index=False)
    for f in raw_features:
        if 'dummy' in f:
            df = pd.merge(df,
                          utils.get_agg(group, f, ['sum', 'mean']),
                          on='企业名称',
                          how='left')
    df = pd.merge(df,
                  utils.get_agg(group, prefix + '_资质生效期',
                                ['max', 'min', 'mean']),
                  on='企业名称',
                  how='left')
    df = pd.merge(df,
                  utils.get_agg(group, prefix + '_资质截止期', ['min']),
                  on='企业名称',
                  how='left')
    df = pd.merge(df,
                  utils.get_agg(group, prefix + '_资质生效期_资质截止期_diff', ['min']),
                  on='企业名称',
                  how='left')
    for f in raw_features:
        del df[f]
    train_df, test_df = df[:train_num], df[train_num:]
    train_df.drop_duplicates('企业名称', inplace=True)
    test_df.drop_duplicates('企业名称', inplace=True)
    return prefix, train_df, test_df
Example #6
0
def fe1():
    prefix = '企业基本信息&高管信息&投资信息'
    df, train_num = utils.get_df(prefix, ['企业名称', '注册资金', '注册资本(金)币种名称', '企业(机构)类型名称',
                                          '行业门类代码', '成立日期', '核准日期', '住所所在地省份', '姓名',
                                          '法定代表人标志', '首席代表标志', '职务', '投资人', '出资比例'])
    df[prefix + '_出资比例'] = df[prefix + '_出资比例'].apply(lambda x: x if x <= 1 else x / 100)
    df[prefix + '_注册资金'] = df[[prefix + '_注册资金', prefix + '_注册资本(金)币种名称']].apply(
        lambda x: x[prefix + '_注册资金'] if x[prefix + '_注册资本(金)币种名称'] not in utils.exch_rate.keys()
        else x[prefix + '_注册资金'] * utils.exch_rate[x[prefix + '_注册资本(金)币种名称']], axis=1).fillna(0)
    df[prefix + '_注册资金_binning'] = df[prefix + '_注册资金'].apply(
        lambda x: utils.binning(x, [300, 500, 1000, 3000, 6000]))
    df[prefix + '_成立日期'] = df[prefix + '_成立日期'].astype('str').apply(
        lambda x: utils.get_date(x[:10]) if x != 'nan' else np.nan)
    df[prefix + '_核准日期'] = df[prefix + '_核准日期'].apply(lambda x: utils.get_date(x[:10]))
    df[prefix + '_成立日期_核准日期_diff'] = df[prefix + '_成立日期'] - df[prefix + '_核准日期']
    df[prefix + '_法定代表人职务'] = df[[prefix + '_法定代表人标志', prefix + '_职务']].apply(
        lambda x: x[prefix + '_职务'] if x[prefix + '_法定代表人标志'] == '是' else np.nan, axis=1)
    df[prefix + '_首席代表职务'] = df[[prefix + '_首席代表标志', prefix + '_职务']].apply(
        lambda x: x[prefix + '_职务'] if x[prefix + '_首席代表标志'] == '是' else np.nan, axis=1)
    df = pd.merge(df, df.dropna(subset=[prefix + '_姓名']).groupby(
        prefix + '_姓名', as_index=False)['企业名称'].agg({prefix + '_姓名_企业名称_nunique': 'nunique'}),
                  on=prefix + '_姓名', how='left')
    df = pd.merge(df, df.dropna(subset=[prefix + '_投资人']).groupby(
        prefix + '_投资人', as_index=False)['企业名称'].agg({prefix + '_投资人_企业名称_nunique': 'nunique'}),
                  on=prefix + '_投资人', how='left')
    group = df.groupby('企业名称', as_index=False)
    df = pd.merge(df, utils.get_agg(group, prefix + '_姓名', ['nunique']), on='企业名称', how='left')
    df = pd.merge(df, utils.get_agg(group, prefix + '_投资人', ['nunique']), on='企业名称', how='left')
    df = pd.merge(df, utils.get_agg(group, prefix + '_姓名_企业名称_nunique', ['max', 'mean', 'sum']),
                  on='企业名称', how='left')
    df = pd.merge(df, utils.get_agg(group, prefix + '_投资人_企业名称_nunique', ['max', 'mean', 'sum']),
                  on='企业名称', how='left')
    df = pd.merge(df, utils.get_agg(group, prefix + '_出资比例', ['max', 'min', 'mean']), on='企业名称', how='left')
    f_pairs = [
        [prefix + '_住所所在地省份', prefix + '_企业(机构)类型名称'],
        [prefix + '_住所所在地省份', prefix + '_行业门类代码'],
        [prefix + '_注册资金_binning', prefix + '_企业(机构)类型名称'],
        [prefix + '_注册资金_binning', prefix + '_行业门类代码'],
        [prefix + '_企业(机构)类型名称', prefix + '_行业门类代码']
    ]
    df = utils.get_ratio(df, f_pairs)
    for f in ['注册资本(金)币种名称', '姓名', '法定代表人标志', '首席代表标志', '职务', '投资人', '出资比例',
              '姓名_企业名称_nunique', '投资人_企业名称_nunique']:
        del df[prefix + '_' + f]
    train_df, test_df = df[:train_num], df[train_num:]
    train_df.drop_duplicates('企业名称', inplace=True)
    train_df.dropna(subset=[prefix + '_成立日期'], inplace=True)
    test_df.drop_duplicates('企业名称', inplace=True)
    for f in ['法定代表人职务', '首席代表职务', '企业(机构)类型名称', '行业门类代码', '住所所在地省份']:
        label_dict = dict(zip(train_df[prefix + '_' + f].unique(), range(train_df[prefix + '_' + f].nunique())))
        train_df[prefix + '_' + f] = train_df[prefix + '_' + f].map(label_dict).fillna(-1).astype('int16')
        test_df[prefix + '_' + f] = test_df[prefix + '_' + f].map(label_dict).fillna(-1).astype('int16')
    return prefix, train_df, test_df
Example #7
0
def fe12():
    prefix = '法人行政许可注(撤、吊)销信息'
    df, train_num = utils.get_df(prefix, ['企业名称', '注(撤、吊)销批准日期'])
    df[prefix + '_注(撤、吊)销批准日期'] = df[prefix + '_注(撤、吊)销批准日期'].apply(utils.get_date)
    group = df.groupby('企业名称', as_index=False)
    df = pd.merge(df, group['企业名称'].agg({prefix + '_count': 'count'}), on='企业名称', how='left')
    df = pd.merge(df, utils.get_agg(group, prefix + '_注(撤、吊)销批准日期', ['max']), on='企业名称', how='left')
    for f in ['注(撤、吊)销批准日期']:
        del df[prefix + '_' + f]
    train_df, test_df = df[:train_num], df[train_num:]
    train_df.drop_duplicates('企业名称', inplace=True)
    test_df.drop_duplicates('企业名称', inplace=True)
    return prefix, train_df, test_df
Example #8
0
def fe11():
    prefix = '双打办打击侵权假冒处罚案件信息'
    df, train_num = utils.get_df(prefix, ['企业名称', '提供日期'])
    df[prefix + '_提供日期'] = df[prefix + '_提供日期'].astype('str').apply(
        lambda x: utils.get_date(x) if x != 'nan' else np.nan)
    group = df.groupby('企业名称', as_index=False)
    df = pd.merge(df, group['企业名称'].agg({prefix + '_count': 'count'}), on='企业名称', how='left')
    df = pd.merge(df, utils.get_agg(group, prefix + '_提供日期', ['max']), on='企业名称', how='left')
    for f in ['提供日期']:
        del df[prefix + '_' + f]
    train_df, test_df = df[:train_num], df[train_num:]
    train_df.drop_duplicates('企业名称', inplace=True)
    test_df.drop_duplicates('企业名称', inplace=True)
    return prefix, train_df, test_df