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 | Sí | Archivo CSV para cargar (máx. 1GB) |
datasetName |
cadena | Sí | Nombre para el nuevo conjunto de datos |
caseIdColumn |
cadena | Sí | Nombre de la columna que contiene los IDs de caso |
activityNameColumn |
cadena | Sí | Nombre de la columna que contiene los nombres de actividad |
activityTimeColumn |
cadena | Sí | 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 | Sí | Archivo paquete ZIP (máx. 1GB) |
datasetName |
cadena | Sí | 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 | Sí | Archivo binario para cargar (máx. 1GB) |
datasetName |
cadena | Sí | Nombre para el nuevo conjunto de datos |
caseIdColumn |
cadena | Sí | Nombre de la columna que contiene los IDs de caso |
activityNameColumn |
cadena | Sí | Nombre de la columna que contiene los nombres de actividad |
activityTimeColumn |
cadena | Sí | 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
rowIssuespara problemas de calidad de datos - Nombres Únicos de Conjuntos de Datos: Los nombres de conjuntos de datos deben ser únicos dentro de un proyecto