{ "cells": [ { "id": "7af82b40", "cell_type": "markdown", "source": [ "## Local setup\n", "\n", "Use Python 3.12 or 3.13 and install this checkout with `uv pip install --editable '.[notebooks]'`.\n", "See **Run notebooks locally** in the repository README for the kernel, execution order,\n", "and full-data options. Generated artifacts stay under `.cache/notebooks/`.\n" ], "metadata": {} }, { "id": "ba5f79ca", "cell_type": "code", "metadata": {}, "execution_count": null, "source": [ "import os\n", "import sys\n", "from pathlib import Path\n", "\n", "# Works when opened from the repository root or any notebook directory.\n", "_start = Path(globals().get(\"__file__\", Path.cwd())).resolve()\n", "ROOT = next(\n", " p\n", " for p in [_start, *_start.parents]\n", " if (p / \"pyproject.toml\").is_file() and (p / \"great_ai\").is_dir()\n", ")\n", "sys.path.insert(0, str(ROOT / \"docs\"))\n", "from notebook_support import setup_notebook, mag_lines\n", "\n", "FULL_RUN = os.environ.get(\"GREAT_AI_NOTEBOOK_FULL\") == \"1\"\n", "WORK_DIR = setup_notebook(ROOT, \"surveys\")\n", "DATA_DIR = ROOT / \"docs/tutorial/data\"" ], "outputs": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "\n", "SURVEY_DIR = ROOT / \"docs/surveys\"\n", "best_practices = pd.read_csv(SURVEY_DIR / \"Best practices assessment.csv\")\n", "best_practices" ], "id": "cell-2" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "m = {\n", " \"Strongly agree\": 4 / 4,\n", " \"Agree\": 3 / 4,\n", " \"Neither agree nor disagree\": 2 / 4,\n", " \"Disagree\": 1 / 4,\n", " \"Strongly disagree\": 0 / 4,\n", "}\n", "\n", "best_practices_dicts = [v.to_dict() for _, v in best_practices.iterrows()]\n", "\n", "best_practice_score_ds = []\n", "best_practice_score_se = []\n", "\n", "for d in best_practices_dicts:\n", " ds_experience = int(d[\"How many years of data science experience do you have?\"])\n", " del d[\"How many years of data science experience do you have?\"]\n", "\n", " se_experience = int(\n", " d[\"How many years of software engineering experience do you have?\"]\n", " )\n", " del d[\"How many years of software engineering experience do you have?\"]\n", "\n", " scores = [m[v] for v in d.values() if v != \"Not applicable\"]\n", " score = sum(scores) / len(scores)\n", " best_practice_score_ds.append((ds_experience, score))\n", " best_practice_score_se.append((se_experience, score))\n", "\n", "best_practices[\n", " \"How many years of software engineering experience do you have?\"\n", "].median(), best_practices[\n", " \"How many years of data science experience do you have?\"\n", "].median()" ], "id": "cell-3" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "from scipy import stats\n", "\n", "best_practice_score_ds = sorted(best_practice_score_ds)\n", "plt.scatter(\n", " [x for x, y in best_practice_score_ds], [y for x, y in best_practice_score_ds]\n", ")\n", "stats.pearsonr(\n", " [x for x, y in best_practice_score_ds], [y for x, y in best_practice_score_ds]\n", ")" ], "id": "cell-4" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import re\n", "\n", "best_practice_score_se = sorted(best_practice_score_se)\n", "\n", "%matplotlib inline\n", "plt.rcParams[\"figure.facecolor\"] = \"white\"\n", "plt.rcParams[\"font.size\"] = 24\n", "plt.rcParams[\"figure.figsize\"] = (14, 10)\n", "\n", "X = [x for x, y in best_practice_score_se]\n", "Y = [y for x, y in best_practice_score_se]\n", "\n", "print(sum(Y) / len(Y))\n", "sc = plt.scatter(X, Y, c=\"black\", s=[x * 50 for x, y in best_practice_score_ds])\n", "plt.ylabel(\"Ratio of implemented deployment best practices\")\n", "plt.xlabel(\"Years of professional software engineering experience\")\n", "\n", "\n", "def best_fit(X, Y):\n", " xbar = sum(X) / len(X)\n", " ybar = sum(Y) / len(Y)\n", " n = len(X)\n", "\n", " numer = sum([xi * yi for xi, yi in zip(X, Y)]) - n * xbar * ybar\n", " denum = sum([xi**2 for xi in X]) - n * xbar**2\n", "\n", " b = numer / denum\n", " a = ybar - b * xbar\n", " return a, b\n", "\n", "\n", "a, b = best_fit(X, Y)\n", "yfit = [a + b * xi for xi in X]\n", "plt.plot(X, yfit, \"b\", label=\"Best fit\")\n", "plt.legend(\n", " sc.legend_elements(\"sizes\", num=5)[0],\n", " [\n", " re.sub(r\"[^\\d]*(\\d+)[^\\d]*\", lambda v: f\"{int(v.group(1)) // 40} years (DS)\", t)\n", " for t in sc.legend_elements(\"sizes\", num=5)[1]\n", " ],\n", ")\n", "plt.tight_layout()\n", "\n", "plt.savefig(WORK_DIR / \"best-practices.png\", dpi=150)\n", "\n", "stats.pearsonr(\n", " [x for x, y in best_practice_score_se], [y for x, y in best_practice_score_se]\n", ")" ], "id": "cell-5" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tam = pd.read_csv(SURVEY_DIR / \"Technology acceptance model questionnaire.csv\")\n", "tam" ], "id": "cell-6" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import pingouin\n", "\n", "pu = [\n", " \"I believe the use of GreatAI improves the quality of AI deployments.\",\n", " \"I believe the use of GreatAI would increase my productivity.\",\n", " \"I believe the use of GreatAI can lead to robust and trustworthy deployments.\",\n", " \"Overall, I found GreatAI useful when working with AI.\",\n", "]\n", "pingouin.cronbach_alpha(tam[pu])" ], "id": "cell-7" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "peou = [\n", " \"I found the GreatAI easy to learn.\",\n", " \"I found it is easy to employ GreatAI in practice.\",\n", " \"I found it is easy to integrate GreatAI into an existing project.\",\n", " \"Overall, I found GreatAI easy to use.\",\n", "]\n", "pingouin.cronbach_alpha(tam[peou])" ], "id": "cell-8" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "itu = [\n", " \"Assuming GreatAI is applicable to my task, I predict that I will use it on a regular basis in the future.\",\n", " \"Overall, I intend to use the GreatAI in my personal or professional projects.\",\n", "]\n", "pingouin.cronbach_alpha(tam[itu])" ], "id": "cell-9" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tam[\"pu\"] = tam[pu].mean(axis=1)\n", "tam[\"peou\"] = tam[peou].mean(axis=1)\n", "tam[\"itu\"] = tam[itu].mean(axis=1)\n", "tam[[\"pu\", \"peou\", \"itu\"]]" ], "id": "cell-10" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tam[[\"pu\", \"peou\", \"itu\"]].mean()" ], "id": "cell-11" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tam[[\"pu\", \"peou\", \"itu\"]].median()" ], "id": "cell-12" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tam[[\"pu\", \"peou\", \"itu\"]].std()" ], "id": "cell-13" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "stats.pearsonr(tam[\"peou\"], tam[\"pu\"])" ], "id": "cell-14" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "stats.pearsonr(tam[\"peou\"], tam[\"itu\"])" ], "id": "cell-15" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "stats.pearsonr(tam[\"pu\"], tam[\"itu\"])" ], "id": "cell-16" } ], "metadata": { "kernelspec": { "display_name": "GreatAI (local)", "language": "python", "name": "great-ai-local" }, "language_info": { "name": "python", "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3" } }, "nbformat": 4, "nbformat_minor": 5 }