数据预处理(详细步骤以及代码说明)

目录

导入所需库

读取数据

 读取CSV数据:

读取文本数据:

读取EXCEL数据:

查看数据基本信息

查看数据集的类型

数据类型的转换

DataFrame类型:

不是DataFrame数据类型:

不同类型之间的转换:

数据清洗

填充缺失值:

处理离群值:

处理异常值:

处理重复值:

数据的归一化

整合数据

数据规约

总结

补充(连续与不连续数据填充)

连续型数据:

非连续型数据:


       数据预处理是数据分析和机器学习过程中至关重要的一步。它涉及到对原始数据进行清洗、转换和规范化,以便于后续的建模和分析。以下是数据预处理的一些常见步骤以及对应的代码解释:

导入所需库

import pandas as pd    
import numpy as np  

这里我们导入了两个常用的库,Pandas 和 NumPy。Pandas 用于数据处理和分析,而 NumPy 用于数值计算。

读取数据

读取CSV数据:

# 读取 CSV 文件  
data = pd.read_csv('data.csv')

读取文本数据:

# 读取文本数据  
text_data = '''  
column1,column2,column3  
value1,value2,value3  
value4,value5,value6  
'''

# 将文本数据转换为 DataFrame  
data = pd.read_csv(text_data, sep=',', engine='python')

读取EXCEL数据:

# 读取 Excel 文件  
data = pd.read_excel('data.xlsx', engine='openpyxl')

查看数据基本信息

##Pycharm中
print(data.head())  

##Jupyter中
data.head()

##也可以使用
data.info()

data.head() 函数会返回 DataFrame 的前 5 行数据。print() 函数用于将结果输出到控制台。

查看数据集的类型

type(data)

数据类型的转换

data['column'] = data['column'].astype('int') 

使用 astype() 函数将 DataFrame 中的 column 列转换为整数类型。

DataFrame类型:

# 创建一个示例 DataFrame    
data = pd.DataFrame({    
    'column1': [1, 2, 3, 4],    
    'column2': ['A', 'B', 'C', 'D'],    
    'column3': [1.1, 2.2, 3.3, 4.4]    
})

# 查看 DataFrame 的数据类型    
print(data.dtype)  

不是DataFrame数据类型:

       要将不是 DataFrame 的数据转换为 DataFrame,可以使用 Pandas 中的 pd.DataFrame() 函数。

# 创建一个列表      
data_list = [      
    [1, 'A', 1.1],      
    [2, 'B', 2.2],      
    [3, 'C', 3.3],      
    [4, 'D', 4.4]      
]

# 将列表转换为 DataFrame      
data_df = pd.DataFrame(data_list) 

不同类型之间的转换:

       如果要将不是 DataFrame 的数据(如字典、列表等)转换为 DataFrame,可以先将其转换为列表,然后再使用 pd.DataFrame() 函数进行转换

# 创建一个字典      
data_dict = {      
    'col1': [1, 2, 3, 4],      
    'col2': ['A', 'B', 'C', 'D'],      
    'col3': [1.1, 2.2, 3.3, 4.4]      
}

# 将字典转换为列表      
data_list = data_dict.values()

# 将列表转换为 DataFrame      
data_df = pd.DataFrame(data_list)   

数据清洗

填充缺失值:

data.fillna(value=0, inplace=True)

fillna() 函数用于填充 DataFrame 中的缺失值。这里我们使用 value 参数设置填充值为 0,并使用 inplace=True 参数直接修改原始 DataFrame。

处理离群值:

data = data[(data['column1'] >= min_value) & (data['column1'] <= max_value)]    

使用布尔索引来筛选 DataFrame 中的行,只保留满足条件的数据。& 符号表示逻辑与操作,用于确保 column1 的值在指定范围内。

# 处理离群值
def std_data(train, i):  # data为数据集,i为列名,便于循环
    #计算标准差
    std = train[i].std()
    col = []
    for item in train[i]:
        if item < 3 * std or item > - 3 * std:
            col.append(item)
            if item > 3 * std:
                item = 3 * std
                col.append(item)
            else:
                item = -3 * std
                col.append(item)
    new_col = pd.DataFrame(col)
    train[i] = new_col
    return train

for i in list(train.columns):
    df= std_data(train, i)  # 离群值处理
sns.boxplot(data=df,orient='h',palette='Set2')
plt.show()

处理异常值:

data['column'] = data['column'].apply(lambda x: x if x < 100 else np.nan)  

使用 apply() 函数对名为 column 的列进行操作。apply() 函数会作用于每一行数据。我们使用 lambda 函数来检查每一行的值是否小于 100,如果是,则保留原值;否则,替换为 NaN(Not a Number,即缺失值)。

处理重复值:

data = data.drop_duplicates()  

drop_duplicates() 函数会删除 DataFrame 中的重复行。

数据的归一化

data['column'] = (data['column'] - min_value) / (max_value - min_value)    

使用 lambda 函数对 DataFrame 中的 column 列进行归一化处理。

from sklearn.preprocessing import MinMaxScaler
def normalize_columns(df2, columns):
    # 进行规范化
    scaler = MinMaxScaler()
    for col in columns:
        if df2[col].dtype != 'object':
            # 从 DataFrame 中提取出该列,并将其转换为二维数组
            col_data = df2[[col]].values
            # 调用 MinMaxScaler 对象的 fit_transform() 方法进行规范化
            normalized_data = scaler.fit_transform(col_data)
            # 将规范化后的数组转换回一维,并将其添加回 DataFrame 中
            df2[col] = normalized_data.flatten()
    return df2
 
# 2.2 数值型数据标准化
df3 = normalize_columns(df2, numerical_columns)
df3.head()

整合数据

data_merged = pd.concat([data1, data2])

使用 Pandas 的 concat() 函数将两个 DataFrame(data1data2)整合为一个 DataFrame。

数据规约

data_summary = data.describe()

这里我们使用 Pandas 的 describe() 函数来计算 DataFrame 的摘要统计信息,如均值、标准差、最小值、最大值等。

总结

       通过以上步骤,我们可以完成数据预处理过程。需要注意的是,预处理过程可能会根据实际需求进行调整。在实际操作中,我们需要灵活运用各种方法来处理数据。

补充(连续与不连续数据填充)

      对于连续型数据和非连续型数据的填充,有一些常用的方法可以参考:

连续型数据:

      连续型数据是指在某个区间内可以取任意值的变量,例如身高、体重、年龄等。对于连续型数据的填充,可以考虑以下方法:

  • 使用均值填充:填充缺失值时,可以使用该列的均值作为填充值。例如,对于身高这一列,如果某个人的身高缺失,可以使用所有人的平均身高来填充。
  • 使用中位数填充:中位数是数值排序后位于中间位置的数,对于连续型数据,可以使用中位数来填充缺失值。例如,对于考试成绩这一列,如果某个人的成绩缺失,可以使用所有人的成绩中位数来填充。
  • 使用众数填充:众数是数据中出现次数最多的数,对于一些具有规律的连续型数据,可以使用众数来填充缺失值。例如,对于某个地区的气温数据,如果某天的气温缺失,可以使用该地区历史同期的平均气温作为填充值。

非连续型数据:

      非连续型数据是指只能取有限个值的变量,例如性别、民族、血型等。对于非连续型数据的填充,可以考虑以下方法:

  • 使用最常出现的类别填充:对于非连续型数据,可以使用出现次数最多的类别作为填充值。例如,对于某个地区的民族数据,如果某个人的民族缺失,可以使用该地区最常出现的民族作为填充值。
  • 使用众数填充:对于一些具有规律的非连续型数据,可以使用众数来填充缺失值。例如,对于某个班级的学生性别数据,如果某个人的性别缺失,可以使用该班级男生和女生的比例来填充。
  • 使用常数填充:对于一些特定的非连续型数据,可以使用常数来填充缺失值。例如,对于血型这一列,如果某个人的血型缺失,可以使用“未知”或“无法确定”等常数来填充。

      需要注意的是,对于非连续型数据的填充,要确保填充后的数据依然具有合理的逻辑性和一致性。

  • 8
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数据预处理是大数据健康行业的服务推荐系统的重要步骤之一,其目的是将原始数据转化为可用于机器学习和深度学习模型的格式。以下是一个简单的数据预处理代码实例,供您参考: ```python # 导入相关库 import pandas as pd import numpy as np from sklearn.preprocessing import LabelEncoder, MinMaxScaler from sklearn.model_selection import train_test_split # 读取数据 data = pd.read_csv('data.csv') # 处理缺失值 data = data.fillna(data.mean()) # 处理离散型特征 le = LabelEncoder() data['gender'] = le.fit_transform(data['gender']) # 处理连续型特征 scaler = MinMaxScaler() data[['age', 'height', 'weight']] = scaler.fit_transform(data[['age', 'height', 'weight']]) # 分离特征和标签 X = data.drop(['label'], axis=1) y = data['label'] # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` 上述代码实现了以下数据预处理步骤: 1. 读取数据:使用pandas库的read_csv函数读取数据。 2. 处理缺失值:使用pandas库的fillna函数将缺失值替换为特征均值。 3. 处理离散型特征:使用sklearn库的LabelEncoder函数将离散型特征转化为数值特征。 4. 处理连续型特征:使用sklearn库的MinMaxScaler函数将连续型特征进行归一化处理。 5. 分离特征和标签:使用pandas库的drop函数将标签列从数据中删除,并将其存储在y变量中。 6. 划分训练集和测试集:使用sklearn库的train_test_split函数将数据集划分为训练集和测试集。 需要注意的是,数据预处理的具体步骤和代码实现方式会因不同的数据类型和处理需求而有所不同。上述代码只是一个简单的示例,具体实现方式需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值