Création de Jeu de Données
Créer de Nouveaux Jeux de Données
Créez des jeux de données à partir de fichiers CSV, de paquets ZIP ou de fichiers binaires. Chaque format nécessite des correspondances de colonnes spécifiques pour l'analyse de fouille de processus.
Test de Connectivité
Ping Non Autorisé
GET /api/{tenantId}/{projectId}/dataset/unauthorized-ping
Point de terminaison de test ne nécessitant pas d'authentification.
Réponse
Ping Successful
Ping Authentifié
GET /api/{tenantId}/{projectId}/dataset/ping
Point de terminaison de ping authentifié pour vérifier l'accès à l'API.
Réponse (200 OK)
Ping Successful (tenant id: {tenantId})
Lister Tous les Jeux de Données
GET /api/{tenantId}/{projectId}/dataset
Récupère tous les jeux de données dans le projet spécifié.
Réponse (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"
}
]
}
Créer un Jeu de Données à partir d’un CSV
POST /api/{tenantId}/{projectId}/dataset/csv
Crée un nouveau jeu de données à partir d’un fichier CSV téléchargé avec mappage des colonnes.
Requête (multipart/form-data)
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
file |
fichier | Oui | Fichier CSV à télécharger (max 1Go) |
datasetName |
chaîne | Oui | Nom du nouveau jeu de données |
caseIdColumn |
chaîne | Oui | Nom de la colonne contenant les IDs de cas |
activityNameColumn |
chaîne | Oui | Nom de la colonne contenant les noms d’activité |
activityTimeColumn |
chaîne | Oui | Nom de la colonne contenant les horodatages |
resourceColumn |
chaîne | Non | Nom de la colonne contenant la ressource/acteur |
startTimeColumn |
chaîne | Non | Nom de la colonne pour les heures de début d’activité |
cultureInfo |
chaîne | Non | Culture pour le parsing (par défaut : "en-US") |
Réponse (200 OK)
{
"datasetId": "550e8400-e29b-41d4-a716-446655440000",
"caseCount": 5200,
"eventCount": 150000,
"invalidValueCount": 0,
"skippedRowsCount": 0,
"errors": [],
"rowIssues": [],
"statusCode": 200
}
Réponse d’Erreur (422 Entité Non Traitée)
{
"errors": ["Column 'CaseID' not found in CSV file"],
"statusCode": 422
}
Créer un Jeu de Données à partir d’un Paquet ZIP
POST /api/{tenantId}/{projectId}/dataset/package
Crée un nouveau jeu de données à partir d’un paquet ZIP contenant des fichiers de données.
Requête (multipart/form-data)
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
file |
fichier | Oui | Fichier paquet ZIP (max 1Go) |
datasetName |
chaîne | Oui | Nom du nouveau jeu de données |
cultureInfo |
chaîne | Non | Culture pour le parsing (par défaut : "en-US") |
Réponse (200 OK)
{
"datasetId": "550e8400-e29b-41d4-a716-446655440000",
"caseCount": 5200,
"eventCount": 150000,
"invalidValueCount": 0,
"skippedRowsCount": 0,
"errors": [],
"rowIssues": [],
"statusCode": 200
}
Créer un Jeu de Données à partir d’un Fichier Binaire
POST /api/{tenantId}/{projectId}/dataset/binary
Crée un nouveau jeu de données à partir d’un fichier au format binaire avec mappage de colonnes.
Requête (multipart/form-data)
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
file |
fichier | Oui | Fichier binaire à télécharger (max 1Go) |
datasetName |
chaîne | Oui | Nom du nouveau jeu de données |
caseIdColumn |
chaîne | Oui | Nom de la colonne contenant les IDs de cas |
activityNameColumn |
chaîne | Oui | Nom de la colonne contenant les noms d’activité |
activityTimeColumn |
chaîne | Oui | Nom de la colonne contenant les horodatages |
resourceColumn |
chaîne | Non | Nom de la colonne contenant la ressource/acteur |
startTimeColumn |
chaîne | Non | Nom de la colonne pour les heures de début d’activité |
Réponse (200 OK)
Même structure que la réponse de création CSV.
Exemples d’Implémentation
cURL - Upload 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 - Upload Paquet 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'):
"""Créer un jeu de données à partir d'un fichier 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'Échec du téléchargement : {response.text}')
def create_from_package(self, file_path, dataset_name, culture='en-US'):
"""Créer un jeu de données à partir d'un paquet 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'Échec du téléchargement : {response.text}')
def list_datasets(self):
"""Lister tous les jeux de données dans le projet."""
url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/dataset'
response = requests.get(url, headers=self.headers)
return response.json()
# Utilisation
uploader = DatasetUploader('your-auth-token')
# Création à partir d'un CSV
result = uploader.create_from_csv(
'event_log.csv',
'Purchase Order Process',
'CaseID',
'Activity',
'Timestamp',
resource_col='User'
)
print(f"Jeu de données créé : {result['datasetId']}")
print(f"Cas : {result['caseCount']}, Événements : {result['eventCount']}")
# Lister tous les jeux de données
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(`Échec du téléchargement : ${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();
}
}
// Utilisation (navigateur)
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,
'Mon Jeu de Données',
'CaseID',
'Activity',
'Timestamp',
{ resourceColumn: 'User' }
);
console.log(`Créé : ${result.datasetId}`);
console.log(`Cas : ${result.caseCount}, Événements : ${result.eventCount}`);
});
Champs de la Réponse
| Champ | Type | Description |
|---|---|---|
datasetId |
GUID | ID du jeu de données créé |
caseCount |
entier | Nombre de cas uniques importés |
eventCount |
entier | Nombre total d'événements importés |
invalidValueCount |
entier | Nombre de valeurs invalides rencontrées |
skippedRowsCount |
entier | Nombre de lignes ignorées à cause d'erreurs |
errors |
tableau | Liste des messages d'erreur |
rowIssues |
tableau | Informations détaillées sur les problèmes au niveau des lignes |
statusCode |
entier | Code d'état HTTP |
Bonnes Pratiques
- Valider les Noms de Colonnes : Assurez-vous que les noms de colonnes correspondent exactement (sensible à la casse)
- Vérifier les Paramètres de Culture : Utilisez la culture appropriée pour les formats de date/nombre
- Gérer les Fichiers Volumineux : Surveillez la progression de l’upload pour les fichiers proches de 1Go
- Examiner les Problèmes de Lignes : Vérifiez le tableau
rowIssuespour les problèmes de qualité de données - Noms Uniques de Jeux de Données : Les noms des jeux de données doivent être uniques au sein d’un projet