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/km/1-Introduction/04-stats-and-probability/notebook.ipynb

575 lines
28 KiB

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Introduction to Probability and Statistics\n",
"នៅក្នុងសៀវភៅកំណត់ត្រានេះ យើងនឹងលេងជុំវិញខ្លឹមសារជាច្រើនដែលយើងបានពិភាក្សារួចមកហើយ។ ខ្លឹមសារច្រើនពីប្រូបាបល័យនិងស្ថិតិត្រូវបានបង្ហាញយ៉ាងល្អនៅក្នុងបណ្ណាល័យសម្រាប់ដំណើរការទិន្នន័យធំៗនៅក្នុង 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",
"ចាប់ផ្តើមដោយគូសគំរូតម្លៃ ៣០ ពីការបែងចែកសមាមាត្រពី ០ ដល់ ៩។ យើងនឹងគណនា​មធ្យម និងអាំងធរីយ៍ផងដែរ។\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",
"ឥឡូវនេះយើងនឹងគណនាចន្លោះទំនុកចិត្តសម្រាប់ទម្ងន់និងកម្ពស់របស់អ្នកលេងបេស្បាល់។ យើងនឹងប្រើកូដ [ពីការពិភាក្សានៅ 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": [
"យើង​ចង់​សាកល្បង​ការ​សន្មត់​ថាអ្នក​ធ្វើ​ងារ​ដំបូងមានកម្ពស់​ខ្ពស់ជាង​អ្នក​ធ្វើ​ងារ​ទីពីរ។ វិធីសាមញ្ញបំផុតក្នុងការធ្វើនេះគឺការតេស្តចន្លោះទំនុកចិត្តៈ\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-value អាចត្រូវបានគិតជាប្រាស្រ័យភាពនៃការចែកចាយពីរដែលមានមធ្យមដូចគ្នា។ សម្រាប់ករណីរបស់យើង វាទាបណាស់ មានន័យថាមានភស្តុតាងខ្លាំងគាំទ្រថា first basemen មានកម្ពស់ខ្ពស់ជាង។\n",
"* t-value គឺជាតម្លៃមន្ទីរប្រមាណនៃភាពខុសគ្នាមធ្យមដែលបានធម្មតា ដែលត្រូវបានប្រើនៅក្នុងការស្ទង់មតិ t-test ហើយវាត្រូវបានប្រៀបធៀបទៅនឹងតម្លៃកម្រិតមួយសម្រាប់តម្លៃទំនុកចិត្តមួយ។\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` នឹងផ្តល់ឲ្យយើងនូវអ្វីដែលគេហៅថា **ម៉ាត្រិកសហភាព** ដែលជាការពង្រីកនៃការសហភាពទៅច្រើនអថេរ។ គ្រឿង $M_{ij}$ នៃម៉ាត្រិកសហភាព $M$ គឺជាការតភ្ជាប់គ្នារវាងអថេរបញ្ចូល $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": [
"ក្នុងករណីនេះ ការចងកCorrារតិ្តគឺតូចជាងបន្តិច ប៉ុន្តែវាទោះជាយ៉ាងណាក៏ដោយនៅតែខ្ពស់។ ឥឡូវនេះ ដើម្បីធ្វើឱ្យទំនាក់ទំនងមិនច្បាស់លាស់ យើងអាចចង់បន្ថែមភាពចៃដន្យបន្ថែមមួយចំនួនដោយបន្ថែមអថេរចៃដន្យមួយចំនួនទៅលើប្រាក់ខែ។ សូមមកមើលថាអ្វីកើតឡើង៖\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ឯកសារនេះត្រូវបានបកប្រែដោយប្រើសេវាកម្មបកប្រែ 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"
}
},
"nbformat": 4,
"nbformat_minor": 4
}