# ការដំណើរការជាមួយទិន្នន័យ៖ Python និងបណ្ណាល័យ Pandas | ![ Sketchnote ដោយ [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/07-WorkWithPython.png) | | :-------------------------------------------------------------------------------------------------------: | | ការដំណើរការជាមួយ Python - _Sketchnote ដោយ [@nitya](https://twitter.com/nitya)_ | [![វីដេអូណែនាំ](../../../../translated_images/km/video-ds-python.245247dc811db8e4.webp)](https://youtu.be/dZjWOGbsN4Y) ខណៈដែលប្រព័ន្ធទិន្នន័យផ្តល់ជូនវិធីសាស្រ្តមានប្រសិទ្ធភាពខ្ពស់ក្នុងការរក្សាទិន្នន័យ និងស្វែងរកសំណួរតាមភាសាសំណួរ វិធីសាស្រ្តដែលមានភាពបត់បែនបំផុតក្នុងការចុះបញ្ជីទិន្នន័យគឺការសរសេរកម្មវិធីផ្ទាល់របស់អ្នកដើម្បីផ្លាស់ប្តូរទិន្នន័យ។ នៅក្នុងករណីជាច្រើន ការស្វែងរកទិន្នន័យក្នុងប្រព័ន្ធទិន្នន័យអាចជាជម្រើសមានប្រសិទ្ធភាពជាង។ ប៉ុន្តែ នៅក្នុងករណីខ្លះៗ នៅពេលដែលត្រូវការចុះបញ្ជីទិន្នន័យស្មុគស្មាញជាងនេះ វាមិនអាចធ្វើបានយ៉ាងងាយស្រួលតាមរយៈ SQL ទេ។ ការដំណើរការទិន្នន័យអាចត្រូវបានចុះបញ្ជីជាកម្មវិធីនៅក្នុងភាសាកម្មវិធីណាមួយក៏ដោយ ប៉ុន្តែមានភាសារមួយចំនួនដែលមានកម្រិតខ្ពស់ជាងសម្រាប់ការដំណើរការជាមួយទិន្នន័យ។ អ្នកវិទ្យាសាស្ត្រទិន្នន័យភាគច្រើនចូលចិត្តភាសាមួយក្នុងចំណោមភាសាដូចខាងក្រោម៖ * **[Python](https://www.python.org/)** ជាភាសាកម្មវិធីប្រើបានទូទៅ ដែលភាគច្រើនគេចាត់ទុកថាជាជម្រើសល្អសម្រាប់អ្នកចាប់ផ្តើមដោយសារតែភាពសាមញ្ញរបស់វា។ Python មានបណ្ណាល័យបន្ថែមច្រើនជំនួយដល់ការដោះស្រាយបញ្ហាទូទៅជាច្រើន ដូចជាការដកយកទិន្នន័យពីហារីល ZIP ឬបម្លែងរូបភាពទៅជាពណ៌សម្រាប់ត្រង់។ លើសពីការសិក្សាទិន្នន័យ Python ក៏ត្រូវបានប្រើជាញឹកញាប់សម្រាប់ការវិវឌ្ឍវេបសាយផងដែរ។ * **[R](https://www.r-project.org/)** ជាឧបករណ៍បុរាណមួយដែលបង្កើតឡើងសម្រាប់ការដំណើរការទិន្នន័យស្ថិតិ។ វាក៏មានបណ្ណាល័យធំនៅក្នុងស្តុក (CRAN) ដែលធ្វើឲ្យវាជាជម្រើសល្អសម្រាប់ការដំណើរការទិន្នន័យ។ ទោះបីជាយ៉ាងណា R មិនមែនជាភាសាកម្មវិធីទូទៅទេ ហើយត្រូវបានប្រើទូទៅក្នុងដែនការសិក្សាទិន្នន័យប៉ុណ្ណោះ។ * **[Julia](https://julialang.org/)** ជាភាសាផ្សេងទៀតដែលបង្កើតឡើងសម្រាប់ការសិក្សាទិន្នន័យ។ វាត្រូវបានរំពឹងទុកថានឹងផ្តល់ការអនុវត្តដែលល្អជាង Python ដូច្នេះវាជាឧបករណ៍ល្អសម្រាប់ការប្រឡងវិទ្យាសាស្ត្រ។ នៅក្នុងមេរៀននេះ យើងនឹងផ្តោតលើការប្រើ Python សម្រាប់ការដំណើរការទិន្នន័យសាមញ្ញ។ យើងនឹងទទួលស្គាល់ថាអ្នកមានការស្គាល់មូលដ្ឋានជាមួយភាសានេះ។ ប្រសិនបើអ្នកចង់មានការសិក្សាដ៏ជ្រាលជ្រៅអំពី Python អ្នកអាចយោងទៅកាន់ធនធានខាងក្រោម៖ * [សិក្សា Python ជាដំណើរការកំសាន្តជាមួយ Turtle Graphics និង Fractals](https://github.com/shwars/pycourse) - ការបណ្តុះបណ្តាល Python ដែលមានមូលដ្ឋាន GitHub * [ចាប់ផ្តើមជំហានដំបូងជាមួយ Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) មាតិកាអប់រំលើ [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum) ទិន្នន័យអាចមានរាងកាយជាច្រើន। នៅក្នុងមេរៀននេះ យើងនឹងពិចារណារូបមន្តទិន្នន័យបីប្រភេទ — **ទិន្នន័យតារាង**, **អត្ថបទ** និង **រូបភាព**។ យើងនឹងផ្តោតលើឧទាហរណ៍ចំនួនមួយសម្រាប់ការដំណើរការទិន្នន័យ ជំនួសការអោយបង្ហាញទាំងមូលស្តីពីបណ្ណាល័យទាំងអស់ដែលពាក់ព័ន្ធ។ វានឹងជួយអ្នកយល់ដឹងពីអ្វីដែលអាចធ្វើបាន ហើយឲ្យអ្នកមានចំណេះដឹងពីកន្លែងស្វែងរកដំណោះស្រាយនៅពេលដែលអ្នកត្រូវការពួកវា។ > **ដំបូន្មានមានប្រយោជន៍បំផុត**។ នៅពេលដែលអ្នកត្រូវការធ្វើប្រតិបត្ដិការណាមួយលើទិន្នន័យដែលអ្នកមិនដឹងថាតើធ្វើដូចម្តេច សូមស្វែងរកតាមអ៊ីនធើណិត។ [Stackoverflow](https://stackoverflow.com/) ជាទូទៅមានគំរូកូដ Python ច្រើនដែលមានប្រយោជន៍សម្រាប់បេសកកម្មទូទៅជាច្រើន។ ## [សំណួរពិនិត្យមុនមេរៀន](https://ff-quizzes.netlify.app/en/ds/quiz/12) ## ទិន្នន័យតារាង និង Dataframes អ្នកបានស្គាល់ទិន្នន័យតារាងហើយនៅពេលដែលយើងបាននិយាយពីប្រព័ន្ធទិន្នន័យទំនាក់ទំនង។ ពេលដែលអ្នកមានទិន្នន័យច្រើន ហើយវាត្រូវបានផ្ទុកនៅតារាងជាច្រើនដែលភ្ជាប់គ្នា វាពិតជាមានអត្ថន័យក្នុងការប្រើ SQL រួចសម្រាប់ធ្វើការដំណើរការវា។ ទោះយ៉ាងណា មានករណីជាច្រើនអាលដែលយើងមានតារាងទិន្នន័យហើយត្រូវការស្វែងយល់ឬវិចារណាអំពីទិន្នន័យដូចជាការចែកចាយ ការតភ្ជាប់គ្នារវាងតម្លៃជាដើម។ នៅក្នុងវិស័យវិទ្យាសាស្ត្រទិន្នន័យ មានករណីយ៉ាងច្រើនដែលយើងត្រូវការប្រតិបត្ដិការ ការបម្លែងមួយចំនួនលើទិន្នន័យដើម ហើយបន្ទាប់មកធ្វើការបង្ហាញទិន្នន័យវិចិត្រសិល្បៈ។ ពីរជំហានទាំងនេះអាចធ្វើបានយ៉ាងងាយស្រួលដោយប្រើ Python។ មានបណ្ណាល័យ Python មួយចំនួនដែលមានប្រយោជន៍ខ្លាំងសម្រាប់ជួយអ្នកដោះស្រាយបញ្ហាទិន្នន័យតារាង៖ * **[Pandas](https://pandas.pydata.org/)** អនុញ្ញាតឲ្យអ្នកផ្លាស់ប្តូរអ្វីដែលគេហៅថា **Dataframes** ដែលស្រដៀងទៅនឹងតារាងទំនាក់ទំនង។ អ្នកអាចមានជួរឈរ​ដែលមានឈ្មោះ ហើយអាចប្រតិបត្ដិការផ្សេងៗលើយោងទៅលើជួរ​ ជួរឈរ និង Dataframes ជាទូទៅ។ * **[Numpy](https://numpy.org/)** គឺជាបណ្ណាល័យសម្រាប់ធ្វើការជាមួយ **tensors**, មានន័យថា **arrays** ឯកភាពច្រើនវិមាត្រ។ Array មានតម្លៃពីប្រភេទដូចគ្នា ហើយវាមានភាពសាមញ្ញជាង dataframe ប៉ុន្តែវាប្រើបានច្រើនសម្រាប់ប្រតិបត្ដិការជាប្រែប្រួលគណិតវិទ្យា និងបង្កើតការរំខានតិចជាង។ មានបណ្ណាល័យផ្សេងទៀតមួយចំនួនដែលអ្នកគួរតែដឹងដូចជា៖ * **[Matplotlib](https://matplotlib.org/)** គឺជាបណ្ណាល័យសម្រាប់ការបង្ហាញទិន្នន័យ និងគូសក្រាហ្វ * **[SciPy](https://www.scipy.org/)** គឺជាបណ្ណាល័យមួយសម្រាប់មុខងារវិទ្យាសាស្ត្របន្ថែមខ្លះ។ យើងបានស្គាល់បណ្ណាល័យនេះរួចពេលនិយាយពីប្រភាពនឹងស្ថិតិ ខាងក្រោមជាឧទាហរណ៍កូដដែលអ្នកភាគច្រើនប្រើសម្រាប់នាំចូលបណ្ណាល័យទាំងនេះនៅដើមកម្មវិធី Python របស់អ្នក៖ ```python import numpy as np import pandas as pd import matplotlib.pyplot as plt from scipy import ... # អ្នកត្រូវការបញ្ជាក់ពីកញ្ចប់រងច្បាស់លាស់ដែលអ្នកត្រូវការ ``` Pandas ផ្អែកលើគំនិតមូលដ្ឋានជាច្រើន។ ### Series **Series** គឺជាដំណើរការតម្លៃមួយជាសេរី វាស្រដៀងនឹងបញ្ជី ឬ numpy array។ ការប្រែមាថាខុសគ្នាលើសំខាន់គឺ series មាន **index** ផងដែរ ហើយពេលយើងបំពេញប្រតិបត្ដិការលើ series (ឧ. បូកបន្ថែម) វានឹងគិតខ្វះនៃ index ។ Index អាចជាថ្នាក់លេខខ្សែគំនរដែលសាមញ្ញ (ពេលបង្កើត series ពីបញ្ជី ឬ array វានឹងប្រើជាលំនាំប្រព័ន្ធ) ឬអាចមានរចនាសម្ព័ន្ធស្មុគស្មាញដូចជា លំនាំកាលបរិច្ឆេទ។ > **កត់ចំណាំ**៖ មានកូដ Pandas មួយចំនួនសម្រាប់អ្នកចាប់ផ្តើមនៅក្នុងក្រដាសសម្ភារៈជាមួយ [`notebook.ipynb`](notebook.ipynb)។ យើងបានគ្រាប់ពិពណ៌នាប៉ុន្មានឧទាហរណ៍នៅទីនេះ ហើយអ្នកអាចមកមើលក្រដាសពេញលេញបាន។ តើអ្នកគិតថាឧទាហរណ៍មួយ៖ យើងចង់វិភាគការលក់ទំនិញកន្លែងលក់កម្អិតទឹកកករបស់យើង។ យើងបង្កើតជួរលេខលក់ (ចំនួនទំនិញដែលបានលក់ក្នុងមួយថ្ងៃ) រយៈពេលខ្លះ៖ ```python start_date = "Jan 1, 2020" end_date = "Mar 31, 2020" idx = pd.date_range(start_date,end_date) print(f"Length of index is {len(idx)}") items_sold = pd.Series(np.random.randint(25,50,size=len(idx)),index=idx) items_sold.plot() ``` ![បង្ហាញការផ្លាស់ប្តូរពេលវេលា](../../../../translated_images/km/timeseries-1.80de678ab1cf727e.webp) ឥឡូវយើងសន្មត់ថា រៀងរាល់សប្ដាហ៍យើងបញ្ចូលការប្រមូលផ្តុំមិត្តភក្តិ ហើយយកកញ្ចប់ទឹកកកបន្ថែម ១០ កញ្ចប់សម្រាប់ព្រឹត្តិការណ៍។ យើងអាចបង្កើត series មួយផ្សេងទៀតដែលមាន index ជាសប្ដាហ៍ ដើម្បីបង្ហាញពីរឿងនេះ៖ ```python additional_items = pd.Series(10,index=pd.date_range(start_date,end_date,freq="W")) ``` ពេលយើងបូក series ទាំងពីរជាមួយគ្នា យើងទទួលបានចំនួនសរុប៖ ```python total_items = items_sold.add(additional_items,fill_value=0) total_items.plot() ``` ![បង្ហាញការផ្លាស់ប្តូរពេលវេលា](../../../../translated_images/km/timeseries-2.aae51d575c55181c.webp) > **កត់ចំណាំ** យើងមិនបានប្រើវិធីសាSimple៍ `total_items+additional_items` ដែលសាមញ្ញទេ។ ប្រសិនបើយើងធ្វើនោះ យើងនឹងទទួលបានតម្លៃ `NaN` (គ្មានលេខ) ច្រើននៅក្នុង series ផលិតពីការបូក។ នេះកើតឡើងដោយសារតម្លៃខ្វះខាតនៅចំណុច index មួយចំនួនក្នុង series `additional_items` ហើយការបូក `NaN` ជាមួយអ្វីៗដទៃស្ទើរតែផ្តល់ `NaN`។ ដូច្នេះយើងត្រូវបញ្ជាក់ប៉ារ៉ាម៉ែត្រផ្ទុកតម្លៃ `fill_value` ខណៈពេលបូក។ ជាមួយ series ពេលវេលា យើងអាចប្ដូរសំណុំ (resample) ជាមួយវេលាលកដូចផ្សេងៗគ្នា។ ឧទាហរណ៍ សន្មតថាយើងចង់គណនាមធ្យមចំនួនលក់រៀងខែ។ យើងអាចប្រើលក្ខណៈខាងក្រោម៖ ```python monthly = total_items.resample("1M").mean() ax = monthly.plot(kind='bar') ``` ![មធ្យមតារាងពេលវេលាប្រចាំខែ](../../../../translated_images/km/timeseries-3.f3147cbc8c624881.webp) ### DataFrame DataFrame គឺជាសំណុំមួយនៃ series ដែលមាន index ដូចគ្នា។ យើងអាចរួមបញ្ចូល series ច្រើនជាមួយគ្នាទៅជាទ្រង់ទ្រាយ DataFrame៖ ```python a = pd.Series(range(1,10)) b = pd.Series(["I","like","to","play","games","and","will","not","change"],index=range(0,9)) df = pd.DataFrame([a,b]) ``` វានឹងបង្កើតតារាងផ្ដេកដូចខាងក្រោម៖ | | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | | --- | --- | ---- | --- | --- | ------ | --- | ------ | ---- | ---- | | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | | 1 | I | like | to | use | Python | and | Pandas | very | much | យើងក៏អាចប្រើ Series ជាជួរឈរបាន ហើយបញ្ជាក់ឈ្មោះជួរឈរដោយប្រើវចនានុក្រម៖ ```python df = pd.DataFrame({ 'A' : a, 'B' : b }) ``` វានឹងផ្តល់តារាងដូចខាងក្រោម៖ | | A | B | | --- | --- | ------ | | 0 | 1 | I | | 1 | 2 | like | | 2 | 3 | to | | 3 | 4 | use | | 4 | 5 | Python | | 5 | 6 | and | | 6 | 7 | Pandas | | 7 | 8 | very | | 8 | 9 | much | **កត់ចំណាំ** យើងក៏អាចទទួលបានទ្រង់ទ្រាយតារាងនេះដោយបម្លែងតារាងមុនពីជួរត្រៀមជួរឈរ ដូចជា ```python df = pd.DataFrame([a,b]).T.rename(columns={ 0 : 'A', 1 : 'B' }) ``` នៅទីនេះ `.T` មានន័យថា ប្រតិបត្ដិការបម្លែងតារាង DataFrame ដោយប្តូរជួរនិងជួរឈរ ហើយ `rename` អនុញ្ញាតឲ្យយើងប្តូរឈ្មោះជួរឈរតាមឧទាហរណ៍មុន។ ខាងក្រោមជាប្រតិបត្ដិការសំខាន់ៗមួយចំនួនដែលយើងអាចចាត់ទុកទៅលើ DataFrames៖ **ជ្រើសរើសជួរឈរ**។ យើងអាចជ្រើសជួរឈរផ្ទាល់ដោយសរសេរ `df['A']` - ប្រតិបត្ដិការនេះត្រូវបានត្រឡប់តម្លៃជា Series។ យើងក៏អាចជ្រើសជួរឈរមួយចំនួនទៅ DataFrame ផ្សេងទៀតដោយសរសេរ `df[['B','A']]` - វាបម្លែងទៅជា DataFrame មួយផងដែរ។ **តម្រង** ជួរដោយលក្ខខណ្ឌ។ ឧទាហរណ៍ ដើម្បីច្រានចោលជួរដែលមានតម្លៃជួរឈរ `A` តិចជាង ឬស្មើ ៥ យើងអាចសរសេរ `df[df['A']>5]`។ > **កត់ចំណាំ**៖ របៀបស្វែងរកត្រូវបានបំបែកដូចខាងក្រោម។ បារាង `df['A']<5` នឹងត្រឡប់របារ boolean ដែលបង្ហាញថា តម្លៃមួយៗក្នុង `df['A']` មានតម្លៃ True ឬ False ។ ពេលដែលប្រើ boolean series ជា index វានឹងត្រឡប់ជាចំនាត់ថ្នាក់ទ្រង់ទ្រាយ DataFrame។ ដូច្នេះមិនអាចប្រើបារម្ភ boolean code ក្នុង Python នៅផ្នែកនេះរួចបានទេ ហើយខុសឆ្គងក្នុងការចុះបញ្ជីដូចជា `df[df['A']>5 and df['A']<7]`។ ថែមទាំងត្រូវប្រើការប្រតិបត្ដិការពិសេស `&` លើ boolean series ជាមួយសញ្ញាស្វ័យបិទសញ្ញា `(` `)` ដូចជា `df[(df['A']>5) & (df['A']<7)]` (សញ្ញាស្វ័យបិទសារៈសំខាន់)។ **បង្កើតជួរឈរប្រតិបត្ដិការថ្មី**។ យើងអាចបង្កើតជួរឈរថ្មីដែលគណនាចេញបានសម្រាប់ DataFrame ដោយប្រើបរិយាយសំណួរដូចខាងក្រោម៖ ```python df['DivA'] = df['A']-df['A'].mean() ``` ឧទាហរណ៍នេះគណនាភាពខុសគ្នារវាង A និងតម្លៃមធ្យមរបស់វា។ អ្វីដែលកើតឡើងពិតជាគឺយើងកំពុងគណនាដំណើរមួយ ហើយដាក់ series នេះទៅខាងឆ្វេង បង្កើតជួរឈរថ្មី។ ដូច្នេះ អ្នកមិនអាចប្រើប្រតិបត្ដិការណាដែលមិនប្រព័ន្ធពី series នៅទីនេះបានទេ។ ឧទាហរណ៍កូដខាងក្រោម គឺខុស៖ ```python # កូដខុស -> df['ADescr'] = "ទាប" ប្រសិនបើ df['A'] < 5 ផ្ទុយទៅ "ខ្ពស់" df['LenB'] = len(df['B']) # <- លទ្ធផលខុស ``` ឧទាហរណ៍នេះ ខណៈដែលសម្គាល់ត្រឹមត្រូវតាមវេយ្យាករណ៍ តែផ្តល់លទ្ធផលខុសក្នុងន័យថា វាបែងចែកប្រវែង series `B` ទៅតម្លៃទាំងអស់ក្នុងជួរឈរ មិនមែនប្រវែងនៃធាតុមួយៗដូចដែលយើងចង់បាន។ ប្រសិនបើយើងត្រូវមានការគណនា expression ស្មុគស្មាញ ដូចនេះ អ្នកអាចប្រើមុខងារ `apply`។ ឧទាហរណ៍ចុងក្រោយអាចសរសេរដូចខាងក្រោម៖ ```python df['LenB'] = df['B'].apply(lambda x : len(x)) # ឬ df['LenB'] = df['B'].apply(len) ``` បន្ទាប់ពីដំណើរការខាងលើ យើងនឹងទទួលបាន DataFrame ដូចខាងក្រោម៖ | | A | B | DivA | LenB | | --- | --- | ------ | ---- | ---- | | 0 | 1 | I | -4.0 | 1 | | 1 | 2 | like | -3.0 | 4 | | 2 | 3 | to | -2.0 | 2 | | 3 | 4 | use | -1.0 | 3 | | 4 | 5 | Python | 0.0 | 6 | | 5 | 6 | and | 1.0 | 3 | | 6 | 7 | Pandas | 2.0 | 6 | | 7 | 8 | very | 3.0 | 4 | | 8 | 9 | much | 4.0 | 4 | **ជ្រើសរើសជួរដោយលេខសៀង** អាចធ្វើបានដោយប្រើ `iloc`។ ឧទាហរណ៍ ដើម្បីជ្រើសរើស ៥ ជួរដំបូងពី DataFrame៖ ```python df.iloc[:5] ``` **ក្រុម** ត្រូវបានប្រើជាញឹកញាប់សម្រាប់ទទួលលទ្ធផលដូចជា *pivot tables* នៅក្នុង Excel។ សន្មតថាយើងចង់គណនាតម្លៃមធ្យមនៃជួរឈរ `A` សម្រាប់ភាគចំនួន `LenB` ទាំងឡាយ។ បន្ទាប់ពីនោះ​យើងអាចក្រុម DataFrame ដោយ `LenB` ហើយហៅ `mean`៖ ```python df.groupby(by='LenB')[['A','DivA']].mean() ``` ប្រសិនបើយើងចង់គណនាតម្លៃមធ្យម និងចំនួនធាតុមួយក្នុងក្រុម យើងអាចប្រើមុខងារ `aggregate` ដែលស្មុគស្មាញជាងនេះ៖ ```python df.groupby(by='LenB') \ .aggregate({ 'DivA' : len, 'A' : lambda x: x.mean() }) \ .rename(columns={ 'DivA' : 'Count', 'A' : 'Mean'}) ``` វាបង្ហាញតារាងដូចខាងក្រោម៖ | LenB | Count | Mean | | ---- | ----- | -------- | | 1 | 1 | 1.000000 | | 2 | 1 | 3.000000 | | 3 | 2 | 5.000000 | | 4 | 3 | 6.333333 | | 6 | 2 | 6.000000 | ### ការទទួលបានទិន្នន័យ យើងបានឃើញថាវាយ៉ាងងាយស្រួលក្នុងការបង្កើត Series និង DataFrames ពីវត្ថុ Python។ ប៉ុន្តែ ទិន្នន័យជាធម្មតាមកក្នុងទម្រង់ឯកសារអត្ថបទ ឬតារាង Excel។ ទំណុកបញ្ចោញ Pandas ផ្តល់ឱ្យ​យើងវិធីសាមញ្ញក្នុងការផ្ទុកទិន្នន័យពីឌីស។ ឧទាហរណ៍ ការអានឯកសារ CSV គឺងាយស្រួលដូចនេះ: ```python df = pd.read_csv('file.csv') ``` យើងនឹងឃើញឧទាហរណ៍បន្ថែមទៀតនៃការផ្ទុកទិន្នន័យ រួមមានការទាញយកពីគេហទំព័រចេញក្រៅ ក្នុងផ្នែក "Challenge" ### ការបោះពុម្ពនិងបង្ហាញក្រាប អ្នកវិទ្យាសាស្ត្រទិន្នន័យជាញឹកញាប់ត្រូវតែស្វែងរកទិន្នន័យ ដូចនេះវាជារឿងសំខាន់ក្នុងការមានសមត្ថភាពមើលឃើញវា។ នៅពេល DataFrame មានទំហំធំ ជាច្រើនដង យើងចង់ធ្វើអោយប្រាកដថាយើងកំពុងធ្វើអ្វីៗបានត្រឹមត្រូវ ដោយបោះពុម្ពបញ្ជូលជួរដំបូងៗមួយប៉ុណ្ណោះ។ វាអាចធ្វើបានដោយហៅ `df.head()`។ ប្រសិនបើអ្នកកំពុងដំណើរការ វាពី Jupyter Notebook វានឹងបោះពុម្ព DataFrame ជាទម្រង់តារាងស្អាតមួយ។ យើងក៏បានឃើញករណីប្រើមុខងារ `plot` ដើម្បីបង្ហាញស្តង់ក្នុងជួរដេកមួយចំនួន។ ខណៈពេល `plot` មានប្រយោជន៍សម្រាប់ការងារជាច្រើន និងគាំទ្រប្រភេទក្រាបខុសៗគ្នាតាមរយៈប៉ារ៉ាម៉ែត្រ `kind=` អ្នកអាចប្រើបណ្ណាល័យ `matplotlib` ដំបូង ដើម្បីបង្ហាញអ្វីដែលស្មុគស្មាញជាងនេះ។ យើងនឹងពិភាក្សាពីការបង្ហាញទិន្នន័យជាលម្អិតក្នុងមេរៀនវគ្គបំបែកផ្សេងទៀត។ ទិដ្ឋភាពទូទៅនេះគ្របដណ្តប់ចំនុចសំខាន់ៗបំផុតរបស់ Pandas ប៉ុន្តែបណ្ណាល័យនេះមានមាតិកាច្រើន ហើយគ្មានកំណត់ក្នុងអ្វីដែលអ្នកអាចធ្វើជាមួយវាទេ! យើងចាប់ផ្តើមប្រើចំណេះដឹងនេះដើម្បីដោះស្រាយបញ្ហាពិសេសមួយ។ ## 🚀 បញ្ហានឹងត្រូវដោះស្រាយ ១៖ វិភាគការចម្រើន COVID បញ្ហាលើកដំបូងដែលយើងនឹងផ្តោតគឺការគំរូនៃការផ្ទុះជំងឺរាតត្បាត COVID-19។ ដើម្បីធ្វើការនេះ យើងនឹងប្រើទិន្នន័យអំពីចំនួនអ្នកឆ្លងជំងឺនៅប្រទេសនានា ដែលបានផ្តល់ដោយ [Center for Systems Science and Engineering](https://systems.jhu.edu/) (CSSE) នៅ [សាកលវិទ្យាល័យ Johns Hopkins](https://jhu.edu/)។ សំណុំទិន្នន័យអាចរកបាននៅ [GitHub Repository នេះ](https://github.com/CSSEGISandData/COVID-19)។ ព្រោះយើងចង់បង្ហាញពីវិធីដោះស្រាយទិន្នន័យ យើងអញ្ជើញអ្នកបើក [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) ហើយអានពីលើទៅក្រោម។ អ្នកអាចបញ្ចូលកូដក្នុងខ្ទង់កូដ ក៏ដូចជាត្រូវបានជួបប្រទះបញ្ហាដែលយើងបានទុកសម្រាប់អ្នកនៅចុងផងដែរ។ ![COVID Spread](../../../../translated_images/km/covidspread.f3d131c4f1d260ab.webp) > ប្រសិនបើអ្នកមិនដឹងរបៀបដំណើរការកូដក្នុង Jupyter Notebook សូមមើល [អត្ថបទនេះ](https://soshnikov.com/education/how-to-execute-notebooks-from-github/)។ ## ការងារជាមួយទិន្នន័យមិនរៀបរយ រួមចំណែកទិន្នន័យជាញឹកញាប់មានទម្រង់តារាង ប៉ុន្តែក្នុងករណីខ្លះ យើងត្រូវការដោះស្រាយទិន្នន័យដែលមិនរៀបចំរួច ព្រមទាំងអត្ថបទ ឬរូបភាព។ ក្នុងករណីនេះ ដើម្បីអនុវត្តបច្ចេកទេសដំណើរការទិន្នន័យដែលបានមើលឃើញខាងលើ យើងត្រូវអាច **ដក** ទិន្នន័យរៀបចំបានមួយវិញ។ អ្វីខ្លះមានឧទាហរណ៍៖ * ដកពាក្យគន្លឹះពីអត្ថបទ ហើយមើលថាពាក្យគន្លឹះទាំងនោះបង្ហាញ頻率ប៉ុន្មានដង * ប្រើបណ្ណាល័យបណ្តាញប្រសាទ (neural networks) ដើម្បីដកព័ត៌មានរបស់វត្ថុនៅលើរូបភាព * ទទួលបានព័ត៌មានអំពីអារម្មណ៍មនុស្សនៅលើវីដេអូផ្តល់ការតាមដាន ## 🚀 បញ្ហានឹងត្រូវដោះស្រាយ ២៖ វិភាគអត្ថបទ COVID ក្នុងបញ្ហានេះ យើងនឹងបន្តជាមួយប្រធានបទមហាភាព COVID និងផ្តោតលើដំណើរការអត្ថបទវិទ្យាសាស្ត្រអំពីប្រធានបទនេះ។ មាន [សំណុំទិន្នន័យ CORD-19](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) ដែលមានអត្ថបទលើសពី 7000 (នៅពេលសរសេរ) អំពី COVID ព្រមទាំងមានមេតាទិន្នន័យ និងសេចក្ដីសង្ខេប (សម្រាប់ប្រមាណកន្លែងពាក់កណ្តាលមានអត្ថបទពេញលេញផ្តល់ទៀត)។ ឧទាហរណ៍ពេញលេញនៃការវិភាគសំណុំទិន្នន័យនេះដោយប្រើសេវាកម្មនៃ [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) ត្រូវបានពណ៌នានៅ [ប្រកាសប្លក់នេះ](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). យើងនឹងពិភាក្សាអំពីកំណត់រូបភាពដែលបានបង្រួមនៃការវិភាគនេះ។ > **ចំណាំ**៖ យើងមិនផ្តល់ចម្លងសំណុំទិន្នន័យជាផ្នែកមួយនៃទីតាំងកំណត់នេះទេ។ អ្នកប្រហែលជាត្រូវទាញយកឯកសារ [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) ពី [សំណុំទិន្នន័យលើ Kaggle នេះ](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) ជាមុន។ អ្នកប្រហែលជាត្រូវចុះឈ្មោះជាមួយ Kaggle។ អ្នកអាចទាញយកសំណុំទិន្នន័យដោយគ្មានចុះឈ្មោះ [ពីទីនេះ](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html) ប៉ុន្តែវានឹងរួមបញ្ចូលអត្ថបទពេញលេញទាំងអស់បូកជាមួយឯកសារមេតា។ បើក [`notebook-papers.ipynb`](notebook-papers.ipynb) ហើយអានពីលើទៅក្រោម។ អ្នកអាចបញ្ចូលកូដក្នុងខ្ទង់កូដ និងធ្វើបញ្ហាដែលយើងបានទុកសម្រាប់អ្នកនៅចុងផងដែរ។ ![Covid Medical Treatment](../../../../translated_images/km/covidtreat.b2ba59f57ca45fbc.webp) ## ដំណើរការទិន្នន័យរូបភាព ខណៈពេលថ្មីៗនេះ មានគំរូ AI ដែលមានអំណាចខ្លាំងត្រូវបានអភិវឌ្ឍ ដែលអាចឲ្យយើងយល់ពីរូបភាព។ មានការងារច្រើនដែលអាចដោះស្រាយបានដោយប្រើបណ្តាញប្រសាទដែលបានបណ្តុះជាមុន ឬសេវាកម្មពពក។ ឧទាហរណ៍មាន៖ * **ចំណាត់ថ្នាក់រូបភាព** ដែលអាចជួយអ្នកចាត់ថ្នាក់រូបភាពទៅក្នុងថ្នាក់ជាក់លាក់មួយ។ អ្នកអាចបណ្តុះនូវម៉ូដែលចំណាត់ថ្នាក់រូបភាពផ្ទាល់ខ្លួនបានយ៉ាងងាយស្រួលដោយប្រើសេវាកម្មដូចជា [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) * **រកសម្គាល់វត្ថុ** ដើម្បីរកអត្តសញ្ញាណវត្ថុផ្សេងៗនៅក្នុងរូបភាព។ សេវាកម្មដូចជា [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) អាចរកប្រភេទវត្ថុទូទៅបានច្រើន ហើយអ្នកអាចបណ្តុះម៉ូដែល [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) ដើម្បីរកវត្ថុជាក់លាក់មួយចំនួនដែលមានចំណាប់អារម្មណ៍។ * **រកសម្គាល់ផ្ទៃមុខ** រួមមានការកំណត់អាយុ ភេទ និងអារម្មណ៍។ វាអាចធ្វើបានតាមរយៈ [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum)។ សេវាកម្មពពកទាំងអស់នេះអាចហៅបានតាមរយៈ [Python SDKs](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum) ហើយដូច្នេះអាចបញ្ចូលយ៉ាងងាយស្រួលទៅក្នុងបណ្តារដ្ឋានស្វែងរកទិន្នន័យរបស់អ្នក។ នៅទីនេះមានឧទាហរណ៍មួយចំនួននៃការស្វែងរកទិន្នន័យពីប្រភពទិន្នន័យរូបភាព: * នៅក្នុងប្លក់ [How to Learn Data Science without Coding](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) យើងស្វែងយល់ពីរូបថត Instagram ដើម្បីព្យាយាមយល់ថាអ្វីជាឧបករណ៍ជួយអោយមនុស្សចុចចូលច្រើនជាង ពីរូបថតមួយ។ យើងដកព័ត៌មានច្រើនបំផុតពីរូបភាពដោយប្រើ [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) ហើយបន្ទាប់មកប្រើ [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) ដើម្បីបង្កើតម៉ូដែលអាចពន្យល់បាន។ * នៅក្នុង [Facial Studies Workshop](https://github.com/CloudAdvocacy/FaceStudies) យើងប្រើ [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) ដកអារម្មណ៍មនុស្សនៅលើរូបថតពីព្រឹត្តិការណ៍ ដើម្បីព្យាយាមយល់ថាអ្វីធ្វើអោយមនុស្សមានសុភមង្គល។ ## សេចក្ដីសន្និដ្ឋាន មិនថាអ្នកមានទិន្នន័យរៀបចំ ឬមិនរៀបចំហើយ ការប្រើប្រាស់ Python អ្នកអាចអនុវត្តជំហានទាំងអស់ដែលពាក់ព័ន្ធនឹងដំណើរការ និងការយល់ដឹងលើទិន្នន័យ។ វាបាច់បាតជារបៀបដែលបត់បែនបំផុតសម្រាប់ដំណើរការទិន្នន័យ ហើយនេះជាហេតុផលដែលអ្នកវិទ្យាសាស្ត្រទិន្នន័យភាគច្រើនប្រើ Python ជាឧបករណ៍ដ៏សំខាន់របស់ពួកគេ។ ការសិក្សា Python ជ្រៀងជ្រែករីករាយគឺជាគំនិតល្អ ប្រសិនបើអ្នកមានចំណាប់អារម្មណ៍យ៉ាងខ្លាំងលើដំណើរទស្សនៈទិន្នន័យរបស់អ្នក! ## [វាយតម្លៃបន្ទាប់មកមេរៀន](https://ff-quizzes.netlify.app/en/ds/quiz/13) ## ការត្រួតពិនិត្យ និងសិក្សាឯករាជ្យ **សៀវភៅ** * [Wes McKinney. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython](https://www.amazon.com/gp/product/1491957662) **ធនធានអនឡាញ** * មេរៀនផ្លូវការ [10 minutes to Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html) * [បណ្ណាល័យលើការបង្ហាញទិន្នន័យ Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html) **ការស្វែងរៀន Python** * [រៀន Python ជារបៀបរីករាយជាមួយ Turtle Graphics និង Fractals](https://github.com/shwars/pycourse) * [ចាប់ផ្តើមជំហានដំបូងរបស់អ្នកជាមួយ Python](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) ផ្លូវសិក្សាលើ [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum) ## ការប្រឡង [អនុវត្តការសិក្សាទិន្នន័យលម្អិតសម្រាប់បញ្ហានៅលើ](assignment.md) ## ការដាក់ទស្សនៈ មេរៀននេះត្រូវបានបង្កើតជាមួយ ♥️ ដោយ [Dmitry Soshnikov](http://soshnikov.com) --- **ការបដិសេធ**: ឯកសារនេះត្រូវបានបម្លែងភាសា ដោយប្រើសេវាបម្លែងភាសា AI [Co-op Translator](https://github.com/Azure/co-op-translator)។ ទោះយើងខ្ញុំមានក្តីប្រាថ្នាឱ្យបានច្បាស់លាស់ តែសូមយល់ដឹងថាការបម្លែងដោយស្វ័យប្រវត្តិក៏អាចមានកំហុសឬភាពមិនត្រឹមត្រូវ។ ឯកសារដើមជាភាសាទីតាំងគួរត្រូវបានគេប្រើជាប្រភពច្បាស់លាស់។ សម្រាប់ព័ត៌មានសំខាន់ៗ សូមណែនាំឱ្យប្រើប្រាស់ការប្រែដោយមនុស្សជំនាញ។ យើងខ្ញុំមិនទទួលខុសត្រូវចំពោះការយល់ច្រឡំ ឬការបកស្រាយខុសបន្ទាប់ពីការប្រើប្រាស់ការបម្លែងនេះនោះទេ។