기술나눔

빅데이터의 일반적인 데이터 문제: 임의적이고 지저분함

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

당신이 빅 데이터 개발 엔지니어로서 "디지털 혁신"을 겪고 있다고 주장하는 대기업에 막 합류했다고 상상해 보십시오. 입사 첫 주에는 열정이 넘치고 근육을 풀고 기술을 사용하여 회사에서 데이터 기반 의사 결정을 내리고 싶습니다.
이미지.png

그러나 회사의 데이터 인프라와 프로세스를 더 깊이 파고들기 시작하면 앞으로의 과제가 예상보다 훨씬 더 크다는 것을 깨닫게 됩니다.

  • 분석을 위해 일부 과거 판매 데이터를 얻으려고 했으나 판매 부서의 데이터가 회사의 기본 시스템과 완전히 격리된 오래된 데이터베이스에 저장되어 있음을 발견했습니다.
  • 서로 다른 부서의 고객 데이터를 통합하려고 할 때 각 부서가 서로 다른 고객 ID 형식을 사용하므로 데이터 일치가 매우 어렵다는 것을 알게 됩니다.
  • 데이터 처리 스크립트를 작성했지만 런타임 시 누락된 값, 이상치, 명백히 잘못된 입력 등 수많은 데이터 품질 문제를 발견했습니다.
  • 일부 데이터 필드가 무엇을 의미하는지 물어보면 누구도 명확한 답을 줄 수 없으며 관련 데이터 사전이나 문서도 찾을 수 없습니다.
  • 일부 중요한 데이터를 처리하기 위해 클라우드로 전송하겠다고 제안했지만 IT 보안 팀은 이로 인해 데이터 유출 위험이 발생할 수 있다는 심각한 우려를 표명했습니다.
  • 성능이 좋은 예측 모델을 개발했지만 이를 비즈니스에 보여주면 데이터가 의미하는 바를 이해하지 못한다고 합니다.

이러한 과제에 직면한 귀하는 이 회사에서 진정한 데이터 기반 의사 결정을 달성하기 위해 아직 갈 길이 멀다는 것을 깨달았습니다. 문제를 더 잘 이해하고 해결하기 위해 이러한 문제를 체계적으로 분류하기로 결정합니다.

빅데이터의 일반적인 데이터 문제

1. 혼자 - 데이터 섬

이미지.png

데이터 사일로는 정보 시스템이나 조직 단위 간에 데이터를 효과적으로 공유할 수 없는 상황입니다. 이는 개발의 중복과 자원의 낭비로 이어진다.

예:

  • 한 대형 유통업체의 영업부서와 재고관리부서는 서로 다른 시스템을 사용해 실시간 데이터 공유가 불가능했다.
  • 서로 다른 정부 부서 간의 정보 시스템은 상호 운용이 불가능하므로 시민들은 동일한 정보를 반복적으로 제공해야 합니다.

코드 예(Python):

# 销售部门的数据库
sales_db = {
    "product_a": {"sales": 1000, "revenue": 50000},
    "product_b": {"sales": 800, "revenue": 40000}
}

# 库存部门的数据库
inventory_db = {
    "product_a": {"stock": 500},
    "product_b": {"stock": 200}
}

# 由于数据孤岛,我们无法直接获取销售和库存的综合信息
# 需要手动整合数据
def get_product_info(product):
    if product in sales_db and product in inventory_db:
        return {
            "sales": sales_db[product]["sales"],
            "revenue": sales_db[product]["revenue"],
            "stock": inventory_db[product]["stock"]
        }
    return None

print(get_product_info("product_a"))

2. 혼란 - 데이터 가치 사슬의 결함

이미지.png

데이터 가치사슬의 결함은 데이터 수집부터 최종 활용까지의 과정이 중단되어 데이터의 가치를 완전히 실현하지 못하는 것을 의미합니다.

예:

  • 한 전자상거래 플랫폼은 대량의 사용자 검색 데이터를 수집했지만 분석팀은 이 데이터를 해석할 수 있는 기술이 부족했습니다.
  • 의료기관에서는 환자의 유전자 데이터를 수집하지만 이 데이터를 개인화된 치료 계획으로 변환하는 능력이 부족합니다.

코드 예(Python):

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# 假设我们有用户浏览数据
df = pd.DataFrame({
    'user_id': range(1000),
    'page_views': np.random.randint(1, 100, 1000),
    'time_spent': np.random.randint(10, 3600, 1000),
    'purchases': np.random.randint(0, 5, 1000)
})

# 尝试建立一个预测模型
X = df[['page_views', 'time_spent']]
y = df['purchases']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

model = LinearRegression()
model.fit(X_train, y_train)

# 模型评分
print(f"Model Score: {model.score(X_test, y_test)}")

# 但是,如果分析团队不理解这个模型或不知道如何解释结果,
# 那么这个模型就无法为业务决策提供有价值的指导

3. 표준, 거버넌스, 데이터 등의 부족

이 문제는 통일된 표준, 데이터 거버넌스 메커니즘, 필요한 데이터, 표준화된 프로세스, 전문 조직 및 관리 시스템 등의 부족을 포함하여 데이터 관리의 여러 측면과 관련이 있습니다.

이미지.png

예:

  • 여러 국가에 있는 다국적 기업의 지점은 서로 다른 고객 정보 형식을 사용하므로 데이터 통합이 어렵습니다.
  • 한 연구 프로젝트에는 주요 인구통계 데이터가 누락되어 분석의 정확성에 영향을 미쳤습니다.

코드 예(Python):

# 假设我们有来自不同国家的客户数据,格式不统一
us_customers = [
    {"name": "John Doe", "phone": "1234567890"},
    {"name": "Jane Smith", "phone": "0987654321"}
]

uk_customers = [
    {"full_name": "David Brown", "tel": " 44 1234567890"},
    {"full_name": "Emma Wilson", "tel": " 44 0987654321"}
]

# 由于缺乏统一标准,我们需要手动处理数据
def standardize_customer(customer, country):
    if country == "US":
        return {
            "full_name": customer["name"],
            "phone_number": " 1 "   customer["phone"]
        }
    elif country == "UK":
        return {
            "full_name": customer["full_name"],
            "phone_number": customer["tel"]
        }

# 标准化数据
standardized_customers = (
    [standardize_customer(c, "US") for c in us_customers]  
    [standardize_customer(c, "UK") for c in uk_customers]
)

print(standardized_customers)

4. 어려움 - 데이터를 획득, 이해, 추적하기가 어렵습니다.

이 문제는 데이터 접근성, 이해성 및 추적성과 관련이 있습니다.

예:

  • 회사의 이력 데이터는 레거시 시스템에 저장되어 신입사원이 데이터에 접근하고 이해하기 어렵습니다.
  • 데이터 분석 프로젝트의 일부 결과는 원본 데이터 소스를 추적할 수 없어 결과의 신뢰성에 영향을 미칩니다.
    이미지.png

코드 예(Python):

import hashlib
import json
from datetime import datetime

class DataRecord:
    def __init__(self, data, source):
        self.data = data
        self.source = source
        self.timestamp = datetime.now().isoformat()
        self.hash = self._calculate_hash()

    def _calculate_hash(self):
        record = json.dumps({"data": self.data, "source": self.source, "timestamp": self.timestamp})
        return hashlib.sha256(record.encode()).hexdigest()

    def __str__(self):
        return f"Data: {self.data}, Source: {self.source}, Timestamp: {self.timestamp}, Hash: {self.hash}"

# 创建一些数据记录
record1 = DataRecord("User A purchased Product X", "Sales System")
record2 = DataRecord("Product X inventory decreased by 1", "Inventory System")

print(record1)
print(record2)

# 这种方法可以帮助追踪数据的来源和变化,但仍然需要额外的系统来管理这些记录

5. 더티(Dirty) - 데이터 품질이 좋지 않음

데이터 품질 문제에는 부정확성, 불완전성, 불일치, 중복 등이 포함됩니다.

이미지.png

예:

  • 고객 데이터베이스에 중복되거나 오래된 연락처 정보가 많이 있습니다.
  • 센서 데이터에는 데이터 분석의 정확성에 영향을 미치는 이상값이 포함되어 있습니다.

코드 예(Python):

import pandas as pd
import numpy as np

# 创建一个包含一些"脏"数据的DataFrame
df = pd.DataFrame({
    'name': ['John', 'Jane', 'John', 'Bob', 'Alice', np.nan],
    'age': [30, 25, 30, -5, 200, 35],
    'email': ['[email protected]', 'jane@example', '[email protected]', '[email protected]', '[email protected]', 'invalid']
})

print("Original data:")
print(df)

# 数据清洗
def clean_data(df):
    # 删除重复行
    df = df.drop_duplicates()
    
    # 处理缺失值
    df['name'] = df['name'].fillna('Unknown')
    
    # 修正异常值
    df.loc[df['age']