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

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# ការ៉Introduសេចក្ដីសង្ខេបអំពីប្រហែលនិងស្ថិតិ\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(), orientation='horizontal', 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": [
"> **សម្គាល់**: គំនូសបង្ហាញនេះបញ្ជាក់ថា, imធម្មតា, កម្ពស់របស់អ្នកលេងទីមួយឆ្មាំខ្នាតខ្ពស់ជាងកម្ពស់របស់អ្នកលេងទីពីរចំហៀង។ បន្ទាប់មកយើងនឹងរៀនពីរបៀបដែលយើងអាចសាកល្បងសفرضនេះយ៉ាងផ្លូវការ និងរបៀបបង្ហាញថាទិន្នន័យរបស់យើងមានសារៈសំខាន់ផ្នែកស្ថិតិដើម្បីបង្ហាញវា។ \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'].ffill(),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",
"វិធីសាស្ត្រមានស្ថិតិដែលមានភាពត្រឹមត្រូវជាងក្នុងការបញ្ជាក់សម្រង់គំនិតគឺការប្រើប្រាស់ **ការធ្វើតេស្តStudent 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 អាចត្រូវបានគេពិចារណាថា ជាភាគហ៊ុននៃការហ្វឹកហាត់ពីរដែលមានមធ្យមដូចគ្នា។ ក្នុងករណីរបស់យើង វាតិចណាស់ មានន័យថាមានភស្តុតាងដ៏ខ្លាំងគាំទ្រថាអ្នកលេងបាស្មែនទីមួយចម្បងមានកម្ពស់វែងជាង។\n",
"* តម្លៃ t-value គឺជាតម្លៃមធ្យមកំណត់ទំរង់ធម្មតាចន្លោះដែលត្រូវបានប្រើនៅក្នុងការធ្វើតេស្ត 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'].ffill()\n",
"salaries = 1000+(heights-heights.min())/(heights.max()-heights.mean())*100\n",
"print(list(zip(heights, salaries))[:10])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ឥឡូវនេះ យើងនឹងគណនាអាចប្រើបាន covariance និង correlation របស់សមីការ​ទាំងនោះ។ `np.cov` នឹងផ្តល់ឲ្យយើងនូវអ្វីដែលហៅថា **covariance matrix** ដែលជាការពង្រីកនៃ covariance ទៅនឹងអថេរជាច្រើន។ ធាតុ $M_{ij}$ នៃម៉ាទ្រីស covariance $M$ គឺជាការតភ្ជាប់រវាងអថេរ $X_i$ និង $X_j$ ផ្ទុកក្នុងចំណូល ដោយតម្លៃគន្លងបន្ទាត់ $M_{ii}$ គឺជាអាចប្រើបាននៃ $X_i$។ ដូចគ្នា `np.corrcoef` នឹងផ្តល់ឲ្យយើងនូវ **ម៉ាទ្រីស correlation** ។\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'].ffill(), 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
}