Creación de Conjuntos de Datos

Crear Nuevos Conjuntos de Datos

Cree conjuntos de datos a partir de archivos CSV, paquetes ZIP o archivos binarios. Cada formato requiere asignaciones específicas de columnas para el análisis de minería de procesos.

Pruebas de Conectividad

Ping No Autorizado

GET /api/{tenantId}/{projectId}/dataset/unauthorized-ping

Punto de prueba que no requiere autenticación.

Respuesta

Ping Successful

Ping Autenticado

GET /api/{tenantId}/{projectId}/dataset/ping

Punto de ping autenticado para verificar el acceso a la API.

Respuesta (200 OK)

Ping Successful (tenant id: {tenantId})

Listar Todos los Conjuntos de Datos

GET /api/{tenantId}/{projectId}/dataset

Recupera todos los conjuntos de datos dentro del proyecto especificado.

Respuesta (200 OK)

{
  "datasets": [
    {
      "datasetId": "550e8400-e29b-41d4-a716-446655440000",
      "datasetName": "Purchase Order Process",
      "datasetDescription": "Event log from SAP",
      "projectId": "660e8400-e29b-41d4-a716-446655440000",
      "caseIdColumnName": "CaseID",
      "activityColumnName": "Activity",
      "timeColumnName": "Timestamp",
      "resourceColumnName": "Resource",
      "beginTimeColumnName": null,
      "expectedOrderColumnName": null,
      "useDateOnlySorting": false,
      "useOnlyEventColumns": false,
      "dateCreated": "2024-01-15T10:30:00Z",
      "dateModified": "2024-01-15T14:45:00Z",
      "createdBy": "user@example.com",
      "modifiedBy": "user@example.com"
    }
  ]
}

Crear Conjunto de Datos desde CSV

POST /api/{tenantId}/{projectId}/dataset/csv

Crea un nuevo conjunto de datos a partir de una carga de archivo CSV con asignación de columnas.

Solicitud (multipart/form-data)

Campo Tipo Requerido Descripción
file archivo Archivo CSV para cargar (máx. 1GB)
datasetName cadena Nombre para el nuevo conjunto de datos
caseIdColumn cadena Nombre de la columna que contiene los IDs de caso
activityNameColumn cadena Nombre de la columna que contiene los nombres de actividad
activityTimeColumn cadena Nombre de la columna que contiene las marcas de tiempo
resourceColumn cadena No Nombre de la columna que contiene el recurso/ejecutor
startTimeColumn cadena No Nombre de la columna para los tiempos de inicio de actividad
cultureInfo cadena No Cultura para el análisis (predeterminado: "en-US")

Respuesta (200 OK)

{
  "datasetId": "550e8400-e29b-41d4-a716-446655440000",
  "caseCount": 5200,
  "eventCount": 150000,
  "invalidValueCount": 0,
  "skippedRowsCount": 0,
  "errors": [],
  "rowIssues": [],
  "statusCode": 200
}

Respuesta de Error (422 Unprocessable Entity)

{
  "errors": ["Column 'CaseID' not found in CSV file"],
  "statusCode": 422
}

Crear Conjunto de Datos desde Paquete ZIP

POST /api/{tenantId}/{projectId}/dataset/package

Crea un nuevo conjunto de datos desde un paquete ZIP que contiene archivos de datos.

Solicitud (multipart/form-data)

Campo Tipo Requerido Descripción
file archivo Archivo paquete ZIP (máx. 1GB)
datasetName cadena Nombre para el nuevo conjunto de datos
cultureInfo cadena No Cultura para el análisis (predeterminado: "en-US")

Respuesta (200 OK)

{
  "datasetId": "550e8400-e29b-41d4-a716-446655440000",
  "caseCount": 5200,
  "eventCount": 150000,
  "invalidValueCount": 0,
  "skippedRowsCount": 0,
  "errors": [],
  "rowIssues": [],
  "statusCode": 200
}

Crear Conjunto de Datos desde Binario

POST /api/{tenantId}/{projectId}/dataset/binary

Crea un nuevo conjunto de datos desde un archivo en formato binario con asignaciones de columnas.

Solicitud (multipart/form-data)

Campo Tipo Requerido Descripción
file archivo Archivo binario para cargar (máx. 1GB)
datasetName cadena Nombre para el nuevo conjunto de datos
caseIdColumn cadena Nombre de la columna que contiene los IDs de caso
activityNameColumn cadena Nombre de la columna que contiene los nombres de actividad
activityTimeColumn cadena Nombre de la columna que contiene las marcas de tiempo
resourceColumn cadena No Nombre de la columna que contiene el recurso/ejecutor
startTimeColumn cadena No Nombre de la columna para los tiempos de inicio de actividad

Respuesta (200 OK)

Misma estructura que la respuesta de creación desde CSV.

Ejemplos de Implementación

cURL - Carga CSV

curl -X POST "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/87654321-4321-4321-4321-210987654321/dataset/csv" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -F "file=@event_log.csv" \
  -F "datasetName=Purchase Orders" \
  -F "caseIdColumn=CaseID" \
  -F "activityNameColumn=Activity" \
  -F "activityTimeColumn=Timestamp" \
  -F "resourceColumn=User" \
  -F "cultureInfo=en-US"

cURL - Carga Paquete ZIP

curl -X POST "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/87654321-4321-4321-4321-210987654321/dataset/package" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -F "file=@data_package.zip" \
  -F "datasetName=SAP Export" \
  -F "cultureInfo=en-US"

Python

import requests

TENANT_ID = '12345678-1234-1234-1234-123456789012'
PROJECT_ID = '87654321-4321-4321-4321-210987654321'
BASE_URL = 'https://your-mindzie-instance.com'

class DatasetUploader:
    def __init__(self, token):
        self.headers = {'Authorization': f'Bearer {token}'}

    def create_from_csv(self, file_path, dataset_name, case_id_col, activity_col, time_col,
                        resource_col=None, start_time_col=None, culture='en-US'):
        """Crear conjunto de datos desde archivo CSV."""
        url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/dataset/csv'

        with open(file_path, 'rb') as f:
            files = {'file': (file_path, f, 'text/csv')}
            data = {
                'datasetName': dataset_name,
                'caseIdColumn': case_id_col,
                'activityNameColumn': activity_col,
                'activityTimeColumn': time_col,
                'cultureInfo': culture
            }
            if resource_col:
                data['resourceColumn'] = resource_col
            if start_time_col:
                data['startTimeColumn'] = start_time_col

            response = requests.post(url, headers=self.headers, files=files, data=data)

        if response.ok:
            return response.json()
        else:
            raise Exception(f'Error en la carga: {response.text}')

    def create_from_package(self, file_path, dataset_name, culture='en-US'):
        """Crear conjunto de datos desde paquete ZIP."""
        url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/dataset/package'

        with open(file_path, 'rb') as f:
            files = {'file': (file_path, f, 'application/zip')}
            data = {
                'datasetName': dataset_name,
                'cultureInfo': culture
            }

            response = requests.post(url, headers=self.headers, files=files, data=data)

        if response.ok:
            return response.json()
        else:
            raise Exception(f'Error en la carga: {response.text}')

    def list_datasets(self):
        """Listar todos los conjuntos de datos en el proyecto."""
        url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/dataset'
        response = requests.get(url, headers=self.headers)
        return response.json()

# Uso
uploader = DatasetUploader('your-auth-token')

# Crear desde CSV
result = uploader.create_from_csv(
    'event_log.csv',
    'Purchase Order Process',
    'CaseID',
    'Activity',
    'Timestamp',
    resource_col='User'
)
print(f"Conjunto de datos creado: {result['datasetId']}")
print(f"Casos: {result['caseCount']}, Eventos: {result['eventCount']}")

# Listar todos los conjuntos de datos
datasets = uploader.list_datasets()
for ds in datasets['datasets']:
    print(f"- {ds['datasetName']} ({ds['datasetId']})")

JavaScript/Node.js

const TENANT_ID = '12345678-1234-1234-1234-123456789012';
const PROJECT_ID = '87654321-4321-4321-4321-210987654321';
const BASE_URL = 'https://your-mindzie-instance.com';

class DatasetUploader {
  constructor(token) {
    this.token = token;
  }

  async createFromCsv(file, datasetName, caseIdCol, activityCol, timeCol, options = {}) {
    const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/dataset/csv`;

    const formData = new FormData();
    formData.append('file', file);
    formData.append('datasetName', datasetName);
    formData.append('caseIdColumn', caseIdCol);
    formData.append('activityNameColumn', activityCol);
    formData.append('activityTimeColumn', timeCol);
    formData.append('cultureInfo', options.culture || 'en-US');

    if (options.resourceColumn) {
      formData.append('resourceColumn', options.resourceColumn);
    }
    if (options.startTimeColumn) {
      formData.append('startTimeColumn', options.startTimeColumn);
    }

    const response = await fetch(url, {
      method: 'POST',
      headers: { 'Authorization': `Bearer ${this.token}` },
      body: formData
    });

    if (response.ok) {
      return await response.json();
    } else {
      throw new Error(`Error en la carga: ${await response.text()}`);
    }
  }

  async listDatasets() {
    const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/dataset`;
    const response = await fetch(url, {
      headers: { 'Authorization': `Bearer ${this.token}` }
    });
    return await response.json();
  }
}

// Uso (navegador)
const uploader = new DatasetUploader('your-auth-token');
const fileInput = document.getElementById('csvFile');

fileInput.addEventListener('change', async (e) => {
  const file = e.target.files[0];

  const result = await uploader.createFromCsv(
    file,
    'Mi Conjunto de Datos',
    'CaseID',
    'Activity',
    'Timestamp',
    { resourceColumn: 'User' }
  );

  console.log(`Creado: ${result.datasetId}`);
  console.log(`Casos: ${result.caseCount}, Eventos: ${result.eventCount}`);
});

Campos de Respuesta

Campo Tipo Descripción
datasetId GUID ID del conjunto de datos creado
caseCount entero Número de casos únicos importados
eventCount entero Número total de eventos importados
invalidValueCount entero Número de valores inválidos encontrados
skippedRowsCount entero Número de filas omitidas por errores
errors arreglo Lista de mensajes de error
rowIssues arreglo Información detallada sobre problemas a nivel de fila
statusCode entero Código de estado HTTP

Mejores Prácticas

  • Validar Nombres de Columnas: Asegúrese de que los nombres de columnas coincidan exactamente (sensible a mayúsculas/minúsculas)
  • Verificar Configuración de Cultura: Use la cultura apropiada para formatos de fecha/número
  • Manejo de Archivos Grandes: Monitoree el progreso de la carga para archivos cercanos a 1GB
  • Revisar Problemas en Filas: Verifique el arreglo rowIssues para problemas de calidad de datos
  • Nombres Únicos de Conjuntos de Datos: Los nombres de conjuntos de datos deben ser únicos dentro de un proyecto