乡村小张 發表於 2025-11-20 12:20:00

深入浅出理解你的“数据”

<p>对于想要学习数据分析的同学,如果你问我:"数据分析的第一步是什么?" 我的回答是:"理解数据本身。"</p>
<p><strong>数据</strong>是我们所有分析工作的起点,本文主要探讨如何辨别我们面对的是什么样的数据,包括它的分类方法和描述维度。</p>
<h1 id="1-数据分类">1. 数据分类</h1>
<p>数据并非千篇一律,它们有着不同的特征和属性。</p>
<p>正确理解数据的分类,是选择适当分析方法的前提。</p>
<p>通常,我们可以从以下<strong>三个维度</strong>来给数据进行分类。</p>
<h2 id="11-按结构属性来分">1.1. 按结构属性来分</h2>
<p>你的数据“整齐”吗?</p>
<ol>
<li><strong>结构化数据</strong> :这类数据就像一个整理得井井有条的Excel表格或数据库。</li>
</ol>
<p>它们有固定的格式,每一列都有明确的定义,比如姓名、年龄、消费金额等。</p>
<p>我们可以很方便地对其进行查询和分析。</p>
<p>比如,网上购物的订单记录,包括订单号、商品名称、价格、购买日期等,就是一个典型的结构化数据。</p>
<ol start="2">
<li><strong>非结构化数据</strong>:这类数据则“随心所欲”得多,没有固定的结构。</li>
</ol>
<p>我们日常接触到的信息,大部分都属于非结构化数据。</p>
<p>比如,发布的社交媒体帖子、观看的视频、收发的电子邮件,甚至是客服的通话录音,都属于非结构化数据。</p>
<p>分析这类数据通常需要更复杂的技术,比如自然语言处理和图像识别。</p>
<h2 id="12-按连续性特征分类">1.2. 按连续性特征分类</h2>
<p>你的数据可以“无限细分”吗?</p>
<ol>
<li><strong>连续性数据</strong> :这类数据可以取某个范围内的任意值,并且可以无限细分。</li>
</ol>
<p>在生活中,一个人的身高、体重,或者室外的温度,都是连续性数据。</p>
<p>比如,我们可以说一个人的身高是175.5厘米,也可以更精确地说是175.52厘米。</p>
<ol start="2">
<li><strong>离散型数据</strong>:这类数据只能取特定的、独立的数值,通常是整数。</li>
</ol>
<p>比如,一个班级的学生人数、一本书的页数,或者你一天喝水的杯数,都是离散型数据。</p>
<p>我们不能说有25.8个学生。</p>
<h2 id="13-按测量尺度分类">1.3. 按测量尺度分类</h2>
<p>你的数据能进行什么样的“数学运算”?</p>
<p>这是统计学中一个非常重要的概念,它决定了我们可以对数据进行哪些统计分析。</p>
<ol>
<li><strong>定类数据</strong>:这类数据只表示类别,没有顺序或大小之分。</li>
</ol>
<p>比如,产品的分类(如“电子产品”、“服装”、“食品”)、性别(“男”、“女”)等。</p>
<p>我们只能说它们<strong>“不同”</strong>,但不能说“电子产品”比“服装”更大或更好。</p>
<ol start="2">
<li><strong>定序数据</strong>:这类数据既有类别,又有明确的顺序或等级,但我们无法衡量等级之间的具体差距。</li>
</ol>
<p>比如,用户满意度(“非常满意”、“满意”、“一般”、“不满意”)、考试的排名(第一名、第二名、第三名)。</p>
<p>我们知道“非常满意”比“满意”要好,但好多少是说不清楚的。</p>
<ol start="3">
<li><strong>定距数据 <strong>:这类数据有顺序,并且数值之间的差值是有意义的,但它</strong>没有</strong>一个“绝对零点”。</li>
</ol>
<p>比如,考试的成绩(80分比70分高10分,60分比50分也高10分,差距是相同的)、摄氏温度。</p>
<p>但是我们不能说30摄氏度是15摄氏度的两倍热。</p>
<ol start="4">
<li><strong>定比数据</strong>:这是最高级别的测量尺度,它包含了定距数据的所有特性,并且<strong>拥有</strong>一个“绝对零点”(即0表示“没有”)。</li>
</ol>
<p>比如,身高、体重、收入。一个人的收入为0元,就代表他没有任何收入。</p>
<p>我们可以说,收入10000元是5000元的两倍。</p>
<p>代码示例:</p>
<pre><code class="language-python">import numpy as np
from collections import Counter

# 不同类型数据的示例和分析方法
# 定类数据 - 性别
gender_data = ['男', '女', '男', '男', '女', '女', '男']
gender_counts = Counter(gender_data)
print("定类数据分析(性别频数):", gender_counts)

# 定序数据 - 教育水平(1=高中,2=本科,3=硕士,4=博士)
education_data =
print("定序数据中位数:", np.median(education_data))

# 定距数据 - 温度
temperature_data =
print("温度平均值:", np.mean(temperature_data))

# 定比数据 - 月收入(有绝对零点)
income_data =
print("收入均值:", np.mean(income_data))
print("收入比值(最高/最低):", max(income_data)/min(income_data))
</code></pre>
<h1 id="2-数据的描述">2. 数据的描述</h1>
<p>了解了数据的类型后,下一步就是从宏观上描述我们手中的这批数据。</p>
<p>通常,我们会从<strong>三个维度</strong>来“素描”数据的全貌:</p>
<h2 id="21-集中趋势">2.1. 集中趋势</h2>
<p><strong>集中趋势</strong>是用来描述数据集中趋势的一组<strong>统计量</strong>,它告诉我们数据的“中心点”或“典型值”在哪里。</p>
<ol>
<li><strong>算术平均值</strong>:这是我们最常用的指标,指所有数值的总和除以数值的个数。
<ol>
<li><strong>简单算术平均值</strong>:适用于所有数值同等重要的情况。</li>
<li><strong>加权算术平均值</strong>:适用于不同数值具有不同重要性的情况,比如计算课程的最终成绩,期末考试的权重可能比平时作业要高。</li>
<li>需要<strong>注意</strong>:算术平均值很容易受到数据中极大值或极小值(异常值)的影响。</li>
</ol>
</li>
<li><strong>几何平均值</strong>:适用于描述具有乘除关系的数据的集中趋势,常用于计算比率数据的平均值,比如投资回报率。</li>
<li><strong>众数</strong>:指数据集中出现次数最多的数值。<strong>众数</strong>可能不止一个。</li>
<li><code>中位数</code>:将数据集从小到大排序后,位于最中间的那个数。</li>
</ol>
<p>如果数据集的个数是偶数,则取中间两个数的算术平均值。中位数不受极端值的影响。</p>
<p>代码示例:</p>
<pre><code class="language-python">import numpy as np
from scipy import stats

# 用户每日使用时长数据(分钟)
daily_usage =

# 计算算术平均值
mean_usage = np.mean(daily_usage)
print(f"算术平均值: {mean_usage:.2f} 分钟")

# 计算中位数
median_usage = np.median(daily_usage)
print(f"中位数: {median_usage:.2f} 分钟")

# 计算众数
# 注意:scipy.stats.mode返回众数和其出现次数
mode_usage = stats.mode(daily_usage)
print(f"众数: {mode_usage.mode} 分钟")
</code></pre>
<p>从上面的示例可以看出:<strong>算术平均值</strong>(<code>46.88</code>分钟)受到了极端值<code>180</code>分钟的显著影响,而<strong>中位数</strong>(<code>29.0</code>分钟)则更好地反映了大部分用户的普遍使用时长。</p>
<h2 id="22-离散程度">2.2. 离散程度</h2>
<p><strong>离散程度</strong>描述了数据集中各个数值相对于其中心位置的变异程度,也就是数据的“胖瘦”。</p>
<ol>
<li><strong>极差</strong>:数据集中最大值与最小值的差值。它计算简单,但同样易受极端值影响。</li>
<li><strong>平均偏差</strong>:数据集中每个数值与算术平均值差值的绝对值之和的平均数。</li>
<li><strong>方差</strong>/ <strong>标准差</strong>:这是衡量数据离散程度最常用的指标。<strong>标准差</strong>是<strong>方差</strong>的平方根,它与原始数据的单位相同,更易于解释。</li>
</ol>
<p><strong>注意</strong>:对于<strong>样本方差</strong>/<strong>标准差</strong>,计算时,分母是 <code>n-1</code>(n为样本量),这是为了对<strong>总体方差</strong>进行<strong>无偏估计</strong>。</p>
<ol start="4">
<li><strong>变异系数</strong>:标准差与平均值的比值,可以用来比较不同单位或不同均值的数据集的离散程度。</li>
<li><strong>四分位极差</strong>:第三四分位数(<code>Q3</code>,排序后75%位置的数值)与第一四分位数(<code>Q1</code>,排序后25%位置的数值)的差值。它包含了数据集中间的50%的数据,能够有效避免极端值的影响。</li>
</ol>
<p>代码示例:</p>
<pre><code class="language-python">import numpy as np

daily_usage =

# 计算极差
range_usage = np.max(daily_usage) - np.min(daily_usage)
print(f"极差: {range_usage} 分钟")

# 计算方差 (默认计算总体方差,ddof=1表示计算样本方差)
variance_usage = np.var(daily_usage, ddof=1)
print(f"样本方差: {variance_usage:.2f}")

# 计算标准差
std_dev_usage = np.std(daily_usage, ddof=1)
print(f"样本标准差: {std_dev_usage:.2f} 分钟")

# 计算四分位极差
q1 = np.percentile(daily_usage, 25)
q3 = np.percentile(daily_usage, 75)
iqr = q3 - q1
print(f"第一四分位数 (Q1): {q1}")
print(f"第三四分位数 (Q3): {q3}")
print(f"四分位极差 (IQR): {iqr}")
</code></pre>
<h2 id="23-分布形态">2.3. 分布形态</h2>
<p>在掌握了数据的中心和离散程度后,我们还想知道数据的整体分布形状。</p>
<p><strong>概率分布</strong>就是描述随机变量取值规律的数学模型。</p>
<p>常见的概率分布:</p>
<ol>
<li>离散型概率分布:
<ol>
<li><strong>二项分布</strong>:描述在一系列独立的“是/非”试验中,成功发生次数的概率。</li>
</ol>
</li>
</ol>
<p>例如,抛10次硬币,正面朝上5次的概率。</p>
<pre><code>2. **泊松分布**:描述在单位时间或空间内,某个随机事件发生的次数。
</code></pre>
<p>例如,一个客服中心平均每小时接到10个电话,下一个小时接到8个电话的概率。</p>
<ol start="2">
<li>连续型概率分布:
<ol>
<li><strong>正态分布</strong>(<strong>高斯分布</strong>):自然界和人类社会中许多现象都近似服从正态分布,其曲线呈钟形,对称分布。</li>
</ol>
</li>
</ol>
<p>例如,成年人的身高分布。</p>
<pre><code>2. **指数分布**:描述独立随机事件发生的时间间隔。
</code></pre>
<p>例如,两辆公交车到站的间隔时间。</p>
<pre><code>3. **均匀分布**:表示在某个范围内的所有取值的概率都相等。
</code></pre>
<p>例如,掷一个均匀的骰子,每个点数出现的概率都是1/6。</p>
<p>代码示例:</p>
<pre><code class="language-python">import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats

# 生成一个符合正态分布的随机数据集
# 均值为100,标准差为10
data_normal = np.random.normal(loc=100, scale=10, size=1000)

# 使用seaborn绘制直方图和核密度估计图
sns.histplot(data_normal, kde=True, color='skyblue')
plt.title('正态分布示例')
plt.xlabel('数值')
plt.ylabel('频率')
plt.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/83005/202511/83005-20251120120921659-1577323657.png" alt="" loading="lazy"></p>
<h1 id="3-总结">3. 总结</h1>
<p>理解<strong>数据</strong>的<strong>不同类型</strong>和<strong>描述数据</strong>的方法,是我们进行后续所有分析工作的基础。</p>
<p>就像学画画要先认识颜料和画笔,我们也要先“看懂”手里的数据。</p>
<p><strong>数据分析</strong>的第一步永远是<strong>理解你的数据</strong>。只有对数据有了充分的认识,才能选择适当的分析方法,得出可靠的结论。</p><br><br>
来源:https://www.cnblogs.com/wang_yb/p/19246620
頁: [1]
查看完整版本: 深入浅出理解你的“数据”