{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# ಸಾಧ್ಯತೆ ಮತ್ತು ಅಂಕಿಅಂಶಗಳಿಗೆ ಪರಿಚಯ\n", "ನಾವು ಈ ನೋಟ್ಬುಕೆಂದು, ನಾವು ಹಿಂದಿನದಲ್ಲೇ ಚರ್ಚಿಸಿದ ಕೆಲವು ಕಲ್ಪನೆಗಳೊಂದಿಗೆ ಆಟವಾಡೋಣ. ಸಾಧ್ಯತೆ ಮತ್ತು ಅಂಕಿಅಂಶದ ಅನೇಕ ಕಲ್ಪನೆಗಳು ಪೈಥಾನ್‌ನಲ್ಲಿ `numpy` ಮತ್ತು `pandas` ಮುಂತಾದ ಪ್ರಮುಖ ಡೇಟಾ ಪ್ರಕ್ರಿಯೆ ಗ್ರಂಥಾಲಯಗಳಲ್ಲಿ ಚೆನ್ನಾಗಿ ಪ್ರತಿನಿಧಿಸಲಾಗಿದೆ.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import random\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Random Variables and Distributions\n", "0 ರಿಂದ 9ರವರೆಗೆ ಇರುವ ಸಮನ್ವಿತ ವಿತರಣೆಯಿಂದ 30 ಮೌಲ್ಯಗಳ ಒಂದು ಮಾದರಿಯನ್ನು ಬಿಡಿಸುವುದರಿಂದ ಶುರು ಮಾಡೋಣ. ನಾವು ಸರಾಸರಿ ಮತ್ತು ವ್ಯತ್ಯಾಸವನ್ನು ಕೂಡ ಗಣನೆ ಮಾಡುತ್ತೇವೆ.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "sample = [ random.randint(0,10) for _ in range(30) ]\n", "print(f\"Sample: {sample}\")\n", "print(f\"Mean = {np.mean(sample)}\")\n", "print(f\"Variance = {np.var(sample)}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ನಮೂನೆಯಲ್ಲಿ ಎಷ್ಟು ವಿಭಿನ್ನ ಮೌಲ್ಯಗಳಿವೆ ಎಂದು ದೃಶ್ಯವಾಗಿ ಅಂದಾಜು ಮಾಡಲು, ನಾವು **ಹಿಸ್ಟೋಗ್ರಾಮ್** ಅನ್ನು ಅಂಶಿಸುವಬಹುದು:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.hist(sample)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ನಿಜವಾದ ಡೇಟಾವನ್ನು ವಿಶ್ಲೇಷಿಸುವುದು\n", "\n", "ಸರಾಸರಿ ಮತ್ತು ವೈವಿಧ್ಯವು ನಿಜವಾದ ಡೇಟಾವನ್ನು ವಿಶ್ಲೇಷಿಸುವಾಗ ಬಹಳ ಮಹತ್ವವನ್ನು ಹೊಂದಿವೆ. ಬೇಸುಬಾಲ್ ಆಟಗಾರರ ಕುರಿತು ಇರುವ ಡೇಟಾವನ್ನು [SOCR MLB ಎತ್ತರ/ತೂಕ ಡೇಟಾ](http://wiki.stat.ucla.edu/socr/index.php/SOCR_Data_MLB_HeightsWeights) ನಿಂದ ಲೋಡ್ ಮಾಡೋಣ.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "df = pd.read_csv(\"../../data/SOCR_MLB.tsv\",sep='\\t', header=None, names=['Name','Team','Role','Weight','Height','Age'])\n", "df\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> ನಾವು ಡೇಟಾ ವಿಶ್ಲೇಷಣೆಗೆ [**Pandas**](https://pandas.pydata.org/) ಎಂಬ ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಬಳಸುತ್ತಿದ್ದೇವೆ. ಈ ಪಾಠಕ್ರಮದಲ್ಲಿ ನಂತರ ನಾವು ಪಾಂಡಾಸ್ ಮತ್ತು ಪೈಥಾನ್‌ನಲ್ಲಿ ಡೇಟಾ ಕೆಲಸಮಾಡುವುದನ್ನು ಹೆಚ್ಚು ಚರ್ಚಿಸುವೆವು.\n", "\n", "ನಮ್ಮು ವಯಸ್ಸಿನ, ಎತ್ತರದ ಮತ್ತು ತೂಕದ ಸರಾಸರಿ ಮೌಲ್ಯಗಳನ್ನು ಲೆಕ್ಕಹಾಕೋಣ:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "df[['Age','Height','Weight']].mean()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ಈಗ ಎತ್ತರದ ಮೇಲೆ ಗಮನಹರಿಸಿ, ಮತ್ತು ಸಾಮಾನ್ಯ ವಿಚಲನ ಮತ್ತು ವೈವಿಧ್ಯವನ್ನು ಗಣನೆ ಮಾಡೋಣ:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(list(df['Height'])[:20])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "mean = df['Height'].mean()\n", "var = df['Height'].var()\n", "std = df['Height'].std()\n", "print(f\"Mean = {mean}\\nVariance = {var}\\nStandard Deviation = {std}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ಸರಾಸರಿ ಮೌಲ್ಯದಿಂದ ಹೊರತುಪಡಿಸಿ, ಮಧ್ಯಮ ಮೌಲ್ಯ ಮತ್ತು ಕ್ವಾರ್ಟೈಲ್‌ಗಳನ್ನು ನೋಡುವುದು ಸುಮತ್ನದಾಗಿದೆ. ಅವುಗಳನ್ನು **ಬಾಕ್ಸ್ ಪ್ಲಾಟ್** ಬಳಸಿ ದೃಶ್ಯೀಕರಿಸಬಹುದು:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.figure(figsize=(10,2))\n", "plt.boxplot(df['Height'].ffill(), vert=False, showmeans=True)\n", "plt.grid(color='gray', linestyle='dotted')\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ನಾವು ನಮ್ಮ ಡೇಟಾಸೆಟ್‌ನ ಉಪಸಮುಚ್ಚಯಗಳ ಬಾಕ್ಸ್ ಪ್ಲಾಟ್‌ಗಳನ್ನು ಮಾಡಬಹುದು, ಉದಾಹರಣೆಗೆ, ಆಟಗಾರರ ಪಾತ್ರದ ಮೂಲಕ ಗುಂಪುಗೂಡಿಸಲಾಗುತ್ತದೆ.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "df.boxplot(column='Height', by='Role', figsize=(10,8))\n", "plt.xticks(rotation='vertical')\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> **ಗಮನಿಸಿ**: ಈ ಚಿತ್ರಣದಲ್ಲಿ, ಸರಾಸರಿ ಪ್ರಕಾರ, ಮೊದಲ ಬೇಸ್ಮ್ಯಾನ್‌ನ ಎತ್ತರವು ಎರಡನೇ ಬೇಸ್ಮ್ಯಾನ್‌ನ ಎತ್ತರಕ್ಕಿಂತ ಎತ್ತರವಾಗಿದೆ ಎಂದು ಸೂಚಿಸುತ್ತದೆ. ನಂತರ ನಾವು ಈ ಕಲ್ಪನೆಯನ್ನು ಅಧಿಕೃತವಾಗಿ ಹೇಗೆ ಪರೀಕ್ಷಿಸಬಹುದು ಮತ್ತು ನಮ್ಮ ಡೇಟಾ ಸಾಂಖ್ಯಿಕವಾಗಿ ಮಹತ್ತರವಾಗಿದೆ ಎಂದು ಹೇಗೆ ಪ್ರದರ್ಶಿಸಬಹುದು ಎಂದು ತಿಳಿಯೋಣ. \n", "\n", "ವಯಸ್ಸು, ಎತ್ತರ ಮತ್ತು ತೂಕವೆಲ್ಲವೂ ಸತತ ಚೌಕಟ್ಟಿನ ಸಾಂಖ್ಯಿಕ ಚರಗಳಾಗಿವೆ. ನೀವು ಅವುಗಳ ವಿತರಣೆಯನ್ನು ಏನು ಎಂದು ಭಾವಿಸುತ್ತೀರಿ? ಅದನ್ನು ಕಂಡುಹಿಡಿಯಲು ಒಂದು ಒಳ್ಳೆಯ ವಿಧಾನವೆಂದರೆ ಮೌಲ್ಯಗಳ ಹಿಂದ್ಸ್ಟೋಗ್ರಾಂವನ್ನು ಚಿತ್ರಿಸುವುದು: \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "df['Weight'].hist(bins=15, figsize=(10,6))\n", "plt.suptitle('Weight distribution of MLB Players')\n", "plt.xlabel('Weight')\n", "plt.ylabel('Count')\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ಸಾಮಾನ್ಯ ವಿತರಣಾ\n", "\n", "ನಮ್ಮ ನಿಜವಾದ ಡೇಟಾದಂತೆಯೇ ಸರಾಸರಿ ಮತ್ತು ವ್ಯತ್ಯಾಸ ಹೊಂದಿರುವ ಸಾಮಾನ್ಯ ವಿತರಣೆಯನ್ನು ಅನುಸರಿಸುವ ತಲಮೇಳದ ತೂಕದ ಕೃತಕ ನಿದರ್ಶನವನ್ನು ರಚಿಸೋಣ:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "generated = np.random.normal(mean, std, 1000)\n", "generated[:20]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.figure(figsize=(10,6))\n", "plt.hist(generated, bins=15)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.figure(figsize=(10,6))\n", "plt.hist(np.random.normal(0,1,50000), bins=300)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ನಿಜ ಜೀವನದಲ್ಲಿನ ಬಹುತೇಕ ಮೌಲ್ಯಗಳು ಸಾಮಾನ್ಯವಾಗಿ ವಿತರಣೆಯಲ್ಲಿರುತ್ತವೆ, ಆದ್ದರಿಂದ ನಮೂನಾ ಡೇಟಾವನ್ನು ರಚಿಸಲು ಏಕಮಾನದ ಯಾದೃಚ್ಛಿಕ ಸಂಖ್ಯೆ ಜನಕವನ್ನು ಬಳಸಬಾರದು. ಇಲ್ಲಿದೆ ಏನು ಆಗುತ್ತದೆ ಎಂದು ನಾವು ಏಕಮಾನದ ವಿತರಣೆಯಿಂದ ( `np.random.rand` ನಿಂದ ರಚಿಸಲಾದ) ತೂಕಗಳನ್ನು ರಚಿಸಲು ಪ್ರಯತ್ನಿಸಿದಾಗ:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "wrong_sample = np.random.rand(1000)*2*std+mean-std\n", "plt.figure(figsize=(10,6))\n", "plt.hist(wrong_sample)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ನಂಬಿಕೆ ನಡುವಣಿಗಳು\n", "\n", "ಈಗ ನಾವು ಬೇಸ್‌ಬಾಲ್ ಆಟಗಾರರ ತೂಕ ಮತ್ತು ಎತ್ತರಗಳಿಗಾಗಿ ನಂಬಿಕೆ ನಡುವೆಗಳನ್ನು ಲೆಕ್ಕ ಹಾಕೋಣ. ನಾವು ಈ ಕೋಡ್ [ಈ ಸ್ಟ್ಯಾಕ್ಓವರ್‌ಫ್ಲೋ ಚರ್ಚೆಯಿಂದ](https://stackoverflow.com/questions/15033511/compute-a-confidence-interval-from-sample-data) ಬಳಸಲಿದ್ದೇವೆ:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import scipy.stats\n", "\n", "def mean_confidence_interval(data, confidence=0.95):\n", " a = 1.0 * np.array(data)\n", " n = len(a)\n", " m, se = np.mean(a), scipy.stats.sem(a)\n", " h = se * scipy.stats.t.ppf((1 + confidence) / 2., n-1)\n", " return m, h\n", "\n", "for p in [0.85, 0.9, 0.95]:\n", " m, h = mean_confidence_interval(df['Weight'].fillna(method='pad'),p)\n", " print(f\"p={p:.2f}, mean = {m:.2f} ± {h:.2f}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ನಿಯಮಾನುಸ್ಥಾನ ಪರೀಕ್ಷೆ\n", "\n", "ನಮ್ಮ ಬೇಸ್ಬಾಲ್ ಆಟಗಾರರ ಡೇಟಾಸೆಟ್‌ನಲ್ಲಿ ವಿಭಿನ್ನ ಪಾತ್ರಗಳನ್ನು ಪರಿಶೀಲಿಸೋಣ:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "df.groupby('Role').agg({ 'Weight' : 'mean', 'Height' : 'mean', 'Age' : 'count'}).rename(columns={ 'Age' : 'Count'})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ನಾವು ಮೊದಲ ಬೆಸ್ಮೆನ್‌ಗಳು ಎರಡನೇ ಬೆಸ್ಮೆನ್‌ಗಳಿಗಿಂತ ಎತ್ತರರಾಗಿದ್ದಾರೆ ಎಂಬ ಊಹೆಯನ್ನು ಪರೀಕ್ಷಿಸೋಣ. ಇದನ್ನು ಪರಿಶೀಲಿಸುವ ಅತ್ಯಂತ ಸರಳ ವಿಧಾನವು ನಂಬಿಕೆ ಅಂತರಗಳನ್ನು ಪರೀಕ್ಷಿಸುವುದಾಗಿದೆ:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "for p in [0.85,0.9,0.95]:\n", " m1, h1 = mean_confidence_interval(df.loc[df['Role']=='First_Baseman',['Height']],p)\n", " m2, h2 = mean_confidence_interval(df.loc[df['Role']=='Second_Baseman',['Height']],p)\n", " print(f'Conf={p:.2f}, 1st basemen height: {m1-h1[0]:.2f}..{m1+h1[0]:.2f}, 2nd basemen height: {m2-h2[0]:.2f}..{m2+h2[0]:.2f}')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ನಾವು интервалಗಳು ಮುರಿದಿಲ್ಲ ಎಂದು ನೋಡಬಹುದು.\n", "\n", "ಸಂದರ್ಭಾತ್ಮಕವಾಗಿ hypothesesನ ಸರಿ ಎನ್ನುವ ವಿಶ್ಲೇಷಣೆಯ ಕೆಲವೊಂದು ಸರಿಯಾದ ವಿಧಾನವು **ಸ್ಟುಡೆಂಟ್ ಟಿ-ಟೆಸ್ಟ್** ಅನ್ನು ಬಳಸುವುದಾಗಿದೆ:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from scipy.stats import ttest_ind\n", "\n", "tval, pval = ttest_ind(df.loc[df['Role']=='First_Baseman',['Height']], df.loc[df['Role']=='Second_Baseman',['Height']],equal_var=False)\n", "print(f\"T-value = {tval[0]:.2f}\\nP-value: {pval[0]}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`ttest_ind` ಫಂಕ್ಷನ್ ನೀಡುವ ಎರಡು ಮೌಲ್ಯಗಳು ಇಂತಿವೆ: \n", "* p-ಮೌಲ್ಯವನ್ನು ಎರಡು توزيعات ಸಮಾನ ಸರಾಸರಿ ಹೊಂದಿರುವ ಸಾಧ್ಯತೆ ಎಂದು ಪರಿಗಣಿಸಬಹುದು. ನಮ್ಮ ಸಂದರ್ಭದಲ್ಲಿ, ಇದು ಬಹಳ ಕಡಿಮೆ, ಅಂದರೆ ಮೊದಲ baseman ಗಳು ಎತ್ತರವಾಗಿದ್ದಾರೆ ಎಂಬುದಕ್ಕೆ ಬಲವಾದ ಸಾಬೀತು ಇದೆ. \n", "* t-ಮೌಲ್ಯವು t-ಪರೀಕ್ಷೆಯಲ್ಲಿ ಬಳಸಲಾಗುವ ಸಾಮಾನ್ಯೀಕೃತ ಸರಾಸರಿ ವ್ಯತ್ಯಾಸದ ಮಧ್ಯಂತರ ಮೌಲ್ಯವಾಗಿದೆ ಮತ್ತು ನಿರ್ಧಿಷ್ಟ ನಂಬಿಕೆಯ ಮೌಲ್ಯಕ್ಕಾಗಿ ದಡ ಮೌಲ್ಯಕ್ಕೆ ಹೋಲಿಸಲಾಗುತ್ತದೆ.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ಕೇಂದ್ರ ಸೀಮಿತ ಸಿದ್ಧಾಂತంతో ಸಾಮಾನ್ಯ ವಿತರಣೆಯನ್ನು ಅನೂಕಲಿಸು\n", "\n", "ಪೈಥಾನ್‌ನ ಪ್ಸ್‌ಯುಡೋ-ಯಾದೃಚ್ಛಿಕ ಜನಕ ನಮಗೆ ಒರಟು ವಿತರವನ್ನು ನೀಡುವಂತೆ ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ. ನಾವು ಸಾಮಾನ್ಯ ವಿತರಣೆಗಾಗಿ ಜನಕವನ್ನು ರಚಿಸಲು ಇಚ್ಛಿಸಿದರೆ, ನಾವು ಕೇಂದ್ರ ಸೀಮಿತ ಸಿದ್ಧಾಂತವನ್ನು ಬಳಸಬಹುದು. ಸಾಮಾನ್ಯವಾಗಿ ವಿತರಿಸಲಾದ ಮೌಲ್ಯವನ್ನು ಪಡೆಯಲು ನಾವು ಒರಟು-ಉತ್ಪನ್ನಿತ ಮಾದರಿಯ ಸರಾಸರಿಯನ್ನು ಲೆಕ್ಕಿಸುವುದೇ ಆಗಿದೆ.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def normal_random(sample_size=100):\n", " sample = [random.uniform(0,1) for _ in range(sample_size) ]\n", " return sum(sample)/sample_size\n", "\n", "sample = [normal_random() for _ in range(100)]\n", "plt.figure(figsize=(10,6))\n", "plt.hist(sample)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ಪರಸ್ಪರ ಸಂಬಂಧ ಮತ್ತು ಇವರು ಬ್ಲೇಸ್‌ಬಾಲ್ ಕಾರ್ಪ್\n", "\n", "ಪರಸ್ಪರ ಸಂಬಂಧವು ನಮಗೆ ಡೇಟಾ ಕ್ರಮಗಳ ನಡುವಿನ ಸಂಬಂಧಗಳನ್ನು ಕಂಡುಹಿಡಿಯಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ನಮ್ಮ ಆಟದ ಉದಾಹರಣೆಯಲ್ಲಿ, ಕ್ರೀಡಾಪಟುಗಳ ಎತ್ತರದ ಪ್ರಕಾರ ಪಾವತಿ ನೀಡುವ ಒಂದು ಕೆಟ್ಟ ಬ್ಲೇಸ್‌ಬಾಲ್ ಸಂಸ್ಥೆ ಇದೆ ಎಂದು ಕಲ್ಪಿಸೋಣ - ಎತ್ತರದ ಆಟಗಾರನು ಆಗಿದ್ದರೆ, ಅವರು ಹೆಚ್ಚು ಹಣ ಪಡೆಯುತ್ತಾರೆ. ಆಧಾರ ವೇತನವು $1000 ಆಗಿದ್ದು, ಎತ್ತರದ ಪ್ರಕಾರ $0 ರಿಂದ $100 ರವರೆಗೂ ಹೆಚ್ಚುವರಿ ಬಹುಮಾನ ಇದೆ ಎಂದು ಕಲ್ಪಿಸೋಣ. ನಾವು MLB ನಿಂದ ನಿಜವಾದ ಆಟಗಾರರನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತೇವೆ ಮತ್ತು ಅವರ ಕಲ್ಪನಾತ್ಮಕ ವೇತನಗಳನ್ನು ಲೆಕ್ಕಿಸುತ್ತೇವೆ:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "heights = df['Height'].fillna(method='pad')\n", "salaries = 1000+(heights-heights.min())/(heights.max()-heights.mean())*100\n", "print(list(zip(heights, salaries))[:10])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ಈಗ ಆ ಸರಣಿಗಳ ಸಹಪ್ರಯೋಗ ಮತ್ತು ಸಹಸಂಬಂಧವನ್ನು ಗಣನೆ ಮಾಡೋಣ. `np.cov` ನಮಗೆ ಸಹಪ್ರಯೋಗ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಅನ್ನು ಒದಗಿಸುತ್ತದೆ, ಇದು ಬಹುಮಾರ್ಗಗಳೊಂದಿಗೆ ಸಹಪ್ರಯೋಗದ ವಿಸ್ತರಣೆ ಆಗಿದೆ. ಸಹಪ್ರಯೋಗ ಮ್ಯಾಟ್ರಿಕ್ಸ್ $M$ ರ $M_{ij}$ ಅಂಶವು ಇನ್‌ಪುಟ್ ವ್ಯತ್ಯಾಸಗಳು $X_i$ ಮತ್ತು $X_j$ ನಡುವೆ ಇರುವ ಸಂಬಂಧವಾಗಿದೆ, ಮತ್ತು ಡಯಾಗನಲ್ ಮೌಲ್ಯಗಳು $M_{ii}$ $X_i$ ರ ವೈವಿಧ್ಯತೆಯಾಗಿದೆ. ಅದೇ ರೀತಿ, `np.corrcoef` ನಮಗೆ **ಸಹಸಂಬಂಧ ಮ್ಯಾಟ್ರಿಕ್ಸ್** ಅನ್ನು ಒದಗಿಸುತ್ತದೆ.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(f\"Covariance matrix:\\n{np.cov(heights, salaries)}\")\n", "print(f\"Covariance = {np.cov(heights, salaries)[0,1]}\")\n", "print(f\"Correlation = {np.corrcoef(heights, salaries)[0,1]}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ಒಂದು ಸಹಸಂಬಂಧ 1ಕ್ಕೆ ಸಮನಾಗಿದ್ದರೆ, ಅದು ಎರಡು ಚರಗಳ ನಡುವೆ ಬಲವಾದ **ರೇಖೀಯ ಸಂಬಂಧ** ಇದೆ ಎಂದು ಅರ್ಥ. ನಾವು ಒಂದು ಮೌಲ್ಯವನ್ನು ಇನ್ನೊಂದರ ವಿರುದ್ಧ ರೇಖೀಯ ಸಂಬಂಧವನ್ನು ದೃಶ್ಯರೀತಿಯಲ್ಲಿ ನೋಡಬಹುದು:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.figure(figsize=(10,6))\n", "plt.scatter(heights,salaries)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ಸಂಬಂಧ ರೇಖೀಯವಾಗದಿದ್ದರೆ ಏನು ಕಾಣಬಹುದು ಎಂದು ನೋಡೋಣ. ಎಣಿಸೋಣ ನಮ್ಮ ಸಂಸ್ಥೆ ಎತ್ತರ ಮತ್ತು ವೇತನಗಳ ನಡುವಿನ ಸ್ಪಷ್ಟ ರೇಖೀಯ ಅವಲಂಬನೆಯನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ಮರೆಮಾಚಲು ನಿರ್ಧರಿಸಿದೆ ಮತ್ತು ಸೂತ್ರದಲ್ಲಿ ಕೆಲವು ಅರೆ-ರೇಖೀಯತೆಯನ್ನು, ಉದಾಹರಣೆಗೆ `sin` ಅನ್ನು ಪರಿಚಯಿಸಿದೆ:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "salaries = 1000+np.sin((heights-heights.min())/(heights.max()-heights.mean()))*100\n", "print(f\"Correlation = {np.corrcoef(heights, salaries)[0,1]}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಸಹಸಂಬಂಧ ಸ್ವಲ್ಪ ಕಡಿಮೆ ಆದರೆ ಅದು ಇನ್ನೂ ತುಂಬಾ ಎತ್ತರವಾಗಿದೆ. ಈಗ, ಸಂಬಂಧವನ್ನು ಇನ್ನಷ್ಟು ಅಸ್ಪಷ್ಟಗೊಳಿಸಲು, ವೇತನಕ್ಕೆ ಕೆಲವು ಹೆಚ್ಚಿನ ಯಾದೃಚ್ಛಿಕತೆಗಳನ್ನು ಸೇರಿಸುವ ಮೂಲಕ ನಾವು ಕೆಲವು ಯಾದೃಚ್ಛಿಕ ವೇರಿಯಬಲ್ ಸೇರಿಸಬಹುದು. ಏನು ಆಗುತ್ತದೆ ನೋಡೋಣ:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "salaries = 1000+np.sin((heights-heights.min())/(heights.max()-heights.mean()))*100+np.random.random(size=len(heights))*20-10\n", "print(f\"Correlation = {np.corrcoef(heights, salaries)[0,1]}\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.figure(figsize=(10,6))\n", "plt.scatter(heights, salaries)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> ನೀವು ಯಾಕೆ ಈ ಬಿಂದುಗಳು ಇಂಡುಕಾರಿಯಾಗಿ ನಿಂತಿರುವ ಎಂದು ಊಹಿಸಬಹುದೆ?\n", "\n", "ನಾವು ಸಂಬಳ ಮುಂತಾದ ಕೃತಕವಾಗಿ ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಪರಿಕಲ್ಪನೆ ಮತ್ತು ಗಮನಿಸಲ್ಪಟ್ಟ ಚರ *ದೈರ್ಧ್ಯ* ನಡುವಿನ ಅನುಪಾತವನ್ನು ಗಮನಿಸಿದ್ದೇವೆ. ಹೀಗೆ, ಬಗೆಯ ಮತ್ತು ತೂಕ ಮುಂತಾದ ಎರಡೂ ಗಮನಿಸಲ್ಪಟ್ಟ ಚರಗಳು ಸಹ ಪರಸ್ಪರ ಸಂಬಂಧ ಹೊಂದಿದೆಯೇ ಎಂದು ನೋಡೋಣ:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "np.corrcoef(df['Height'].ffill(),df['Weight'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ದುರುದೃಷ್ಟವಶಾತ್, ನಮಗೆ ಯಾವುದೇ ಫಲಿತಾಂಶ ಸಿಗಲಿಲ್ಲ - শুধুমಾತ್ರ ಸ್ವಲ್ಪ ವಿಚಿತ್ರ `nan` ಮೌಲ್ಯಗಳಿವೆ. ನಮ್ಮ ಸರಣಿಯಲ್ಲಿ ಕೆಲವು ಮೌಲ್ಯಗಳು ನಿರ್ಧರಿಸದಿರುವುದರಿಂದ, ಅವು `nan` ಆಗಿ ಪ್ರತಿನಿಧಿಸಲಾಗಿದ್ದು, ಇದರಿಂದ ಕಾರ್ಯಾಚರಣೆಯ ಫಲಿತಾಂಶವೂ ನಿರ್ಧರಿಸದಿರುತ್ತದೆ. ಮ್ಯಾಟ್ರಿಕ್ಸ್ ನೋಡಿದಾಗ ನಾವು ಕಾಣಬಹುದು `Weight` ಸಮಸ್ಯೆಯಿರುವ ಕಾಲಮ್, ಏಕೆಂದರೆ `Height` ಮೌಲ್ಯಗಳ ನಡುವಿನ ಸ್ವ-ಸಂಬಂಢನ ಲೆಕ್ಕಹಾಕಲಾಗಿದೆ.\n", "\n", "> ಈ ಉದಾಹರಣೆ **ಡೇಟಾ ತಯಾರಿ** ಮತ್ತು **ಶುದ್ಧೀಕರಣ** ಮಹತ್ವವನ್ನು ತೋರಿಸುತ್ತದೆ. ಸರಿಯಾದ ಡೇಟಾ ಇಲ್ಲದೆ ನಾವು ಯಾವುದನ್ನೂ ಲೆಕ್ಕಹಾಕಲು ಸಾಧ್ಯವಿಲ್ಲ.\n", "\n", "ನಿಮ್ಮ ಕಳೆದುಹೋಗಿರುವ ಮೌಲ್ಯಗಳನ್ನು ತುಂಬಲು `fillna` ವಿಧಾನವನ್ನು ಬಳಸಿ, ಮತ್ತು ಸಂಬಂಧ ಲೆಕ್ಕಹಾಕೋಣ:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "np.corrcoef(df['Height'].fillna(method='pad'), df['Weight'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ನಿಜಕ್ಕೂ ಒಂದು ಸಂಬಂಧವಿದೆ, ಆದರೆ ನಮ್ಮ ಕೃತಕ ಉದಾಹರಣೆಯಂತೆ ಬಲವಾದುದಾಗಿಲ್ಲ. ನಿಜಕ್ಕೂ, ಒಂದು ಮೌಲ್ಯವನ್ನು ಇನ್ನೊಂದರ ವಿರುದ್ಧದ ಚಿತ್ರ ಸಮೀಕ್ಷೆಯನ್ನು ನೋಡಿದರೆ, ಸಂಬಂಧವು ಸ್ಪಷ್ಟವಾಗಿರುವುದಿಲ್ಲ:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.figure(figsize=(10,6))\n", "plt.scatter(df['Weight'],df['Height'])\n", "plt.xlabel('Weight')\n", "plt.ylabel('Height')\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ನಿಷ್ಕರ್ಷೆ\n", "\n", "ಈ ನೋಟ್‌ಬುಕ್‌ನಲ್ಲಿ ನಾವು ಅಂಕಿ ಅಥವ ಅಂಕಿ ಸಂಬಂಧಿತ ಕಾರ್ಯಗಳನ್ನು ನಿರ್ವಹಿಸುವ ವಿಧಾನವನ್ನು ಕಲಿತಿರುವೆವು. ನಿರ್ದಿಷ್ಟ ಹಿಪೋಥಿಸಿಸ್‌ಗಳನ್ನು ಸಾಬೀತುಪಡಿಸಲು ಗಣಿತ ಮತ್ತು ಅಂಕಿ ವಿಭಾಗದ ಸಾಧನವನ್ನು ಬಳಸುವುದು ಹೇಗೆ ಮತ್ತು ದತ್ತಾಂಶ ಮಾದರಿಯನ್ನು ಅನುಸರಿಸಿ ಯಾದೃಚ್ಛಿಕ ಚರಗಳಿಗಾಗಿ ನಂಬಿಕೆ ಅಂತರಗಳನ್ನು ಹೇಗೆ ಲೆಕ್ಕಿಸಬೇಕು ಎಂಬುದನ್ನು ಈಗ ನಾವು ತಿಳಿದುಕೊಂಡಿದ್ದೇವೆ.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n\n\n**ಅಸ್ವೀಕರಣ**: \nಈ ದಾಖಲೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಎಂಬ AI ಅನುವಾದ ಸೇವೆಯನ್ನು ಬಳಸಿ ಅನುವದಿಸಲಾಗಿದೆ. ನಾವು ನಿಖರತೆಯತ್ತ ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ತಪ್ಪುಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂದು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಮೂಲ ಭಾಷೆಯ ಮೂಲ ದಾಖಲೆ ಅನ್ನು ಅಧಿಕೃತ ಮೂಲವೆಂದು ಪರಿಗಣಿಸಲಾಗಬೇಕು. ಪ್ರಮುಖ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದದಿಂದ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು فهم ಅಥವಾ ವ್ಯಾಖ್ಯಾನಗಳಿಗೆ ನಾವು ಜವಾಬ್ದಾರಿಯಲ್ಲ.\n\n" ] } ], "metadata": { "interpreter": { "hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5" }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.6" }, "coopTranslator": { "original_hash": "0f899e3c5019f948e7c787b22f3b2304", "translation_date": "2026-01-16T23:10:23+00:00", "source_file": "1-Introduction/04-stats-and-probability/notebook.ipynb", "language_code": "kn" } }, "nbformat": 4, "nbformat_minor": 4 }