一句话回答
数据类型是一种分类,告诉程序、数据库或分析人员一个字段存的是什么样的值,比如整数、小数、文本、真 / 假或日期,从而决定能对它做哪些运算。
什么是数据类型?
数据类型告诉程序、数据库或分析人员:一个字段里存的是什么样的值,因而能对它做哪些操作。两个整数可以相加,两段文字不行;日期可以按时间排序,但前提是它存成了日期。类型选对了,你得到的是收入合计;选错了,得到的是报错,或者更糟,一个悄悄出错的数字。
这个词常见的有两层意思:编程里的数据类型(整数、字符串、布尔……)和统计学里的数据类型(定类、定序、定距、定比)。做数据分析两者都会用到。
常见的编程数据类型
| 类型 | 存什么 | 例子 | 需要注意 | ||
|---|---|---|---|---|---|
| 整数(int) | 整数 | 42、-7 | 非常大的 ID 可能溢出 | ||
| 浮点数(float、double) | 带小数的数 | 19.9、0.333 | 精度问题:0.1 + 0.2 等于 0.30000000000000004 | ||
| 定点小数(decimal) | 精确的小数 | 19.90 | 慢一些;金额用它,或者用「分」存成整数 | ||
| 字符串(str、text) | 文本 | "pro"、"00123" | 存成文本的数字没法相加 | ||
| 字符(char) | 单个字符 | 'A' | 底层语言以外很少用 | ||
| 布尔(bool) | 真或假 | true | 很多语言里文本 "false" 会被当成真 | ||
| 日期 / 时间 / 时间戳 | 时间点 | 2026-11-07T09:30:00Z | 时区 | ||
| 空值(null、None) | 没有值 | null | 不等于 0 或 "" | ||
| 数组 / 列表 | 有序集合 | ["red", "blue"] | 很多工具难以按它筛选 | ||
| 对象 / 字典 | 键值对 | {"plan": "pro"} | 嵌套数据做报表前要拍平 | ||
| 枚举(enum) | 固定集合中的一个 | `"free" \ | "pro" \ | "vip"` | 改了集合,旧数据就对不上 |
JSON 的数据类型
大多数统计数据以 JSON 格式传输,而 JSON 只有六种类型(RFC 8259):字符串、数字、布尔、空值、对象、数组。它没有日期类型,也不区分整数和小数。所以日期通常用 ISO 8601 字符串(2026-11-07T09:30:00Z)或 Unix 时间戳传递,金额也常用最小单位(分)存成整数。
统计学里的数据类型
统计学按「哪些比较有意义」给数据分类,来自 S. S. Stevens 提出的测量尺度:
| 尺度 | 含义 | 例子 | 能用的汇总方式 |
|---|---|---|---|
| 定类 | 类别,没有顺序 | 国家、浏览器、套餐 | 计数、众数 |
| 定序 | 有顺序的类别,间隔不等 | 满意度 1–5 分、衣服尺码 | 中位数、百分位 |
| 定距 | 间隔相等,没有真正的零点 | 摄氏温度、年份 | 平均数、差值 |
| 定比 | 间隔相等,有真正的零点 | 收入、会话时长、浏览量 | 平均数、比值(「长一倍」) |
定类和定序属于定性数据,定距和定比属于定量数据。定序数据可以存成数字(比如 1–5 分),但求平均就默认了各档间隔相等,实际上往往并不相等。数据还可以分为离散的(计数:3 笔订单)和连续的(测量:3.27 秒)。
数据类型在统计分析里为什么重要
- 求和、平均需要数字:价格传成
"19.90"就是文本,大多数工具求和时会跳过或拒收。 - 排序取决于类型:作为文本,
"100"会排在"19.90"前面,因为逐字符比较时1小于9。 - 布尔传成文本,一个属性会分裂成
true、"true"、"True"、"1"好几种值。 - 日期没有时区,别的地区的人看报表时,事件会跨过午夜被挪到另一天。
- ID 存成数字会丢掉前导零(
00123变成123),在 JavaScript 里超过 2⁵³ 还会丢精度。
示例:收入被少算
示例数据:某月 5,000 个 purchase 事件,平均价格 40 美元。旧版本 App 把 price 作为字符串上报,新版本作为数字上报。
| 事件数 | 按 40 美元均价计的收入 | |
|---|---|---|
price 是数字 | 4,100 | $164,000(计入合计) |
price 是字符串 | 900 | $36,000(未计入) |
| 合计 | 5,000 | $200,000 |
看板上显示 164,000 美元:少了 18% 的收入,而且这个缺口会随旧版本用户的占比变大或变小,看起来就像一个真实的趋势。整个过程没有任何报错,只是类型错了。修复要两头做:App 改成上报数字,同时在入库时校验类型,让问题在出现的当天就被发现。
事件属性的类型规则
- 在埋点方案里定好每个属性的类型,之后不要改;需要变就新增一个属性。
- 数字就传数字,金额统一单位和币种。
- 布尔传
true/false,不要传字符串。 - 日期用带时区的 ISO 8601,或者 Unix 时间戳。
- ID 传字符串,前导零和长数字才能保住。
- 类别值限定在已知集合里,控制基数。
TapCub 里的数据类型
- 网站上
tapcub.track(name, props)最多保留 20 个属性键,且只保留字符串、数字和布尔;日期请用 ISO 8601 字符串传。参见跟踪自定义事件。 - 全端分析 › 数据管理 › 属性字典 记录每个属性键的类型:字符串、数字、布尔、日期时间或列表。你确认过的类型,之后的扫描不会再覆盖。
- 同一个页面的校验规则可以要求预期类型,违反时警告、删除该属性或拦截事件。上面那种字符串价格,当天就能被发现。
资料来源
- Bray, T.(编),RFC 8259:JSON 数据交换格式(2017)。
- W3C,日期和时间格式(ISO 8601 规范子集)。
- Stevens, S. S. (1946). On the Theory of Scales of Measurement. Science, 103(2684).
- MDN Web Docs,JavaScript 数据类型和数据结构。
这个解释清楚吗?
我们会根据反馈修改和补充这篇内容。
提交没有成功,请稍后再试。
谢谢你的反馈,我们会据此改进这篇内容。你已经反馈过这篇了,谢谢。
