查看全课大纲(第 4 / 101 节)
  1. 1.数据分析基本概念
  2. 2.学习数据分析的一般路线
  3. 3.数据分析的流程
  4. 4.数据类型
  5. 5.环境部署(1)
  6. 6.环境部署(2)
  7. 7.课程介绍
  8. 8.TXT文件操作
  9. 9.JSON文件操作
  10. 10.CSV文件操作
  11. 11.Excel文件操作
  12. 12.数据库及SQL常用语法
  13. 13.数据库基本操作
  14. 14.数据库多表连接
  15. 15.实战:欧洲职业足球数据库分析
  16. 16.爬虫简介
  17. 17.URL管理模块
  18. 18.网页下载模块
  19. 19.网页解析模块(1)
  20. 20.网页解析模块(2)
  21. 21.Scrapy简介
  22. 22.Scrapy使用步骤(1)
  23. 23.Scrapy使用步骤(2)
  24. 24.Scrapy使用步骤(3)
  25. 25.Scrapy使用步骤(4)
  26. 26.实战:获取国内城市空气质量指数数据
  27. 27.NumPy和SciPy介绍
  28. 28.多维数组
  29. 29.多维数组操作
  30. 30.NumPy的常用方法
  31. 31.向量化介绍
  32. 32.向量化及通用函数
  33. 33.实战:2016美国大选分析
  34. 34.数据结构-Series
  35. 35.数据结构-DataFrame
  36. 36.数据结构-Index
  37. 37.Series的索引操作
  38. 38.DataFrame的索引操作
  39. 39.索引操作总结
  40. 40.运算与对齐
  41. 41.函数应用操作(1) -- map
  42. 42.函数应用操作 (2) -- apply applymap
  43. 43.文件读写操作
  44. 44.排序操作
  45. 45.数据清洗--处理缺失数据
  46. 46.数据清洗--处理重复数据
  47. 47.数据清洗--替换数据
  48. 48.常用统计方法(1) -- describe quantile
  49. 49.常用统计方法(2) -- sum mean median count
  50. 50.常用统计方法(3) -- max min idxmax idxmin
  51. 51.常用统计方法(4) -- mad var std cumsum
  52. 52.实战:全球食品数据分析
  53. 53.层级索引
  54. 54.分组与聚合介绍
  55. 55.分组操作(1) -- GroupBy对象及常用聚合操作
  56. 56.分组操作(2) -- 自定义分组及聚合操作
  57. 57.透视表介绍
  58. 58.透视表操作
  59. 59.数据规整(1) -- 数据合并concat
  60. 60.数据规整(2) -- 数据连接merge
  61. 61.数据重构(3) -- 数据重构stack unstack
  62. 62.实战:互联网电影资料库分析
  63. 63.探索性数据分析EDA介绍
  64. 64.EDA的目的
  65. 65.EDA常用工具
  66. 66.Matplotlib绘图基本介绍
  67. 67.Matplotlib画布
  68. 68.散点图和柱状图的绘制
  69. 69.直方图的绘制
  70. 70.矩阵绘图
  71. 71.子图的使用
  72. 72.Matplotlib颜色、标记、线型
  73. 73.Matplotlib坐标刻度、标签、图例、标题
  74. 74.Seaborn介绍
  75. 75.数据集分布可视化(1) -- 单变量分布、双变量分布
  76. 76.数据集分布可视化(2) -- 变量关系可视化
  77. 77.类别数据可视化 -- 类别散布图、类别内数据分布、类别内统计图
  78. 78.交互式数据可视化工具Bokeh介绍
  79. 79.Bokeh绘制散点图、柱状图、盒子图、弦图
  80. 80.Bokeh绘制常用图形元素
  81. 81.3D绘图 -- mplot3d
  82. 82.3D曲线可视化
  83. 83.3D散点图可视化
  84. 84.3D柱状图可视化
  85. 85.Pandas绘图
  86. 86.实战:Lending Club借贷数据探索性分析及可视化
  87. 87.机器学习介绍及应用场景
  88. 88.机器学习建模介绍 (1) -- 分类
  89. 89.机器学习建模介绍 (2) -- 回归
  90. 90.机器学习建模介绍 (3) -- 聚类
  91. 91.机器学习分类
  92. 92.机器学习工具scikit-learn
  93. 93.使用scikit-learn的流程
  94. 94.数据集准备及划分
  95. 95.模型选择
  96. 96.数据预处理及特征工程
  97. 97.过拟合与欠拟合
  98. 98.模型调参介绍
  99. 99.模型调参方法
  100. 100.模型测试及评价
  101. 101.实战:通过移动设备行为数据预测性别和年龄

数据类型

约 7 分钟

📺 正在播放小象学院官方高清录播(支持倍速与清晰度调节)

数据类型:数据分析的基石

小象实战讲义 · Python数据分析实战

在上一节,我们明确了数据分析的定义与核心流程。接下来,我们将目光聚焦于分析的对象——数据本身。数据并非千篇一律,不同类型的数据决定了我们后续将采用何种分析方法与统计手段。本节将系统介绍数据分析中四种常见的数据类型,帮助你建立对数据形态的初步认知,为后续的采集、清洗与分析打下坚实基础。

💡 核心导读

  • 数值型数据:可直接进行数学运算,是统计分析的核心,如长度、评分、销量。
  • 有序型数据:数据间存在明确的顺序或等级关系,但差值不一定有意义,如考试等级、空气质量。
  • 类别型数据:数据用于标识不同的类别或分组,类别间无顺序或优劣之分,如性别、品牌。
  • 噪声数据:指数据集中存在的缺失、重复、无效或异常值,是数据清洗的主要对象。

数值型数据:可计算的基石

数值型数据是最基础、最常见的数据类型。它指一切可以用数字直接表示和度量的数据。例如:

  • 物理量:产品的长度、宽度、重量。
  • 计数与评分:微博的点赞数、电影的评分、商品的销量。
  • 金融指标:股票价格、账户余额、交易金额。

这类数据的核心特征是可以进行数学运算。因此,针对数值型数据的分析,我们有一整套成熟的数理统计方法:

  • 集中趋势:计算均值、中位数,了解数据的“平均水平”。
  • 离散程度:计算标准差、方差、极差,了解数据的波动范围。
  • 分布形态:通过分位点(如25%分位数、75%分位数)描述数据分布,或计算偏度、峰度。
  • 关系探索:当存在多个数值型变量时,可以计算它们之间的相关性,例如分析广告投入与销售额之间的关系。
# 示例:数值型数据的简单统计
import numpy as np

# 构造一组模拟的数值型数据:某产品一周的日销量
daily_sales = np.array([120, 135, 118, 142, 130, 125, 128], dtype=np.float64)

print("日销量数据:", daily_sales)
print("均值:", np.mean(daily_sales))
print("中位数:", np.median(daily_sales))
print("标准差:", np.std(daily_sales))
print("最小值/最大值:", np.min(daily_sales), "/", np.max(daily_sales))
print("25% 分位数:", np.percentile(daily_sales, 25))
print("75% 分位数:", np.percentile(daily_sales, 75))
日销量数据: [120. 135. 118. 142. 130. 125. 128.]
均值: 128.28571428571428
中位数: 128.0
标准差: 7.759128922285868
最小值/最大值: 118.0 / 142.0
25% 分位数: 122.5
75% 分位数: 132.5

有序型与类别型:分组的艺术

除了数值型,我们经常遇到需要将数据分组或分类的情况。这里需要区分两种重要的类型:有序型和类别型。

有序型数据

有序型数据将数据划分成有限的几个等级或组别,组与组之间存在明确的顺序或层级关系。这种顺序通常代表了某种程度上的“好坏”、“高低”或“大小”。

  • 典型例子:
    • 考试成绩等级:A, B, C, D。
    • 员工绩效评估:优秀、良好、合格、不合格。
    • 空气质量指数:优、良、轻度污染、中度污染、重度污染、严重污染。

注意,虽然我们可以用数字编码(如1代表“优”,2代表“良”),但通常更直观的做法是使用字符串标签。有序型数据可以计算每个等级中数据的数量(频数),并绘制条形图或直方图进行可视化。

类别型数据

类别型数据同样将数据划分为不同的组别,但关键区别在于,这些组别之间没有顺序、等级或优劣之分。它们仅仅是不同的“类别”。

  • 典型例子:
    • 性别:男、女。
    • 手机品牌:苹果、华为、小米、Vivo。
    • 支付方式:现金、信用卡、移动支付。

对于类别型数据,我们不能说“苹果比华为好”或“男比女大”,这种比较是没有意义的。其分析重点在于统计各个类别的分布情况,例如计算每个性别的用户数、每种品牌的销量占比。

# 示例:有序型与类别型数据的频数统计
import pandas as pd

# 构造模拟数据:员工绩效评估(有序型)和所属部门(类别型)
data = {
    '员工ID': ['E001', 'E002', 'E003', 'E004', 'E005', 'E006', 'E007', 'E008'],
    '绩效等级': ['优秀', '良好', '合格', '优秀', '不合格', '良好', '优秀', '合格'], # 有序型
    '所属部门': ['技术部', '市场部', '技术部', '人事部', '市场部', '技术部', '市场部', '人事部'] # 类别型
}
df = pd.DataFrame(data)

print("原始数据:")
print(df)
print("\n绩效等级分布(有序型):")
print(df['绩效等级'].value_counts().sort_index()) # 按字母顺序排序,对于中文,'不合格'会排在前面
print("\n所属部门分布(类别型):")
print(df['所属部门'].value_counts())
原始数据:
   员工ID 绩效等级 所属部门
0  E001   优秀  技术部
1  E002   良好  市场部
2  E003   合格  技术部
3  E004   优秀  人事部
4  E005  不合格  市场部
5  E006   良好  技术部
6  E007   优秀  市场部
7  E008   合格  人事部

绩效等级分布(有序型):
绩效等级
不合格    1
优秀     3
合格     2
良好     2
Name: count, dtype: int64

所属部门分布(类别型):
所属部门
技术部    3
市场部    3
人事部    2
Name: count, dtype: int64

注意:在Python中,中文字符串默认按Unicode码点排序,因此“不合格”会排在“优秀”前面。在实际分析有序型数据时,我们通常需要自定义排序顺序来反映真实的等级关系,这会在后续Pandas章节中详细讲解。

噪声数据:分析前的“清道夫”

在真实的数据分析项目中,我们很少能直接拿到一份完美、干净、可直接分析的数据集。数据在采集、录入、传输、整合的过程中,极易产生各种问题,这类有问题的数据统称为噪声数据或脏数据。

常见的噪声数据包括:

  • 缺失值:某些记录的数据项为空或NULL。
  • 重复值:完全相同的记录出现了多次。
  • 无效数据:数据值明显不符合逻辑或业务规则,例如年龄为负数、身高为10米。
  • 异常值:数据值虽然可能,但严重偏离主体数据的分布范围,可能是录入错误,也可能是罕见的真实情况。

噪声数据如果不经处理直接用于分析,会严重扭曲分析结果,导致错误的结论。因此,数据清洗是数据分析流程中至关重要且往往最耗时的一环。

处理噪声数据的一般思路是“识别”与“处理”:

  1. 识别:通过描述性统计(如查看最大值、最小值)、数据可视化(如箱线图)或业务规则来发现潜在的噪声数据。
  2. 处理:根据数据性质和业务需求,选择剔除、填充或保留。

例如,在分析用户年龄分布时,发现绝大部分用户年龄在18-60岁之间,但有两条记录的年龄分别为-5和150。我们可以高度怀疑这是无效数据(录入错误),在与业务方确认后,将其作为缺失值处理或直接剔除。

# 示例:识别简单的噪声数据(缺失值与无效值)
import pandas as pd
import numpy as np

# 构造一份包含噪声数据的模拟用户信息表
data = {
    '用户ID': [1, 2, 3, 4, 5, 6, 7, 8],
    '年龄': [25, 32, np.nan, 19, -5, 45, 150, 28], # np.nan代表缺失,-5和150是无效值
    '城市': ['北京', '上海', '广州', '深圳', '北京', '杭州', np.nan, '上海'] # np.nan代表缺失
}
df_noisy = pd.DataFrame(data)

print("包含噪声的原始数据:")
print(df_noisy)
print("\n--- 数据质量初探 ---")
print("1. 缺失值统计:")
print(df_noisy.isnull().sum())
print("\n2. 年龄字段描述性统计(包含无效值):")
print(df_noisy['年龄'].describe())
print("\n3. 识别年龄无效值(假设合理范围为0-120):")
invalid_age_mask = (df_noisy['年龄'] < 0) | (df_noisy['年龄'] > 120)
print(df_noisy[invalid_age_mask][['用户ID', '年龄']])
包含噪声的原始数据:
   用户ID     年龄   城市
0     1   25.0   北京
1     2   32.0   上海
2     3    NaN   广州
3     4   19.0   深圳
4     5   -5.0   北京
5     6   45.0   杭州
6     7  150.0  NaN
7     8   28.0   上海

--- 数据质量初探 ---
1. 缺失值统计:
用户ID    0
年龄      1
城市      1
dtype: int64

2. 年龄字段描述性统计(包含无效值):
count      7.000000
mean      42.000000
std       49.993333
min       -5.000000
25%       22.000000
50%       28.000000
75%       38.500000
max      150.000000
Name: 年龄, dtype: float64

3. 识别年龄无效值(假设合理范围为0-120):
   用户ID     年龄
4     5   -5.0
6     7  150.0

从输出可以看到,我们成功识别出了缺失值(年龄1个,城市1个)和明显的无效年龄(-5岁和150岁)。如何处理这些数据,将是数据清洗阶段的任务。

📝 动手练一练

  1. 概念辨析:假设你拿到一份关于“客户满意度”的调查数据,其中“满意度”字段的取值为:“非常不满意”、“不满意”、“一般”、“满意”、“非常满意”。请问这个字段属于哪种数据类型?为什么?如果另一个字段是“客户所在省份”(如广东、浙江、江苏),它又属于哪种数据类型?
👉 点击查看参考答案
  • “满意度”字段属于有序型数据。因为“非常不满意”到“非常满意”之间存在明确的、递增的顺序关系,代表了满意程度的等级。
  • “客户所在省份”字段属于类别型数据。因为各个省份之间是平等的分类关系,没有顺序或优劣之分(我们不能说广东比浙江“好”或“高”)。
  1. 代码实践:参考本节识别噪声数据的示例代码,请你构造一个包含姓名、身高(cm)、体重(kg)三个字段的微型DataFrame(至少5行),并故意在其中插入一些噪声数据(如缺失值、身高为负数、体重超过500kg等)。然后编写代码,统计缺失值数量,并找出身高不在[50, 250]厘米区间内的异常记录。
👉 点击查看参考答案
import pandas as pd
import numpy as np

# 构造包含噪声的数据
data = {
    '姓名': ['张三', '李四', '王五', '赵六', '孙七'],
    '身高(cm)': [175, -10, 168, np.nan, 280],
    '体重(kg)': [65, 55, np.nan, 80, 600]
}
df_exercise = pd.DataFrame(data)

print("构造的数据:")
print(df_exercise)

print("\n1. 缺失值统计:")
print(df_exercise.isnull().sum())

print("\n2. 身高异常记录(不在50-250cm之间):")
height_anomaly_mask = (df_exercise['身高(cm)'] < 50) | (df_exercise['身高(cm)'] > 250)
print(df_exercise[height_anomaly_mask])
构造的数据:
   姓名  身高(cm)  体重(kg)
0  张三   175.0    65.0
1  李四   -10.0    55.0
2  王五   168.0     NaN
3  赵六     NaN    80.0
4  孙七   280.0   600.0

1. 缺失值统计:
姓名        0
身高(cm)    1
体重(kg)    1
dtype: int64

2. 身高异常记录(不在50-250cm之间):
   姓名  身高(cm)  体重(kg)
1  李四   -10.0    55.0
4  孙七   280.0   600.0

本章小结

本节我们深入探讨了数据分析中四种核心的数据类型,这是理解后续所有分析技术的前提。

  • 数值型数据是定量分析的基石,适用于广泛的数学和统计运算。
  • 有序型与类别型数据用于对事物进行分类,关键在于判断类别间是否存在顺序关系。
  • 噪声数据是现实数据中的“杂质”,识别并清洗它们是保证分析结果可靠性的第一步。

理解数据的类型,就如同医生诊断前先了解病人的基本情况,它直接决定了我们后续将选择什么样的“工具”和“方法”来探索数据中的奥秘。

📋 行动清单

学完本节,你可以立即尝试:

  • 观察你日常接触到的任何数据(如App上的商品信息、新闻里的统计图表),尝试判断其中各个字段的数据类型。
  • 在Python中,用一个小列表(如[22, 35, 47, 12, 89])模拟数值型数据,练习使用np.mean(), np.std()等函数计算其基本统计量。
  • 思考:如果你的任务是分析一个电商网站的销售数据,你认为“商品颜色”和“商品价格”分别属于哪种数据类型?针对它们,你会分别采用哪些初步的分析方法?

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 本节课件:数据类型
    PDF · 244KB
    下载
  • 全套课件打包(第1-5章)
    ZIP · 12.8MB
    下载
  • 全套课件打包(第6-8章)
    ZIP · 15MB
    下载
  • 实战数据集:AppleStore 应用商城分析
    ZIP · 329KB
    下载
  • 实战数据集:女性服装电商分析
    ZIP · 2.8MB
    下载
  • Python 数据分析环境搭建指南
    PDF · 2MB
    下载
  • Scrapy 安装教程
    PDF · 12.7MB
    下载
  • 附加实战项目:AppleStore 应用商城数据分析
    ZIP · 0.3MB · ipynb + CSV 数据
    下载
  • 附加实战项目:银行电话营销数据分析
    ZIP · 0.4MB · ipynb + CSV 数据
    下载
  • 附加实战项目:女性服装电商评论数据分析
    ZIP · 2.7MB · ipynb + CSV 数据
    下载
  • 附加实战项目:美国化学学会杂志数据分析
    ZIP · 34.2MB · ipynb + SQLite 数据库
    下载