在处理了缺失值和潜在的异常值之后,你的数据可能会更整洁,但通常还没有完全准备好进行分析或用于模型。可以把它想象成准备烹饪的食材:你已经洗好了蔬菜(清洗数据),但现在你可能需要把它们切成特定的大小,或者转换计量单位(转换数据)。数据转换指的是改变数据的格式、结构或值,使其适合数据科学流程中的后续步骤。为什么我们需要转换数据?你可能会想,为什么干净的数据还不够。以下是转换成为必要步骤的几个常见原因:一致性: 从不同来源或不同时间收集的数据可能使用不同的单位(如千克 vs. 磅,华氏度 vs. 摄氏度)或格式(如不同的日期表示,类别中不一致的大小写)。转换可确保所有内容都使用相同的标准。兼容性: 许多数据分析技术和机器学习算法要求数据采用特定格式。例如,大多数算法需要数值输入,因此像“Red”、“Green”、“Blue”这样的类别标签可能需要转换为数字。同样,表示为“5.0”的文本可能需要转换为数字5.0。提高分析/模型表现: 某些算法对数据尺度敏感。如果一个特征的范围是0到1,而另一个特征的范围是0到1,000,000,那么第二个特征可能会不当地主导计算。将特征缩放到相似的范围通常可以带来更好的结果。特征工程(基础): 有时,原始特征并非信息量最大的。你可以通过转换或组合现有特征来创建新特征。例如,你可以计算两个日期之间的时间间隔,或将年龄分组到不同类别。常见的L基本转换技术让我们看看你经常会遇到的一些基本转换类型。改变数据类型数据加载后常出现类型不正确的情况。数字可能被读取为文本字符串,或者日期可能只是简单文本。例子: 代表产品价格的列可能被加载为'€19.99'或'$50.00'之类的文本。为了进行计算,你需要移除货币符号并将其转换为数值类型(如浮点数或十进制数)。同样,读取为'10'(文本)的“数量”列需要转换为整数10。过程: 大多数编程工具都提供函数来尝试这些转换(例如,将字符串转换为整数、字符串转换为浮点数、字符串转换为日期时间)。注意: 请留意错误。尝试将“Large”之类的文本转换为数字将会失败。你需要策略来处理此类情况,这可能包括修复源数据或使用默认值。单位转换如果你的数据集包含测量值,确保单位一致非常重要。在不进行转换的情况下分析混合了英里和千米的距离将导致不正确的结果。例子: 你有温度读数,有些是摄氏度 ($C$),有些是华氏度 ($F$)。为了将它们一起分析,你必须将它们全部转换为同一尺度。摄氏度转华氏度的公式是: $$F = (C \times \frac{9}{5}) + 32$$ 或者华氏度转摄氏度: $$C = (F - 32) \times \frac{5}{9}$$过程: 识别包含单位的列。检查可用的元数据或文档。应用适当的数学公式将值转换为选定的标准单位。简单的文本处理文本数据通常需要标准化。例子: “城市”列可能包含“New York”、“new york”和“New York ”。这些可能指代同一个地方,但会被分析工具视为不同的类别。常见修复方法:将所有文本转换为小写(或大写):“New York”、“new york”、“New York ”都变成“new york”。移除开头/结尾的空白字符:“New York ”变成“New York”。目的: 确保相同的类别以相同的方式表示,防止唯一类别数量的人为增加。分箱(或离散化)有时将连续数值数据转换为离散类别或“箱”很有用。例子: 你可以不使用精确年龄(例如23、45、67),而是将它们分组为年龄段:“0-18”、“19-35”、“36-55”、“56+”。为什么? 这可以简化数据,使可视化中的模式更容易被发现,或者有时有助于某些建模技术。想象一下绘制销售额与精确年龄的关系图,与绘制销售额与年龄组的关系图相比;后者可能会显示出更清晰的趋势。这里有一个例子,展示了年龄如何被分箱:{"layout": {"xaxis": {"title": "年龄 / 年龄组"}, "yaxis": {"title": "数量"}, "title": "分箱前后年龄分布", "barmode": "overlay", "legend": {"title": {"text": "数据类型"}}}, "data": [{"type": "histogram", "x": [22, 25, 31, 18, 45, 67, 5, 12, 88, 39, 41, 55, 62, 29, 33, 7, 15, 75, 81, 59], "name": "原始年龄", "marker": {"color": "#74c0fc"}, "nbinsx": 10}, {"type": "histogram", "x": ["19-35", "19-35", "19-35", "0-18", "36-55", "56+", "0-18", "0-18", "56+", "36-55", "36-55", "36-55", "56+", "19-35", "19-35", "0-18", "0-18", "56+", "56+", "56+"], "name": "分箱年龄", "marker": {"color": "#ff922b"}, "opacity": 0.75}]}原始的连续年龄被分组到不同的年龄类别(箱)中。叠加图显示了数量如何重新分布到这些更广泛的组中。过程: 定义你的箱的边界(例如,0、18、35、55、无穷大),并根据每个数据点的值将其分配到相应的箱中。缩放与归一化(介绍)想象一下,你有一个数据集,包含“年龄”(范围可能在0-100之间)和“收入”(范围可能在$0 - $1,000,000之间)。这些尺度上的差异有时会给依赖距离或梯度的算法带来问题,使得范围较大的特征不公平地主导计算。思路: 缩放调整特征的范围,而不改变底层分布的形状。这里提到的两种常见方法是:归一化(最小-最大缩放): 将数据重新缩放到一个固定范围,通常是0到1。标准化(Z分数归一化): 将数据重新缩放,使其平均值 ($ \mu $) 为0,标准差 ($ \sigma $) 为1。值 $x$ 的公式是 $z = (x - \mu) / \sigma$。为什么? 有助于对特征尺度敏感的算法表现得更好。它使所有特征处于可比较的基础。注意: 这是数据准备中一个更高级的话题,通常在你开始构建预测模型时才相关。目前,你应该知道具有明显不同尺度的特征有时可能需要调整。一致地应用转换数据转换是为有意义的分析准备数据的重要组成部分。你所需的具体转换将很大程度上取决于你的数据和目标。请记住,你应用的任何转换都应被记录。如果你稍后分割数据(例如,将数据分成机器学习的训练集和测试集),你必须在所有子集上一致地应用完全相同的转换,以确保有效性。这些基本转换是根本的组成部分。随着你的进步,你会遇到更复杂的技巧,但了解这些核心思想为有效处理数据提供了坚实的根基。