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.
581 lines
32 KiB
581 lines
32 KiB
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Probability மற்றும் புள்ளியியலுக்கு அறிமுகம்\n",
|
|
"இந்த நோட்புக்கில், நாம் முந்தையதாக விவாதித்த சில கருத்துகளுடன் விளையாடப் போகிறோம். Probability மற்றும் புள்ளியியல் தொடர் கருத்துகள் Python இல் தரவு செயலாக்கத்திற்கான முக்கியமான நூலகங்களில், உதாரணமாக `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",
|
|
"சராசரி மற்றும் பரவல் உண்மையான உலக தரவுகளை பகுப்பாய்வு செய்யும் போது மிகவும் முக்கியமானவை. [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": [
|
|
"சராசரி மதிப்புக்கு கூடுதலாக, நடுப்புள்ளி மதிப்பும் காலாண்டுகள் மதிப்புகளும் பார்க்க பொருள் உள்ளது. அவை **பெட்டிக் வரைபடம்** பயன்படுத்தி காண்பிக்க முடியும்:\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",
|
|
"கணக்கீட்டிலும் மிக முக்கியமான முறையாக இந்த கோரிக்கையை நிரூபிப்பதற்கு **ஸ்டூடென்ட் 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": [
|
|
"## தொடர்பு மற்றும் தீய பேஸ்பால் கார்ப்\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` என்கிறது நமக்கு **சகசரண_MATRIX** எனப்படும் ஒன்றை வழங்கும், இது பல மாறிலிகளுக்கு சகசரணத்தின் விரிவாக்கமாகும். சகசரண MATRIX $M$ இன் உறுப்பு $M_{ij}$ என்பது உள்ளீடு மாறிலிகள் $X_i$ மற்றும் $X_j$ இடையேயுள்ள தொடர்பு ஆகும், மேலும் கோணம் $M_{ii}$ என்பது $X_i$ இன் பரவலாகும். அதேபோல், `np.corrcoef` நமக்கு **தொடர்பு_MATRIX** வழங்கும்.\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<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**குறிப்பு**: \nஇந்த ஆவணம் [Co-op Translator](https://github.com/Azure/co-op-translator) என்ற AI மொழிபெயர்ப்பு சேவையைக் கொண்டு மொழிமாற்றம் செய்யப்பட்டுள்ளது. நாங்கள் துல்லியத்திற்காக முயற்சித்தாலும், தானாக மேற்கொள்ளப்பட்ட மொழிபெயர்ப்புகளில் பிழைகள் அல்லது தவறுகள் இருக்கலாம் என்பதை நினைவில் கொள்ளவும். அதன் மூலமொழி ஆவணம் நம்பகமான ஆதாரமாக கருதப்பட வேண்டும். முக்கியமான தகவல்களுக்கு, தொழில்முறை மனித மொழி மொழிபெயர்ப்பை பரிந்துரைக்கிறோம். இந்த மொழிபெயர்ப்பின் பயன்பாட்டால் ஏற்படும் எந்த தவறான புரிதல்கள் அல்லது தவறான விளக்கங்களுக்கும் நாங்கள் பொறுப்புலை.\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-16T22:18:02+00:00",
|
|
"source_file": "1-Introduction/04-stats-and-probability/notebook.ipynb",
|
|
"language_code": "ta"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 4
|
|
} |