You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Data-Science-For-Beginners/translations/ml/1-Introduction/04-stats-and-probability/notebook.ipynb

581 lines
31 KiB

{
"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": [
"## എങ്കിലും വ്യത്യാസങ്ങളും വിതരണങ്ങളും\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",
"സത്യസന്ധ ലോക ഡാറ്റ വിശകലനം ചെയ്യുമ്പോൾ ശരാശരി(Mean)യും വ്യത്യാസവും(variance) വളരെ പ്രധാനമാണ്. [SOCR MLB Height/Weight Data](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/) എന്ന പാക്കേജ് നമ്മൾ ഉപയോഗിക്കുന്നുണ്ട്. Pandas-ഉം Python-ലൂടെ ഡാറ്റ കൈകാര്യം ചെയ്യലും ഈ കോഴ്സിൽ പിന്നീട് കൂടുതൽ സംസാരിക്കും.\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": [
"സാധారణ മൂല്യത്തിനൊപ്പം, നടുക്കമൂല്യം (median value) ആയും ക്വാർട്ടൈലുകളും (quartiles) ആയും നോക്കുന്നത് ന്യായമായിരിക്കും. അവയെ **ബോക്സ് പ്ലോട്ട്** ഉപയോഗിച്ച് ദൃശ്യവൽക്കരിക്കാം:\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": [
"> **കുറിപ്പ്**: ഈ രേഖാചിത്രം, സാധാരണയായി, ഫസ്റ്റ് ബേസ്മാനുകളുടെ ഉയരം സെക്കന്റ് ബേസ്മാനുകളുടെ ഉയരത്തേക്കാൾ കൂടുതലാണെന്ന് സൂചിപ്പിക്കുന്നു. പിന്നീട് നാം ഈ ഹിപothesisസിസ് കൂടുതൽ ഔപചാരികമായി പരീക്ഷിക്കുന്നതും, നമ്മുടെ ഡാറ്റ ഗണിതപരമായി പ്രാധാന്യമുള്ളതാണ് എന്ന് തെളിയിക്കുന്നതിനും പഠിക്കും. \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",
"ഇപ്പോഴോപ്പBaseball കളിക്കാരുടെ ഭാരവും ഉയരവും സംബന്ധിച്ച വിശ്വാസമർജ്ജനാന്തരങ്ങൾ കണക്കാക്കാം. നാം ഈ കോഡ് [ഈ stackoverflow ചർച്ചയിൽ നിന്നും](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": [
"നമുക്കുittest ചെയ്യാം പരികൽപ്പനയെന്ന് ആദ്യ ബേസ്മാന്മാർ രണ്ടാം ബേസ്മാന്മാരേക്കാളും ഉയരം കൂടിയവരാണ്. ഇതു് ചെയ്യാനുള്ള ഏറ്റവും ലളിതമായ മാർഗം വിശ്വാസ അന്തരങ്ങൾ പരിശോധിക്കുക എന്നതാണ്:\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",
"ഒരു സ്ഥിതിചಾಮകമായി കൂടുതല് ശരിയായ രീതിയിൽ ഗവേഷണ നിർദ്ദേശത്തെ തെളിയിക്കാൻ **സ്റ്റുഡന്റ് t-ടെസ്റ്റ്** ഉപയോഗിക്കാവുന്നതാണ്:\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-മൂല്യം എന്നാൽ രണ്ട് വിതരണങ്ങൾക്ക് സമാനമായ ശരാശരി ഉള്ളതിനുള്ള സാധ്യതയായി നമുക്ക് കാണാം. നമ്മുടെ കേസിൽ, ഇത് വളരെ കുറഞ്ഞതാണ്, അതായത് ആദ്യ ബേസ്മാന്മാർ ഉയരം കൂടുതൽ ഉള്ളതായി ശക്തമായ തെളിവുകളുണ്ട്.\n",
"* t-മൂല്യം t-ടെസ്റ്റിൽ ഉപയോഗിക്കുന്ന സാധാരണപ്പെടുത്തിയ ശരാശരി വ്യത്യാസത്തിന്റെ ഇടത്തിലുള്ള മൂല്യമാണ്, ഇത് നൽകിയ ആത്മവിശ്വാസ മൂല്യത്തിനായി ഒരു പരിധി മൂല്യത്തോടൊപ്പം താരതമ്യം ചെയ്യപ്പെടുന്നു.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## സെൻട്രൽ ലിമിറ്റ് തിയോറം ഉപയോഗിച്ച് ഒരു നോർമൽ വിതരണത്തെ അനുകരിക്കൽ\n",
"\n",
"Python-ലെ സൂഡോ-രാൻഡം ജനറേറ്റർ നമ്മുക്ക് യൂണിഫോം വിതരണം നൽകാൻ രൂപകൽപ്പന ചെയ്തിരിക്കുന്നു. നോർമൽ വിതരണം സൃഷ്ടിക്കാൻ ഒരു ജനറേറ്റർ ആവശ്യമെങ്കിൽ, സെൻട്രൽ ലിമിറ്റ് തിയോറം ഉപയോഗിക്കാം. ഒരു നോർമലായി വിതരണമുള്ള മൂല്യം നേടാനായി, യൂണിഫോം-ജനിത സാമ്പിളിന്റെ ശരാശരി നിർണയിക്കുമ്പോൾ മതി.\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": [
"## സമ്പർക്കം (Correlation)യും ഈവിള് ബേസ്ബോൾ കോർപ്പറേഷനും\n",
"\n",
"സമ്പർക്കം (Correlation) നമ്മുടെ സഹായത്തിന് ഡാറ്റാ സീക്വൻസുകളിലെ ബന്ധങ്ങൾ കണ്ടെത്താനാകും. നമ്മുടെ കളിപ്പാട്ട ഉദാഹരണത്തിൽ, കളിക്കാരുടെ ഉയരത്തിന്റെ അടിസ്ഥാനത്തിൽ പണം ലഭിക്കുന്ന ഒരു ഈവിള് ബേസ്ബോൾ കോർപ്പറേഷൻ ഉണ്ട് എന്ന് ഭാവിപ്പിക്കാം - കളിക്കാരൻ ഉയരമേൽവിട്ട പാർശ്വം കൂടുതൽ പണം ലഭിക്കും. അടിസ്ഥാന ശമ്പളം $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_{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",
"ഈ നോട്ട്‌ബുക്കിൽ, സ്റ്റാറ്റിസ്റ്റിക്കൽ ഫംഗ്ഷനുകൾ കണക്കാക്കാൻ ഡേറ്റയിൽ അടിസ്ഥാന പ്രവർത്തനങ്ങൾ എങ്ങനെ നടത്താമെന്ന് ഞങ്ങൾ പഠിച്ചു. ഒരു ഡേറ്റാ സാമ്പിള്‍ നൽകിയപ്പോൾ, ചില ഹൈപോത്തസിസുകൾ തെളിയിക്കാൻ ഗണിതശാസ്ത്രം, സംഖ്യാകീയ ശാസ്ത്രം എന്നിവ sound ഉപകരണമായി എങ്ങനെ ഉപയോഗിക്കാമെന്ന് ഇപ്പോൾ ഞങ്ങൾക്ക് അറിയാം, കൂടാതെ ഏത് ഘടകത്തിന്റെയും വിശ്വാസ വ്യത്യാസങ്ങൾ എങ്ങനെ കണക്കാക്കാമെന്ന് അറിയാം.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**അസൂയാംശം**: \nഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. ഞങ്ങൾ കൃത്യതയ്ക്ക് പരിശ്രമിച്ചാൽ പോലും, ഓട്ടോമാറ്റിക് വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റായ വിതരണങ്ങൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. മാതൃഭാഷയിൽ ഉള്ള അസൽ രേഖയാണ് ഏറ്റവും വിശ്വസനീയമായ ഉറവിടം എന്ന കാര്യം മാനിക്കണം. നിർണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന ഏത് തെറ്റിദ്ധാരണകൾക്കും ഞങ്ങൾ ഉത്തരവാദികളല്ല.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\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:09:17+00:00",
"source_file": "1-Introduction/04-stats-and-probability/notebook.ipynb",
"language_code": "ml"
}
},
"nbformat": 4,
"nbformat_minor": 4
}