思路
- 处理缺失值:
- 填充策略:可以用均值、中位数等统计量填充数值型缺失值,对于非数值型缺失值可以用众数填充。
- 删除策略:直接删除包含缺失值的行。
- 检测并删除重复行:通过比较每一行的数据来识别并删除完全相同的行。
代码实现
class DataCleaner
def initialize(data)
@data = data
end
# 处理缺失值 - 删除策略
def clean_missing_values_delete
@data.reject { |row| row.any?(&:nil?) }
end
# 处理缺失值 - 填充策略(这里以数值型用均值填充为例)
def clean_missing_values_fill
numeric_columns = @data.first.each_with_index.select { |value, _| value.is_a?(Numeric) }.map(&:last)
means = numeric_columns.map do |col|
values = @data.map { |row| row[col] }.compact
values.empty?? 0 : values.sum / values.size.to_f
end
@data.map do |row|
row.each_with_index do |value, index|
if value.nil? && numeric_columns.include?(index)
row[index] = means[numeric_columns.index(index)]
end
end
row
end
end
# 检测并删除重复行
def clean_duplicates
@data.uniq
end
end
# 示例数据
data = [
[1, 2, nil],
[4, 5, 6],
[1, 2, nil],
[7, 8, 9]
]
cleaner = DataCleaner.new(data)
puts "删除缺失值后: #{cleaner.clean_missing_values_delete}"
puts "填充缺失值后: #{cleaner.clean_missing_values_fill}"
puts "删除重复行后: #{cleaner.clean_duplicates}"