使用合适的库(如 pandas)加载数据。常见格式包括 CSV、Excel、JSON、SQL 数据库等。
示例:
import pandas as pd
data = pd.read_csv('data.csv')
数据集中的缺失值可能会影响分析的结果,因此需要检查缺失值并决定如何处理。
检查每列的缺失值数量:
data.isnull().sum()
处理缺失值的方式:
删除缺失值:适用于缺失值较少或删除对分析没有影响的情况下。
data = data.dropna() # 删除所有含缺失值的行
填充缺失值:适用于缺失值较多的情况下。可以填充均值、中位数、众数,或者进行插值。
data['column_name'].fillna(data['column_name'].mean(), inplace=True) # 用均值填充
检查数据集是否包含重复行,通常重复数据会影响分析结果。
查找重复数据:
data.duplicated().sum() # 查找重复的行
data = data.drop_duplicates()
异常值是指那些远离数据集中其他值的观测值。它们可能是数据录入错误,也可能是真实的离群点,需要根据上下文来判断如何处理。
使用可视化工具(如箱线图、散点图)识别异常值:
import matplotlib.pyplot as plt
data['column_name'].plot(kind='box')
plt.show()
确保每个列的数据类型正确(如整数、浮点数、类别型数据等)。不正确的数据类型可能会导致错误的分析结果。
转换数据类型:
data['column_name'] = data['column_name'].astype('category') # 转为类别型
data['column_name'] = pd.to_datetime(data['column_name']) # 转为日期型
对于分类数据,需要将其转换为数值型,以便模型能够理解。常见的方法有:
标签编码 (Label Encoding):将类别转换为整数。
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
data['category_column'] = le.fit_transform(data['category_column'])
独热编码 (One-Hot Encoding):将类别转换为虚拟变量(0和1的形式)。
data = pd.get_dummies(data, columns=['category_column'])
对于数值型特征,标准化和归一化是重要的预处理步骤,尤其是在使用基于距离的模型(如KNN、SVM)时。
标准化:使数据均值为0,标准差为1。
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
data[['column1', 'column2']] = scaler.fit_transform(data[['column1', 'column2']])
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
data[['column1', 'column2']] = scaler.fit_transform(data[['column1', 'column2']])
如果数据集中包含日期和时间列,可能需要提取年、月、日等信息,以便进行时间序列分析或其他分析。
例如,提取日期特征:
data['year'] = data['date_column'].dt.year
data['month'] = data['date_column'].dt.month
创建新的特征,或对现有特征进行变换,以帮助模型更好地理解数据。
例如,创建“房龄”特征(从“建造年份”和“当前年份”中计算):
data['house_age'] = 2023 - data['year_built']
删除那些对分析没有贡献的列(如ID列、非相关特征)。
删除不需要的列:
data = data.drop(['unnecessary_column1', 'unnecessary_column2'], axis=1)
对数据进行一些简单的统计分析,检查各列的分布,确保数据正常。
查看描述性统计信息:
data.describe()
在进行建模时,通常需要将数据集划分为训练集和测试集。
划分训练集和测试集:
from sklearn.model_selection import train_test_split
X = data.drop('target', axis=1)
y = data['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)