机器学习-数据整理or数据清洗

本文深入探讨了数据清洗的重要性和常见步骤,包括使用Pandas进行数据加载、基本信息查看、数据可视化、数据类型转换、缺失值处理、字符串清理及时间戳转换等关键操作。通过具体实例,如房价数据的分析,展示了如何有效清洗和预处理数据,为机器学习模型训练做好准备。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

尝试了几次比赛后,感觉到所有的源数据,都是不规则,多样,杂乱的。符合客观实际情况。

在这种情况下,我们往往需要对数据进行清洗。

甚至已经成为了一种套路,不管三七二十一,先查看数据源特点,整理数据,总是没错的。

1:引入pandas包

import pandas as pd

train_data = pd.read_csv(r'./source data/train.csv')

2:最简单的,直接看数据信息。用info。

print(all_data.info()) 

3:导入画图,直接形象的对比和看。

import matplotlib.pyplot as plt
import seaborn as sns

例子:

#研究分析房价数据分布
print(train_data['SalePrice'].describe())
sns.set_style("whitegrid")
sns.distplot(train_data['SalePrice'])


#居住面积和房价
fig, ax =plt.subplots()
ax.scatter( x  = train_data['GrLivArea'], y = train_data['SalePrice'])
plt.ylabel('SalePrice')
plt.xlabel('GrLivArea')
plt.show()

4:常用的功能

4.1 drop的删除功能:

def drop_multiple_col(col_names_list, df): 
    '''
    AIM    -> Drop multiple columns based on their column names 

    INPUT  -> List of column names, df

    OUTPUT -> updated df with dropped columns 
    ------
    '''
    df.drop(col_names_list, axis=1, inplace=True)
    return df

清除某一列。

4.2 Dtypes转换功能

def change_dtypes(col_int, col_float, df): 
    '''
    AIM    -> Changing dtypes to save memory

    INPUT  -> List of column names (int, float), df

    OUTPUT -> updated df with smaller memory  
    ------
    '''
    df[col_int] = df[col_int].astype('int32')
    df[col_float] = df[col_float].astype('float32')

4.3 标签转换(可以考虑one-hot编码)

def convert_cat2num(df):
    # Convert categorical variable to numerical variable
    num_encode = {'col_1' : {'YES':1, 'NO':0},
                  'col_2'  : {'WON':1, 'LOSE':0, 'DRAW':0}}  
    df.replace(num_encode, inplace=True)  

4.4 检查缺失数据

def check_missing_data(df):
    # check for any missing data in the df (display in descending order)
    return df.isnull().sum().sort_values(ascending=False)

4.5 删除列中奇怪的字符串

def remove_col_str(df):
    # remove a portion of string in a dataframe column - col_1
    df['col_1'].replace('\n', '', regex=True, inplace=True)

    # remove all the characters after &# (including &#) for column - col_1
    df['col_1'].replace(' &#.*', '', regex=True, inplace=True)

尤其是CSV和其他格式互转。多一个逗号,多一个空格,多一个'\n’之类的。

4.6 删除空格

def remove_col_white_space(df):
    # remove white space at the beginning of string 
    df[col] = df[col].str.lstrip()

4.7 拼接字符串(有条件限制。)

def concat_col_str_condition(df):
    # concat 2 columns with strings if the last 3 letters of the first column are 'pil'
    mask = df['col_1'].str.endswith('pil', na=False)
    col_new = df[mask]['col_1'] + df[mask]['col_2']
    col_new.replace('pil', ' ', regex=True, inplace=True)  # replace the 'pil' with emtpy space

比如:当第一列以某些特定的字母结尾时,将第一列和第二列数据拼接在一起。

4.8 时间戳转换。(string ---->DateTime)

def convert_str_datetime(df): 
    '''
    AIM    -> Convert datetime(String) to datetime(format we want)

    INPUT  -> df

    OUTPUT -> updated df with new datetime format 
    ------
    '''
    df.insert(loc=2, column='timestamp', value=pd.to_datetime(df.transdate, format='%Y-%m-%d %H:%M:%S.%f'))

 

未完待续

欢迎关注,有什么问题,大家共同讨论,:

参考文献

【1】 https://towardsdatascience.com/the-simple-yet-practical-data-cleaning-codes-ad27c4ce0a38

【2】 各种比赛的攻略文档。

### 数据预处理和数据清洗概述 数据预处理和数据清洗数据分析流程中的重要组成部分,旨在提升后续分析的质量。具体而言: - **数据清洗**涉及识别并修正错误、填补缺失值以及去除冗余记录等操作,从而确保数据集的一致性和准确性[^1]。 - **数据预处理**涵盖了更广泛的任务,除了上述提到的数据清洗外,还包括但不限于特征工程(Feature Engineering)、标准化/归一化(Normalization / Standardization),以及其他形式的数据转换工作,使数据更适合特定类型的算法应用[^3]。 ### 方法论与最佳实践 对于高效完成这两项任务,建议遵循如下原则: #### 数据清洗方法 - 使用正则表达式匹配来校验字符串格式; - 应用统计学原理检测异常点,并采取适当措施如插补法填充缺失值; - 实施去重策略移除重复条目以减少干扰因素影响最终结论的有效性; 这些技术能够有效改善原始资料质量,使之更加贴近实际业务需求场景下的理想状态[^2]。 #### 数据预处理技巧 - 进行探索性数据分析(EDA),理解变量分布特性及其相互关系; - 对类别型属性执行编码转换(one-hot encoding 或 label encoding)便于机器学习模型解读; - 考虑到不同尺度下数值差异可能带来的偏差问题,则需引入缩放机制(z-score scaling or min-max scaling)。 通过以上步骤可以显著增强输入样本间的可比度及模式辨识能力,进而促进预测性能优化。 ### 工具推荐 为了简化繁杂的手动调整过程,在实践中通常会借助一些自动化程度较高的软件包辅助作业: - Python 生态圈内的 Pandas 和 NumPy 提供了强大的向量化运算支持,非常适合用于初步筛选过滤脏乱差的数据片段; - Scikit-Learn 是一个专注于提供简单有效的数据挖掘工具库,内置丰富的函数接口覆盖从基础至高级的各种预处理选项; - OpenRefine 则是一款专攻复杂结构化信息整理工作的桌面应用程序,特别适用于大规模多源异构环境下的集成治理挑战。 ```python import pandas as pd from sklearn.preprocessing import MinMaxScaler, OneHotEncoder # 示例:加载CSV文件并查看前几行 df = pd.read_csv('data.csv') print(df.head()) # 处理缺失值的一种方式——均值填充 df.fillna(df.mean(), inplace=True) # 特征缩放实例 scaler = MinMaxScaler() scaled_features = scaler.fit_transform(df[['feature_1', 'feature_2']]) # 类别型变量one-hot编码示范 encoder = OneHotEncoder(sparse=False) encoded_categories = encoder.fit_transform(df[['category_column']]) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值