数据聚合、特征工程与不平衡数据集处理
立即解锁
发布时间: 2025-09-04 00:23:27 阅读量: 4 订阅数: 13 AIGC 

### 数据聚合、特征工程与不平衡数据集处理
在数据科学领域,数据聚合、特征工程以及处理不平衡数据集是非常重要的环节。下面将详细介绍相关的操作和概念。
#### 数据聚合与特征工程
数据聚合可以帮助我们通过计算每个感兴趣分组的比率或百分比来创建新特征。以某个销售数据集为例,通过查看前两行,我们发现股票代码交易 84123A 和 71053 分别售出了 6 件商品。但从新创建的 DailyQuantity 列可以看出,股票代码 84123A 更受欢迎,在 2010 - 12 - 01 这一天,商店售出了 454 件该商品,而 71053 仅售出 33 件。QuantityRatio 显示第三笔交易售出了 8 件股票代码为 84406B 的商品,这笔交易占该商品当天销售额的 20%。通过数据聚合,我们为每个记录获取了额外信息,并让数据集中的原始信息更具意义。
##### 练习 12.04:在 AMES 住房数据集上使用数据聚合进行特征工程
本练习将使用数据聚合创建新特征,具体步骤如下:
1. 打开一个新的 Colab 笔记本。
2. 导入 pandas 包:
```python
import pandas as pd
```
3. 将数据集链接分配给变量 file_url:
```python
file_url = 'https://raw.githubusercontent.com/PacktWorkshops/The-Data-Science-Workshop/master/Chapter12/Dataset/ames_iowa_housing.csv'
```
4. 使用 pandas 的 .read_csv() 方法将数据集加载到新的 DataFrame 中:
```python
df = pd.read_csv(file_url)
```
5. 使用 .groupby.agg() 方法进行数据聚合,找出每个 Neighborhood 和 YrSold 的最大 SalePrice,并将结果保存到新的 DataFrame df_agg 中:
```python
df_agg = df.groupby(['Neighborhood', 'YrSold']).agg({'SalePrice': 'max'}).reset_index()
```
6. 将 df_agg 的列重命名为 Neighborhood、YrSold 和 SalePriceMax:
```python
df_agg.columns = ['Neighborhood', 'YrSold', 'SalePriceMax']
```
7. 打印 df_agg 的前五行:
```python
df_agg.head()
```
8. 使用 merge() 方法将原始 DataFrame df 与 df_agg 进行左连接,连接列是 Neighborhood 和 YrSold,并将结果保存到新的 DataFrame df_new 中:
```python
df_new = pd.merge(df, df_agg, how='left', on=['Neighborhood', 'YrSold'])
```
9. 打印 df_new 的前五行:
```python
df_new.head()
```
10. 通过将 SalePrice 除以 SalePriceMax 创建一个名为 SalePriceRatio 的新列:
```python
df_new['SalePriceRatio'] = df_new['SalePrice'] / df_new['SalePriceMax']
```
11. 打印 df_new 的前五行:
```python
df_new.head()
```
12. 使用 .groupby.agg() 方法进行数据聚合,找出每个 Neighborhood 和 YrSold 的最大 LotArea,并将结果保存到新的 DataFrame df_agg2 中:
```python
df_agg2 = df.groupby(['Neighborhood', 'YrSold']).agg({'LotArea': 'max'}).reset_index()
```
13. 将 df_agg2 的列重命名为 Neighborhood、YrSold 和 LotAreaMax,并打印前五行:
```python
df_agg2.columns = ['Neighborhood', 'YrSold', 'LotAreaMax']
df_agg2.head()
```
14. 使用 merge() 方法将原始 DataFrame df 与 df_agg2 进行左连接,连接列是 Neighborhood 和 YrSold,并将结果保存到新的 DataFrame df_final 中。然后通过将 LotArea 除以 LotAreaMax 创建一个名为 LotAreaRatio 的新列:
```python
df_final = pd.merge(df_new, df_agg2, how='left', on=['Neighborhood', 'YrSold'])
df_final['LotAreaRatio'] = df_final['LotArea'] / df_final['LotAreaMax']
```
15. 打印 df_final 的指定列的前五行:
```python
df_final[['Id', 'Neighborhood', 'YrSold', 'SalePrice', 'SalePriceMax', 'SalePriceRatio', 'LotArea', 'LotAreaMax', 'LotAreaRatio']].head()
```
通过以上步骤,我们创建了两个新特征,分别给出了房产的 SalePrice 和 LotArea 与同一年、同一社区中售出的最高值的比率,这样就可以轻松且公平地比较不同房产。例如,从最后一步的输出中可以注意到,第五处房产(Id 为 5,LotArea 为 14260)的面积(LotAreaRatio 为 0.996994)几乎与该地区同年售出的最大房产(LotArea 为 14303)相近,但它的售价(SalePrice 为 250000)明显低于最高售价(SalePrice 为 350000,SalePriceRatio 为 0.714286),这表明房产的其他特征对售价有影响。
##### 活动 12.01:金融数据集的特征工程
假设你在捷克共和国的一家大型银行工作,负责分析现有客户的交易记录。数据团队从数据库中提取了他们认为对你分析数据集有用的所有表,你需要将这些表中的数据合并到一个 DataFrame 中,并创建新特征,以获得一个丰富的数据集,从而对客户的银行交易进行深入分析。你将使用以下四个表:
- account:给定分行的客户银行账户特征
- client:与银行客户相关的个人信息
- disp:将账户与客户关联起来的表
- trans:按账户列出的所有历史交易记录
具体步骤如下:
1. 从该数据集中下载并将不同的表加载到 Python 中。
2. 使用 .shape 和 .head() 方法分析每个表。
0
0
复制全文
相关推荐










