MST
星途 面试题库

面试题:Ruby在数据科学中处理数据清洗的常见方法

在数据科学项目里,数据清洗是重要环节。假设你有一个包含缺失值、重复值以及异常值的数据集,用Ruby实现一个简单的数据清洗模块,要求能处理缺失值(可以选择填充或删除策略)、检测并删除重复行,简要阐述思路并给出代码实现。
11.2万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试

思路

  1. 处理缺失值
    • 填充策略:可以用均值、中位数等统计量填充数值型缺失值,对于非数值型缺失值可以用众数填充。
    • 删除策略:直接删除包含缺失值的行。
  2. 检测并删除重复行:通过比较每一行的数据来识别并删除完全相同的行。

代码实现

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}"