博客 / 詳情

返回

深入淺出理解你的“數據”

對於想要學習數據分析的同學,如果你問我:"數據分析的第一步是什麼?" 我的回答是:"理解數據本身。"

數據是我們所有分析工作的起點,本文主要探討如何辨別我們面對的是什麼樣的數據,包括它的分類方法和描述維度。

1. 數據分類

數據並非千篇一律,它們有着不同的特徵和屬性。

正確理解數據的分類,是選擇適當分析方法的前提。

通常,我們可以從以下三個維度來給數據進行分類。

1.1. 按結構屬性來分

你的數據“整齊”嗎?

  1. 結構化數據 :這類數據就像一個整理得井井有條的Excel表格或數據庫。

它們有固定的格式,每一列都有明確的定義,比如姓名、年齡、消費金額等。

我們可以很方便地對其進行查詢和分析。

比如,網上購物的訂單記錄,包括訂單號、商品名稱、價格、購買日期等,就是一個典型的結構化數據。

  1. 非結構化數據:這類數據則“隨心所欲”得多,沒有固定的結構。

我們日常接觸到的信息,大部分都屬於非結構化數據。

比如,發佈的社交媒體帖子、觀看的視頻、收發的電子郵件,甚至是客服的通話錄音,都屬於非結構化數據。

分析這類數據通常需要更復雜的技術,比如自然語言處理和圖像識別。

1.2. 按連續性特徵分類

你的數據可以“無限細分”嗎?

  1. 連續性數據 :這類數據可以取某個範圍內的任意值,並且可以無限細分。

在生活中,一個人的身高、體重,或者室外的温度,都是連續性數據。

比如,我們可以説一個人的身高是175.5釐米,也可以更精確地説是175.52釐米。

  1. 離散型數據:這類數據只能取特定的、獨立的數值,通常是整數。

比如,一個班級的學生人數、一本書的頁數,或者你一天喝水的杯數,都是離散型數據。

我們不能説有25.8個學生。

1.3. 按測量尺度分類

你的數據能進行什麼樣的“數學運算”?

這是統計學中一個非常重要的概念,它決定了我們可以對數據進行哪些統計分析。

  1. 定類數據:這類數據只表示類別,沒有順序或大小之分。

比如,產品的分類(如“電子產品”、“服裝”、“食品”)、性別(“男”、“女”)等。

我們只能説它們“不同”,但不能説“電子產品”比“服裝”更大或更好。

  1. 定序數據:這類數據既有類別,又有明確的順序或等級,但我們無法衡量等級之間的具體差距。

比如,用户滿意度(“非常滿意”、“滿意”、“一般”、“不滿意”)、考試的排名(第一名、第二名、第三名)。

我們知道“非常滿意”比“滿意”要好,但好多少是説不清楚的。

  1. 定距數據 :這類數據有順序,並且數值之間的差值是有意義的,但它沒有一個“絕對零點”。

比如,考試的成績(80分比70分高10分,60分比50分也高10分,差距是相同的)、攝氏温度。

但是我們不能説30攝氏度是15攝氏度的兩倍熱。

  1. 定比數據:這是最高級別的測量尺度,它包含了定距數據的所有特性,並且擁有一個“絕對零點”(即0表示“沒有”)。

比如,身高、體重、收入。一個人的收入為0元,就代表他沒有任何收入。

我們可以説,收入10000元是5000元的兩倍。

代碼示例:

import numpy as np
from collections import Counter

# 不同類型數據的示例和分析方法
# 定類數據 - 性別
gender_data = ['男', '女', '男', '男', '女', '女', '男']
gender_counts = Counter(gender_data)
print("定類數據分析(性別頻數):", gender_counts)

# 定序數據 - 教育水平(1=高中,2=本科,3=碩士,4=博士)
education_data = [1, 2, 2, 3, 1, 4, 2, 3]
print("定序數據中位數:", np.median(education_data))

# 定距數據 - 温度
temperature_data = [23.5, 24.0, 25.3, 22.8, 26.1]
print("温度平均值:", np.mean(temperature_data))

# 定比數據 - 月收入(有絕對零點)
income_data = [5000, 8000, 12000, 3500, 9000]
print("收入均值:", np.mean(income_data))
print("收入比值(最高/最低):", max(income_data)/min(income_data))

2. 數據的描述

瞭解了數據的類型後,下一步就是從宏觀上描述我們手中的這批數據。

通常,我們會從三個維度來“素描”數據的全貌:

2.1. 集中趨勢

集中趨勢是用來描述數據集中趨勢的一組統計量,它告訴我們數據的“中心點”或“典型值”在哪裏。

  1. 算術平均值:這是我們最常用的指標,指所有數值的總和除以數值的個數。
    1. 簡單算術平均值:適用於所有數值同等重要的情況。
    2. 加權算術平均值:適用於不同數值具有不同重要性的情況,比如計算課程的最終成績,期末考試的權重可能比平時作業要高。
    3. 需要注意:算術平均值很容易受到數據中極大值或極小值(異常值)的影響。
  2. 幾何平均值:適用於描述具有乘除關係的數據的集中趨勢,常用於計算比率數據的平均值,比如投資回報率。
  3. 眾數:指數據集中出現次數最多的數值。眾數可能不止一個。
  4. 中位數:將數據集從小到大排序後,位於最中間的那個數。

如果數據集的個數是偶數,則取中間兩個數的算術平均值。中位數不受極端值的影響。

代碼示例:

import numpy as np
from scipy import stats

# 用户每日使用時長數據(分鐘)
daily_usage = [25, 30, 15, 28, 30, 45, 22, 180]

# 計算算術平均值
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[0]} 分鐘")

從上面的示例可以看出:算術平均值46.88分鐘)受到了極端值180分鐘的顯著影響,而中位數29.0分鐘)則更好地反映了大部分用户的普遍使用時長。

2.2. 離散程度

離散程度描述了數據集中各個數值相對於其中心位置的變異程度,也就是數據的“胖瘦”。

  1. 極差:數據集中最大值與最小值的差值。它計算簡單,但同樣易受極端值影響。
  2. 平均偏差:數據集中每個數值與算術平均值差值的絕對值之和的平均數。
  3. 方差/ 標準差:這是衡量數據離散程度最常用的指標。標準差方差的平方根,它與原始數據的單位相同,更易於解釋。

注意:對於樣本方差/標準差,計算時,分母是 n-1(n為樣本量),這是為了對總體方差進行無偏估計

  1. 變異係數:標準差與平均值的比值,可以用來比較不同單位或不同均值的數據集的離散程度。
  2. 四分位極差:第三四分位數(Q3,排序後75%位置的數值)與第一四分位數(Q1,排序後25%位置的數值)的差值。它包含了數據集中間的50%的數據,能夠有效避免極端值的影響。

代碼示例:

import numpy as np

daily_usage = [25, 30, 15, 28, 30, 45, 22, 180]

# 計算極差
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}")

2.3. 分佈形態

在掌握了數據的中心和離散程度後,我們還想知道數據的整體分佈形狀。

概率分佈就是描述隨機變量取值規律的數學模型。

常見的概率分佈:

  1. 離散型概率分佈:
    1. 二項分佈:描述在一系列獨立的“是/非”試驗中,成功發生次數的概率。

例如,拋10次硬幣,正面朝上5次的概率。

2. **泊松分佈**:描述在單位時間或空間內,某個隨機事件發生的次數。

例如,一個客服中心平均每小時接到10個電話,下一個小時接到8個電話的概率。

  1. 連續型概率分佈:
    1. 正態分佈高斯分佈):自然界和人類社會中許多現象都近似服從正態分佈,其曲線呈鐘形,對稱分佈。

例如,成年人的身高分佈。

2. **指數分佈**:描述獨立隨機事件發生的時間間隔。 

例如,兩輛公交車到站的間隔時間。

3. **均勻分佈**:表示在某個範圍內的所有取值的概率都相等。

例如,擲一個均勻的骰子,每個點數出現的概率都是1/6。

代碼示例:

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()

3. 總結

理解數據不同類型描述數據的方法,是我們進行後續所有分析工作的基礎。

就像學畫畫要先認識顏料和畫筆,我們也要先“看懂”手裏的數據。

數據分析的第一步永遠是理解你的數據。只有對數據有了充分的認識,才能選擇適當的分析方法,得出可靠的結論。

user avatar prepared 頭像 yaoyaolx_wiki 頭像 wodingshangniliao 頭像
3 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.