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
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
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
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
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
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
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
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