データセット作成

新しいデータセットの作成

CSVファイル、ZIPパッケージ、またはバイナリファイルからデータセットを作成します。各フォーマットにはプロセスマイニング分析用の特定の列マッピングが必要です。

接続テスト

認証不要のPing

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

認証不要のテストエンドポイント。

レスポンス

Ping Successful

認証済みPing

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

APIアクセスを検証する認証済みPingエンドポイント。

レスポンス (200 OK)

Ping Successful (tenant id: {tenantId})

すべてのデータセットの一覧取得

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

指定されたプロジェクト内の全データセットを取得します。

レスポンス (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"
    }
  ]
}

CSVからのデータセット作成

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

列マッピング付きのCSVファイルアップロードにより新しいデータセットを作成します。

リクエスト (multipart/form-data)

フィールド タイプ 必須 説明
file file 必須 アップロードするCSVファイル(最大1GB)
datasetName string 必須 新しいデータセットの名前
caseIdColumn string 必須 ケースIDを含む列名
activityNameColumn string 必須 活動名を含む列名
activityTimeColumn string 必須 タイムスタンプを含む列名
resourceColumn string 任意 リソース/担当者を含む列名
startTimeColumn string 任意 活動開始時間を含む列名
cultureInfo string 任意 解析に使用するカルチャ(デフォルト:"en-US")

レスポンス (200 OK)

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

エラーレスポンス (422 Unprocessable Entity)

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

ZIPパッケージからのデータセット作成

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

データファイルを含むZIPパッケージから新しいデータセットを作成します。

リクエスト (multipart/form-data)

フィールド タイプ 必須 説明
file file 必須 ZIPパッケージファイル(最大1GB)
datasetName string 必須 新しいデータセットの名前
cultureInfo string 任意 解析に使用するカルチャ(デフォルト:"en-US")

レスポンス (200 OK)

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

バイナリファイルからのデータセット作成

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

列マッピング付きのバイナリ形式ファイルから新しいデータセットを作成します。

リクエスト (multipart/form-data)

フィールド タイプ 必須 説明
file file 必須 アップロードするバイナリファイル(最大1GB)
datasetName string 必須 新しいデータセットの名前
caseIdColumn string 必須 ケースIDを含む列名
activityNameColumn string 必須 活動名を含む列名
activityTimeColumn string 必須 タイムスタンプを含む列名
resourceColumn string 任意 リソース/担当者を含む列名
startTimeColumn string 任意 活動開始時間を含む列名

レスポンス (200 OK)

CSV作成のレスポンスと同じ構造。

実装例

cURL - 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 - 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'):
        """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'アップロードに失敗しました: {response.text}')

    def create_from_package(self, file_path, dataset_name, culture='en-US'):
        """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'アップロードに失敗しました: {response.text}')

    def list_datasets(self):
        """プロジェクト内の全データセットを一覧表示します。"""
        url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/dataset'
        response = requests.get(url, headers=self.headers)
        return response.json()

# 利用例
uploader = DatasetUploader('your-auth-token')

# CSVから作成
result = uploader.create_from_csv(
    'event_log.csv',
    'Purchase Order Process',
    'CaseID',
    'Activity',
    'Timestamp',
    resource_col='User'
)
print(f"データセット作成: {result['datasetId']}")
print(f"ケース数: {result['caseCount']}, イベント数: {result['eventCount']}")

# データセット一覧取得
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(`アップロードに失敗しました: ${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();
  }
}

// 利用例(ブラウザ)
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,
    'My Dataset',
    'CaseID',
    'Activity',
    'Timestamp',
    { resourceColumn: 'User' }
  );

  console.log(`作成済み: ${result.datasetId}`);
  console.log(`ケース数: ${result.caseCount}, イベント数: ${result.eventCount}`);
});

レスポンスフィールド

フィールド タイプ 説明
datasetId GUID 作成されたデータセットのID
caseCount integer 取り込まれたユニークケース数
eventCount integer 取り込まれたイベント総数
invalidValueCount integer 無効な値の数
skippedRowsCount integer エラーによりスキップされた行数
errors array エラーメッセージのリスト
rowIssues array 行レベルの詳細な問題情報
statusCode integer HTTPステータスコード

ベストプラクティス

  • 列名の検証: 列名は厳密に一致させる(大文字小文字を区別)
  • カルチャ設定の確認: 日付/数値フォーマットに適切なカルチャを使用する
  • 大容量ファイルの取り扱い: 1GBに迫るファイルはアップロード進行状況を監視する
  • 行の問題の確認: rowIssues 配列でデータ品質の問題をチェックする
  • ユニークなデータセット名: データセット名はプロジェクト内で一意であること