\n",
+ "
\n",
+ " Willkommen zur fünften Programmierübung Einführung in Python 3.\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ "\n",
+ "Wenn Sie Fragen oder Verbesserungsvorschläge zum Inhalt oder Struktur der Notebooks haben, dann können sie eine E-Mail an Phil Keier ([p.keier@hbk-bs.de](mailto:p.keier@hbk-bs.de?subject=[SigSys]%20Feedback%20Programmierübung&)) oder Martin Le ([martin.le@tu-bs.de](mailto:martin.le@tu-bs.de?subject=[SigSys]%20Feedback%20Programmierübung&)) schreiben.\n",
+ "\n",
+ "Link zu einem Python Spickzettel: [hier](https://s3.amazonaws.com/assets.datacamp.com/blog_assets/PythonForDataScience.pdf)\n",
+ "\n",
+ "Der Großteil des Python-Tutorials stammt aus der Veranstaltung _Deep Learning Lab_ und von [www.python-kurs.eu](https://www.python-kurs.eu/python3_kurs.php) und wurde für _Signale und Systeme_, sowie _Einführung in die Programmierung für Nicht Informatiker_ angepasst.\n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "bb677cea-65c2-486d-9442-6495b5063bd2",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-110034393ecbe731",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ }
+ },
+ "source": [
+ "# Was ist SciPy\n",
+ "\n",
+ "SciPy steht für Scientific Python und ist eine Open-Source-Bibliothek, die auf der bewährten Architektur von NumPy aufbaut. Sie bietet eine Vielzahl von Funktionen, die speziell für ingenieurtechnische und wissenschaftliche Anwendungen entwickelt wurden. In diesem Zusammenhang möchten wir uns insbesondere mit Teilen des Statistikmoduls von SciPy vertraut machen.\n",
+ "\n",
+ "__Für dieses Notebook schauen Sie bitte in die [SciPy Docs](https://docs.scipy.org/doc/scipy/tutorial/index.html)!!!__ Dort sind alle Funktionen beschrieben die wir hier bearbeiten und noch mehr!\n",
+ "\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3dde4289-bc10-49fc-875d-ebc44fbf807a",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-82f61f58224c5db9",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ }
+ },
+ "source": [
+ "SciPys wird meist als `sp` importiert da für diese Aufgabe nur das Statistik modul nötig ist wird einfach dieses importiert. Aufgrund des kurzen schlüssigen namens findet keine umbenennung statt:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "e058b67a-ab34-4685-b023-084bfa80f171",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-fe3ab9d39498717f",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ }
+ },
+ "outputs": [],
+ "source": [
+ "from scipy import stats"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "57ada7f0-5eea-45cc-b8d0-85f52c7f6b55",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-eec41b75718f0e4e",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ }
+ },
+ "source": [
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5983dc91-91f3-4b6b-b6c2-9873b9ea8db9",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-65e8f06a2b373c8c",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ }
+ },
+ "source": [
+ "# Lineare Regression\n",
+ "\n",
+ "## Motivation\n",
+ "\n",
+ "Die **lineare Regression** ist eine grundlegende Methode zur Modellierung von Beziehungen zwischen Variablen. Sie hilft, Zusammenhänge zu verstehen und ermöglicht Vorhersagen auf Basis vorhandener Daten. Durch die Bestimmung einer linearen Beziehung zwischen einer abhängigen und einer oder mehreren unabhängigen Variablen können wir Trends identifizieren und zukünftige Werte schätzen. Ihre Einfachheit, Effizienz und die Möglichkeit, auch bei großen Datensätzen präzise Ergebnisse zu erzielen, machen sie zu einem wertvollen Werkzeug in der Datenanalyse und ein Fundament für komplexere Modelle.\n",
+ "\n",
+ "Dafür geht man davon aus, dass es zwei unabhängige Variablen $x_1$ & $x_2$ gibt, für die eine Zukünftige Aussage getätigt werden soll. Hierfür wird eine fehlerminimierte Gerade $g(x)$ zwischen die Datenpunkte gelegt. Daraus resultierenden lässt sich mit $g(x)$ eine zukünftige Vorhersage in einem bestimmten Fehlerbereich tätigen.\n",
+ "\n",
+ "Aus der Schule sollte die Geraden Gleichung $g(x) = m\\cdot x+b$ bekannt sein. Dabei beschreibt $m$ die Steigung (Slope) & $b$ den Schnittpunkt mit der y-Achse (interception). Die **lineare regression** bietet daher die Möglichkeit diese beiden Parameter herauszufinden.\n",
+ "\n",
+ "Für das folgende Beispiel werden zwei (pseudo-)zufällig erzeugte Datensets generiert, auf welche dann die lineare regression angewandt wird. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "60712a1d-7a55-44f4-89e9-cae5ceab952a",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-fbb9bfd35036d55e",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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x4wdO3YY48aNMyQZkyZN8utb0TGbO3eu4XA4jC+//NLXlpmZaUgyZs2a5df3mmuuMXr16uV7/frrrxuSjHnz5vnavvvuOyM5OTng2Pbs2dNo27atceLECV/b9u3bjZCQEOOuu+4KOKb33HOP3z5jY2MNh8NhPPnkk772b775xggPDzcyMzMveJyef/55Q5Lx7rvv+to8Ho8RExNj3HDDDVUeo4p+V5mZmX6/q7Vr1xqSjLVr1/q9d9++fQHHYtCgQUaPHj389uf1eo2+ffsaXbp08bVdffXVxrBhwy743YCaxBkZoBJDhgzRxo0bddttt2n79u2aN2+eUlNTFRMT43dK/fXXX5fX69Wjjz6qkBD//0s5HA7f/w4PD/f979OnT+v48eNKTk5WcXGxPv3004uuc9u2bdq7d69Gjx6tEydO6Pjx4zp+/LjOnj2rQYMGacOGDfJ6vX7v+dnPfub3Oj8/X16vV6NGjfK9//jx42rfvr26dOmitWvXSpI+/PBDHT16VD/72c/UuHFj3/vLpmqCtWrVKrVp00Zt2rRRjx499PLLL2vChAl6+umn/fqVP2Znz57V8ePH1bdvXxmGoY8++ihgv+d/r+TkZP3nP//xvX777bfVqFEj3Xvvvb42p9Op++67z+99hw4d0rZt2zR+/Hi1bNnS137VVVdpyJAhevvttwM++6c//anfPnv37i3DMPSTn/zE1968eXN17drVr6bK3HHHHQoNDfWbXlq/fr2Kiop800rnH6Oa/F2V+frrr7VmzRqNGjXKt//jx4/rxIkTSk1N1d69e1VUVOT7fp988on27t17yZ8LBIvFvkAV+vTpo/z8fJ07d07bt2/X8uXL9dvf/lYZGRnatm2bunXrps8//1whISHq1q1blfv65JNP9Mgjj2jNmjVyu91+206dOnXRNZb90ahoeqT8/stP2yQkJATswzAMdenSpcL3h4aGSpK+/PJLSQroFxoaqssuuyzomsumXjwejz7++GPNnj1b33zzjV84kqT9+/fr0Ucf1RtvvKFvvvkm4DuV16RJE7Vp08avrUWLFn7v+/LLLxUdHa2mTZv69evatavf67LveX67JCUlJendd98NWCQdHx/v169Zs2Zq0qSJWrduHdB+4sSJSo7M/9eqVSulpqZq+fLlWrRokZo0aaKlS5eqUaNGGjVqlK9fbf2uynz22WcyDEPTp0/X9OnTK+xz9OhRxcTEaNasWUpLS9MVV1yhK6+8UkOHDtW4ceN01VVXXXIdQGUIMkAQGjdurD59+qhPnz664oorNGHCBP3tb3/TY489FtT7T548qYEDB8rlcmnWrFnq3LmzmjRpoq1bt+rBBx8MOGNSHWXvffrpp9WzZ88K+5z/h7v8f8WX7cPhcOidd96R0+m84PsvVevWrTV48GBJUmpqqhITE3XrrbcqNzfXd28Uj8ejIUOG6Ouvv9aDDz6oxMRERUZGqqioSOPHjw84ZhXVXZcq+vzKajIMI6h9jh07Vm+99Zbeeust3XbbbXrttdd08803+wLbpfyuyp8tLO/8NTll+5g6dapSU1MrfM/ll18uSRowYIA+//xzrVixQqtWrdLvf/97/fa3v9WiRYv8zlgBNYkgA1RT7969pe+nHySpc+fO8nq92rlzZ6VBYt26dTpx4oTy8/N9C3Qlad++fQF9K/sDU1l7586dJUkul8sXDqqrc+fOMgxDCQkJuuKKKyrt17FjR+n7Mzg33XSTr720tFT79u3T1VdffVGfP2zYMA0cOFBPPPGEJk6cqMjISO3YsUN79uzRn/70J7/FvZdyBUzHjh21evVqnTlzxi+c7d69O6BfRe36/uqd1q1b18kl67fddpuioqK0dOlShYaG6ptvvvGbVqrO7+p8ZWfozr9iq+xsVJmyM22hoaFB/b5atmypCRMmaMKECTpz5owGDBigGTNmEGRQa1gjA1Ri7dq1Ff6Xc9n6iLJphxEjRigkJESzZs0K+C/gsveX/Zd5+f2dO3dOv/vd7wL2HxkZWeGUQNkfzvP/8PTq1UudO3fWb37zG505cybgfceOHbvgd01PT5fT6dTMmTMDvrNhGL6pkN69e6tNmzZatGiRzp075+uzZMmSSi9hDtaDDz6oEydO+G6KV9ExMwzjkm5G+MMf/lDfffedFi5c6GvzeDwBd2qOjo5Wz5499ac//cnve3388cdatWqVfvjDH150DdURHh6u22+/XW+//bYWLlyoyMhIpaWl+bZX53d1vo4dO8rpdAZcQXX+e9u2bauUlBS98MILvvBeXvnf1/lTZk2bNtXll1+ukpKSoL4vcDE4IwNU4r777lNxcbFuv/12JSYm6ty5c3r//ff16quvqlOnTpowYYL0/Wn1hx9+WI8//riSk5OVnp6usLAwbd68WR06dNDcuXPVt29ftWjRQpmZmbr//vvlcDj08ssvVxiUevXqpVdffVVTpkxRnz591LRpUw0fPlydO3dW8+bNtWjRIkVFRSkyMlLXX3+9EhIS9Pvf/1633HKLunfvrgkTJigmJkZFRUVau3atXC6X3nzzzSq/a+fOnTV79mw99NBD+uKLLzRixAhFRUVp3759Wr58ue655x5NnTpVoaGhmj17tiZOnKibbrpJd9xxh/bt26eXXnqpWmtkKnLLLbfoyiuv1Pz58zVp0iQlJiaqc+fOmjp1qoqKiuRyufTaa68FrJWpjuHDh6tfv36aNm2avvjiC3Xr1k35+fkVBsenn35at9xyi2644Qb95Cc/0bfffqsFCxaoWbNmmjFjxiV91+oYO3as/vznP+vdd9/VmDFj/M4EVed3db5mzZpp5MiRWrBggRwOhzp37qy33nqrwps9Pv/88+rfv7969Oihu+++W5dddpmOHDmijRs36uDBg9q+fbskqVu3bkpJSVGvXr3UsmVLffjhh8rLy9PkyZNr+KgA5Zh92RRgVe+8847x4x//2EhMTDSaNm1qNG7c2Lj88suN++67zzhy5EhA/z/+8Y/GNddcY4SFhRktWrQwBg4caBQUFPi2//Of/zR+8IMfGOHh4UaHDh18l3OffwnsmTNnjNGjRxvNmzc3JPldMrtixQqjW7duRqNGjQIukf3oo4+M9PR0o1WrVkZYWJjRsWNHY9SoUcbq1at9fcouFT527FiF3/m1114z+vfvb0RGRhqRkZFGYmKiMWnSJGP37t1+/X73u98ZCQkJRlhYmNG7d29jw4YNxsCBA4O+/LqyS3SXLFni97127txpDB482GjatKnRunVr4+677za2b98e8N0zMzONyMjIgP2Vfd/yTpw4YYwbN85wuVxGs2bNjHHjxhkfffRRhZe2/+Mf/zD69etnhIeHGy6Xyxg+fLixc+fOCj/j/GNaWU0DBw40unfvfsHjVOa7774zoqOjDUnG22+/HbA92N/V+ZdfG4ZhHDt2zPjRj35kREREGC1atDAmTpxofPzxxxUei88//9y46667jPbt2xuhoaFGTEyMceuttxp5eXm+PrNnzzauu+46o3nz5kZ4eLiRmJhozJkzJ+CWBUBNchjBrjoDAACwGNbIAAAA2yLIAAAA2yLIAAAA2yLIAAAA2yLI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RZABEKC+PZYAQP1FkAEQoD4+lgBA/USQARCgvj6WAED9Q5ABEKA+P5YAQP1CkAEQgMcSALALggyAADyWAIBdEGQAVIjHEgCwA26IB6BSPJYAgNURZABUyRniVEqnFLPLAIAKMbUEAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsq5HZBQCwJo/Xo8L9hTp0+pCio6KVHJ8sZ4jT7LIAwA9BBkCA/F35ylqZpYPug762WFescofmKj0p3dTaAKA8ppYA+Mnfla+MZRl+IUaSitxFyliWofxd+abVBgDnI8gA8PF4PcpamSVDRsC2srbsldnyeD0mVAcAgQgyAHwK9xcGnIkpz5ChA+4DKtxfWKd1AUBlCDIAfA6dPlSj/QCgthFkAPhER0XXaD8AqG0EGQA+yfHJinXFyiFHhdsdcijOFafk+OQ6rw0AKkKQAeDjDHEqd2iu9H1oKa/sdc7QHO4nA8AyCDIA/KQnpStvVJ5iXDF+7bGuWOWNyuM+MgAsxdI3xJs7d67y8/P16aefKjw8XH379tVTTz2lrl27ml0aUK+lJ6UrrWsad/YFYHmWDjLr16/XpEmT1KdPH3333Xf69a9/rZtvvlk7d+5UZGSk2eUBtcIqjwZwhjiV0imlzj8XAKrD0kFm5cqVfq+XLFmitm3basuWLRowYIBpdQG1hUcDAED1WDrInO/UqVOSpJYtW1bap6SkRCUlJb7XbrdbklRaWqrS0tI6qLJhKju2wR5jj9ejjQc36vCZw2rftL1uiL2hwU9bvLn7TY1bPk6GDIWHhPvavz7ztcbljZNul4Z3HX7B/VR3LFA7GAfrYCysozpjEex4OQzDCLwXuQV5vV7ddtttOnnypN57771K+82YMUMzZ84MaF+6dKkiIiJquUoAAFATiouLNXr0aJ06dUoul6vSfrYJMvfee6/eeecdvffee4qNja20X0VnZOLi4nT8+PEqDwQuTWlpqQoKCjRkyBCFhoZW2q/8WYfyyi7tffn2l4M661DfvLf/PQ1bOuyC/f4++u/qH9+/yj7B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0UcfVXR0tMLDwzV48GDt3bv3oj6LIIOLtn79ek2aNEn/+te/VFBQoNLSUt188806e/as2aU1aJs3b9YLL7ygq666yuxSGqRvvvlG/fr1U2hoqN555x3t3LlTzzzzjFq0aGF2aQ3OU089pYULF+q5557Trl279NRTT2nevHlasGCB2aXVe2fPntXVV1+t559/vsLt8+bN07PPPqtFixbpgw8+UGRkpFJTU/Xf//632p/F5deoMceOHVPbtm21fv16DRgwwOxyGqQzZ87o2muv1e9+9zvNnj1bPXv2VE5OjtllNSjTpk3TP//5TxUWFppdSoN36623ql27dvrDH/7ga/vRj36k8PBw/eUvfzG1tobE4XBo+fLlvkcNGYahDh066Be/+IWmTp0qSTp16pTatWunJUuW6M4776zW/jkjgxpz6tQpSVLLli3NLqXBmjRpkoYNG6bBgwebXUqD9cYbb6h3794aOXKk2rZtq2uuuUYvvvii2WU1SH379tXq1au1Z88eSdL27dv13nvv6ZZbbjG7tAZt3759Onz4sN+/p5o1a6brr79eGzdurPb+bHFnX1if1+tVdna2+vXrpyuvvNLschqkv/71r9q6das2b95sdikN2n/+8x8tXLhQU6ZM0a9//Wtt3rxZ999/vxo3bqzMzEyzy2tQpk2bJrfbrcTERDmdTnk8Hs2ZM0djxowxu7QG7fDhw5IU8Kihdu3a+bZVB0EGNWLSpEn6+OOP9d5775ldSoN04MABZWVlqaCgQE2aNDG7nAbN6/Wqd+/eeuKJJyRJ11xzjT7++GMtWrSIIFPHli1bpv/93//V0qVL1b17d23btk3Z2dnq0KEDY1GPMLWESzZ58mS99dZbWrt2rWJjY80up0HasmWLjh49qmuvvVaNGjVSo0aNtH79ej377LNq1KiRPB6P2SU2GNHR0erWrZtfW1JSkvbv329aTQ3VL3/5S02bNk133nmnevTooXHjxumBBx7Q3LlzzS6tQWvfvr0k6ciRI37tR44c8W2rDoIMLpphGJo8ebKWL1+uNWvWKCEhweySGqxBgwZpx44d2rZtm++f3r17a8yYMdq2bZucTqfZJTYY/fr1C7gNwZ49e9SxY0fTamqoiouLFRLi/2fO6XTK6/WaVhOkhIQEtW/fXqtXr/a1ud1uffDBB7rhhhuqvT+mlnDRJk2apKVLl2rFihWKioryzW02a9ZM4eHhZpfXoERFRQWsTYqMjFSrVq1Ys1THHnjgAfXt21dPPPGERo0apU2bNmnx4sVavHix2aU1OMOHD9ecOXMUHx+v7t2766OPPtL8+fP14x//2OzS6r0zZ87os88+873et2+ftm3bppYtWyo+Pl7Z2dmaPXu2unTpooSEBE2fPl0dOnTwXdlULQZwkSRV+M9LL71kdmkwDGPgwIFGVlaW2WU0SG+++aZx5ZVXGmFhYUZiYqKxePFis0tqkNxut5GVlWXEx8cbTZo0MS677DLj4YcfNkpKSswurd5bu3ZthX8fMjMzDcMwDK/Xa0yfPt1o166dERYWZgwaNMjYvXv3RX0W95EBAAC2xRoZAABgWwQZAABgWwQZAABgWwQZAABgWwQZAABgWwQZAABgWwQZAABgWwQZAABgWwQZALbi8XjUt29fpaen+7WfOnVKcXFxevjhh02rDUDd486+AGxnz5496tmzp1588UWNGTNGknTXXXdp+/bt2rx5sxo3bmx2iQDqCEEGgC09++yzmjFjhj755BNt2rRJI0eO1ObNm3X11VebXRqAOkSQAWBLhmHopptuktPp1I4dO3TffffpkUceMbssAHWMIAPAtj799FMlJSWpR48e2rp1qxo1amR2SQDqGIt9AdjWH//4R0VERGjfvn06ePCg2eUAMAFnZADY0vvvv6+BAwdq1apVmj17tiTpH//4hxwOh9mlAahDnJEBYDvFxcUaP3687r33Xt144436wx/+oE2bNmnRokVmlwagjnFGBoDtZGVl6e2339b27dsVEREhSXrhhRc0depU7dixQ506dTK7RAB1hCADwFbWr1+vQYMGad26derfv7/fttTUVH333XdMMQENCEEGAADYFmtkAACAbRFkAACAbRFkAACAbRFkAACAbRFkAACAbRFkAACAbRFkAACAbRFkAACAbRFkAACAbRFkAACAbRFkAACAbRFkAACAbf0/kPZHq7vOABYAAAAASUVORK5CYII=",
+ "text/plain": [
+ "