用python建模 1、数据说明: (1)数据路径:/home/datasets/df_file (2)本测试所涉及数据集为df_basic.csv(客户基本信息表), df_trade.csv(过去一段时间内客户的交易流水); (3)读取df_basic.csv,并命名为df_basic; (4)读取df_trade.csv,并命名为df_trade; 2.、特征构造 交易金额为df_trade表中zmt (1)在df_basic中,根据df_trade的数据信息,衍生特征“每个客户的交易笔数”并添加至df_basic中, 命名为'trade_cnt'; (2)在df_basic中,根据df_trade的数据信息,衍生特征“每个客户的交易总金额”并添加至df_basic中, 命名为'trade_amt'; 注意 (1)对于df_basic中,有的客户可能存在无交易行为。此情况下,trade_cnt/trade_amt用NA值表示即可; (2)可接受将id设为DataFrame的index的操作; 3、缺失值填充 (1)统计各列的缺失值比例; (2)对trade_cnt、trade_amt的缺失值填充为0; (3)对字符型特征的缺失值进行众数填充; (4)对数值型特征的缺失值进行中位数填充
时间: 2024-04-12 21:31:27 浏览: 15
可以使用Python来进行数据建模和特征构造。根据您的要求,下面是用Python代码实现的步骤:
```python
import pandas as pd
# 1. 读取数据
df_basic = pd.read_csv('/home/datasets/df_file/df_basic.csv')
df_trade = pd.read_csv('/home/datasets/df_file/df_trade.csv')
# 2. 特征构造
# 每个客户的交易笔数
trade_cnt = df_trade.groupby('客户ID').size().reset_index(name='trade_cnt')
df_basic = pd.merge(df_basic, trade_cnt, how='left', on='客户ID')
# 每个客户的交易总金额
trade_amt = df_trade.groupby('客户ID')['交易金额'].sum().reset_index(name='trade_amt')
df_basic = pd.merge(df_basic, trade_amt, how='left', on='客户ID')
# 注意事项:
# - 对于无交易行为的客户,trade_cnt和trade_amt用NA值表示
# 3. 缺失值填充
# 统计各列的缺失值比例
missing_percentage = df_basic.isnull().sum() / len(df_basic) * 100
# 填充trade_cnt和trade_amt的缺失值为0
df_basic['trade_cnt'] = df_basic['trade_cnt'].fillna(0)
df_basic['trade_amt'] = df_basic['trade_amt'].fillna(0)
# 对字符型特征的缺失值进行众数填充
string_columns = df_basic.select_dtypes(include='object').columns
df_basic[string_columns] = df_basic[string_columns].fillna(df_basic[string_columns].mode().iloc[0])
# 对数值型特征的缺失值进行中位数填充
numeric_columns = df_basic.select_dtypes(include=['float64', 'int64']).columns
df_basic[numeric_columns] = df_basic[numeric_columns].fillna(df_basic[numeric_columns].median())
```
上述代码将会按照您的要求,读取df_basic.csv和df_trade.csv文件,并进行特征构造和缺失值填充。请确保文件路径正确,并且已经安装了pandas库。