Spaces:
Sleeping
Sleeping
Upload 26 files
Browse files- Dockerfile +22 -0
- README.md +34 -0
- backend/__init__.py +0 -0
- backend/app/__init__.py +0 -0
- backend/app/api/__init__.py +0 -0
- backend/app/api/compare.py +35 -0
- backend/app/api/datasets.py +89 -0
- backend/app/api/experiments.py +240 -0
- backend/app/api/exports.py +51 -0
- backend/app/api/health.py +7 -0
- backend/app/api/presets.py +23 -0
- backend/app/api/runs.py +29 -0
- backend/app/db.py +34 -0
- backend/app/main.py +45 -0
- backend/app/models/__init__.py +0 -0
- backend/app/models/dataset.py +14 -0
- backend/app/models/experiment.py +16 -0
- backend/app/repositories/__init__.py +0 -0
- backend/app/repositories/dataset_repo.py +35 -0
- backend/app/repositories/experiment_repo.py +45 -0
- backend/app/services/__init__.py +0 -0
- backend/app/services/profiling_service.py +23 -0
- backend/app/utils/__init__.py +0 -0
- backend/app/utils/ids.py +7 -0
- data_samples/access_demo.csv +801 -0
- requirements.txt +9 -0
Dockerfile
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FROM python:3.11-slim
|
| 2 |
+
|
| 3 |
+
ENV PYTHONDONTWRITEBYTECODE=1
|
| 4 |
+
ENV PYTHONUNBUFFERED=1
|
| 5 |
+
ENV PORT=7860
|
| 6 |
+
ENV PYTHONPATH=/app
|
| 7 |
+
|
| 8 |
+
WORKDIR /app
|
| 9 |
+
|
| 10 |
+
RUN apt-get update && apt-get install -y --no-install-recommends build-essential curl && rm -rf /var/lib/apt/lists/*
|
| 11 |
+
|
| 12 |
+
COPY requirements.txt .
|
| 13 |
+
RUN pip install --no-cache-dir -r requirements.txt
|
| 14 |
+
|
| 15 |
+
COPY backend /app/backend
|
| 16 |
+
COPY data_samples /app/data_samples
|
| 17 |
+
|
| 18 |
+
RUN mkdir -p /data/uploads /data/artifacts
|
| 19 |
+
|
| 20 |
+
EXPOSE 7860
|
| 21 |
+
|
| 22 |
+
CMD ["uvicorn", "backend.app.main:app", "--host", "0.0.0.0", "--port", "7860"]
|
README.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: ClusterBuster API
|
| 3 |
+
emoji: 📊
|
| 4 |
+
colorFrom: blue
|
| 5 |
+
colorTo: indigo
|
| 6 |
+
sdk: docker
|
| 7 |
+
app_port: 7860
|
| 8 |
+
pinned: false
|
| 9 |
+
---
|
| 10 |
+
|
| 11 |
+
# ClusterBuster Multi Algorithm
|
| 12 |
+
|
| 13 |
+
Backend:
|
| 14 |
+
- FastAPI
|
| 15 |
+
- SQLite at /data/clusterforge.db
|
| 16 |
+
- Upload datasets
|
| 17 |
+
- Profile datasets
|
| 18 |
+
- Run clustering experiments
|
| 19 |
+
- PCA scatter points
|
| 20 |
+
- Runs and compare APIs
|
| 21 |
+
- CSV export
|
| 22 |
+
- Multi algorithm clustering
|
| 23 |
+
|
| 24 |
+
Frontend:
|
| 25 |
+
- Next.js
|
| 26 |
+
- Upload page
|
| 27 |
+
- New experiment page
|
| 28 |
+
- Runs page
|
| 29 |
+
- Compare page
|
| 30 |
+
- PCA scatter plot
|
| 31 |
+
|
| 32 |
+
Deploy:
|
| 33 |
+
- backend repo to Hugging Face Docker Space
|
| 34 |
+
- frontend repo to Vercel
|
backend/__init__.py
ADDED
|
File without changes
|
backend/app/__init__.py
ADDED
|
File without changes
|
backend/app/api/__init__.py
ADDED
|
File without changes
|
backend/app/api/compare.py
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import json
|
| 2 |
+
|
| 3 |
+
from fastapi import APIRouter, Depends, Query
|
| 4 |
+
from sqlalchemy.orm import Session
|
| 5 |
+
|
| 6 |
+
from backend.app.db import get_db
|
| 7 |
+
from backend.app.repositories.experiment_repo import get_experiments_by_ids, list_experiments
|
| 8 |
+
|
| 9 |
+
router = APIRouter(tags=["compare"])
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
@router.get("/compare")
|
| 13 |
+
def compare_experiments(experiment_ids: str | None = Query(default=None), db: Session = Depends(get_db)):
|
| 14 |
+
if experiment_ids:
|
| 15 |
+
ids = [x.strip() for x in experiment_ids.split(",") if x.strip()]
|
| 16 |
+
experiments = get_experiments_by_ids(db, ids)
|
| 17 |
+
else:
|
| 18 |
+
experiments = list_experiments(db)
|
| 19 |
+
|
| 20 |
+
return {
|
| 21 |
+
"experiments": [
|
| 22 |
+
{
|
| 23 |
+
"experiment_id": exp.id,
|
| 24 |
+
"dataset_id": exp.dataset_id,
|
| 25 |
+
"algorithm": exp.algorithm,
|
| 26 |
+
"status": exp.status,
|
| 27 |
+
"config": json.loads(exp.config_json) if exp.config_json else {},
|
| 28 |
+
"metrics": json.loads(exp.metrics_json) if exp.metrics_json else {},
|
| 29 |
+
"summary": json.loads(exp.summary_json) if exp.summary_json else {},
|
| 30 |
+
"runtime_ms": exp.runtime_ms,
|
| 31 |
+
"error_message": exp.error_message,
|
| 32 |
+
}
|
| 33 |
+
for exp in experiments
|
| 34 |
+
]
|
| 35 |
+
}
|
backend/app/api/datasets.py
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import json
|
| 2 |
+
from pathlib import Path
|
| 3 |
+
|
| 4 |
+
import pandas as pd
|
| 5 |
+
from fastapi import APIRouter, Depends, File, HTTPException, UploadFile
|
| 6 |
+
from sqlalchemy.orm import Session
|
| 7 |
+
|
| 8 |
+
from backend.app.db import get_db
|
| 9 |
+
from backend.app.repositories.dataset_repo import create_dataset, get_dataset, list_datasets
|
| 10 |
+
from backend.app.services.profiling_service import profile_dataframe
|
| 11 |
+
from backend.app.utils.ids import make_dataset_id
|
| 12 |
+
|
| 13 |
+
router = APIRouter(tags=["datasets"])
|
| 14 |
+
|
| 15 |
+
UPLOAD_DIR = Path("/data/uploads")
|
| 16 |
+
UPLOAD_DIR.mkdir(parents=True, exist_ok=True)
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
@router.get("/datasets")
|
| 20 |
+
def datasets_list(db: Session = Depends(get_db)):
|
| 21 |
+
datasets = list_datasets(db)
|
| 22 |
+
return {
|
| 23 |
+
"datasets": [
|
| 24 |
+
{
|
| 25 |
+
"id": d.id,
|
| 26 |
+
"name": d.name,
|
| 27 |
+
"row_count": d.row_count,
|
| 28 |
+
"column_count": d.column_count,
|
| 29 |
+
}
|
| 30 |
+
for d in datasets
|
| 31 |
+
]
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
|
| 35 |
+
@router.post("/datasets/upload")
|
| 36 |
+
async def upload_dataset(file: UploadFile = File(...), db: Session = Depends(get_db)):
|
| 37 |
+
if not file.filename:
|
| 38 |
+
raise HTTPException(status_code=400, detail="Missing file name")
|
| 39 |
+
|
| 40 |
+
suffix = Path(file.filename).suffix.lower()
|
| 41 |
+
if suffix not in {".csv", ".xlsx", ".xls"}:
|
| 42 |
+
raise HTTPException(status_code=400, detail="Only CSV and Excel files are supported")
|
| 43 |
+
|
| 44 |
+
dataset_id = make_dataset_id()
|
| 45 |
+
path = UPLOAD_DIR / f"{dataset_id}{suffix}"
|
| 46 |
+
|
| 47 |
+
content = await file.read()
|
| 48 |
+
path.write_bytes(content)
|
| 49 |
+
|
| 50 |
+
if suffix == ".csv":
|
| 51 |
+
df = pd.read_csv(path)
|
| 52 |
+
else:
|
| 53 |
+
df = pd.read_excel(path)
|
| 54 |
+
|
| 55 |
+
profile = profile_dataframe(df)
|
| 56 |
+
|
| 57 |
+
create_dataset(
|
| 58 |
+
db=db,
|
| 59 |
+
id=dataset_id,
|
| 60 |
+
name=file.filename,
|
| 61 |
+
file_path=str(path),
|
| 62 |
+
row_count=int(len(df)),
|
| 63 |
+
column_count=int(len(df.columns)),
|
| 64 |
+
schema_json=json.dumps({"columns": list(df.columns)}),
|
| 65 |
+
profile_json=json.dumps(profile),
|
| 66 |
+
)
|
| 67 |
+
|
| 68 |
+
return {
|
| 69 |
+
"dataset_id": dataset_id,
|
| 70 |
+
"name": file.filename,
|
| 71 |
+
"row_count": int(len(df)),
|
| 72 |
+
"column_count": int(len(df.columns)),
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
|
| 76 |
+
@router.get("/datasets/{dataset_id}/profile")
|
| 77 |
+
def dataset_profile(dataset_id: str, db: Session = Depends(get_db)):
|
| 78 |
+
dataset = get_dataset(db, dataset_id)
|
| 79 |
+
if not dataset:
|
| 80 |
+
raise HTTPException(status_code=404, detail="Dataset not found")
|
| 81 |
+
|
| 82 |
+
return {
|
| 83 |
+
"dataset_id": dataset.id,
|
| 84 |
+
"name": dataset.name,
|
| 85 |
+
"row_count": dataset.row_count,
|
| 86 |
+
"column_count": dataset.column_count,
|
| 87 |
+
"schema": json.loads(dataset.schema_json),
|
| 88 |
+
"profile": json.loads(dataset.profile_json),
|
| 89 |
+
}
|
backend/app/api/experiments.py
ADDED
|
@@ -0,0 +1,240 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import json
|
| 2 |
+
import time
|
| 3 |
+
|
| 4 |
+
import pandas as pd
|
| 5 |
+
from fastapi import APIRouter, Depends, HTTPException
|
| 6 |
+
from pydantic import BaseModel
|
| 7 |
+
from sqlalchemy.orm import Session
|
| 8 |
+
from sklearn.cluster import (
|
| 9 |
+
AffinityPropagation,
|
| 10 |
+
AgglomerativeClustering,
|
| 11 |
+
Birch,
|
| 12 |
+
BisectingKMeans,
|
| 13 |
+
DBSCAN,
|
| 14 |
+
KMeans,
|
| 15 |
+
MeanShift,
|
| 16 |
+
MiniBatchKMeans,
|
| 17 |
+
OPTICS,
|
| 18 |
+
SpectralClustering,
|
| 19 |
+
)
|
| 20 |
+
from sklearn.decomposition import PCA
|
| 21 |
+
from sklearn.metrics import silhouette_score
|
| 22 |
+
from sklearn.mixture import GaussianMixture
|
| 23 |
+
|
| 24 |
+
from backend.app.db import get_db
|
| 25 |
+
from backend.app.repositories.dataset_repo import get_dataset
|
| 26 |
+
from backend.app.repositories.experiment_repo import create_experiment
|
| 27 |
+
from backend.app.utils.ids import make_experiment_id
|
| 28 |
+
|
| 29 |
+
try:
|
| 30 |
+
import hdbscan
|
| 31 |
+
except ImportError:
|
| 32 |
+
hdbscan = None
|
| 33 |
+
|
| 34 |
+
router = APIRouter(tags=["experiments"])
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
class RunRequest(BaseModel):
|
| 38 |
+
dataset_id: str
|
| 39 |
+
name: str | None = None
|
| 40 |
+
algorithm: str = "kmeans"
|
| 41 |
+
n_clusters: int = 4
|
| 42 |
+
feature_columns: list[str]
|
| 43 |
+
algorithm_params: dict | None = None
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
def build_model(algorithm: str, n_clusters: int, params: dict):
|
| 47 |
+
if algorithm == "kmeans":
|
| 48 |
+
return KMeans(
|
| 49 |
+
n_clusters=params.get("n_clusters", n_clusters),
|
| 50 |
+
n_init=10,
|
| 51 |
+
random_state=42,
|
| 52 |
+
), "fit_predict"
|
| 53 |
+
|
| 54 |
+
if algorithm == "mini_batch_kmeans":
|
| 55 |
+
return MiniBatchKMeans(
|
| 56 |
+
n_clusters=params.get("n_clusters", n_clusters),
|
| 57 |
+
random_state=42,
|
| 58 |
+
batch_size=params.get("batch_size", 1024),
|
| 59 |
+
), "fit_predict"
|
| 60 |
+
|
| 61 |
+
if algorithm == "agglomerative":
|
| 62 |
+
return AgglomerativeClustering(
|
| 63 |
+
n_clusters=params.get("n_clusters", n_clusters),
|
| 64 |
+
linkage=params.get("linkage", "ward"),
|
| 65 |
+
), "fit_predict"
|
| 66 |
+
|
| 67 |
+
if algorithm == "birch":
|
| 68 |
+
return Birch(
|
| 69 |
+
n_clusters=params.get("n_clusters", n_clusters),
|
| 70 |
+
threshold=params.get("threshold", 0.5),
|
| 71 |
+
), "fit_predict"
|
| 72 |
+
|
| 73 |
+
if algorithm == "dbscan":
|
| 74 |
+
return DBSCAN(
|
| 75 |
+
eps=params.get("eps", 0.5),
|
| 76 |
+
min_samples=params.get("min_samples", 5),
|
| 77 |
+
), "fit_predict"
|
| 78 |
+
|
| 79 |
+
if algorithm == "optics":
|
| 80 |
+
return OPTICS(
|
| 81 |
+
min_samples=params.get("min_samples", 5),
|
| 82 |
+
), "fit_predict"
|
| 83 |
+
|
| 84 |
+
if algorithm == "mean_shift":
|
| 85 |
+
return MeanShift(), "fit_predict"
|
| 86 |
+
|
| 87 |
+
if algorithm == "spectral":
|
| 88 |
+
return SpectralClustering(
|
| 89 |
+
n_clusters=params.get("n_clusters", n_clusters),
|
| 90 |
+
random_state=42,
|
| 91 |
+
assign_labels="kmeans",
|
| 92 |
+
affinity=params.get("affinity", "nearest_neighbors"),
|
| 93 |
+
), "fit_predict"
|
| 94 |
+
|
| 95 |
+
if algorithm == "gaussian_mixture":
|
| 96 |
+
return GaussianMixture(
|
| 97 |
+
n_components=params.get("n_components", n_clusters),
|
| 98 |
+
random_state=42,
|
| 99 |
+
), "predict_after_fit"
|
| 100 |
+
|
| 101 |
+
if algorithm == "affinity_propagation":
|
| 102 |
+
return AffinityPropagation(random_state=42), "fit_predict"
|
| 103 |
+
|
| 104 |
+
if algorithm == "bisecting_kmeans":
|
| 105 |
+
return BisectingKMeans(
|
| 106 |
+
n_clusters=params.get("n_clusters", n_clusters),
|
| 107 |
+
random_state=42,
|
| 108 |
+
), "fit_predict"
|
| 109 |
+
|
| 110 |
+
if algorithm == "hdbscan":
|
| 111 |
+
if hdbscan is None:
|
| 112 |
+
raise HTTPException(status_code=400, detail="HDBSCAN is not installed")
|
| 113 |
+
return hdbscan.HDBSCAN(
|
| 114 |
+
min_cluster_size=params.get("min_cluster_size", 10),
|
| 115 |
+
min_samples=params.get("min_samples", 5),
|
| 116 |
+
), "fit_predict"
|
| 117 |
+
|
| 118 |
+
raise HTTPException(status_code=400, detail="Unsupported algorithm")
|
| 119 |
+
|
| 120 |
+
|
| 121 |
+
@router.post("/experiments/run")
|
| 122 |
+
def run_experiment(req: RunRequest, db: Session = Depends(get_db)):
|
| 123 |
+
dataset = get_dataset(db, req.dataset_id)
|
| 124 |
+
if not dataset:
|
| 125 |
+
raise HTTPException(status_code=404, detail="Dataset not found")
|
| 126 |
+
|
| 127 |
+
if dataset.file_path.endswith(".csv"):
|
| 128 |
+
df = pd.read_csv(dataset.file_path)
|
| 129 |
+
else:
|
| 130 |
+
df = pd.read_excel(dataset.file_path)
|
| 131 |
+
|
| 132 |
+
if not req.feature_columns:
|
| 133 |
+
raise HTTPException(status_code=400, detail="feature_columns is required")
|
| 134 |
+
|
| 135 |
+
missing = [c for c in req.feature_columns if c not in df.columns]
|
| 136 |
+
if missing:
|
| 137 |
+
raise HTTPException(status_code=400, detail=f"Missing columns: {', '.join(missing)}")
|
| 138 |
+
|
| 139 |
+
X = df[req.feature_columns].copy()
|
| 140 |
+
X = pd.get_dummies(X)
|
| 141 |
+
X = X.fillna(0)
|
| 142 |
+
|
| 143 |
+
params = req.algorithm_params or {}
|
| 144 |
+
start = time.time()
|
| 145 |
+
|
| 146 |
+
model, mode = build_model(req.algorithm, req.n_clusters, params)
|
| 147 |
+
|
| 148 |
+
if mode == "fit_predict":
|
| 149 |
+
labels = model.fit_predict(X)
|
| 150 |
+
elif mode == "predict_after_fit":
|
| 151 |
+
model.fit(X)
|
| 152 |
+
labels = model.predict(X)
|
| 153 |
+
else:
|
| 154 |
+
raise HTTPException(status_code=400, detail="Invalid model execution mode")
|
| 155 |
+
|
| 156 |
+
runtime_ms = int((time.time() - start) * 1000)
|
| 157 |
+
unique_labels = sorted(set(labels.tolist()))
|
| 158 |
+
|
| 159 |
+
score = None
|
| 160 |
+
valid_labels = [x for x in unique_labels if x != -1]
|
| 161 |
+
if len(valid_labels) > 1 and len(valid_labels) < len(X):
|
| 162 |
+
try:
|
| 163 |
+
score = float(silhouette_score(X, labels))
|
| 164 |
+
except Exception:
|
| 165 |
+
score = None
|
| 166 |
+
|
| 167 |
+
pca = PCA(n_components=2, random_state=42)
|
| 168 |
+
coords = pca.fit_transform(X)
|
| 169 |
+
|
| 170 |
+
points = [
|
| 171 |
+
{
|
| 172 |
+
"row_index": int(i),
|
| 173 |
+
"cluster_label": int(labels[i]),
|
| 174 |
+
"x": float(coords[i][0]),
|
| 175 |
+
"y": float(coords[i][1]),
|
| 176 |
+
}
|
| 177 |
+
for i in range(len(labels))
|
| 178 |
+
]
|
| 179 |
+
|
| 180 |
+
cluster_sizes = {str(label): int((labels == label).sum()) for label in unique_labels}
|
| 181 |
+
experiment_id = make_experiment_id()
|
| 182 |
+
|
| 183 |
+
metrics = {
|
| 184 |
+
"silhouette_score": score,
|
| 185 |
+
"cluster_count": len(valid_labels) if valid_labels else len(unique_labels),
|
| 186 |
+
"row_count": int(len(X)),
|
| 187 |
+
"runtime_ms": runtime_ms,
|
| 188 |
+
"noise_count": int((labels == -1).sum()) if -1 in unique_labels else 0,
|
| 189 |
+
}
|
| 190 |
+
|
| 191 |
+
summary = {
|
| 192 |
+
"feature_columns": req.feature_columns,
|
| 193 |
+
"cluster_sizes": cluster_sizes,
|
| 194 |
+
"points": points,
|
| 195 |
+
}
|
| 196 |
+
|
| 197 |
+
create_experiment(
|
| 198 |
+
db=db,
|
| 199 |
+
id=experiment_id,
|
| 200 |
+
dataset_id=req.dataset_id,
|
| 201 |
+
algorithm=req.algorithm,
|
| 202 |
+
status="completed",
|
| 203 |
+
config_json=json.dumps(req.model_dump()),
|
| 204 |
+
metrics_json=json.dumps(metrics),
|
| 205 |
+
summary_json=json.dumps(summary),
|
| 206 |
+
runtime_ms=runtime_ms,
|
| 207 |
+
error_message=None,
|
| 208 |
+
)
|
| 209 |
+
|
| 210 |
+
return {
|
| 211 |
+
"experiment_id": experiment_id,
|
| 212 |
+
"status": "completed",
|
| 213 |
+
"silhouette_score": score,
|
| 214 |
+
"cluster_count": metrics["cluster_count"],
|
| 215 |
+
"cluster_sizes": cluster_sizes,
|
| 216 |
+
"runtime_ms": runtime_ms,
|
| 217 |
+
"noise_count": metrics["noise_count"],
|
| 218 |
+
"points": points,
|
| 219 |
+
}
|
| 220 |
+
|
| 221 |
+
|
| 222 |
+
@router.get("/experiments/{experiment_id}/results")
|
| 223 |
+
def experiment_results(experiment_id: str, db: Session = Depends(get_db)):
|
| 224 |
+
from backend.app.repositories.experiment_repo import get_experiment
|
| 225 |
+
|
| 226 |
+
exp = get_experiment(db, experiment_id)
|
| 227 |
+
if not exp:
|
| 228 |
+
raise HTTPException(status_code=404, detail="Experiment not found")
|
| 229 |
+
|
| 230 |
+
return {
|
| 231 |
+
"experiment_id": exp.id,
|
| 232 |
+
"dataset_id": exp.dataset_id,
|
| 233 |
+
"algorithm": exp.algorithm,
|
| 234 |
+
"status": exp.status,
|
| 235 |
+
"config": json.loads(exp.config_json) if exp.config_json else {},
|
| 236 |
+
"metrics": json.loads(exp.metrics_json) if exp.metrics_json else {},
|
| 237 |
+
"summary": json.loads(exp.summary_json) if exp.summary_json else {},
|
| 238 |
+
"runtime_ms": exp.runtime_ms,
|
| 239 |
+
"error_message": exp.error_message,
|
| 240 |
+
}
|
backend/app/api/exports.py
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import io
|
| 2 |
+
import json
|
| 3 |
+
|
| 4 |
+
import pandas as pd
|
| 5 |
+
from fastapi import APIRouter, Depends, HTTPException
|
| 6 |
+
from fastapi.responses import StreamingResponse
|
| 7 |
+
from sqlalchemy.orm import Session
|
| 8 |
+
|
| 9 |
+
from backend.app.db import get_db
|
| 10 |
+
from backend.app.repositories.dataset_repo import get_dataset
|
| 11 |
+
from backend.app.repositories.experiment_repo import get_experiment
|
| 12 |
+
|
| 13 |
+
router = APIRouter(tags=["exports"])
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
@router.get("/exports/{experiment_id}")
|
| 17 |
+
def export_experiment(experiment_id: str, db: Session = Depends(get_db)):
|
| 18 |
+
experiment = get_experiment(db, experiment_id)
|
| 19 |
+
if not experiment:
|
| 20 |
+
raise HTTPException(status_code=404, detail="Experiment not found")
|
| 21 |
+
|
| 22 |
+
dataset = get_dataset(db, experiment.dataset_id)
|
| 23 |
+
if not dataset:
|
| 24 |
+
raise HTTPException(status_code=404, detail="Dataset not found")
|
| 25 |
+
|
| 26 |
+
if dataset.file_path.endswith(".csv"):
|
| 27 |
+
df = pd.read_csv(dataset.file_path)
|
| 28 |
+
else:
|
| 29 |
+
df = pd.read_excel(dataset.file_path)
|
| 30 |
+
|
| 31 |
+
summary = json.loads(experiment.summary_json) if experiment.summary_json else {}
|
| 32 |
+
points = summary.get("points", [])
|
| 33 |
+
export_df = df.copy()
|
| 34 |
+
if points and len(points) == len(df):
|
| 35 |
+
export_df["cluster_label"] = [p["cluster_label"] for p in points]
|
| 36 |
+
export_df["pca_x"] = [p["x"] for p in points]
|
| 37 |
+
export_df["pca_y"] = [p["y"] for p in points]
|
| 38 |
+
|
| 39 |
+
metrics = json.loads(experiment.metrics_json) if experiment.metrics_json else {}
|
| 40 |
+
for key, value in metrics.items():
|
| 41 |
+
export_df[f"metric_{key}"] = value
|
| 42 |
+
|
| 43 |
+
buffer = io.StringIO()
|
| 44 |
+
export_df.to_csv(buffer, index=False)
|
| 45 |
+
buffer.seek(0)
|
| 46 |
+
|
| 47 |
+
return StreamingResponse(
|
| 48 |
+
iter([buffer.getvalue()]),
|
| 49 |
+
media_type="text/csv",
|
| 50 |
+
headers={"Content-Disposition": f"attachment; filename={experiment_id}_export.csv"},
|
| 51 |
+
)
|
backend/app/api/health.py
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from fastapi import APIRouter
|
| 2 |
+
|
| 3 |
+
router = APIRouter(tags=["health"])
|
| 4 |
+
|
| 5 |
+
@router.get("/health")
|
| 6 |
+
def health():
|
| 7 |
+
return {"ok": True, "service": "clusterbuster-api"}
|
backend/app/api/presets.py
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from fastapi import APIRouter
|
| 2 |
+
|
| 3 |
+
router = APIRouter(tags=["presets"])
|
| 4 |
+
|
| 5 |
+
|
| 6 |
+
@router.get("/presets/algorithms")
|
| 7 |
+
def list_algorithms():
|
| 8 |
+
return {
|
| 9 |
+
"algorithms": [
|
| 10 |
+
{"key": "kmeans", "label": "KMeans", "params": {"n_clusters": 4}},
|
| 11 |
+
{"key": "mini_batch_kmeans", "label": "MiniBatchKMeans", "params": {"n_clusters": 4, "batch_size": 1024}},
|
| 12 |
+
{"key": "agglomerative", "label": "Agglomerative", "params": {"n_clusters": 4}},
|
| 13 |
+
{"key": "birch", "label": "Birch", "params": {"n_clusters": 4, "threshold": 0.5}},
|
| 14 |
+
{"key": "dbscan", "label": "DBSCAN", "params": {"eps": 0.5, "min_samples": 5}},
|
| 15 |
+
{"key": "optics", "label": "OPTICS", "params": {"min_samples": 5}},
|
| 16 |
+
{"key": "mean_shift", "label": "Mean Shift", "params": {}},
|
| 17 |
+
{"key": "spectral", "label": "Spectral Clustering", "params": {"n_clusters": 4, "affinity": "nearest_neighbors"}},
|
| 18 |
+
{"key": "gaussian_mixture", "label": "Gaussian Mixture", "params": {"n_components": 4}},
|
| 19 |
+
{"key": "affinity_propagation", "label": "Affinity Propagation", "params": {}},
|
| 20 |
+
{"key": "bisecting_kmeans", "label": "Bisecting KMeans", "params": {"n_clusters": 4}},
|
| 21 |
+
{"key": "hdbscan", "label": "HDBSCAN", "params": {"min_cluster_size": 10, "min_samples": 5}}
|
| 22 |
+
]
|
| 23 |
+
}
|
backend/app/api/runs.py
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import json
|
| 2 |
+
|
| 3 |
+
from fastapi import APIRouter, Depends
|
| 4 |
+
from sqlalchemy.orm import Session
|
| 5 |
+
|
| 6 |
+
from backend.app.db import get_db
|
| 7 |
+
from backend.app.repositories.experiment_repo import list_experiments
|
| 8 |
+
|
| 9 |
+
router = APIRouter(tags=["runs"])
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
@router.get("/runs")
|
| 13 |
+
def get_runs(db: Session = Depends(get_db)):
|
| 14 |
+
experiments = list_experiments(db)
|
| 15 |
+
return {
|
| 16 |
+
"runs": [
|
| 17 |
+
{
|
| 18 |
+
"experiment_id": exp.id,
|
| 19 |
+
"dataset_id": exp.dataset_id,
|
| 20 |
+
"algorithm": exp.algorithm,
|
| 21 |
+
"status": exp.status,
|
| 22 |
+
"metrics": json.loads(exp.metrics_json) if exp.metrics_json else {},
|
| 23 |
+
"summary": json.loads(exp.summary_json) if exp.summary_json else {},
|
| 24 |
+
"runtime_ms": exp.runtime_ms,
|
| 25 |
+
"error_message": exp.error_message,
|
| 26 |
+
}
|
| 27 |
+
for exp in experiments
|
| 28 |
+
]
|
| 29 |
+
}
|
backend/app/db.py
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
from sqlalchemy import create_engine
|
| 3 |
+
from sqlalchemy.orm import declarative_base, sessionmaker
|
| 4 |
+
|
| 5 |
+
DB_PATH = os.getenv("DB_PATH", "/data/clusterforge.db")
|
| 6 |
+
DATABASE_URL = f"sqlite:///{DB_PATH}"
|
| 7 |
+
|
| 8 |
+
engine = create_engine(
|
| 9 |
+
DATABASE_URL,
|
| 10 |
+
connect_args={"check_same_thread": False},
|
| 11 |
+
)
|
| 12 |
+
|
| 13 |
+
SessionLocal = sessionmaker(
|
| 14 |
+
autocommit=False,
|
| 15 |
+
autoflush=False,
|
| 16 |
+
bind=engine,
|
| 17 |
+
)
|
| 18 |
+
|
| 19 |
+
Base = declarative_base()
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
def init_db() -> None:
|
| 23 |
+
import backend.app.models.dataset
|
| 24 |
+
import backend.app.models.experiment
|
| 25 |
+
|
| 26 |
+
Base.metadata.create_all(bind=engine)
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def get_db():
|
| 30 |
+
db = SessionLocal()
|
| 31 |
+
try:
|
| 32 |
+
yield db
|
| 33 |
+
finally:
|
| 34 |
+
db.close()
|
backend/app/main.py
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from fastapi import FastAPI
|
| 2 |
+
from fastapi.middleware.cors import CORSMiddleware
|
| 3 |
+
|
| 4 |
+
from backend.app.db import init_db
|
| 5 |
+
from backend.app.api.health import router as health_router
|
| 6 |
+
from backend.app.api.datasets import router as datasets_router
|
| 7 |
+
from backend.app.api.presets import router as presets_router
|
| 8 |
+
from backend.app.api.experiments import router as experiments_router
|
| 9 |
+
from backend.app.api.compare import router as compare_router
|
| 10 |
+
from backend.app.api.exports import router as exports_router
|
| 11 |
+
from backend.app.api.runs import router as runs_router
|
| 12 |
+
|
| 13 |
+
app = FastAPI(title="ClusterBuster API")
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
@app.on_event("startup")
|
| 17 |
+
def on_startup() -> None:
|
| 18 |
+
init_db()
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
origins = [
|
| 22 |
+
"http://localhost:3000",
|
| 23 |
+
"https://cluster-buster.vercel.app",
|
| 24 |
+
]
|
| 25 |
+
|
| 26 |
+
app.add_middleware(
|
| 27 |
+
CORSMiddleware,
|
| 28 |
+
allow_origins=origins,
|
| 29 |
+
allow_credentials=True,
|
| 30 |
+
allow_methods=["*"],
|
| 31 |
+
allow_headers=["*"],
|
| 32 |
+
)
|
| 33 |
+
|
| 34 |
+
app.include_router(health_router, prefix="/api")
|
| 35 |
+
app.include_router(datasets_router, prefix="/api")
|
| 36 |
+
app.include_router(presets_router, prefix="/api")
|
| 37 |
+
app.include_router(experiments_router, prefix="/api")
|
| 38 |
+
app.include_router(compare_router, prefix="/api")
|
| 39 |
+
app.include_router(exports_router, prefix="/api")
|
| 40 |
+
app.include_router(runs_router, prefix="/api")
|
| 41 |
+
|
| 42 |
+
|
| 43 |
+
@app.get("/")
|
| 44 |
+
def root():
|
| 45 |
+
return {"ok": True, "service": "clusterbuster-api"}
|
backend/app/models/__init__.py
ADDED
|
File without changes
|
backend/app/models/dataset.py
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from sqlalchemy import Column, Integer, String, Text
|
| 2 |
+
from backend.app.db import Base
|
| 3 |
+
|
| 4 |
+
|
| 5 |
+
class Dataset(Base):
|
| 6 |
+
__tablename__ = "datasets"
|
| 7 |
+
|
| 8 |
+
id = Column(String, primary_key=True, index=True)
|
| 9 |
+
name = Column(String, nullable=False)
|
| 10 |
+
file_path = Column(String, nullable=False)
|
| 11 |
+
row_count = Column(Integer, nullable=False)
|
| 12 |
+
column_count = Column(Integer, nullable=False)
|
| 13 |
+
schema_json = Column(Text, nullable=False)
|
| 14 |
+
profile_json = Column(Text, nullable=False)
|
backend/app/models/experiment.py
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from sqlalchemy import Column, Integer, String, Text
|
| 2 |
+
from backend.app.db import Base
|
| 3 |
+
|
| 4 |
+
|
| 5 |
+
class Experiment(Base):
|
| 6 |
+
__tablename__ = "experiments"
|
| 7 |
+
|
| 8 |
+
id = Column(String, primary_key=True, index=True)
|
| 9 |
+
dataset_id = Column(String, nullable=False, index=True)
|
| 10 |
+
algorithm = Column(String, nullable=False)
|
| 11 |
+
status = Column(String, nullable=False)
|
| 12 |
+
config_json = Column(Text, nullable=True)
|
| 13 |
+
metrics_json = Column(Text, nullable=True)
|
| 14 |
+
summary_json = Column(Text, nullable=True)
|
| 15 |
+
runtime_ms = Column(Integer, nullable=True)
|
| 16 |
+
error_message = Column(Text, nullable=True)
|
backend/app/repositories/__init__.py
ADDED
|
File without changes
|
backend/app/repositories/dataset_repo.py
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from sqlalchemy.orm import Session
|
| 2 |
+
from backend.app.models.dataset import Dataset
|
| 3 |
+
|
| 4 |
+
|
| 5 |
+
def create_dataset(
|
| 6 |
+
db: Session,
|
| 7 |
+
id: str,
|
| 8 |
+
name: str,
|
| 9 |
+
file_path: str,
|
| 10 |
+
row_count: int,
|
| 11 |
+
column_count: int,
|
| 12 |
+
schema_json: str,
|
| 13 |
+
profile_json: str,
|
| 14 |
+
) -> Dataset:
|
| 15 |
+
dataset = Dataset(
|
| 16 |
+
id=id,
|
| 17 |
+
name=name,
|
| 18 |
+
file_path=file_path,
|
| 19 |
+
row_count=row_count,
|
| 20 |
+
column_count=column_count,
|
| 21 |
+
schema_json=schema_json,
|
| 22 |
+
profile_json=profile_json,
|
| 23 |
+
)
|
| 24 |
+
db.add(dataset)
|
| 25 |
+
db.commit()
|
| 26 |
+
db.refresh(dataset)
|
| 27 |
+
return dataset
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
def get_dataset(db: Session, dataset_id: str) -> Dataset | None:
|
| 31 |
+
return db.query(Dataset).filter(Dataset.id == dataset_id).first()
|
| 32 |
+
|
| 33 |
+
|
| 34 |
+
def list_datasets(db: Session) -> list[Dataset]:
|
| 35 |
+
return db.query(Dataset).order_by(Dataset.name.asc()).all()
|
backend/app/repositories/experiment_repo.py
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from sqlalchemy.orm import Session
|
| 2 |
+
from backend.app.models.experiment import Experiment
|
| 3 |
+
|
| 4 |
+
|
| 5 |
+
def create_experiment(
|
| 6 |
+
db: Session,
|
| 7 |
+
id: str,
|
| 8 |
+
dataset_id: str,
|
| 9 |
+
algorithm: str,
|
| 10 |
+
status: str,
|
| 11 |
+
config_json: str | None = None,
|
| 12 |
+
metrics_json: str | None = None,
|
| 13 |
+
summary_json: str | None = None,
|
| 14 |
+
runtime_ms: int | None = None,
|
| 15 |
+
error_message: str | None = None,
|
| 16 |
+
) -> Experiment:
|
| 17 |
+
experiment = Experiment(
|
| 18 |
+
id=id,
|
| 19 |
+
dataset_id=dataset_id,
|
| 20 |
+
algorithm=algorithm,
|
| 21 |
+
status=status,
|
| 22 |
+
config_json=config_json,
|
| 23 |
+
metrics_json=metrics_json,
|
| 24 |
+
summary_json=summary_json,
|
| 25 |
+
runtime_ms=runtime_ms,
|
| 26 |
+
error_message=error_message,
|
| 27 |
+
)
|
| 28 |
+
db.add(experiment)
|
| 29 |
+
db.commit()
|
| 30 |
+
db.refresh(experiment)
|
| 31 |
+
return experiment
|
| 32 |
+
|
| 33 |
+
|
| 34 |
+
def get_experiment(db: Session, experiment_id: str) -> Experiment | None:
|
| 35 |
+
return db.query(Experiment).filter(Experiment.id == experiment_id).first()
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
def list_experiments(db: Session) -> list[Experiment]:
|
| 39 |
+
return db.query(Experiment).order_by(Experiment.id.desc()).all()
|
| 40 |
+
|
| 41 |
+
|
| 42 |
+
def get_experiments_by_ids(db: Session, experiment_ids: list[str]) -> list[Experiment]:
|
| 43 |
+
if not experiment_ids:
|
| 44 |
+
return []
|
| 45 |
+
return db.query(Experiment).filter(Experiment.id.in_(experiment_ids)).all()
|
backend/app/services/__init__.py
ADDED
|
File without changes
|
backend/app/services/profiling_service.py
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
def profile_dataframe(df):
|
| 2 |
+
numeric_cols = df.select_dtypes(include=["int64", "float64", "int32", "float32"]).columns.tolist()
|
| 3 |
+
categorical_cols = df.select_dtypes(include=["object", "bool"]).columns.tolist()
|
| 4 |
+
|
| 5 |
+
recommended = []
|
| 6 |
+
if numeric_cols:
|
| 7 |
+
recommended.extend(["kmeans", "mini_batch_kmeans", "birch", "bisecting_kmeans", "gaussian_mixture"])
|
| 8 |
+
if categorical_cols:
|
| 9 |
+
recommended.extend(["agglomerative", "dbscan", "optics", "spectral", "hdbscan"])
|
| 10 |
+
|
| 11 |
+
cols = []
|
| 12 |
+
for col in df.columns:
|
| 13 |
+
cols.append({
|
| 14 |
+
"name": col,
|
| 15 |
+
"inferred_type": str(df[col].dtype),
|
| 16 |
+
"missing_pct": float(df[col].isna().mean()),
|
| 17 |
+
"cardinality": int(df[col].nunique(dropna=True)),
|
| 18 |
+
})
|
| 19 |
+
|
| 20 |
+
return {
|
| 21 |
+
"columns": cols,
|
| 22 |
+
"recommended_algorithms": recommended,
|
| 23 |
+
}
|
backend/app/utils/__init__.py
ADDED
|
File without changes
|
backend/app/utils/ids.py
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import secrets
|
| 2 |
+
|
| 3 |
+
def make_dataset_id() -> str:
|
| 4 |
+
return "ds_" + secrets.token_hex(4)
|
| 5 |
+
|
| 6 |
+
def make_experiment_id() -> str:
|
| 7 |
+
return "exp_" + secrets.token_hex(4)
|
data_samples/access_demo.csv
ADDED
|
@@ -0,0 +1,801 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
user_id,department,title,location,application_name,entitlement_count,privileged_access_flag,mfa_enabled,risk_score,peer_access_overlap_score,last_login_days_ago,granted_count_6m,revoked_count_6m,review_count_6m,sensitive_access_flag
|
| 2 |
+
user_0,Engineering,Admin,SF,SAP,26,0,1,0.765,0.798,3,19,1,4,0
|
| 3 |
+
user_1,Sales,Specialist,Remote,Oracle,11,1,1,0.377,0.531,37,1,5,8,0
|
| 4 |
+
user_2,Finance,Engineer,NY,Workday,27,0,1,0.807,0.237,40,16,8,6,1
|
| 5 |
+
user_3,HR,Manager,NY,Workday,20,0,1,0.613,0.878,7,17,4,12,0
|
| 6 |
+
user_4,Engineering,Manager,Remote,Jira,21,1,0,0.611,0.231,178,13,0,5,1
|
| 7 |
+
user_5,Sales,Engineer,Remote,GitHub,12,0,1,0.652,0.203,180,7,0,10,1
|
| 8 |
+
user_6,HR,Manager,NY,SAP,15,0,1,0.81,0.448,91,13,0,2,1
|
| 9 |
+
user_7,HR,Engineer,SF,GitHub,10,0,0,0.651,0.457,172,3,0,6,1
|
| 10 |
+
user_8,Sales,Manager,SF,SAP,12,0,1,0.852,0.489,4,0,10,3,0
|
| 11 |
+
user_9,Support,Manager,NY,SAP,43,1,0,0.724,0.607,65,9,10,7,0
|
| 12 |
+
user_10,Engineering,Analyst,Remote,Workday,35,1,0,0.377,0.2,147,20,9,9,1
|
| 13 |
+
user_11,Support,Admin,TX,Jira,5,1,1,0.413,0.318,43,18,0,3,0
|
| 14 |
+
user_12,Sales,Manager,SF,Jira,34,1,0,0.683,0.938,166,7,7,1,1
|
| 15 |
+
user_13,Finance,Manager,TX,Jira,14,1,1,0.666,0.848,150,0,5,8,0
|
| 16 |
+
user_14,Support,Admin,Remote,Oracle,20,1,0,0.264,0.103,178,11,8,8,0
|
| 17 |
+
user_15,Engineering,Admin,TX,Oracle,32,1,0,0.868,0.902,23,14,3,3,0
|
| 18 |
+
user_16,Sales,Specialist,Remote,Workday,41,1,1,0.355,0.453,170,14,9,9,0
|
| 19 |
+
user_17,Finance,Manager,SF,SAP,45,1,0,0.697,0.947,161,8,0,7,0
|
| 20 |
+
user_18,Sales,Analyst,SF,Oracle,18,0,0,0.84,0.851,104,14,4,6,0
|
| 21 |
+
user_19,Support,Engineer,NY,SAP,42,1,1,0.748,0.599,142,7,8,9,0
|
| 22 |
+
user_20,Support,Specialist,TX,Oracle,25,1,0,0.705,0.15,145,10,6,5,1
|
| 23 |
+
user_21,Support,Specialist,Remote,GitHub,11,0,1,0.842,0.609,31,9,9,1,1
|
| 24 |
+
user_22,Sales,Admin,TX,Oracle,27,1,0,0.919,0.189,32,13,1,11,0
|
| 25 |
+
user_23,Sales,Engineer,TX,Oracle,25,0,0,0.924,0.607,55,5,4,1,1
|
| 26 |
+
user_24,Finance,Engineer,NY,SAP,6,0,0,0.715,0.492,163,5,9,2,0
|
| 27 |
+
user_25,Support,Manager,NY,Oracle,13,0,1,0.303,0.549,100,5,2,1,0
|
| 28 |
+
user_26,Engineering,Analyst,Remote,Oracle,6,0,1,0.34,0.279,143,6,3,3,0
|
| 29 |
+
user_27,Engineering,Analyst,SF,Oracle,20,0,0,0.92,0.374,159,3,1,7,0
|
| 30 |
+
user_28,Finance,Specialist,SF,GitHub,21,1,1,0.221,0.965,135,14,0,12,0
|
| 31 |
+
user_29,HR,Analyst,SF,Oracle,29,0,1,0.95,0.693,135,0,2,9,1
|
| 32 |
+
user_30,Sales,Engineer,Remote,Oracle,26,0,1,0.715,0.709,30,20,7,10,0
|
| 33 |
+
user_31,Engineering,Engineer,SF,SAP,9,0,1,0.738,0.235,140,16,4,11,1
|
| 34 |
+
user_32,HR,Engineer,TX,Jira,6,1,1,0.61,0.504,136,16,5,5,0
|
| 35 |
+
user_33,Sales,Admin,SF,Oracle,42,0,0,0.371,0.691,139,0,0,3,0
|
| 36 |
+
user_34,HR,Analyst,NY,Oracle,15,0,0,0.367,0.421,79,3,7,6,0
|
| 37 |
+
user_35,Sales,Specialist,TX,SAP,28,1,0,0.833,0.317,89,8,0,12,0
|
| 38 |
+
user_36,Sales,Analyst,SF,Oracle,23,1,0,0.643,0.479,125,9,2,12,1
|
| 39 |
+
user_37,Sales,Analyst,TX,Jira,9,1,1,0.245,0.476,37,12,7,6,0
|
| 40 |
+
user_38,Sales,Specialist,Remote,Oracle,14,1,1,0.229,0.767,174,10,7,3,1
|
| 41 |
+
user_39,Engineering,Admin,SF,GitHub,35,1,1,0.46,0.101,57,1,6,10,1
|
| 42 |
+
user_40,Support,Admin,NY,SAP,43,1,1,0.946,0.904,97,13,9,4,0
|
| 43 |
+
user_41,Sales,Admin,SF,SAP,36,0,1,0.82,0.923,174,16,7,1,0
|
| 44 |
+
user_42,Sales,Specialist,Remote,SAP,29,1,0,0.305,0.286,11,16,8,1,1
|
| 45 |
+
user_43,Support,Manager,TX,SAP,14,0,0,0.72,0.557,89,18,2,2,0
|
| 46 |
+
user_44,Support,Manager,NY,SAP,34,1,1,0.759,0.27,116,0,5,8,0
|
| 47 |
+
user_45,Engineering,Analyst,Remote,Oracle,5,0,1,0.707,0.578,150,9,7,9,1
|
| 48 |
+
user_46,Engineering,Engineer,Remote,Workday,26,0,1,0.798,0.664,143,3,5,4,0
|
| 49 |
+
user_47,Engineering,Engineer,SF,Jira,30,1,1,0.864,0.135,83,19,6,2,0
|
| 50 |
+
user_48,Finance,Specialist,Remote,Jira,16,0,1,0.553,0.953,3,19,6,0,0
|
| 51 |
+
user_49,HR,Specialist,Remote,GitHub,12,1,1,0.372,0.712,66,14,4,9,0
|
| 52 |
+
user_50,HR,Analyst,TX,Workday,20,1,0,0.817,0.818,91,0,8,0,0
|
| 53 |
+
user_51,HR,Analyst,SF,SAP,36,0,1,0.591,0.776,119,8,4,3,0
|
| 54 |
+
user_52,Finance,Engineer,NY,SAP,30,0,0,0.672,0.822,33,10,0,4,0
|
| 55 |
+
user_53,Support,Manager,TX,Oracle,10,1,1,0.302,0.819,54,17,0,8,1
|
| 56 |
+
user_54,Engineering,Manager,NY,Jira,42,1,1,0.901,0.6,91,19,3,10,1
|
| 57 |
+
user_55,Engineering,Manager,Remote,Workday,41,1,1,0.552,0.34,49,16,6,3,1
|
| 58 |
+
user_56,Support,Admin,TX,Oracle,21,1,1,0.754,0.359,30,7,7,0,1
|
| 59 |
+
user_57,HR,Analyst,TX,GitHub,28,0,0,0.666,0.409,112,12,10,1,1
|
| 60 |
+
user_58,Support,Engineer,TX,SAP,22,0,1,0.889,0.952,40,18,5,8,0
|
| 61 |
+
user_59,Finance,Analyst,NY,SAP,9,1,0,0.912,0.358,8,16,7,10,0
|
| 62 |
+
user_60,Support,Manager,NY,SAP,23,0,0,0.518,0.391,166,18,3,9,1
|
| 63 |
+
user_61,Finance,Admin,SF,GitHub,20,1,0,0.576,0.236,55,4,5,8,1
|
| 64 |
+
user_62,Support,Admin,Remote,Oracle,43,0,0,0.721,0.693,140,15,6,4,0
|
| 65 |
+
user_63,Finance,Specialist,Remote,SAP,44,1,1,0.78,0.904,5,16,10,11,1
|
| 66 |
+
user_64,Engineering,Engineer,SF,SAP,21,1,0,0.934,0.489,65,15,4,4,0
|
| 67 |
+
user_65,Engineering,Engineer,NY,SAP,31,1,1,0.689,0.757,144,6,1,6,1
|
| 68 |
+
user_66,HR,Specialist,SF,GitHub,15,1,1,0.692,0.576,62,14,5,6,0
|
| 69 |
+
user_67,HR,Specialist,TX,Oracle,43,1,0,0.437,0.913,75,17,10,7,1
|
| 70 |
+
user_68,Support,Engineer,Remote,SAP,45,1,1,0.75,0.724,176,19,3,1,1
|
| 71 |
+
user_69,Finance,Engineer,Remote,Workday,20,0,0,0.283,0.729,17,0,10,4,0
|
| 72 |
+
user_70,Finance,Admin,NY,Jira,5,0,0,0.471,0.634,87,6,1,8,0
|
| 73 |
+
user_71,HR,Specialist,Remote,SAP,26,0,0,0.896,0.241,77,1,0,10,1
|
| 74 |
+
user_72,Sales,Manager,TX,Jira,34,1,1,0.92,0.875,49,1,0,5,0
|
| 75 |
+
user_73,Support,Specialist,Remote,Workday,19,1,0,0.935,0.526,74,19,4,8,0
|
| 76 |
+
user_74,HR,Admin,Remote,GitHub,8,1,0,0.91,0.569,31,19,1,12,1
|
| 77 |
+
user_75,Finance,Engineer,Remote,GitHub,44,0,0,0.391,0.741,168,4,7,10,1
|
| 78 |
+
user_76,Finance,Admin,SF,Workday,30,1,1,0.628,0.277,38,2,6,0,1
|
| 79 |
+
user_77,Engineering,Engineer,TX,GitHub,42,0,0,0.595,0.393,21,14,6,0,1
|
| 80 |
+
user_78,Sales,Engineer,NY,Oracle,5,1,0,0.712,0.161,57,12,7,9,1
|
| 81 |
+
user_79,HR,Manager,Remote,Oracle,38,1,1,0.231,0.648,107,11,9,4,1
|
| 82 |
+
user_80,Finance,Admin,NY,GitHub,20,1,1,0.26,0.623,6,15,2,7,1
|
| 83 |
+
user_81,HR,Engineer,Remote,GitHub,30,1,0,0.477,0.756,15,7,5,12,0
|
| 84 |
+
user_82,Sales,Specialist,Remote,Workday,37,1,0,0.547,0.449,27,12,0,3,1
|
| 85 |
+
user_83,Support,Analyst,NY,Oracle,32,0,1,0.569,0.823,138,18,6,11,1
|
| 86 |
+
user_84,HR,Manager,SF,Jira,35,0,0,0.43,0.895,75,15,6,9,0
|
| 87 |
+
user_85,Engineering,Specialist,Remote,Jira,43,0,0,0.856,0.276,34,1,0,1,1
|
| 88 |
+
user_86,Support,Admin,TX,GitHub,11,0,1,0.37,0.133,99,0,8,10,1
|
| 89 |
+
user_87,HR,Admin,SF,SAP,36,1,1,0.908,0.896,71,13,6,5,0
|
| 90 |
+
user_88,Sales,Specialist,NY,Workday,43,0,1,0.234,0.496,106,16,9,5,1
|
| 91 |
+
user_89,HR,Manager,TX,Oracle,40,0,1,0.83,0.527,117,9,5,5,1
|
| 92 |
+
user_90,Support,Specialist,SF,Oracle,40,1,1,0.373,0.869,94,2,0,7,1
|
| 93 |
+
user_91,Finance,Engineer,Remote,Jira,27,1,1,0.383,0.346,76,15,2,2,0
|
| 94 |
+
user_92,HR,Admin,TX,GitHub,24,1,0,0.737,0.89,166,18,7,1,1
|
| 95 |
+
user_93,Sales,Specialist,Remote,Oracle,23,0,1,0.439,0.454,24,15,7,2,0
|
| 96 |
+
user_94,Engineering,Engineer,Remote,Jira,15,1,0,0.349,0.847,104,19,6,5,1
|
| 97 |
+
user_95,HR,Analyst,SF,Workday,45,1,1,0.421,0.301,157,4,3,6,1
|
| 98 |
+
user_96,Sales,Specialist,TX,Jira,31,1,1,0.895,0.215,83,16,8,10,1
|
| 99 |
+
user_97,HR,Specialist,Remote,SAP,42,1,1,0.906,0.69,147,11,10,4,0
|
| 100 |
+
user_98,Engineering,Engineer,NY,Jira,20,1,0,0.627,0.889,163,8,9,8,1
|
| 101 |
+
user_99,Finance,Manager,TX,SAP,40,1,1,0.456,0.179,122,12,3,0,1
|
| 102 |
+
user_100,HR,Admin,Remote,Workday,37,0,1,0.847,0.439,108,16,6,9,0
|
| 103 |
+
user_101,Sales,Engineer,SF,Oracle,34,1,0,0.919,0.31,135,3,5,9,1
|
| 104 |
+
user_102,Engineering,Manager,TX,SAP,32,1,0,0.518,0.615,5,11,1,6,1
|
| 105 |
+
user_103,Engineering,Manager,Remote,SAP,11,1,1,0.553,0.951,92,11,10,4,0
|
| 106 |
+
user_104,HR,Admin,TX,Jira,30,1,0,0.492,0.85,57,5,2,8,1
|
| 107 |
+
user_105,Finance,Admin,Remote,GitHub,22,0,1,0.427,0.818,16,10,8,6,0
|
| 108 |
+
user_106,HR,Specialist,SF,Jira,7,0,0,0.294,0.207,89,11,0,11,0
|
| 109 |
+
user_107,Sales,Engineer,TX,Workday,12,0,1,0.301,0.23,61,0,8,1,0
|
| 110 |
+
user_108,Support,Manager,Remote,Oracle,9,1,1,0.926,0.106,132,5,10,5,0
|
| 111 |
+
user_109,Sales,Admin,Remote,Workday,9,1,0,0.335,0.915,160,19,10,0,1
|
| 112 |
+
user_110,Engineering,Admin,TX,Jira,45,1,1,0.627,0.952,63,2,6,7,0
|
| 113 |
+
user_111,HR,Analyst,TX,Oracle,10,0,0,0.688,0.958,161,18,3,0,0
|
| 114 |
+
user_112,Engineering,Analyst,SF,GitHub,36,1,0,0.896,0.965,134,2,3,12,0
|
| 115 |
+
user_113,Sales,Engineer,Remote,GitHub,19,0,1,0.356,0.334,115,3,0,2,0
|
| 116 |
+
user_114,Finance,Manager,NY,SAP,15,0,1,0.292,0.925,154,7,8,12,0
|
| 117 |
+
user_115,Engineering,Analyst,SF,Workday,23,0,1,0.564,0.85,6,12,7,9,0
|
| 118 |
+
user_116,Sales,Specialist,SF,Jira,44,0,1,0.3,0.658,14,14,7,1,0
|
| 119 |
+
user_117,Engineering,Manager,TX,Oracle,32,0,1,0.406,0.343,11,0,3,3,1
|
| 120 |
+
user_118,Support,Admin,TX,GitHub,33,0,1,0.558,0.29,138,15,3,1,1
|
| 121 |
+
user_119,Engineering,Admin,NY,Jira,11,1,1,0.642,0.803,179,4,4,8,1
|
| 122 |
+
user_120,Sales,Specialist,TX,Workday,27,0,0,0.473,0.27,82,16,7,11,1
|
| 123 |
+
user_121,Engineering,Manager,TX,Oracle,37,0,0,0.49,0.301,92,13,1,3,0
|
| 124 |
+
user_122,Engineering,Admin,Remote,Workday,11,1,0,0.44,0.799,170,17,5,6,1
|
| 125 |
+
user_123,Support,Engineer,NY,Jira,30,1,0,0.66,0.208,176,0,2,1,0
|
| 126 |
+
user_124,Support,Manager,Remote,Jira,38,0,0,0.455,0.185,129,7,7,6,0
|
| 127 |
+
user_125,HR,Admin,SF,Jira,15,0,1,0.798,0.907,18,3,8,9,0
|
| 128 |
+
user_126,HR,Specialist,Remote,Oracle,45,0,0,0.604,0.585,78,13,3,11,0
|
| 129 |
+
user_127,Sales,Admin,TX,Workday,30,0,1,0.34,0.781,10,16,5,9,0
|
| 130 |
+
user_128,Sales,Engineer,SF,Jira,11,0,0,0.497,0.555,107,7,10,8,1
|
| 131 |
+
user_129,HR,Engineer,Remote,SAP,11,1,1,0.718,0.238,145,8,2,10,1
|
| 132 |
+
user_130,Engineering,Manager,Remote,Workday,7,0,0,0.692,0.838,83,9,4,12,0
|
| 133 |
+
user_131,Sales,Admin,NY,Jira,31,1,1,0.241,0.962,127,4,3,6,0
|
| 134 |
+
user_132,Sales,Manager,TX,Jira,11,1,0,0.776,0.72,39,10,4,7,1
|
| 135 |
+
user_133,HR,Specialist,TX,Workday,10,0,0,0.501,0.62,28,5,4,4,1
|
| 136 |
+
user_134,Finance,Admin,Remote,GitHub,44,1,0,0.674,0.707,108,14,1,3,0
|
| 137 |
+
user_135,Support,Analyst,SF,Oracle,27,1,0,0.414,0.784,50,0,0,5,0
|
| 138 |
+
user_136,Support,Manager,NY,SAP,39,1,0,0.473,0.34,61,3,0,4,1
|
| 139 |
+
user_137,Engineering,Analyst,NY,SAP,14,1,1,0.383,0.53,91,17,0,10,0
|
| 140 |
+
user_138,Finance,Admin,NY,Jira,42,0,0,0.212,0.68,176,3,5,0,0
|
| 141 |
+
user_139,HR,Manager,TX,GitHub,38,1,1,0.939,0.624,116,10,2,2,1
|
| 142 |
+
user_140,Support,Specialist,SF,Jira,6,0,0,0.778,0.307,66,9,4,12,1
|
| 143 |
+
user_141,Finance,Engineer,Remote,Jira,18,1,0,0.908,0.349,80,3,5,0,1
|
| 144 |
+
user_142,Support,Admin,NY,SAP,13,0,0,0.607,0.37,168,11,2,9,1
|
| 145 |
+
user_143,Finance,Admin,NY,GitHub,32,1,1,0.349,0.6,166,12,10,9,1
|
| 146 |
+
user_144,Sales,Analyst,Remote,SAP,37,0,1,0.307,0.391,92,11,5,3,0
|
| 147 |
+
user_145,Finance,Engineer,SF,Jira,10,1,1,0.447,0.512,49,11,4,7,1
|
| 148 |
+
user_146,Finance,Admin,TX,Jira,14,0,1,0.232,0.596,145,6,7,11,0
|
| 149 |
+
user_147,Engineering,Specialist,SF,Workday,32,1,0,0.697,0.143,56,12,6,0,0
|
| 150 |
+
user_148,HR,Engineer,TX,Jira,25,0,0,0.37,0.579,74,8,8,8,1
|
| 151 |
+
user_149,Engineering,Specialist,SF,Workday,16,1,0,0.405,0.246,125,6,5,5,1
|
| 152 |
+
user_150,Support,Analyst,TX,Oracle,15,0,0,0.583,0.236,95,7,7,1,0
|
| 153 |
+
user_151,HR,Specialist,NY,Jira,38,1,0,0.266,0.79,40,14,8,10,0
|
| 154 |
+
user_152,Finance,Specialist,Remote,SAP,34,0,0,0.48,0.77,63,7,2,6,0
|
| 155 |
+
user_153,Finance,Manager,SF,SAP,32,0,0,0.662,0.683,75,14,10,2,0
|
| 156 |
+
user_154,Sales,Engineer,TX,Oracle,10,0,1,0.386,0.863,21,6,2,6,0
|
| 157 |
+
user_155,Finance,Manager,SF,Workday,33,0,0,0.649,0.984,130,10,5,7,1
|
| 158 |
+
user_156,Support,Specialist,SF,SAP,27,0,1,0.23,0.481,161,7,9,3,1
|
| 159 |
+
user_157,Support,Specialist,NY,Jira,35,1,1,0.624,0.121,53,7,3,4,0
|
| 160 |
+
user_158,HR,Engineer,SF,GitHub,23,0,0,0.579,0.684,147,8,1,8,0
|
| 161 |
+
user_159,Engineering,Manager,NY,SAP,26,0,1,0.276,0.32,40,17,6,11,1
|
| 162 |
+
user_160,Engineering,Manager,SF,Oracle,23,1,0,0.624,0.549,144,8,1,2,1
|
| 163 |
+
user_161,Support,Manager,NY,GitHub,17,0,0,0.205,0.95,140,0,2,0,1
|
| 164 |
+
user_162,Support,Analyst,TX,Jira,13,1,0,0.657,0.492,133,15,9,4,1
|
| 165 |
+
user_163,Engineering,Specialist,NY,Oracle,12,0,0,0.675,0.466,137,9,6,3,0
|
| 166 |
+
user_164,Finance,Admin,SF,Oracle,14,1,1,0.285,0.949,149,17,9,10,0
|
| 167 |
+
user_165,Support,Admin,Remote,Workday,33,1,0,0.926,0.484,125,17,10,0,1
|
| 168 |
+
user_166,Sales,Admin,SF,GitHub,5,0,1,0.58,0.484,37,8,3,6,1
|
| 169 |
+
user_167,Support,Engineer,TX,SAP,23,0,0,0.502,0.773,108,4,1,12,0
|
| 170 |
+
user_168,Sales,Specialist,SF,SAP,31,0,0,0.745,0.733,157,19,0,6,1
|
| 171 |
+
user_169,Support,Specialist,SF,Oracle,33,1,0,0.652,0.283,47,1,7,8,0
|
| 172 |
+
user_170,Sales,Manager,NY,Workday,9,0,1,0.255,0.543,7,10,0,0,1
|
| 173 |
+
user_171,Engineering,Specialist,SF,Jira,23,1,1,0.93,0.777,56,9,0,3,1
|
| 174 |
+
user_172,Engineering,Specialist,Remote,Workday,25,0,0,0.872,0.568,142,9,0,10,0
|
| 175 |
+
user_173,Finance,Engineer,SF,Oracle,6,0,1,0.378,0.408,99,5,0,11,0
|
| 176 |
+
user_174,Sales,Manager,Remote,GitHub,10,0,1,0.486,0.76,146,17,10,4,1
|
| 177 |
+
user_175,Engineering,Analyst,TX,Jira,31,0,1,0.388,0.981,18,4,6,12,0
|
| 178 |
+
user_176,Engineering,Analyst,Remote,Workday,41,1,0,0.591,0.809,117,8,8,9,1
|
| 179 |
+
user_177,Engineering,Analyst,SF,Oracle,10,0,1,0.889,0.143,93,16,10,12,0
|
| 180 |
+
user_178,Engineering,Specialist,TX,Workday,37,0,0,0.642,0.721,90,2,1,9,0
|
| 181 |
+
user_179,Engineering,Engineer,Remote,Workday,36,0,0,0.659,0.556,66,2,1,8,0
|
| 182 |
+
user_180,Engineering,Engineer,NY,SAP,38,0,1,0.247,0.168,59,17,1,12,0
|
| 183 |
+
user_181,Support,Manager,SF,Workday,44,0,1,0.466,0.733,98,12,5,8,1
|
| 184 |
+
user_182,Sales,Analyst,NY,SAP,20,0,0,0.916,0.476,61,13,2,12,0
|
| 185 |
+
user_183,Sales,Manager,TX,Jira,5,1,1,0.375,0.213,84,18,5,4,1
|
| 186 |
+
user_184,Support,Engineer,Remote,Oracle,5,1,1,0.821,0.644,76,4,2,0,0
|
| 187 |
+
user_185,Finance,Specialist,Remote,Workday,17,0,1,0.866,0.285,52,1,8,7,1
|
| 188 |
+
user_186,Finance,Manager,NY,GitHub,6,0,1,0.895,0.704,118,13,7,2,1
|
| 189 |
+
user_187,HR,Manager,Remote,Jira,32,0,0,0.308,0.41,67,18,8,12,0
|
| 190 |
+
user_188,Finance,Analyst,SF,Jira,23,0,1,0.598,0.686,108,1,4,11,1
|
| 191 |
+
user_189,Support,Analyst,NY,GitHub,5,0,1,0.621,0.42,102,8,2,6,1
|
| 192 |
+
user_190,Finance,Specialist,Remote,GitHub,21,1,1,0.56,0.325,89,10,1,12,0
|
| 193 |
+
user_191,HR,Engineer,Remote,GitHub,11,0,0,0.636,0.892,92,19,4,9,1
|
| 194 |
+
user_192,Finance,Manager,TX,GitHub,31,0,0,0.715,0.682,120,4,10,0,0
|
| 195 |
+
user_193,Finance,Analyst,NY,SAP,15,1,0,0.262,0.604,74,0,8,2,1
|
| 196 |
+
user_194,Sales,Manager,Remote,Workday,21,1,0,0.539,0.105,52,1,2,10,0
|
| 197 |
+
user_195,HR,Specialist,TX,Oracle,33,0,0,0.699,0.924,56,12,4,11,1
|
| 198 |
+
user_196,Finance,Manager,NY,Workday,43,1,1,0.517,0.114,77,15,2,7,0
|
| 199 |
+
user_197,Sales,Admin,SF,GitHub,12,1,1,0.858,0.159,83,6,4,0,1
|
| 200 |
+
user_198,Finance,Manager,SF,Workday,12,0,0,0.463,0.195,3,1,7,10,1
|
| 201 |
+
user_199,Engineering,Analyst,TX,GitHub,17,0,0,0.841,0.57,107,6,1,8,1
|
| 202 |
+
user_200,Support,Engineer,Remote,Workday,38,1,0,0.692,0.622,11,13,0,6,0
|
| 203 |
+
user_201,HR,Manager,Remote,Jira,29,0,1,0.596,0.192,29,9,3,11,1
|
| 204 |
+
user_202,Finance,Admin,NY,GitHub,13,0,1,0.754,0.572,14,20,7,2,0
|
| 205 |
+
user_203,Sales,Analyst,TX,GitHub,20,0,0,0.428,0.802,130,15,0,9,1
|
| 206 |
+
user_204,Support,Engineer,Remote,Jira,25,1,0,0.502,0.742,44,18,1,4,1
|
| 207 |
+
user_205,Finance,Analyst,Remote,Oracle,42,0,1,0.883,0.144,131,16,7,12,0
|
| 208 |
+
user_206,Engineering,Manager,SF,Workday,43,1,1,0.456,0.345,14,7,2,0,1
|
| 209 |
+
user_207,Finance,Engineer,Remote,Jira,41,1,1,0.406,0.145,68,8,4,8,0
|
| 210 |
+
user_208,Finance,Analyst,Remote,GitHub,33,1,0,0.913,0.948,23,3,7,1,1
|
| 211 |
+
user_209,Sales,Admin,Remote,Oracle,31,1,1,0.266,0.43,133,3,0,11,1
|
| 212 |
+
user_210,Sales,Engineer,TX,Oracle,45,0,0,0.657,0.377,9,12,6,4,1
|
| 213 |
+
user_211,Sales,Analyst,NY,GitHub,31,1,0,0.465,0.444,138,20,5,0,0
|
| 214 |
+
user_212,Finance,Analyst,TX,GitHub,33,0,0,0.837,0.182,37,11,9,1,0
|
| 215 |
+
user_213,Finance,Specialist,TX,Jira,32,0,1,0.948,0.61,39,20,7,12,0
|
| 216 |
+
user_214,Finance,Admin,TX,GitHub,42,0,1,0.346,0.928,156,20,7,12,1
|
| 217 |
+
user_215,Support,Manager,TX,GitHub,10,1,0,0.759,0.82,138,3,0,2,1
|
| 218 |
+
user_216,Finance,Engineer,Remote,SAP,8,0,1,0.41,0.741,9,14,6,0,0
|
| 219 |
+
user_217,Sales,Analyst,SF,Oracle,20,1,1,0.746,0.7,129,12,9,1,1
|
| 220 |
+
user_218,Engineering,Analyst,SF,Oracle,9,0,0,0.871,0.645,82,13,2,7,1
|
| 221 |
+
user_219,HR,Engineer,Remote,Workday,15,1,0,0.545,0.395,12,11,10,11,1
|
| 222 |
+
user_220,Support,Engineer,NY,SAP,18,1,0,0.491,0.478,178,11,10,1,0
|
| 223 |
+
user_221,Engineering,Analyst,SF,SAP,43,0,1,0.638,0.214,26,19,3,5,0
|
| 224 |
+
user_222,Support,Admin,SF,GitHub,44,1,1,0.835,0.6,30,2,9,7,0
|
| 225 |
+
user_223,Sales,Specialist,NY,Workday,45,0,0,0.49,0.404,24,15,1,3,1
|
| 226 |
+
user_224,Engineering,Engineer,NY,Oracle,12,0,1,0.736,0.896,110,16,7,6,1
|
| 227 |
+
user_225,Engineering,Engineer,TX,GitHub,5,1,0,0.637,0.83,29,14,10,0,0
|
| 228 |
+
user_226,HR,Specialist,Remote,Jira,25,0,0,0.345,0.534,104,10,3,11,0
|
| 229 |
+
user_227,Engineering,Engineer,SF,Workday,36,0,1,0.225,0.631,139,11,10,12,0
|
| 230 |
+
user_228,HR,Specialist,NY,Jira,41,0,0,0.909,0.871,107,19,4,4,0
|
| 231 |
+
user_229,HR,Analyst,SF,SAP,27,1,0,0.66,0.313,174,12,6,2,0
|
| 232 |
+
user_230,HR,Admin,TX,Jira,18,0,0,0.204,0.257,50,13,4,1,0
|
| 233 |
+
user_231,Finance,Manager,Remote,Oracle,30,0,0,0.212,0.431,14,2,5,5,0
|
| 234 |
+
user_232,Support,Specialist,TX,Oracle,16,0,1,0.846,0.143,105,0,10,12,0
|
| 235 |
+
user_233,HR,Engineer,Remote,Oracle,21,0,1,0.652,0.637,115,15,1,1,1
|
| 236 |
+
user_234,Support,Analyst,TX,Jira,14,0,0,0.281,0.965,19,15,6,10,0
|
| 237 |
+
user_235,Sales,Manager,SF,Workday,34,0,1,0.27,0.428,79,13,4,12,1
|
| 238 |
+
user_236,HR,Specialist,TX,SAP,23,1,0,0.37,0.827,42,1,8,1,1
|
| 239 |
+
user_237,Sales,Analyst,TX,SAP,10,0,1,0.483,0.538,173,10,2,11,0
|
| 240 |
+
user_238,Engineering,Engineer,TX,Workday,23,0,1,0.554,0.94,110,15,0,5,1
|
| 241 |
+
user_239,Support,Engineer,NY,Jira,29,1,1,0.909,0.847,4,0,9,0,1
|
| 242 |
+
user_240,Sales,Manager,TX,Jira,34,1,1,0.776,0.664,76,1,0,11,1
|
| 243 |
+
user_241,HR,Analyst,TX,Jira,36,0,1,0.677,0.173,4,15,3,0,0
|
| 244 |
+
user_242,HR,Admin,SF,Oracle,27,0,0,0.872,0.772,48,14,9,10,0
|
| 245 |
+
user_243,Engineering,Analyst,TX,Jira,32,0,1,0.699,0.684,174,2,2,7,0
|
| 246 |
+
user_244,HR,Specialist,SF,Jira,43,0,1,0.343,0.209,19,9,2,10,0
|
| 247 |
+
user_245,Sales,Admin,TX,SAP,36,0,0,0.201,0.139,140,2,2,10,1
|
| 248 |
+
user_246,Sales,Engineer,Remote,Jira,10,1,0,0.47,0.407,129,1,7,10,1
|
| 249 |
+
user_247,Support,Engineer,TX,Workday,11,0,1,0.788,0.686,168,12,4,1,0
|
| 250 |
+
user_248,Sales,Manager,NY,Oracle,9,0,1,0.333,0.246,101,6,8,10,1
|
| 251 |
+
user_249,Finance,Engineer,Remote,SAP,9,1,0,0.73,0.706,71,15,2,10,1
|
| 252 |
+
user_250,Finance,Specialist,NY,Workday,6,0,1,0.894,0.393,29,7,10,1,1
|
| 253 |
+
user_251,Sales,Admin,Remote,SAP,14,1,0,0.593,0.83,39,7,4,4,0
|
| 254 |
+
user_252,Finance,Analyst,NY,Workday,18,1,1,0.304,0.558,123,16,2,12,1
|
| 255 |
+
user_253,Engineering,Manager,Remote,Jira,5,1,0,0.832,0.534,33,13,6,8,1
|
| 256 |
+
user_254,Finance,Manager,Remote,GitHub,30,0,1,0.233,0.42,36,12,3,2,0
|
| 257 |
+
user_255,Sales,Engineer,TX,GitHub,20,0,0,0.911,0.638,133,5,0,0,1
|
| 258 |
+
user_256,Sales,Admin,NY,GitHub,44,1,0,0.206,0.565,173,11,2,8,0
|
| 259 |
+
user_257,Support,Analyst,SF,Workday,24,0,1,0.368,0.559,64,6,8,0,0
|
| 260 |
+
user_258,Support,Analyst,NY,GitHub,29,0,0,0.66,0.76,124,2,5,8,1
|
| 261 |
+
user_259,Engineering,Specialist,SF,Jira,17,1,1,0.392,0.223,180,18,7,8,1
|
| 262 |
+
user_260,HR,Specialist,SF,Jira,17,1,0,0.907,0.113,12,9,0,2,1
|
| 263 |
+
user_261,Finance,Manager,NY,SAP,16,1,0,0.344,0.166,5,9,4,8,1
|
| 264 |
+
user_262,Engineering,Engineer,Remote,SAP,16,0,1,0.726,0.782,173,12,9,8,1
|
| 265 |
+
user_263,HR,Admin,SF,Workday,30,1,0,0.376,0.771,166,5,2,11,0
|
| 266 |
+
user_264,Engineering,Analyst,SF,Workday,23,1,0,0.503,0.529,62,3,7,0,0
|
| 267 |
+
user_265,Engineering,Admin,SF,Jira,17,0,1,0.487,0.537,114,9,0,1,0
|
| 268 |
+
user_266,Support,Manager,Remote,Jira,24,1,0,0.649,0.758,138,10,1,1,1
|
| 269 |
+
user_267,HR,Admin,TX,Workday,34,0,1,0.374,0.662,152,0,1,9,1
|
| 270 |
+
user_268,HR,Engineer,NY,Workday,9,1,0,0.804,0.481,104,19,10,3,1
|
| 271 |
+
user_269,Finance,Admin,TX,Workday,37,1,1,0.515,0.379,14,12,2,8,1
|
| 272 |
+
user_270,Engineering,Admin,Remote,Jira,35,1,0,0.322,0.156,58,8,10,2,0
|
| 273 |
+
user_271,Sales,Manager,NY,Oracle,26,0,1,0.793,0.148,88,0,9,8,1
|
| 274 |
+
user_272,Support,Engineer,Remote,SAP,36,1,0,0.853,0.392,16,0,5,12,0
|
| 275 |
+
user_273,Sales,Specialist,Remote,Oracle,35,1,1,0.621,0.964,104,2,5,11,1
|
| 276 |
+
user_274,Engineering,Manager,SF,Jira,10,0,0,0.258,0.425,28,14,9,12,1
|
| 277 |
+
user_275,Finance,Analyst,Remote,Jira,31,0,1,0.284,0.495,80,14,0,5,1
|
| 278 |
+
user_276,Finance,Engineer,NY,Jira,20,1,0,0.454,0.736,127,15,0,11,0
|
| 279 |
+
user_277,HR,Analyst,SF,Jira,30,1,1,0.389,0.244,144,0,6,10,1
|
| 280 |
+
user_278,Engineering,Analyst,TX,Oracle,26,0,1,0.686,0.393,40,17,6,12,0
|
| 281 |
+
user_279,Finance,Specialist,TX,Oracle,9,1,1,0.633,0.936,69,15,3,4,1
|
| 282 |
+
user_280,Sales,Admin,NY,Workday,41,1,0,0.923,0.404,127,14,9,5,1
|
| 283 |
+
user_281,HR,Specialist,TX,Jira,6,0,1,0.328,0.551,163,16,10,7,1
|
| 284 |
+
user_282,HR,Engineer,SF,Jira,23,0,1,0.861,0.771,26,17,9,5,0
|
| 285 |
+
user_283,Support,Manager,NY,GitHub,27,0,1,0.234,0.275,141,2,1,2,1
|
| 286 |
+
user_284,Finance,Manager,NY,GitHub,23,1,0,0.638,0.332,142,13,6,12,0
|
| 287 |
+
user_285,Support,Manager,Remote,GitHub,27,0,0,0.748,0.95,102,19,6,8,1
|
| 288 |
+
user_286,Support,Specialist,NY,GitHub,36,1,1,0.949,0.972,56,7,8,10,0
|
| 289 |
+
user_287,Finance,Engineer,TX,SAP,33,0,0,0.625,0.497,119,20,4,8,1
|
| 290 |
+
user_288,HR,Analyst,TX,Oracle,12,1,1,0.333,0.904,60,10,0,9,0
|
| 291 |
+
user_289,Finance,Admin,Remote,Jira,28,0,1,0.931,0.316,81,18,3,2,0
|
| 292 |
+
user_290,Engineering,Analyst,TX,Oracle,11,1,1,0.519,0.54,7,2,2,11,1
|
| 293 |
+
user_291,HR,Engineer,TX,Workday,38,1,1,0.464,0.245,162,3,8,10,1
|
| 294 |
+
user_292,Engineering,Manager,Remote,Workday,37,1,1,0.306,0.931,67,2,7,6,0
|
| 295 |
+
user_293,HR,Engineer,TX,SAP,18,1,0,0.72,0.285,103,9,4,8,0
|
| 296 |
+
user_294,Sales,Analyst,Remote,Oracle,21,1,0,0.309,0.49,1,9,9,10,1
|
| 297 |
+
user_295,Sales,Analyst,Remote,Jira,19,1,1,0.364,0.39,117,3,1,1,0
|
| 298 |
+
user_296,HR,Analyst,SF,Workday,12,0,0,0.7,0.638,29,2,2,5,1
|
| 299 |
+
user_297,Engineering,Specialist,NY,SAP,42,0,1,0.579,0.97,107,3,4,7,0
|
| 300 |
+
user_298,HR,Analyst,Remote,SAP,39,0,0,0.377,0.617,128,20,0,4,1
|
| 301 |
+
user_299,HR,Manager,Remote,SAP,29,0,0,0.616,0.958,97,10,8,9,0
|
| 302 |
+
user_300,Support,Analyst,TX,Workday,38,1,0,0.9,0.169,161,16,3,3,0
|
| 303 |
+
user_301,Support,Specialist,TX,Workday,31,1,0,0.313,0.811,53,5,4,1,0
|
| 304 |
+
user_302,HR,Engineer,TX,SAP,14,1,1,0.633,0.36,89,19,5,0,1
|
| 305 |
+
user_303,Engineering,Specialist,Remote,Workday,25,0,0,0.624,0.135,0,11,7,3,0
|
| 306 |
+
user_304,Sales,Manager,NY,Jira,8,0,1,0.232,0.132,163,15,1,7,1
|
| 307 |
+
user_305,Sales,Specialist,TX,SAP,13,1,1,0.441,0.398,165,17,4,6,0
|
| 308 |
+
user_306,Support,Specialist,NY,Workday,42,1,0,0.31,0.147,51,5,0,9,0
|
| 309 |
+
user_307,Sales,Analyst,NY,SAP,43,0,0,0.567,0.56,26,20,3,2,0
|
| 310 |
+
user_308,HR,Specialist,Remote,Oracle,37,0,1,0.826,0.203,122,11,3,10,1
|
| 311 |
+
user_309,Engineering,Analyst,TX,GitHub,9,1,1,0.335,0.729,116,3,0,9,0
|
| 312 |
+
user_310,Finance,Admin,Remote,Oracle,23,0,0,0.594,0.881,116,9,3,1,0
|
| 313 |
+
user_311,Support,Manager,TX,GitHub,26,1,0,0.504,0.526,21,5,2,8,0
|
| 314 |
+
user_312,Engineering,Specialist,Remote,Oracle,14,0,1,0.674,0.739,12,19,1,4,0
|
| 315 |
+
user_313,HR,Manager,NY,GitHub,17,1,0,0.313,0.779,150,12,0,3,1
|
| 316 |
+
user_314,HR,Manager,NY,GitHub,33,0,1,0.747,0.163,143,1,2,9,0
|
| 317 |
+
user_315,Support,Analyst,SF,GitHub,9,1,0,0.369,0.976,141,1,3,3,0
|
| 318 |
+
user_316,Finance,Engineer,SF,Oracle,19,0,1,0.91,0.695,163,9,4,8,0
|
| 319 |
+
user_317,Engineering,Specialist,Remote,SAP,36,1,0,0.724,0.699,165,4,10,9,0
|
| 320 |
+
user_318,HR,Analyst,TX,SAP,36,1,0,0.54,0.988,166,4,8,3,1
|
| 321 |
+
user_319,HR,Admin,NY,Jira,26,0,0,0.866,0.862,135,11,0,3,1
|
| 322 |
+
user_320,Sales,Admin,Remote,GitHub,34,1,0,0.391,0.213,40,5,10,2,1
|
| 323 |
+
user_321,Support,Analyst,NY,GitHub,21,0,1,0.255,0.232,135,16,7,12,0
|
| 324 |
+
user_322,HR,Specialist,SF,Workday,20,0,1,0.703,0.204,20,14,9,9,1
|
| 325 |
+
user_323,HR,Admin,TX,Oracle,6,1,0,0.856,0.86,179,11,5,2,0
|
| 326 |
+
user_324,Support,Manager,Remote,Workday,24,0,0,0.486,0.615,121,4,10,1,0
|
| 327 |
+
user_325,Finance,Manager,SF,SAP,31,0,0,0.832,0.616,148,7,9,0,0
|
| 328 |
+
user_326,Engineering,Manager,SF,GitHub,9,1,0,0.89,0.674,96,4,0,2,0
|
| 329 |
+
user_327,Engineering,Analyst,TX,GitHub,13,0,0,0.304,0.77,16,10,7,10,0
|
| 330 |
+
user_328,Engineering,Specialist,TX,Oracle,42,1,0,0.45,0.644,130,20,5,9,1
|
| 331 |
+
user_329,Support,Admin,NY,GitHub,17,1,1,0.263,0.926,0,12,2,2,1
|
| 332 |
+
user_330,Engineering,Specialist,Remote,Jira,45,1,1,0.461,0.49,88,17,2,9,0
|
| 333 |
+
user_331,Engineering,Specialist,TX,Jira,29,0,0,0.228,0.645,130,20,10,5,0
|
| 334 |
+
user_332,HR,Specialist,TX,Workday,25,0,0,0.896,0.777,32,11,3,8,0
|
| 335 |
+
user_333,Finance,Admin,Remote,Workday,11,0,1,0.398,0.468,132,12,4,5,1
|
| 336 |
+
user_334,Engineering,Analyst,SF,GitHub,29,0,1,0.641,0.119,89,8,3,11,0
|
| 337 |
+
user_335,Engineering,Admin,SF,SAP,39,0,1,0.354,0.284,143,13,1,2,0
|
| 338 |
+
user_336,Sales,Admin,TX,Oracle,35,1,0,0.742,0.505,48,16,9,3,1
|
| 339 |
+
user_337,Support,Admin,SF,GitHub,23,1,0,0.563,0.389,80,15,3,9,1
|
| 340 |
+
user_338,Engineering,Admin,Remote,GitHub,7,1,1,0.437,0.757,11,20,3,9,1
|
| 341 |
+
user_339,Finance,Engineer,Remote,SAP,38,0,0,0.579,0.79,141,10,4,3,1
|
| 342 |
+
user_340,Finance,Manager,TX,Jira,25,1,0,0.869,0.249,110,18,7,7,0
|
| 343 |
+
user_341,Support,Analyst,TX,Workday,32,0,0,0.369,0.915,91,3,0,10,0
|
| 344 |
+
user_342,Support,Admin,Remote,GitHub,32,1,0,0.329,0.562,93,7,1,4,1
|
| 345 |
+
user_343,HR,Analyst,NY,Oracle,25,1,1,0.91,0.418,70,11,8,11,1
|
| 346 |
+
user_344,Finance,Engineer,TX,SAP,7,0,1,0.947,0.662,8,19,8,2,1
|
| 347 |
+
user_345,Engineering,Manager,NY,Jira,28,0,0,0.945,0.873,148,6,1,1,1
|
| 348 |
+
user_346,Sales,Engineer,TX,Jira,5,0,0,0.809,0.625,57,10,3,11,0
|
| 349 |
+
user_347,HR,Engineer,SF,Workday,9,0,0,0.602,0.338,66,18,5,7,0
|
| 350 |
+
user_348,Support,Analyst,Remote,Workday,17,0,1,0.628,0.188,151,11,3,0,0
|
| 351 |
+
user_349,Engineering,Admin,SF,Jira,38,1,0,0.352,0.29,38,15,6,10,1
|
| 352 |
+
user_350,HR,Specialist,Remote,Oracle,36,0,0,0.249,0.479,117,12,2,0,1
|
| 353 |
+
user_351,Support,Manager,TX,GitHub,27,0,0,0.314,0.173,159,20,8,11,0
|
| 354 |
+
user_352,HR,Engineer,NY,Jira,8,0,1,0.755,0.562,25,1,8,2,0
|
| 355 |
+
user_353,Finance,Analyst,NY,SAP,18,0,0,0.306,0.154,20,1,5,9,0
|
| 356 |
+
user_354,HR,Analyst,NY,Workday,21,1,1,0.355,0.114,36,12,5,11,0
|
| 357 |
+
user_355,Engineering,Specialist,SF,Workday,25,0,0,0.426,0.124,137,3,0,12,1
|
| 358 |
+
user_356,Support,Engineer,SF,Oracle,37,0,0,0.542,0.622,3,20,6,0,0
|
| 359 |
+
user_357,Finance,Analyst,NY,Jira,44,1,1,0.305,0.313,10,7,9,8,0
|
| 360 |
+
user_358,Engineering,Engineer,Remote,SAP,30,1,1,0.934,0.469,66,15,9,8,1
|
| 361 |
+
user_359,Finance,Manager,TX,GitHub,12,0,1,0.314,0.458,172,14,2,7,0
|
| 362 |
+
user_360,Support,Admin,SF,SAP,25,1,0,0.581,0.581,63,3,8,4,1
|
| 363 |
+
user_361,Support,Manager,TX,GitHub,30,1,0,0.379,0.256,74,16,10,2,1
|
| 364 |
+
user_362,Support,Analyst,Remote,SAP,11,1,1,0.397,0.212,48,7,9,6,0
|
| 365 |
+
user_363,Finance,Specialist,TX,Workday,40,1,1,0.25,0.466,20,19,0,0,1
|
| 366 |
+
user_364,Sales,Specialist,Remote,Jira,42,0,0,0.269,0.529,54,3,0,0,1
|
| 367 |
+
user_365,Sales,Specialist,Remote,Jira,20,0,1,0.746,0.235,162,1,10,10,0
|
| 368 |
+
user_366,Engineering,Admin,SF,Workday,6,0,1,0.337,0.631,24,15,6,1,1
|
| 369 |
+
user_367,Support,Admin,NY,Jira,40,1,1,0.544,0.26,4,7,6,2,0
|
| 370 |
+
user_368,Support,Manager,TX,GitHub,12,1,1,0.734,0.15,131,3,10,7,0
|
| 371 |
+
user_369,Engineering,Admin,Remote,Jira,44,0,0,0.709,0.606,129,0,6,3,0
|
| 372 |
+
user_370,Engineering,Analyst,TX,Jira,9,0,1,0.464,0.75,153,9,7,9,1
|
| 373 |
+
user_371,Sales,Analyst,SF,SAP,40,0,1,0.323,0.212,52,11,4,9,1
|
| 374 |
+
user_372,Engineering,Specialist,TX,SAP,26,1,1,0.694,0.61,47,10,7,3,1
|
| 375 |
+
user_373,Support,Admin,NY,Workday,9,0,0,0.66,0.131,66,11,2,5,1
|
| 376 |
+
user_374,Support,Admin,SF,SAP,35,1,1,0.723,0.636,179,5,0,9,0
|
| 377 |
+
user_375,Engineering,Engineer,TX,Jira,27,1,0,0.661,0.492,3,20,4,9,0
|
| 378 |
+
user_376,Finance,Analyst,TX,SAP,40,1,1,0.242,0.781,180,8,1,5,0
|
| 379 |
+
user_377,Support,Manager,SF,Jira,38,0,0,0.432,0.704,141,20,1,12,1
|
| 380 |
+
user_378,Finance,Manager,SF,GitHub,5,0,0,0.556,0.837,154,13,10,5,1
|
| 381 |
+
user_379,HR,Analyst,SF,Workday,21,0,0,0.562,0.392,158,5,2,9,1
|
| 382 |
+
user_380,Support,Specialist,NY,SAP,40,1,1,0.627,0.656,9,14,5,12,0
|
| 383 |
+
user_381,HR,Engineer,TX,GitHub,9,1,0,0.495,0.389,121,0,4,7,0
|
| 384 |
+
user_382,HR,Engineer,Remote,GitHub,5,1,1,0.947,0.102,71,8,1,6,1
|
| 385 |
+
user_383,HR,Specialist,Remote,Jira,28,1,1,0.218,0.689,67,9,8,1,1
|
| 386 |
+
user_384,Support,Analyst,NY,Workday,30,0,0,0.21,0.468,65,15,10,5,0
|
| 387 |
+
user_385,Sales,Manager,SF,GitHub,28,0,1,0.596,0.321,53,13,7,6,0
|
| 388 |
+
user_386,Sales,Analyst,TX,Oracle,6,1,0,0.785,0.467,143,0,4,1,0
|
| 389 |
+
user_387,Support,Engineer,TX,GitHub,30,0,1,0.678,0.11,5,9,1,9,1
|
| 390 |
+
user_388,Support,Admin,Remote,Jira,9,0,0,0.848,0.322,75,2,2,1,1
|
| 391 |
+
user_389,Finance,Specialist,Remote,SAP,30,0,0,0.833,0.958,115,2,4,5,0
|
| 392 |
+
user_390,HR,Engineer,Remote,Oracle,17,0,0,0.35,0.836,149,15,0,1,0
|
| 393 |
+
user_391,Finance,Specialist,Remote,Workday,10,0,1,0.901,0.23,121,13,10,1,0
|
| 394 |
+
user_392,HR,Specialist,TX,Workday,43,0,1,0.776,0.793,100,15,9,1,1
|
| 395 |
+
user_393,Finance,Manager,NY,Jira,13,1,1,0.619,0.492,69,8,1,1,0
|
| 396 |
+
user_394,Support,Admin,NY,SAP,40,1,1,0.464,0.931,57,9,1,4,0
|
| 397 |
+
user_395,Finance,Specialist,SF,GitHub,21,0,0,0.642,0.25,67,4,10,10,0
|
| 398 |
+
user_396,Support,Engineer,Remote,SAP,25,0,0,0.244,0.72,111,10,2,9,1
|
| 399 |
+
user_397,Finance,Manager,NY,Oracle,37,1,0,0.587,0.374,96,7,1,3,1
|
| 400 |
+
user_398,Finance,Analyst,TX,Workday,37,0,0,0.59,0.472,86,13,7,3,1
|
| 401 |
+
user_399,Finance,Engineer,Remote,Oracle,33,0,1,0.389,0.125,82,5,5,8,1
|
| 402 |
+
user_400,Sales,Manager,TX,GitHub,36,0,0,0.401,0.972,4,12,9,5,1
|
| 403 |
+
user_401,Engineering,Analyst,TX,Workday,21,0,0,0.376,0.455,59,20,1,1,0
|
| 404 |
+
user_402,Engineering,Manager,Remote,Jira,42,0,0,0.602,0.479,35,10,8,4,1
|
| 405 |
+
user_403,Engineering,Engineer,TX,Oracle,27,1,1,0.579,0.597,137,3,3,7,1
|
| 406 |
+
user_404,Sales,Admin,NY,Workday,27,1,0,0.298,0.16,141,6,7,6,0
|
| 407 |
+
user_405,Finance,Manager,NY,SAP,17,0,0,0.833,0.219,75,13,7,9,0
|
| 408 |
+
user_406,Sales,Engineer,NY,Oracle,10,0,0,0.408,0.631,124,3,10,5,0
|
| 409 |
+
user_407,HR,Specialist,NY,Jira,6,1,1,0.214,0.927,56,4,8,11,0
|
| 410 |
+
user_408,Finance,Engineer,Remote,Workday,39,0,1,0.657,0.275,47,4,4,8,1
|
| 411 |
+
user_409,HR,Engineer,NY,Oracle,18,1,1,0.671,0.471,111,6,8,1,1
|
| 412 |
+
user_410,Support,Specialist,SF,Workday,37,0,1,0.253,0.326,58,6,4,4,1
|
| 413 |
+
user_411,Finance,Specialist,TX,Jira,17,0,0,0.338,0.716,156,15,10,6,1
|
| 414 |
+
user_412,HR,Analyst,SF,Workday,34,1,1,0.844,0.662,69,5,10,11,1
|
| 415 |
+
user_413,Support,Manager,TX,Oracle,13,0,0,0.708,0.821,176,13,3,0,0
|
| 416 |
+
user_414,Engineering,Engineer,SF,GitHub,7,0,1,0.884,0.875,151,16,1,2,1
|
| 417 |
+
user_415,Engineering,Engineer,TX,Workday,12,0,0,0.438,0.769,150,8,8,7,0
|
| 418 |
+
user_416,Sales,Specialist,TX,Workday,15,1,1,0.566,0.791,66,15,1,4,0
|
| 419 |
+
user_417,Engineering,Engineer,Remote,Workday,7,1,0,0.248,0.888,176,1,7,6,1
|
| 420 |
+
user_418,Support,Specialist,NY,SAP,6,1,1,0.883,0.68,131,19,5,4,1
|
| 421 |
+
user_419,Sales,Admin,SF,GitHub,39,0,1,0.765,0.188,29,12,7,3,1
|
| 422 |
+
user_420,Sales,Manager,SF,Jira,38,1,0,0.395,0.293,120,18,4,0,1
|
| 423 |
+
user_421,Sales,Manager,NY,SAP,21,1,0,0.348,0.931,71,12,4,8,0
|
| 424 |
+
user_422,Engineering,Engineer,TX,SAP,9,0,0,0.925,0.629,30,15,7,1,0
|
| 425 |
+
user_423,Support,Analyst,SF,GitHub,25,0,0,0.408,0.693,103,10,4,2,1
|
| 426 |
+
user_424,HR,Specialist,Remote,Oracle,19,0,0,0.753,0.734,71,15,8,7,1
|
| 427 |
+
user_425,Finance,Manager,NY,GitHub,30,1,1,0.799,0.816,30,4,4,7,0
|
| 428 |
+
user_426,HR,Admin,Remote,Oracle,5,0,1,0.587,0.486,162,7,8,3,0
|
| 429 |
+
user_427,Sales,Admin,TX,SAP,35,0,0,0.841,0.785,128,4,0,5,0
|
| 430 |
+
user_428,Finance,Admin,SF,GitHub,19,1,1,0.268,0.175,29,16,10,2,1
|
| 431 |
+
user_429,Sales,Engineer,SF,SAP,32,1,0,0.472,0.839,125,8,9,0,1
|
| 432 |
+
user_430,HR,Analyst,TX,GitHub,30,0,1,0.776,0.397,18,18,6,10,1
|
| 433 |
+
user_431,Engineering,Manager,TX,SAP,39,0,1,0.376,0.17,96,9,4,2,0
|
| 434 |
+
user_432,Support,Specialist,SF,GitHub,18,1,1,0.942,0.536,111,5,8,12,1
|
| 435 |
+
user_433,HR,Admin,NY,GitHub,41,0,0,0.876,0.388,130,14,2,5,1
|
| 436 |
+
user_434,Sales,Admin,SF,Jira,44,1,0,0.228,0.254,76,12,4,11,1
|
| 437 |
+
user_435,Finance,Admin,Remote,Jira,29,1,1,0.565,0.267,115,7,9,10,1
|
| 438 |
+
user_436,Sales,Engineer,NY,Jira,16,0,0,0.712,0.19,117,17,0,6,0
|
| 439 |
+
user_437,Engineering,Manager,NY,Workday,38,1,0,0.422,0.492,28,6,4,10,1
|
| 440 |
+
user_438,Finance,Analyst,SF,Oracle,40,0,0,0.427,0.943,136,8,6,2,0
|
| 441 |
+
user_439,Engineering,Engineer,SF,SAP,26,1,1,0.652,0.666,24,6,0,8,1
|
| 442 |
+
user_440,HR,Admin,Remote,SAP,39,0,0,0.949,0.674,177,11,4,2,1
|
| 443 |
+
user_441,HR,Manager,NY,SAP,18,1,0,0.565,0.727,141,20,3,11,1
|
| 444 |
+
user_442,Sales,Admin,Remote,SAP,12,0,0,0.41,0.225,101,5,9,5,0
|
| 445 |
+
user_443,Engineering,Engineer,Remote,Workday,6,0,0,0.722,0.556,153,3,2,12,1
|
| 446 |
+
user_444,Finance,Manager,Remote,Jira,8,0,0,0.503,0.123,169,17,9,12,0
|
| 447 |
+
user_445,Sales,Analyst,SF,Workday,17,1,0,0.833,0.746,161,1,9,4,1
|
| 448 |
+
user_446,Support,Engineer,Remote,Jira,33,0,0,0.294,0.385,101,20,0,10,0
|
| 449 |
+
user_447,Support,Engineer,NY,Oracle,23,0,1,0.585,0.404,49,17,9,7,0
|
| 450 |
+
user_448,Engineering,Admin,SF,GitHub,35,0,0,0.616,0.697,133,5,0,1,0
|
| 451 |
+
user_449,Engineering,Admin,SF,Workday,27,1,1,0.865,0.513,141,13,0,1,1
|
| 452 |
+
user_450,Engineering,Specialist,NY,GitHub,17,0,0,0.398,0.607,58,9,5,5,1
|
| 453 |
+
user_451,Finance,Engineer,Remote,Oracle,24,1,1,0.442,0.89,88,8,9,1,0
|
| 454 |
+
user_452,Sales,Analyst,Remote,Workday,10,0,0,0.23,0.112,11,14,6,11,1
|
| 455 |
+
user_453,Finance,Manager,TX,Workday,19,0,1,0.729,0.639,92,1,0,6,0
|
| 456 |
+
user_454,Engineering,Manager,TX,Oracle,41,1,0,0.825,0.975,98,13,5,9,1
|
| 457 |
+
user_455,Support,Manager,SF,Jira,12,1,0,0.562,0.176,26,17,5,8,0
|
| 458 |
+
user_456,Engineering,Admin,SF,SAP,6,0,1,0.773,0.825,154,11,0,0,1
|
| 459 |
+
user_457,Sales,Admin,Remote,Workday,8,0,0,0.379,0.254,5,10,0,4,1
|
| 460 |
+
user_458,HR,Admin,TX,Workday,17,0,0,0.393,0.858,101,5,4,2,1
|
| 461 |
+
user_459,Engineering,Engineer,NY,Oracle,38,1,1,0.489,0.956,166,8,5,4,0
|
| 462 |
+
user_460,HR,Admin,Remote,SAP,36,0,0,0.28,0.845,84,0,7,4,1
|
| 463 |
+
user_461,Support,Engineer,TX,SAP,17,1,0,0.4,0.184,52,16,0,3,1
|
| 464 |
+
user_462,Support,Specialist,Remote,SAP,11,1,0,0.578,0.585,152,9,8,9,1
|
| 465 |
+
user_463,Sales,Specialist,NY,Jira,33,0,0,0.235,0.735,111,1,9,7,1
|
| 466 |
+
user_464,HR,Analyst,TX,GitHub,24,1,0,0.601,0.764,172,18,9,4,1
|
| 467 |
+
user_465,Support,Specialist,Remote,Jira,15,1,0,0.763,0.42,105,8,10,8,0
|
| 468 |
+
user_466,HR,Manager,TX,Oracle,7,0,0,0.722,0.875,48,2,0,0,1
|
| 469 |
+
user_467,Finance,Engineer,TX,Oracle,8,0,1,0.742,0.413,49,17,1,6,1
|
| 470 |
+
user_468,Finance,Admin,TX,Jira,40,0,1,0.689,0.98,42,11,5,9,0
|
| 471 |
+
user_469,HR,Engineer,Remote,Oracle,15,1,1,0.526,0.377,12,2,8,12,1
|
| 472 |
+
user_470,Finance,Admin,Remote,Jira,33,0,0,0.926,0.377,100,14,0,10,1
|
| 473 |
+
user_471,Finance,Specialist,TX,Workday,36,1,0,0.433,0.968,121,13,8,11,1
|
| 474 |
+
user_472,HR,Manager,SF,GitHub,16,0,1,0.91,0.558,175,11,4,10,0
|
| 475 |
+
user_473,HR,Manager,TX,Jira,24,0,1,0.61,0.853,171,8,4,12,0
|
| 476 |
+
user_474,Finance,Analyst,SF,Workday,8,0,1,0.417,0.972,36,15,5,9,1
|
| 477 |
+
user_475,Engineering,Analyst,TX,GitHub,19,0,0,0.589,0.479,145,12,10,5,1
|
| 478 |
+
user_476,Engineering,Analyst,SF,GitHub,20,1,0,0.896,0.114,5,4,9,0,1
|
| 479 |
+
user_477,Sales,Specialist,TX,Jira,26,0,0,0.346,0.846,63,8,4,11,1
|
| 480 |
+
user_478,HR,Specialist,SF,SAP,36,0,0,0.289,0.46,95,14,9,12,0
|
| 481 |
+
user_479,Support,Admin,Remote,GitHub,40,0,1,0.874,0.889,167,16,8,2,0
|
| 482 |
+
user_480,HR,Manager,NY,Jira,15,1,0,0.54,0.557,156,7,4,11,0
|
| 483 |
+
user_481,Finance,Manager,TX,SAP,10,0,1,0.784,0.102,24,5,1,2,1
|
| 484 |
+
user_482,Support,Manager,NY,SAP,25,0,1,0.518,0.817,5,12,0,11,1
|
| 485 |
+
user_483,Finance,Admin,SF,Workday,7,1,0,0.565,0.627,19,6,3,10,0
|
| 486 |
+
user_484,HR,Manager,NY,GitHub,30,0,0,0.533,0.519,102,7,9,8,0
|
| 487 |
+
user_485,Support,Analyst,Remote,SAP,40,1,0,0.618,0.588,138,1,0,12,0
|
| 488 |
+
user_486,Engineering,Engineer,Remote,Oracle,35,0,1,0.712,0.579,26,6,7,1,0
|
| 489 |
+
user_487,HR,Engineer,SF,SAP,25,1,1,0.687,0.757,116,6,9,7,0
|
| 490 |
+
user_488,HR,Engineer,SF,Jira,22,0,1,0.234,0.452,113,12,2,10,1
|
| 491 |
+
user_489,Sales,Admin,NY,Workday,21,1,1,0.3,0.745,43,8,6,11,1
|
| 492 |
+
user_490,Engineering,Engineer,Remote,SAP,23,0,0,0.204,0.259,15,1,6,6,1
|
| 493 |
+
user_491,HR,Admin,SF,Jira,40,1,1,0.778,0.936,32,19,4,2,1
|
| 494 |
+
user_492,Sales,Analyst,NY,GitHub,22,0,1,0.344,0.652,121,13,6,11,1
|
| 495 |
+
user_493,HR,Engineer,NY,Workday,16,1,0,0.508,0.283,39,7,1,2,0
|
| 496 |
+
user_494,Finance,Specialist,TX,Jira,10,0,1,0.833,0.311,180,7,3,0,0
|
| 497 |
+
user_495,Support,Specialist,TX,SAP,7,1,1,0.335,0.611,39,14,4,3,0
|
| 498 |
+
user_496,Finance,Manager,NY,Workday,44,1,0,0.545,0.963,70,4,10,0,0
|
| 499 |
+
user_497,HR,Admin,NY,Workday,8,1,0,0.619,0.142,70,4,3,3,0
|
| 500 |
+
user_498,Sales,Specialist,Remote,SAP,42,0,1,0.276,0.308,155,12,1,3,1
|
| 501 |
+
user_499,HR,Specialist,Remote,Oracle,30,0,1,0.931,0.284,130,11,7,5,0
|
| 502 |
+
user_500,Engineering,Engineer,Remote,Oracle,16,1,0,0.641,0.601,21,20,10,12,1
|
| 503 |
+
user_501,HR,Admin,Remote,SAP,28,0,1,0.567,0.196,59,17,2,9,1
|
| 504 |
+
user_502,Sales,Engineer,TX,Workday,16,1,1,0.778,0.344,7,8,9,0,0
|
| 505 |
+
user_503,Support,Admin,SF,GitHub,44,0,0,0.458,0.696,152,4,10,11,0
|
| 506 |
+
user_504,Support,Engineer,TX,Workday,22,0,0,0.477,0.412,155,9,9,12,0
|
| 507 |
+
user_505,Support,Analyst,Remote,Workday,31,1,1,0.539,0.327,120,4,3,7,1
|
| 508 |
+
user_506,Sales,Analyst,TX,SAP,29,0,1,0.421,0.112,27,1,6,0,0
|
| 509 |
+
user_507,HR,Manager,SF,Oracle,43,1,1,0.613,0.92,148,14,6,6,0
|
| 510 |
+
user_508,Engineering,Manager,Remote,Jira,21,0,1,0.707,0.63,142,6,9,5,1
|
| 511 |
+
user_509,Support,Analyst,TX,Jira,17,0,0,0.715,0.792,53,0,1,3,1
|
| 512 |
+
user_510,Support,Analyst,Remote,GitHub,28,0,0,0.906,0.88,20,14,10,3,1
|
| 513 |
+
user_511,Support,Admin,TX,SAP,35,0,0,0.379,0.543,64,6,3,4,0
|
| 514 |
+
user_512,Support,Specialist,Remote,Oracle,43,1,0,0.776,0.508,150,4,7,9,0
|
| 515 |
+
user_513,Engineering,Analyst,Remote,Workday,8,1,0,0.492,0.334,122,7,8,4,0
|
| 516 |
+
user_514,Sales,Engineer,NY,GitHub,19,0,1,0.303,0.22,148,15,10,11,1
|
| 517 |
+
user_515,Engineering,Specialist,NY,Jira,36,0,0,0.685,0.967,61,6,1,8,1
|
| 518 |
+
user_516,Support,Specialist,TX,Workday,26,1,1,0.687,0.409,128,16,3,11,1
|
| 519 |
+
user_517,Support,Admin,TX,GitHub,16,0,0,0.62,0.175,3,14,4,12,1
|
| 520 |
+
user_518,Finance,Specialist,NY,Workday,33,1,1,0.243,0.694,42,15,1,11,1
|
| 521 |
+
user_519,HR,Specialist,TX,SAP,17,1,0,0.251,0.618,54,4,1,0,0
|
| 522 |
+
user_520,HR,Manager,TX,Workday,11,1,1,0.399,0.496,106,11,6,0,0
|
| 523 |
+
user_521,Support,Analyst,Remote,SAP,31,1,1,0.481,0.67,30,15,1,11,1
|
| 524 |
+
user_522,Support,Specialist,NY,Jira,19,1,0,0.287,0.937,92,11,10,4,0
|
| 525 |
+
user_523,Finance,Analyst,NY,SAP,27,1,0,0.418,0.426,68,13,1,5,0
|
| 526 |
+
user_524,Finance,Analyst,NY,Oracle,44,0,1,0.588,0.99,30,12,4,6,0
|
| 527 |
+
user_525,Support,Manager,Remote,SAP,5,0,0,0.338,0.549,67,8,3,12,1
|
| 528 |
+
user_526,Engineering,Admin,TX,GitHub,21,0,0,0.901,0.481,123,20,10,6,0
|
| 529 |
+
user_527,Sales,Manager,TX,SAP,35,1,1,0.647,0.678,160,1,5,2,1
|
| 530 |
+
user_528,Sales,Manager,NY,SAP,18,0,1,0.841,0.461,44,8,6,5,1
|
| 531 |
+
user_529,HR,Engineer,NY,Workday,5,1,1,0.244,0.515,107,10,0,7,0
|
| 532 |
+
user_530,HR,Admin,TX,GitHub,45,1,1,0.224,0.337,136,18,7,2,0
|
| 533 |
+
user_531,HR,Admin,SF,Oracle,14,0,1,0.266,0.613,15,6,10,10,1
|
| 534 |
+
user_532,Finance,Analyst,NY,Jira,31,0,1,0.74,0.76,161,13,7,11,1
|
| 535 |
+
user_533,Engineering,Admin,SF,Workday,38,1,0,0.365,0.892,176,3,8,8,0
|
| 536 |
+
user_534,HR,Admin,Remote,Workday,6,1,1,0.401,0.449,97,13,0,11,0
|
| 537 |
+
user_535,Engineering,Engineer,NY,Oracle,10,0,1,0.75,0.303,106,9,2,12,1
|
| 538 |
+
user_536,Sales,Manager,SF,Jira,31,0,1,0.831,0.378,99,13,1,12,0
|
| 539 |
+
user_537,Engineering,Admin,NY,SAP,32,0,0,0.378,0.926,129,1,6,12,0
|
| 540 |
+
user_538,HR,Engineer,Remote,Oracle,38,1,1,0.547,0.85,21,1,10,3,0
|
| 541 |
+
user_539,Finance,Engineer,SF,Oracle,43,1,1,0.761,0.543,100,18,8,7,1
|
| 542 |
+
user_540,Finance,Specialist,NY,Workday,30,0,0,0.629,0.541,164,5,7,8,1
|
| 543 |
+
user_541,HR,Manager,NY,SAP,17,1,0,0.617,0.304,11,13,10,4,1
|
| 544 |
+
user_542,Engineering,Manager,Remote,Jira,19,1,0,0.34,0.807,26,2,9,0,0
|
| 545 |
+
user_543,Engineering,Manager,SF,SAP,22,0,1,0.695,0.545,123,2,0,1,1
|
| 546 |
+
user_544,Finance,Engineer,TX,Workday,10,0,1,0.74,0.303,92,3,8,10,1
|
| 547 |
+
user_545,Finance,Engineer,Remote,Jira,8,0,0,0.814,0.802,72,3,8,1,1
|
| 548 |
+
user_546,Finance,Manager,TX,Jira,34,1,1,0.241,0.799,17,5,0,7,0
|
| 549 |
+
user_547,Engineering,Engineer,TX,Jira,9,1,1,0.789,0.917,98,19,3,8,1
|
| 550 |
+
user_548,Sales,Engineer,SF,Jira,34,1,1,0.22,0.53,154,17,1,3,1
|
| 551 |
+
user_549,Engineering,Admin,SF,Oracle,10,1,1,0.568,0.923,100,7,9,6,1
|
| 552 |
+
user_550,HR,Engineer,NY,Oracle,41,0,1,0.76,0.726,165,9,0,1,1
|
| 553 |
+
user_551,Sales,Engineer,Remote,Workday,45,1,1,0.309,0.826,83,15,6,9,0
|
| 554 |
+
user_552,HR,Engineer,TX,GitHub,36,0,0,0.38,0.467,7,18,8,9,1
|
| 555 |
+
user_553,Finance,Engineer,TX,Oracle,7,0,0,0.286,0.505,60,8,1,9,1
|
| 556 |
+
user_554,Support,Analyst,NY,Jira,19,1,1,0.225,0.829,95,13,10,3,0
|
| 557 |
+
user_555,Engineering,Specialist,NY,GitHub,30,0,1,0.482,0.676,106,19,5,6,1
|
| 558 |
+
user_556,Finance,Specialist,NY,GitHub,7,1,0,0.53,0.434,143,11,4,3,0
|
| 559 |
+
user_557,Support,Manager,SF,Workday,15,1,0,0.245,0.424,137,20,5,12,0
|
| 560 |
+
user_558,Finance,Analyst,TX,GitHub,35,0,0,0.672,0.624,161,6,5,12,0
|
| 561 |
+
user_559,Support,Engineer,TX,Oracle,24,0,1,0.208,0.334,13,5,8,9,1
|
| 562 |
+
user_560,Finance,Analyst,NY,Workday,16,0,0,0.558,0.45,149,20,1,12,1
|
| 563 |
+
user_561,Finance,Admin,TX,GitHub,42,0,1,0.81,0.777,35,8,1,4,0
|
| 564 |
+
user_562,Engineering,Analyst,Remote,GitHub,12,1,1,0.466,0.422,5,2,9,2,1
|
| 565 |
+
user_563,Support,Analyst,NY,Jira,28,1,0,0.647,0.331,162,20,8,6,0
|
| 566 |
+
user_564,Sales,Specialist,TX,Workday,17,1,0,0.688,0.243,96,5,1,10,0
|
| 567 |
+
user_565,Engineering,Specialist,TX,Oracle,45,0,0,0.375,0.41,81,5,5,0,1
|
| 568 |
+
user_566,Support,Engineer,TX,SAP,33,1,1,0.669,0.265,31,14,10,0,1
|
| 569 |
+
user_567,Engineering,Analyst,TX,Jira,45,0,1,0.404,0.402,101,9,3,2,1
|
| 570 |
+
user_568,Finance,Engineer,SF,SAP,27,1,1,0.364,0.488,56,11,0,1,1
|
| 571 |
+
user_569,HR,Analyst,TX,Oracle,23,1,1,0.249,0.779,178,6,1,5,0
|
| 572 |
+
user_570,Engineering,Analyst,TX,Workday,37,0,0,0.524,0.543,133,6,2,5,0
|
| 573 |
+
user_571,Engineering,Manager,SF,Oracle,9,1,1,0.694,0.879,106,16,2,9,0
|
| 574 |
+
user_572,Finance,Admin,TX,Oracle,30,0,1,0.587,0.988,51,3,6,4,0
|
| 575 |
+
user_573,Finance,Analyst,SF,Workday,9,0,1,0.732,0.524,124,18,0,12,1
|
| 576 |
+
user_574,Support,Analyst,TX,GitHub,7,1,1,0.427,0.803,63,15,3,3,1
|
| 577 |
+
user_575,HR,Engineer,SF,GitHub,33,0,1,0.604,0.306,165,19,8,7,1
|
| 578 |
+
user_576,Finance,Engineer,TX,Oracle,24,1,1,0.472,0.572,45,17,1,7,1
|
| 579 |
+
user_577,HR,Specialist,Remote,Jira,41,1,1,0.9,0.921,158,16,2,5,1
|
| 580 |
+
user_578,HR,Engineer,TX,SAP,22,0,0,0.379,0.899,124,13,9,3,1
|
| 581 |
+
user_579,Engineering,Engineer,TX,Jira,26,1,0,0.612,0.967,118,14,7,2,0
|
| 582 |
+
user_580,Sales,Analyst,TX,Jira,11,0,0,0.481,0.328,10,16,7,3,0
|
| 583 |
+
user_581,Support,Analyst,Remote,SAP,44,0,1,0.229,0.409,14,8,8,1,1
|
| 584 |
+
user_582,Finance,Engineer,TX,Oracle,33,1,0,0.409,0.63,119,7,6,8,1
|
| 585 |
+
user_583,Engineering,Specialist,Remote,Jira,13,0,1,0.937,0.417,56,1,9,11,1
|
| 586 |
+
user_584,Sales,Analyst,SF,Workday,41,1,0,0.552,0.34,2,15,10,11,1
|
| 587 |
+
user_585,Finance,Manager,SF,SAP,18,1,0,0.552,0.511,67,9,6,11,0
|
| 588 |
+
user_586,Support,Analyst,NY,Oracle,34,1,0,0.834,0.534,176,6,0,7,1
|
| 589 |
+
user_587,Finance,Analyst,SF,SAP,22,1,1,0.607,0.605,18,13,9,0,1
|
| 590 |
+
user_588,Engineering,Analyst,Remote,SAP,33,1,0,0.715,0.181,117,19,6,1,1
|
| 591 |
+
user_589,Sales,Manager,TX,GitHub,23,0,0,0.82,0.239,80,17,9,7,0
|
| 592 |
+
user_590,Finance,Admin,NY,GitHub,33,0,0,0.22,0.698,24,5,0,10,0
|
| 593 |
+
user_591,HR,Analyst,Remote,GitHub,5,0,0,0.578,0.506,150,17,6,2,0
|
| 594 |
+
user_592,HR,Admin,TX,Oracle,10,0,0,0.909,0.132,52,18,0,10,0
|
| 595 |
+
user_593,Support,Manager,SF,SAP,39,1,0,0.451,0.255,157,12,8,11,1
|
| 596 |
+
user_594,Sales,Specialist,TX,Oracle,29,0,1,0.781,0.585,15,2,7,6,1
|
| 597 |
+
user_595,Sales,Admin,Remote,SAP,18,1,0,0.7,0.869,119,17,2,6,0
|
| 598 |
+
user_596,HR,Specialist,TX,GitHub,17,0,0,0.567,0.74,59,16,9,1,1
|
| 599 |
+
user_597,Sales,Engineer,SF,GitHub,34,0,0,0.91,0.739,105,20,0,1,0
|
| 600 |
+
user_598,Sales,Manager,SF,Workday,35,1,1,0.799,0.88,113,15,8,9,0
|
| 601 |
+
user_599,Finance,Manager,NY,Jira,36,1,1,0.218,0.258,91,14,4,10,1
|
| 602 |
+
user_600,Engineering,Analyst,SF,Oracle,22,0,1,0.684,0.482,115,19,9,4,0
|
| 603 |
+
user_601,Engineering,Engineer,TX,SAP,23,1,1,0.321,0.273,134,16,6,12,0
|
| 604 |
+
user_602,Sales,Analyst,Remote,Oracle,29,1,1,0.654,0.896,118,14,0,1,1
|
| 605 |
+
user_603,Finance,Engineer,TX,GitHub,7,0,1,0.54,0.562,102,2,8,0,0
|
| 606 |
+
user_604,Finance,Manager,Remote,Jira,6,1,1,0.364,0.624,28,17,7,1,1
|
| 607 |
+
user_605,Support,Analyst,NY,Jira,18,0,1,0.943,0.526,0,19,1,9,1
|
| 608 |
+
user_606,Finance,Specialist,SF,SAP,42,0,1,0.335,0.475,126,8,8,4,1
|
| 609 |
+
user_607,Engineering,Specialist,NY,Workday,42,1,1,0.829,0.203,26,6,5,6,0
|
| 610 |
+
user_608,Finance,Engineer,TX,Oracle,32,1,0,0.799,0.841,169,6,3,4,0
|
| 611 |
+
user_609,Support,Specialist,SF,Oracle,29,1,0,0.512,0.302,160,14,10,7,1
|
| 612 |
+
user_610,HR,Analyst,SF,Oracle,43,1,1,0.819,0.712,85,0,6,9,0
|
| 613 |
+
user_611,HR,Analyst,TX,Jira,26,1,1,0.334,0.154,80,4,7,5,1
|
| 614 |
+
user_612,HR,Specialist,TX,GitHub,27,1,1,0.212,0.961,82,19,8,11,1
|
| 615 |
+
user_613,Finance,Specialist,TX,Oracle,11,0,1,0.284,0.111,98,3,4,12,1
|
| 616 |
+
user_614,HR,Analyst,NY,Jira,15,1,0,0.259,0.28,55,0,7,2,1
|
| 617 |
+
user_615,Support,Admin,Remote,SAP,21,1,0,0.65,0.78,146,7,3,0,1
|
| 618 |
+
user_616,Support,Specialist,NY,SAP,24,1,1,0.441,0.198,180,19,10,5,0
|
| 619 |
+
user_617,Support,Analyst,SF,SAP,13,1,0,0.599,0.73,66,2,0,7,1
|
| 620 |
+
user_618,Support,Admin,TX,GitHub,31,0,0,0.869,0.742,154,11,4,3,0
|
| 621 |
+
user_619,Support,Admin,SF,GitHub,6,1,0,0.203,0.686,166,14,4,5,1
|
| 622 |
+
user_620,Sales,Specialist,TX,Workday,33,1,1,0.205,0.406,29,3,9,9,1
|
| 623 |
+
user_621,Engineering,Engineer,Remote,Oracle,31,1,1,0.454,0.312,36,17,9,6,1
|
| 624 |
+
user_622,Support,Analyst,TX,Jira,42,1,1,0.793,0.982,122,13,2,4,1
|
| 625 |
+
user_623,HR,Manager,TX,Workday,16,0,0,0.945,0.469,169,7,0,3,1
|
| 626 |
+
user_624,Sales,Engineer,NY,Oracle,8,1,0,0.508,0.578,172,10,1,5,0
|
| 627 |
+
user_625,Engineering,Engineer,SF,Oracle,35,1,0,0.605,0.591,112,4,1,1,0
|
| 628 |
+
user_626,Sales,Manager,Remote,SAP,30,1,1,0.277,0.503,134,16,0,6,1
|
| 629 |
+
user_627,Finance,Manager,NY,GitHub,5,1,1,0.912,0.264,160,14,7,6,0
|
| 630 |
+
user_628,HR,Specialist,TX,GitHub,44,1,1,0.64,0.923,127,7,3,3,1
|
| 631 |
+
user_629,Sales,Manager,SF,Oracle,13,1,0,0.53,0.485,40,8,2,8,0
|
| 632 |
+
user_630,HR,Admin,Remote,Workday,18,1,0,0.577,0.414,41,18,1,1,0
|
| 633 |
+
user_631,Sales,Engineer,NY,Oracle,9,1,1,0.873,0.725,63,15,10,8,1
|
| 634 |
+
user_632,Finance,Specialist,TX,Jira,25,1,0,0.532,0.3,80,0,1,6,0
|
| 635 |
+
user_633,Support,Analyst,SF,Oracle,38,0,1,0.662,0.771,12,10,0,5,1
|
| 636 |
+
user_634,Sales,Admin,TX,SAP,38,1,1,0.727,0.223,151,5,0,6,0
|
| 637 |
+
user_635,Finance,Specialist,Remote,GitHub,14,1,1,0.537,0.646,103,3,5,9,0
|
| 638 |
+
user_636,HR,Admin,TX,GitHub,32,1,1,0.522,0.566,7,5,7,11,1
|
| 639 |
+
user_637,HR,Specialist,TX,Jira,24,0,0,0.803,0.885,0,3,4,0,1
|
| 640 |
+
user_638,Sales,Engineer,TX,GitHub,28,0,0,0.217,0.35,45,19,3,0,0
|
| 641 |
+
user_639,Sales,Manager,Remote,GitHub,35,1,0,0.925,0.304,135,1,10,5,0
|
| 642 |
+
user_640,HR,Engineer,SF,GitHub,13,1,0,0.547,0.514,179,6,4,11,1
|
| 643 |
+
user_641,Finance,Manager,Remote,Workday,45,0,1,0.388,0.502,33,14,7,3,1
|
| 644 |
+
user_642,Finance,Specialist,Remote,Workday,19,0,1,0.281,0.159,38,11,7,1,1
|
| 645 |
+
user_643,Finance,Engineer,TX,Oracle,5,0,1,0.245,0.438,36,20,6,12,1
|
| 646 |
+
user_644,HR,Specialist,SF,Jira,28,0,0,0.662,0.546,149,15,10,10,1
|
| 647 |
+
user_645,Sales,Manager,Remote,Oracle,21,1,1,0.467,0.915,18,10,8,7,1
|
| 648 |
+
user_646,HR,Specialist,NY,Workday,24,1,0,0.699,0.539,106,7,7,10,0
|
| 649 |
+
user_647,Engineering,Admin,NY,Workday,29,1,0,0.785,0.165,131,15,3,6,0
|
| 650 |
+
user_648,Sales,Admin,SF,Jira,13,1,0,0.334,0.643,47,12,10,7,0
|
| 651 |
+
user_649,HR,Admin,Remote,SAP,37,1,0,0.342,0.558,120,11,0,3,0
|
| 652 |
+
user_650,Finance,Analyst,NY,Jira,19,1,1,0.702,0.237,47,1,6,5,1
|
| 653 |
+
user_651,Sales,Manager,TX,Oracle,11,1,1,0.498,0.277,52,4,3,11,0
|
| 654 |
+
user_652,Sales,Analyst,NY,GitHub,36,1,1,0.316,0.143,122,16,2,3,1
|
| 655 |
+
user_653,Support,Specialist,Remote,Jira,31,0,1,0.935,0.276,32,4,7,9,1
|
| 656 |
+
user_654,Finance,Admin,NY,Oracle,41,1,1,0.664,0.348,127,19,0,0,1
|
| 657 |
+
user_655,Finance,Specialist,NY,Oracle,33,0,1,0.682,0.453,143,7,5,6,0
|
| 658 |
+
user_656,Sales,Analyst,SF,Jira,44,1,0,0.601,0.602,1,8,7,8,0
|
| 659 |
+
user_657,Engineering,Engineer,TX,Jira,26,1,1,0.256,0.59,171,12,0,5,0
|
| 660 |
+
user_658,Sales,Specialist,Remote,SAP,23,1,1,0.937,0.119,179,9,3,2,0
|
| 661 |
+
user_659,Finance,Analyst,Remote,SAP,8,1,0,0.671,0.591,44,18,10,10,1
|
| 662 |
+
user_660,Engineering,Admin,TX,Jira,17,0,0,0.927,0.738,101,0,0,5,1
|
| 663 |
+
user_661,Finance,Admin,Remote,SAP,29,0,1,0.913,0.571,33,4,3,8,0
|
| 664 |
+
user_662,Sales,Admin,TX,Oracle,9,1,0,0.937,0.689,105,1,5,6,1
|
| 665 |
+
user_663,Engineering,Specialist,TX,Workday,12,1,1,0.906,0.137,75,11,3,0,0
|
| 666 |
+
user_664,Sales,Analyst,TX,GitHub,36,0,1,0.547,0.903,156,14,5,11,0
|
| 667 |
+
user_665,Support,Analyst,Remote,SAP,38,1,0,0.468,0.787,165,3,10,7,0
|
| 668 |
+
user_666,HR,Admin,NY,Oracle,14,1,1,0.404,0.435,118,8,8,9,1
|
| 669 |
+
user_667,Support,Specialist,SF,Oracle,22,1,1,0.487,0.659,30,5,2,12,0
|
| 670 |
+
user_668,Sales,Admin,TX,SAP,18,0,1,0.546,0.222,178,1,7,4,1
|
| 671 |
+
user_669,HR,Specialist,TX,SAP,22,0,1,0.283,0.891,146,4,1,10,1
|
| 672 |
+
user_670,Engineering,Specialist,TX,Oracle,18,0,1,0.296,0.927,148,14,7,6,1
|
| 673 |
+
user_671,Finance,Analyst,TX,SAP,21,1,0,0.435,0.754,6,12,2,10,0
|
| 674 |
+
user_672,Sales,Specialist,SF,GitHub,20,1,0,0.77,0.145,163,5,9,1,0
|
| 675 |
+
user_673,Sales,Admin,NY,GitHub,24,0,0,0.89,0.777,176,14,1,8,0
|
| 676 |
+
user_674,Finance,Engineer,NY,Workday,44,1,1,0.884,0.162,45,20,6,8,1
|
| 677 |
+
user_675,Support,Manager,SF,Jira,13,1,0,0.874,0.692,72,10,4,9,1
|
| 678 |
+
user_676,Sales,Admin,Remote,SAP,25,0,0,0.221,0.807,59,4,10,11,0
|
| 679 |
+
user_677,Sales,Engineer,SF,Jira,25,1,1,0.25,0.625,163,5,2,4,1
|
| 680 |
+
user_678,Sales,Specialist,Remote,Oracle,30,1,1,0.252,0.383,77,16,1,3,1
|
| 681 |
+
user_679,Support,Admin,SF,Oracle,12,1,1,0.875,0.592,20,9,0,1,0
|
| 682 |
+
user_680,Finance,Engineer,SF,Workday,33,1,1,0.547,0.567,174,14,8,2,0
|
| 683 |
+
user_681,Finance,Manager,SF,Workday,30,1,0,0.376,0.873,9,0,6,2,0
|
| 684 |
+
user_682,HR,Admin,NY,GitHub,31,1,0,0.665,0.679,157,5,7,12,1
|
| 685 |
+
user_683,Support,Engineer,Remote,GitHub,38,0,1,0.604,0.743,159,19,3,12,0
|
| 686 |
+
user_684,Finance,Engineer,Remote,Jira,31,1,0,0.659,0.12,134,19,3,5,0
|
| 687 |
+
user_685,Support,Specialist,Remote,Oracle,41,0,1,0.631,0.549,138,6,2,8,0
|
| 688 |
+
user_686,Sales,Specialist,TX,GitHub,12,1,1,0.538,0.872,133,10,6,12,0
|
| 689 |
+
user_687,Engineering,Manager,Remote,GitHub,7,1,1,0.552,0.873,169,16,1,0,0
|
| 690 |
+
user_688,Finance,Engineer,Remote,Workday,38,0,1,0.615,0.352,69,19,4,10,1
|
| 691 |
+
user_689,Support,Manager,TX,Workday,17,1,1,0.461,0.954,3,8,1,10,1
|
| 692 |
+
user_690,HR,Engineer,SF,Workday,12,0,0,0.272,0.86,92,10,8,11,1
|
| 693 |
+
user_691,Finance,Engineer,TX,GitHub,18,0,0,0.222,0.12,48,11,0,2,0
|
| 694 |
+
user_692,HR,Analyst,Remote,Jira,37,0,0,0.533,0.621,6,19,4,6,0
|
| 695 |
+
user_693,Support,Analyst,Remote,GitHub,34,1,0,0.544,0.512,50,14,9,8,0
|
| 696 |
+
user_694,Support,Manager,NY,GitHub,41,0,1,0.538,0.519,81,15,5,7,1
|
| 697 |
+
user_695,Engineering,Analyst,NY,Oracle,40,1,0,0.755,0.37,27,15,6,2,1
|
| 698 |
+
user_696,Sales,Specialist,TX,Workday,13,0,1,0.768,0.68,169,4,1,1,1
|
| 699 |
+
user_697,Finance,Analyst,SF,Oracle,21,0,1,0.505,0.237,105,13,9,8,1
|
| 700 |
+
user_698,Support,Engineer,TX,GitHub,23,0,1,0.918,0.813,156,18,9,8,1
|
| 701 |
+
user_699,Engineering,Manager,SF,Oracle,18,0,0,0.55,0.298,77,13,6,12,0
|
| 702 |
+
user_700,Engineering,Specialist,SF,Workday,24,0,1,0.687,0.431,125,7,5,6,0
|
| 703 |
+
user_701,Finance,Engineer,TX,SAP,12,0,0,0.655,0.64,145,12,0,10,1
|
| 704 |
+
user_702,Engineering,Manager,TX,Jira,30,1,1,0.274,0.674,86,14,10,12,0
|
| 705 |
+
user_703,Engineering,Engineer,NY,GitHub,30,0,0,0.794,0.734,37,13,6,9,1
|
| 706 |
+
user_704,Support,Analyst,SF,Oracle,35,0,1,0.357,0.931,97,4,9,5,0
|
| 707 |
+
user_705,Sales,Specialist,TX,Jira,15,1,0,0.338,0.94,141,13,5,11,1
|
| 708 |
+
user_706,HR,Manager,SF,Oracle,39,0,1,0.693,0.73,142,19,4,11,1
|
| 709 |
+
user_707,Engineering,Specialist,TX,Oracle,32,0,1,0.656,0.554,171,2,8,7,1
|
| 710 |
+
user_708,Sales,Analyst,TX,Workday,15,0,0,0.619,0.242,110,20,6,0,1
|
| 711 |
+
user_709,Support,Specialist,TX,GitHub,41,1,0,0.82,0.978,108,0,10,6,0
|
| 712 |
+
user_710,Engineering,Manager,Remote,Oracle,29,1,0,0.227,0.648,158,6,2,9,0
|
| 713 |
+
user_711,Engineering,Engineer,TX,GitHub,34,0,1,0.556,0.636,174,20,8,7,0
|
| 714 |
+
user_712,Support,Specialist,Remote,GitHub,16,1,0,0.817,0.794,29,8,2,9,0
|
| 715 |
+
user_713,Sales,Manager,SF,GitHub,14,1,0,0.939,0.965,135,8,9,3,0
|
| 716 |
+
user_714,HR,Manager,NY,Jira,43,1,1,0.48,0.289,81,16,1,3,1
|
| 717 |
+
user_715,Sales,Manager,SF,GitHub,28,0,1,0.762,0.799,10,13,8,2,1
|
| 718 |
+
user_716,Finance,Engineer,TX,SAP,14,0,1,0.876,0.197,133,3,9,1,0
|
| 719 |
+
user_717,HR,Specialist,SF,GitHub,31,1,1,0.61,0.235,57,19,8,7,1
|
| 720 |
+
user_718,Sales,Engineer,SF,Jira,43,1,0,0.264,0.989,30,9,5,11,1
|
| 721 |
+
user_719,Engineering,Admin,TX,Jira,10,0,0,0.433,0.792,136,7,6,11,0
|
| 722 |
+
user_720,Finance,Engineer,NY,Workday,15,1,0,0.787,0.752,96,17,4,2,1
|
| 723 |
+
user_721,Sales,Analyst,TX,GitHub,28,1,1,0.379,0.822,17,0,7,12,1
|
| 724 |
+
user_722,Support,Analyst,SF,GitHub,44,0,1,0.431,0.684,104,9,6,8,1
|
| 725 |
+
user_723,Support,Engineer,TX,SAP,23,1,0,0.461,0.651,53,12,1,9,1
|
| 726 |
+
user_724,Engineering,Specialist,Remote,SAP,16,0,1,0.628,0.976,98,13,5,10,0
|
| 727 |
+
user_725,Support,Engineer,Remote,GitHub,11,1,1,0.246,0.484,126,1,0,8,1
|
| 728 |
+
user_726,Engineering,Admin,Remote,GitHub,24,0,1,0.563,0.363,175,13,1,1,0
|
| 729 |
+
user_727,Finance,Engineer,NY,GitHub,18,0,0,0.658,0.354,166,13,7,0,1
|
| 730 |
+
user_728,Engineering,Manager,Remote,GitHub,12,1,1,0.752,0.349,137,16,5,9,0
|
| 731 |
+
user_729,Support,Admin,TX,GitHub,18,0,1,0.779,0.836,129,14,1,5,1
|
| 732 |
+
user_730,Support,Manager,Remote,SAP,19,1,1,0.21,0.614,139,11,9,11,1
|
| 733 |
+
user_731,Sales,Engineer,SF,GitHub,11,1,1,0.38,0.631,53,11,10,5,0
|
| 734 |
+
user_732,Sales,Manager,SF,SAP,22,1,0,0.892,0.434,56,12,5,9,1
|
| 735 |
+
user_733,Finance,Admin,SF,SAP,38,0,0,0.485,0.182,80,18,8,4,1
|
| 736 |
+
user_734,HR,Specialist,Remote,SAP,29,0,1,0.903,0.667,98,11,1,6,1
|
| 737 |
+
user_735,Sales,Manager,SF,Oracle,28,0,1,0.921,0.297,52,13,5,7,0
|
| 738 |
+
user_736,HR,Engineer,Remote,Jira,41,1,0,0.202,0.135,154,1,6,5,0
|
| 739 |
+
user_737,Engineering,Manager,NY,SAP,11,1,1,0.639,0.419,58,7,2,0,0
|
| 740 |
+
user_738,Finance,Specialist,TX,Jira,6,1,1,0.582,0.87,11,7,7,9,1
|
| 741 |
+
user_739,Sales,Analyst,SF,GitHub,21,0,1,0.547,0.295,55,18,10,5,1
|
| 742 |
+
user_740,HR,Analyst,TX,Workday,17,1,0,0.747,0.635,165,4,10,7,0
|
| 743 |
+
user_741,Engineering,Admin,Remote,Jira,18,1,1,0.383,0.686,174,7,10,8,1
|
| 744 |
+
user_742,Finance,Engineer,Remote,Workday,17,0,1,0.538,0.669,141,3,6,11,1
|
| 745 |
+
user_743,Sales,Engineer,NY,SAP,18,0,0,0.256,0.758,111,13,10,5,1
|
| 746 |
+
user_744,Finance,Admin,NY,Workday,7,1,1,0.834,0.742,1,6,6,8,1
|
| 747 |
+
user_745,HR,Specialist,TX,Oracle,10,0,1,0.472,0.369,160,19,0,0,0
|
| 748 |
+
user_746,HR,Admin,Remote,Workday,14,1,1,0.947,0.91,10,11,4,8,1
|
| 749 |
+
user_747,HR,Engineer,SF,SAP,9,0,0,0.311,0.511,51,20,5,11,0
|
| 750 |
+
user_748,HR,Specialist,NY,Jira,32,1,1,0.596,0.401,174,6,3,5,0
|
| 751 |
+
user_749,HR,Admin,SF,Workday,6,0,0,0.795,0.686,136,10,1,2,1
|
| 752 |
+
user_750,Engineering,Specialist,Remote,Oracle,23,0,1,0.733,0.765,125,14,0,4,0
|
| 753 |
+
user_751,Finance,Manager,Remote,SAP,24,0,1,0.549,0.142,46,14,5,5,1
|
| 754 |
+
user_752,Sales,Analyst,Remote,Workday,13,1,0,0.723,0.768,102,4,7,5,0
|
| 755 |
+
user_753,Engineering,Engineer,SF,GitHub,14,0,1,0.468,0.594,66,0,1,5,1
|
| 756 |
+
user_754,Support,Manager,NY,Workday,35,1,1,0.497,0.944,122,11,10,12,0
|
| 757 |
+
user_755,Sales,Manager,Remote,GitHub,42,1,0,0.507,0.116,1,2,3,5,1
|
| 758 |
+
user_756,Finance,Analyst,NY,Workday,10,0,1,0.764,0.137,8,13,2,12,1
|
| 759 |
+
user_757,Finance,Admin,SF,Workday,40,1,1,0.421,0.833,27,7,9,3,0
|
| 760 |
+
user_758,Engineering,Manager,Remote,Oracle,27,1,0,0.908,0.953,61,6,0,10,1
|
| 761 |
+
user_759,HR,Admin,NY,GitHub,36,1,0,0.773,0.7,67,11,0,4,1
|
| 762 |
+
user_760,Engineering,Analyst,Remote,GitHub,10,0,0,0.617,0.659,97,10,1,2,0
|
| 763 |
+
user_761,Finance,Engineer,SF,GitHub,11,1,0,0.779,0.523,86,16,1,8,0
|
| 764 |
+
user_762,Support,Analyst,Remote,Oracle,37,0,0,0.682,0.661,139,5,8,6,1
|
| 765 |
+
user_763,Sales,Admin,SF,GitHub,16,1,1,0.411,0.843,162,20,0,8,1
|
| 766 |
+
user_764,Support,Admin,Remote,SAP,15,1,0,0.316,0.585,19,10,8,7,0
|
| 767 |
+
user_765,Support,Analyst,SF,GitHub,20,0,0,0.659,0.385,147,18,5,12,0
|
| 768 |
+
user_766,Support,Analyst,SF,Oracle,34,1,1,0.379,0.25,139,6,7,7,0
|
| 769 |
+
user_767,Finance,Manager,TX,SAP,38,0,1,0.853,0.887,57,11,3,5,0
|
| 770 |
+
user_768,HR,Analyst,SF,Workday,7,1,1,0.863,0.603,176,7,10,10,0
|
| 771 |
+
user_769,Engineering,Manager,TX,Jira,36,1,0,0.619,0.201,71,15,6,3,0
|
| 772 |
+
user_770,Sales,Analyst,TX,SAP,44,1,1,0.634,0.909,163,8,2,6,0
|
| 773 |
+
user_771,Finance,Admin,Remote,Jira,29,0,0,0.505,0.484,106,4,2,7,1
|
| 774 |
+
user_772,HR,Analyst,TX,Jira,28,1,1,0.611,0.104,60,14,9,8,1
|
| 775 |
+
user_773,Engineering,Engineer,SF,GitHub,12,1,0,0.217,0.961,164,13,7,2,1
|
| 776 |
+
user_774,Sales,Analyst,NY,Jira,32,1,1,0.918,0.351,178,1,7,2,0
|
| 777 |
+
user_775,Sales,Admin,NY,Oracle,39,0,0,0.883,0.426,70,7,2,0,1
|
| 778 |
+
user_776,Sales,Specialist,SF,SAP,5,1,0,0.714,0.243,15,10,8,0,0
|
| 779 |
+
user_777,HR,Specialist,Remote,Oracle,5,0,1,0.535,0.948,137,13,8,1,1
|
| 780 |
+
user_778,HR,Engineer,NY,Oracle,42,0,0,0.203,0.237,167,10,2,6,1
|
| 781 |
+
user_779,Support,Analyst,TX,SAP,35,0,0,0.941,0.987,70,8,4,2,0
|
| 782 |
+
user_780,Finance,Analyst,SF,Oracle,32,1,0,0.454,0.255,58,17,7,12,0
|
| 783 |
+
user_781,HR,Analyst,SF,SAP,12,1,0,0.591,0.339,78,13,10,6,0
|
| 784 |
+
user_782,Support,Admin,SF,Workday,45,1,1,0.656,0.898,65,10,3,5,1
|
| 785 |
+
user_783,Engineering,Admin,NY,Oracle,30,1,1,0.903,0.934,157,4,5,2,1
|
| 786 |
+
user_784,Finance,Analyst,SF,SAP,26,0,0,0.2,0.399,16,13,7,3,0
|
| 787 |
+
user_785,HR,Admin,SF,Workday,27,0,1,0.315,0.574,172,17,4,6,1
|
| 788 |
+
user_786,Sales,Analyst,Remote,GitHub,24,1,1,0.738,0.46,153,12,2,9,0
|
| 789 |
+
user_787,Support,Manager,SF,Jira,11,0,1,0.348,0.58,66,9,2,0,1
|
| 790 |
+
user_788,HR,Admin,Remote,SAP,30,0,1,0.707,0.258,96,9,8,2,1
|
| 791 |
+
user_789,Support,Analyst,SF,Oracle,33,0,0,0.872,0.126,37,16,3,8,1
|
| 792 |
+
user_790,HR,Analyst,TX,SAP,10,1,1,0.249,0.425,141,3,1,11,0
|
| 793 |
+
user_791,Support,Engineer,TX,Jira,29,0,0,0.396,0.375,118,20,9,12,1
|
| 794 |
+
user_792,Engineering,Specialist,Remote,GitHub,29,1,0,0.695,0.812,63,4,10,5,1
|
| 795 |
+
user_793,Support,Specialist,NY,SAP,39,1,1,0.669,0.534,44,1,4,0,0
|
| 796 |
+
user_794,Support,Admin,NY,Oracle,37,0,1,0.519,0.231,58,1,5,5,0
|
| 797 |
+
user_795,Support,Specialist,SF,GitHub,11,0,1,0.509,0.283,161,2,1,10,0
|
| 798 |
+
user_796,Finance,Analyst,Remote,Jira,41,0,0,0.706,0.175,8,9,0,11,1
|
| 799 |
+
user_797,HR,Analyst,TX,GitHub,27,1,0,0.475,0.885,90,9,9,8,1
|
| 800 |
+
user_798,HR,Analyst,Remote,Workday,11,1,0,0.824,0.316,43,3,5,4,1
|
| 801 |
+
user_799,Finance,Engineer,TX,Oracle,33,1,1,0.576,0.967,103,5,10,5,0
|
requirements.txt
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
fastapi==0.110.0
|
| 2 |
+
uvicorn==0.29.0
|
| 3 |
+
pandas==2.2.2
|
| 4 |
+
scikit-learn==1.4.2
|
| 5 |
+
numpy==1.26.4
|
| 6 |
+
sqlalchemy==2.0.29
|
| 7 |
+
python-multipart==0.0.9
|
| 8 |
+
openpyxl==3.1.2
|
| 9 |
+
hdbscan==0.8.40
|