Condivisione della tecnologia

Problemi comuni nei big data: arbitrari e sporchi

2024-07-08

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

Immagina di essere appena entrato a far parte di una grande azienda che afferma di essere in fase di "trasformazione digitale" come ingegnere di sviluppo di big data. Nella tua prima settimana di lavoro, sei pieno di entusiasmo e non vedi l'ora di mostrare i muscoli e utilizzare le tue capacità per prendere decisioni basate sui dati in azienda.
immagine.png

Tuttavia, quando inizi a scavare più a fondo nell'infrastruttura dati e nei processi della tua azienda, ti rendi conto che le sfide future sono molto più grandi di quanto ti aspettassi:

  • Cerchi di ottenere alcuni dati storici sulle vendite per l'analisi, ma scopri che i dati del reparto vendite sono archiviati in un vecchio database completamente isolato dal sistema principale dell'azienda.
  • Quando provi a integrare i dati dei clienti di diversi reparti, scopri che ciascun reparto utilizza un formato ID cliente diverso, rendendo estremamente difficile la corrispondenza dei dati.
  • Scrivi uno script di elaborazione dati, ma in fase di esecuzione scopri numerosi problemi di qualità dei dati, inclusi valori mancanti, valori anomali e input apparentemente non corretti.
  • Quando chiedi cosa significano alcuni campi dati, nessuno può darti una risposta chiara e non riesci a trovare alcun dizionario o documentazione dati pertinente.
  • Proponi di trasferire alcuni dati sensibili nel cloud per l'elaborazione, ma il team di sicurezza IT esprime seri dubbi sul fatto che ciò possa comportare un rischio di fuga di dati.
  • Sviluppi un modello predittivo che funziona bene, ma quando lo mostri all'azienda, dicono di non capire cosa significano i dati.

Di fronte a queste sfide, ti rendi conto che c’è ancora molta strada da fare per raggiungere un vero processo decisionale basato sui dati in questa azienda. Decidi di risolvere sistematicamente questi problemi per comprenderli e risolverli meglio.

Problemi comuni nei big data

1. Solo: isola dati

immagine.png

I silos di dati sono situazioni in cui i dati non possono essere condivisi in modo efficace tra sistemi informativi o unità organizzative. Ciò porta alla duplicazione dello sviluppo e allo spreco di risorse.

esempio:

  • Il reparto vendite e il reparto gestione inventario di una grande azienda di vendita al dettaglio utilizzavano sistemi diversi e non erano in grado di condividere i dati in tempo reale.
  • I sistemi informativi tra diversi dipartimenti governativi non sono interoperabili, con il risultato che i cittadini devono fornire ripetutamente le stesse informazioni.

Esempio di codice (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. Interruzione: guasto nella catena del valore dei dati

immagine.png

I difetti nella catena del valore dei dati si riferiscono a interruzioni nel processo dalla raccolta dei dati all’utilizzo finale, con conseguente incapacità di realizzare pienamente il valore dei dati.

esempio:

  • Una piattaforma di e-commerce raccoglieva una grande quantità di dati di navigazione degli utenti, ma al team di analisi mancavano le competenze corrispondenti per interpretare questi dati.
  • Le istituzioni mediche raccolgono i dati genetici dei pazienti ma non hanno la capacità di tradurre questi dati in piani di trattamento personalizzati.

Esempio di codice (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. Mancanza di standard, governance, dati, ecc.

Questo problema coinvolge molti aspetti della gestione dei dati, inclusa la mancanza di standard unificati, meccanismi di governance dei dati, dati necessari, processi standardizzati, organizzazioni specializzate e sistemi di gestione, ecc.

immagine.png

esempio:

  • Le filiali di una multinazionale in paesi diversi utilizzano formati diversi per le informazioni sui clienti, rendendo difficile l'integrazione dei dati.
  • In un progetto di ricerca mancavano dati demografici chiave, il che influiva sull'accuratezza dell'analisi.

Esempio di codice (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. Difficoltà: i dati sono difficili da ottenere, comprendere e tracciare

Questa questione riguarda l’accessibilità, la comprensibilità e la tracciabilità dei dati.

esempio:

  • I dati storici di un'azienda vengono archiviati in sistemi legacy, rendendo difficile per i nuovi dipendenti l'accesso e la comprensione dei dati.
  • Alcuni risultati in un progetto di analisi dei dati non possono essere ricondotti alla fonte dati originale, il che incide sulla credibilità dei risultati.
    immagine.png

Esempio di codice (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. Sporco: scarsa qualità dei dati

I problemi di qualità dei dati includono imprecisioni, incompletezza, incoerenze, duplicazioni, ecc.

immagine.png

esempio:

  • Nel database dei clienti è presente una grande quantità di informazioni di contatto duplicate o obsolete.
  • I dati del sensore contengono valori anomali, che influiscono sull'accuratezza dell'analisi dei dati.

Esempio di codice (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']