Compartilhamento de tecnologia

Problemas comuns de dados em big data: arbitrários e sujos

2024-07-08

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

Imagine que você acabou de ingressar em uma grande empresa que afirma estar passando por uma “transformação digital” como engenheiro de desenvolvimento de big data. Em sua primeira semana de trabalho, você está cheio de entusiasmo e mal pode esperar para exercitar seus músculos e usar suas habilidades para tomar decisões baseadas em dados na empresa.
imagem.png

No entanto, à medida que você começa a se aprofundar na infraestrutura e nos processos de dados da sua empresa, você percebe que os desafios futuros são muito maiores do que você esperava:

  • Você tenta obter alguns dados históricos de vendas para análise, mas descobre que os dados do departamento de vendas estão armazenados em um banco de dados antigo e completamente isolado do sistema principal da empresa.
  • Ao tentar integrar dados de clientes de diferentes departamentos, você descobre que cada departamento usa um formato de ID de cliente diferente, tornando a correspondência de dados extremamente difícil.
  • Você escreve um script de processamento de dados, mas em tempo de execução descobre vários problemas de qualidade de dados, incluindo valores ausentes, valores discrepantes e entradas aparentemente incorretas.
  • Quando você pergunta o que significam alguns campos de dados, ninguém pode lhe dar uma resposta clara e você não consegue encontrar nenhum dicionário ou documentação de dados relevante.
  • Você propõe transferir alguns dados confidenciais para processamento na nuvem, mas a equipe de segurança de TI expressa sérias preocupações de que isso possa representar um risco de vazamento de dados.
  • Você desenvolve um modelo preditivo com bom desempenho, mas quando o mostra à empresa, eles dizem que não entendem o que os dados significam.

Diante desses desafios, você percebe que ainda há um longo caminho a percorrer para alcançar uma verdadeira tomada de decisão baseada em dados nesta empresa. Você decide resolver sistematicamente esses problemas para melhor compreendê-los e resolvê-los.

Problemas comuns de dados em big data

1. Sozinho – ilha de dados

imagem.png

Silos de dados são situações em que os dados não podem ser partilhados de forma eficaz entre sistemas de informação ou unidades organizacionais. Isto leva à duplicação do desenvolvimento e ao desperdício de recursos.

exemplo:

  • Os departamentos de vendas e gerenciamento de estoque de uma grande empresa varejista usavam sistemas diferentes e não conseguiam compartilhar dados em tempo real.
  • Os sistemas de informação entre diferentes departamentos governamentais não são interoperáveis, o que faz com que os cidadãos tenham de fornecer repetidamente as mesmas informações.

Exemplo de código (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. Disrupção – Falha na cadeia de valor dos dados

imagem.png

As falhas na cadeia de valor dos dados referem-se a interrupções no processo desde a recolha de dados até à utilização final, resultando na incapacidade de perceber plenamente o valor dos dados.

exemplo:

  • Uma plataforma de comércio eletrônico coletou uma grande quantidade de dados de navegação dos usuários, mas a equipe de análise não tinha as habilidades correspondentes para interpretar esses dados.
  • As instituições médicas recolhem dados genéticos dos pacientes, mas não têm a capacidade de traduzir esses dados em planos de tratamento personalizados.

Exemplo de código (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. Falta de padrões, governança, dados, etc.

Este problema envolve muitos aspectos da gestão de dados, incluindo a falta de padrões unificados, mecanismos de governança de dados, dados necessários, processos padronizados, organizações especializadas e sistemas de gestão, etc.

imagem.png

exemplo:

  • As filiais de uma empresa multinacional em diferentes países utilizam diferentes formatos de informações de clientes, dificultando a integração de dados.
  • Num projecto de investigação faltavam dados demográficos importantes, afectando a precisão da análise.

Exemplo de código (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. Dificuldade – Os dados são difíceis de obter, compreender e rastrear

Esta questão envolve acessibilidade, compreensão e rastreabilidade dos dados.

exemplo:

  • Os dados históricos de uma empresa são armazenados em sistemas legados, dificultando o acesso e a compreensão dos dados pelos novos funcionários.
  • Alguns resultados num projeto de análise de dados não podem ser rastreados até à fonte de dados original, afetando a credibilidade dos resultados.
    imagem.png

Exemplo de código (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. Sujo – dados de baixa qualidade

Os problemas de qualidade dos dados incluem imprecisões, incompletudes, inconsistências, duplicações, etc.

imagem.png

exemplo:

  • Há uma grande quantidade de informações de contato duplicadas ou desatualizadas no banco de dados do cliente.
  • Os dados do sensor contêm valores discrepantes, o que afeta a precisão da análise de dados.

Exemplo de código (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']