keyboard_tabSkip to content
listPython Series

Data Manipulation

สารบัญ

Data Manipulation คืออะไร

Data Manipulation คือ กระบวนการที่ใช้ในการปรับเปลี่ยน แก้ไข หรือจัดการข้อมูลเพื่อให้อยู่ในรูปแบบที่เหมาะสมสำหรับการวิเคราะห์หรือใช้งานในลักษณะต่าง ๆ เช่น การจัดเรียงข้อมูล การกรองข้อมูล การเพิ่มค่าคำนวณ การรวมข้อมูล หรือการเปลี่ยนรูปแบบข้อมูล โดยใช้เครื่องมือหรือภาษาการเขียนโปรแกรม เช่น Python, SQL, หรือ Excel เป็นต้น

ตัวอย่างการทำ Data Manipulation ได้แก่

  • การกรองข้อมูล (Filtering) เพื่อเลือกเฉพาะข้อมูลที่ตรงตามเงื่อนไข
  • การจัดเรียงข้อมูล (Sorting) ตามลำดับที่ต้องการ
  • การรวมข้อมูล (Grouping) จากหลายแหล่งหรือหลายตารางให้เป็นชุดข้อมูลเดียว
  • การสร้างคอลัมน์ใหม่ (Aggregating) จากคอลัมน์ที่มีอยู่แล้ว เช่น การคำนวณค่าเฉลี่ยหรือค่าผลรวม

Data Manipulation ถือเป็นขั้นตอนสำคัญที่ช่วยเตรียมข้อมูลให้อยู่ในรูปแบบที่เหมาะสมสำหรับการวิเคราะห์ ทำรายงาน หรือใช้งานในโครงการต่าง ๆ

ในหมวดนี้เราจะมาเจาะลึกแต่ละรูปแบบกัน และจะมาดูกันเพิ่มเติมว่า python สามารถจัดการ Data แต่ละรูปแบบอย่างไรได้บ้าง

Filtering

Filtering คือกระบวนการเลือกข้อมูลเฉพาะบางส่วนจากชุดข้อมูล (DataFrame) ที่ตรงตามเงื่อนไขที่กำหนดไว้ เช่น เลือกเฉพาะแถวที่มีค่าตรงตามเงื่อนไขหนึ่ง ๆ เช่น ค่าที่สูงกว่า ต่ำกว่า หรือเท่ากับค่าที่กำหนด

ใน Python การจัดการ DataFrame และการกรองข้อมูลมักใช้กับ pandas library ตัวอย่างเช่น การกรองข้อมูลเฉพาะแถวที่ตรงตามเงื่อนไขใน DataFrame นั้นสามารถทำได้โดยใช้ loc[] หรือการประยุกต์เงื่อนไข

ตัวอย่างการกรองข้อมูลใน DataFrame ด้วย Pandas สมมติว่าเรามี DataFrame ที่มีข้อมูลเกี่ยวกับพนักงานในบริษัท ดังนี้

python
import pandas as pd

# สร้าง DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
    'Age': [24, 27, 22, 32, 29],
    'Department': ['HR', 'IT', 'Finance', 'IT', 'Marketing'],
    'Salary': [50000, 60000, 55000, 70000, 65000]
}

df = pd.DataFrame(data)
print(df)

ผลลัพธ์

      Name  Age Department  Salary
0    Alice   24        HR   50000
1      Bob   27        IT   60000
2  Charlie   22   Finance   55000
3    David   32        IT   70000
4      Eva   29  Marketing  65000

ตัวอย่างการกรองข้อมูล

ตัวอย่าง 1: กรองเฉพาะพนักงานที่อยู่ในแผนก IT

python
# สามารถใส่ condition กับ column โดยตรงได้เลย
it_department = df[df['Department'] == 'IT']
print(it_department)

ผลลัพธ์

    Name  Age Department  Salary
1    Bob   27        IT   60000
3  David   32        IT   70000

ตัวอย่าง 2: กรองพนักงานที่มีเงินเดือนสูงกว่า 60,000 บาท

python
high_salary = df[df['Salary'] > 60000]
print(high_salary)

ผลลัพธ์

    Name  Age Department  Salary
3  David   32        IT   70000
4    Eva   29  Marketing  65000

ตัวอย่าง 3: กรองพนักงานที่อายุน้อยกว่า 30 ปีและอยู่ในแผนก IT

python
young_it_department = df[(df['Age'] < 30) & (df['Department'] == 'IT')]
print(young_it_department)

ผลลัพธ์

   Name  Age Department  Salary
1   Bob   27        IT   60000

อย่างที่เห็น จะเห็นว่า การกรองข้อมูลใน Python นั้นสามารถทำได้ตรงไปตรงมา ผ่านการใช้ condition ของ Python ได้เลย โดยเฉพาะกับ Pandas DataFrame นั้นไม่ซับซ้อน สามารถใช้เงื่อนไขที่เป็นพื้นฐานใน Python ได้โดยตรง

เช่นเดียวกับการตั้งเงื่อนไขธรรมดา (condition) เช่น >, <, ==, !=, & และ | สำหรับการ "และ" หรือ "หรือ" การกรองข้อมูลใน Python กับ DataFrame ก็ใช้หลักการเดียวกัน ทำให้สามารถอ่านและเขียน code ได้ง่าย

Sorting

Sorting คือกระบวนการเรียงลำดับข้อมูลใน DataFrame ตามค่าของคอลัมน์หนึ่งหรือหลายคอลัมน์ โดยข้อมูลจะถูกจัดลำดับจากน้อยไปหามาก (ascending) หรือจากมากไปหาน้อย (descending) ตามต้องการ การเรียงลำดับข้อมูลช่วยให้ง่ายต่อการดูข้อมูลที่มีความสำคัญในลำดับที่ต้องการ เช่น การจัดอันดับตามคะแนน การเรียงลำดับตามอายุ หรือการเรียงตามเงินเดือน เป็นต้น

ใน Python การจัดการ DataFrame และการเรียงลำดับข้อมูลทำได้ง่ายด้วย pandas library โดยใช้คำสั่ง sort_values() ได้เลย

ตัวอย่างการเรียงลำดับข้อมูลใน DataFrame ด้วย Pandas สมมติว่าเรามี DataFrame ที่มีข้อมูลเกี่ยวกับพนักงานในบริษัท ดังนี้

python
import pandas as pd

# สร้าง DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
    'Age': [24, 27, 22, 32, 29],
    'Department': ['HR', 'IT', 'Finance', 'IT', 'Marketing'],
    'Salary': [50000, 60000, 55000, 70000, 65000]
}

df = pd.DataFrame(data)
print(df)

ผลลัพธ์

      Name  Age Department  Salary
0    Alice   24        HR   50000
1      Bob   27        IT   60000
2  Charlie   22   Finance   55000
3    David   32        IT   70000
4      Eva   29  Marketing  65000

ตัวอย่างการเรียงลำดับข้อมูล

ตัวอย่าง 1: การเรียงลำดับข้อมูลตามอายุจากน้อยไปหามาก

python
# by จะเป็นตัวกำหนด column ที่ต้องการจะเรียง
sorted_by_age = df.sort_values(by='Age')
print(sorted_by_age)

ผลลัพธ์

      Name  Age Department  Salary
2  Charlie   22   Finance   55000
0    Alice   24        HR   50000
1      Bob   27        IT   60000
4      Eva   29  Marketing  65000
3    David   32        IT   70000

ตัวอย่าง 2: การเรียงลำดับข้อมูลตามเงินเดือนจากมากไปหาน้อย

python
sorted_by_salary_desc = df.sort_values(by='Salary', ascending=False) # ascending จะเป็นตัวกำหนดการเรียงได้ว่า น้อยไปหามาก หรือ มากไปหาน้อย
print(sorted_by_salary_desc)

ผลลัพธ์

      Name  Age Department  Salary
3    David   32        IT   70000
4      Eva   29  Marketing  65000
1      Bob   27        IT   60000
2  Charlie   22   Finance   55000
0    Alice   24        HR   50000

ตัวอย่าง 3: การเรียงลำดับตามแผนกก่อน แล้วเรียงตามอายุในแต่ละแผนก

python
sorted_by_dept_age = df.sort_values(by=['Department', 'Age']) # เป็นการเรียงตาม 2 column โดยอ้างอิงตาม column แรกสุดของ list ก่อน
print(sorted_by_dept_age)

ผลลัพธ์

      Name  Age Department  Salary
2  Charlie   22   Finance   55000
0    Alice   24        HR   50000
1      Bob   27        IT   60000
3    David   32        IT   70000
4      Eva   29  Marketing  65000

การเรียงข้อมูล (Sorting) มีเป้าหมายและจุดประสงค์ที่สำคัญหลายประการ ซึ่งช่วยให้การทำงานและการวิเคราะห์ข้อมูลเป็นไปอย่างมีประสิทธิภาพมากขึ้น จุดประสงค์หลักของการเรียงข้อมูลมีดังนี้

  1. เพื่อความสะดวกในการอ่านและทำความเข้าใจ การเรียงข้อมูลช่วยให้ข้อมูลดูมีระเบียบและเข้าใจง่ายขึ้น โดยเฉพาะเมื่อมีข้อมูลจำนวนมาก การจัดลำดับตามคอลัมน์ที่สำคัญทำให้สามารถดูข้อมูลที่ต้องการได้ง่ายขึ้น เช่น เรียงตามอายุจากน้อยไปหามาก หรือเรียงตามยอดขายจากมากไปน้อย เป็นต้น
  2. การค้นหาข้อมูลที่มีค่าโดดเด่น การเรียงข้อมูลทำให้ค้นหาข้อมูลที่มีค่าตามลำดับได้อย่างรวดเร็ว เช่น การหาพนักงานที่มีเงินเดือนสูงสุดหรือต่ำสุด การหาลูกค้าที่ทำยอดซื้อสูงสุด หรือการหานักเรียนที่มีคะแนนต่ำสุดและสูงสุด
  3. การวิเคราะห์และทำการเปรียบเทียบข้อมูล การเรียงข้อมูลช่วยให้สามารถเปรียบเทียบข้อมูลในลำดับที่สัมพันธ์กันได้ เช่น การเปรียบเทียบยอดขายของแต่ละแผนก หรือเปรียบเทียบการเติบโตในแต่ละเดือน การเรียงข้อมูลทำให้เห็นแนวโน้มหรือการเปลี่ยนแปลงของข้อมูลในแต่ละช่วงได้ชัดเจน
  4. การเตรียมข้อมูลเพื่อการวิเคราะห์ทางสถิติ การเรียงลำดับข้อมูลช่วยในการเตรียมข้อมูลสำหรับการวิเคราะห์ เช่น การหาค่ามัธยฐาน (median) หรือตำแหน่งในลำดับ การเรียงข้อมูลเป็นขั้นตอนที่สำคัญในการคำนวณและทำการวิเคราะห์เชิงสถิติ
  5. การช่วยค้นหาข้อมูลที่ผิดปกติ (Outliers) การเรียงข้อมูลสามารถช่วยให้เห็นข้อมูลที่มีค่าโดดออกมาจากกลุ่ม ทำให้ง่ายต่อการสังเกตและตรวจสอบข้อมูลที่อาจเป็นข้อผิดพลาด หรือการหาค่าที่ผิดปกติซึ่งอาจจำเป็นต้องทำการตรวจสอบเพิ่มเติม
  6. การจัดลำดับเพื่อการตัดสินใจ (Ranking) สำหรับการตัดสินใจที่เกี่ยวข้องกับลำดับความสำคัญ เช่น การคัดเลือกพนักงานที่มีผลงานยอดเยี่ยม การจัดลำดับลูกค้าที่มีคุณค่ามากที่สุด หรือการจัดอันดับผลิตภัณฑ์ที่ขายดีที่สุดในรอบปี เป็นต้น การเรียงข้อมูลช่วยในการสร้างลำดับที่ใช้ในการตัดสินใจ

Grouping

Grouping คือกระบวนการจัดกลุ่มข้อมูลใน DataFrame ตามค่าที่มีลักษณะร่วมกันในคอลัมน์ที่กำหนด โดยมักใช้เมื่อเราต้องการสรุปข้อมูล เช่น การหาค่าเฉลี่ย ผลรวม หรือจำนวนข้อมูลในแต่ละกลุ่ม การจัดกลุ่มข้อมูลช่วยให้เราสามารถวิเคราะห์และเปรียบเทียบข้อมูลในแต่ละกลุ่มได้อย่างมีประสิทธิภาพ

ใน Python เราสามารถใช้ groupby() จาก pandas library เพื่อจัดกลุ่มข้อมูลและคำนวณค่าที่ต้องการได้

ตัวอย่างการจัดกลุ่มข้อมูลใน DataFrame ด้วย Pandas สมมติว่าเรามี DataFrame ที่มีข้อมูลเกี่ยวกับพนักงานในบริษัท ดังนี้:

python
import pandas as pd

# สร้าง DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva', 'Frank'],
    'Department': ['HR', 'IT', 'Finance', 'IT', 'Marketing', 'Finance'],
    'Salary': [50000, 60000, 55000, 70000, 65000, 52000]
}

df = pd.DataFrame(data)
print(df)

ผลลัพธ์

      Name Department  Salary
0    Alice        HR   50000
1      Bob        IT   60000
2  Charlie   Finance   55000
3    David        IT   70000
4      Eva  Marketing  65000
5    Frank   Finance   52000

ตัวอย่าง การจัดกลุ่มข้อมูล

ตัวอย่าง 1: การหาผลรวมเงินเดือนของพนักงานในแต่ละแผนก

ในตัวอย่างนี้ เราใช้ groupby() เพื่อจัดกลุ่มข้อมูลตามคอลัมน์ Department และใช้ function sum() เพื่อคำนวณผลรวมของเงินเดือน (Salary) ในแต่ละแผนก

python
salary_sum_by_dept = df.groupby('Department')['Salary'].sum()
print(salary_sum_by_dept)

ผลลัพธ์

Department
Finance      107000
HR            50000
IT           130000
Marketing     65000
Name: Salary, dtype: int64

ตัวอย่าง 2: การหาค่าเฉลี่ยเงินเดือนของพนักงานในแต่ละแผนก ในตัวอย่างนี้ เราใช้ mean() เพื่อหาค่าเฉลี่ยของเงินเดือนในแต่ละแผนก

python
salary_mean_by_dept = df.groupby('Department')['Salary'].mean()
print(salary_mean_by_dept)

ผลลัพธ์

Department
Finance      53500.0
HR           50000.0
IT           65000.0
Marketing    65000.0
Name: Salary, dtype: float64

ตัวอย่าง 3: การนับจำนวนพนักงานในแต่ละแผนก โดยใช้ functioncount()

python
employee_count_by_dept = df.groupby('Department')['Name'].count()
print(employee_count_by_dept)

ผลลัพธ์

Department
Finance      2
HR           1
IT           2
Marketing    1
Name: Name, dtype: int64

ตัวอย่างที่ 4: การใช้งาน Grouping หลายคอลัมน์พร้อมกัน

หากเราต้องการจัดกลุ่มโดยใช้หลายคอลัมน์ สามารถทำได้เช่นกัน เช่นตัวอย่าง Dataframe นี้

python
# ตัวอย่างการจัดกลุ่มหลายคอลัมน์
data2 = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva', 'Frank'],
    'Department': ['HR', 'IT', 'Finance', 'IT', 'Marketing', 'Finance'],
    'Location': ['Bangkok', 'Bangkok', 'Chiang Mai', 'Chiang Mai', 'Bangkok', 'Bangkok'],
    'Salary': [50000, 60000, 55000, 70000, 65000, 52000]
}

df2 = pd.DataFrame(data2)

# จัดกลุ่มข้อมูลตามแผนกและสถานที่
salary_sum_by_dept_location = df2.groupby(['Department', 'Location'])['Salary'].sum()
print(salary_sum_by_dept_location)

ผลลัพธ์

Department  Location   
Finance     Bangkok        52000
            Chiang Mai     55000
HR          Bangkok        50000
IT          Bangkok        60000
            Chiang Mai     70000
Marketing   Bangkok        65000
Name: Salary, dtype: int64

อย่างที่เราเห็น การจัดกลุ่มข้อมูลช่วยให้เราสามารถวิเคราะห์และสรุปข้อมูลตามเงื่อนไขที่สนใจได้ง่าย ๆ โดยการจัดกลุ่มใน Pandas ใช้ groupby() ซึ่งสามารถกำหนดคอลัมน์ที่ต้องการจัดกลุ่มและ function ที่ต้องการใช้ในการคำนวณ เช่น sum(), mean(), และ count() ในการจัดกลุ่มได้

Aggregating data

Aggregating data คือกระบวนการสรุปและรวมข้อมูลจากหลาย ๆ แถวเข้าด้วยกันโดยใช้ function ต่าง ๆ เช่น การหาผลรวม (sum) ค่าเฉลี่ย (mean) ค่าสูงสุด (max) ค่าต่ำสุด (min) หรือการนับจำนวน (count) การทำ Aggregation ช่วยให้เราเข้าใจข้อมูลได้ในภาพรวม เหมาะสำหรับการวิเคราะห์ข้อมูลตามกลุ่มหรือประเภท

ใน Python เราสามารถใช้ pandas library ในการ Aggregation ข้อมูลได้ โดยเฉพาะกับข้อมูลที่จัดกลุ่มไว้แล้ว (groupby)

ตัวอย่างการ Aggregation ข้อมูลใน DataFrame ด้วย Pandas สมมติว่าเรามี DataFrame ที่มีข้อมูลเกี่ยวกับพนักงานในบริษัท ดังนี้

python
import pandas as pd

# สร้าง DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva', 'Frank'],
    'Department': ['HR', 'IT', 'Finance', 'IT', 'Marketing', 'Finance'],
    'Salary': [50000, 60000, 55000, 70000, 65000, 52000],
    'Experience': [2, 5, 3, 4, 6, 2]
}

df = pd.DataFrame(data)
print(df)

ผลลัพธ์

      Name Department  Salary  Experience
0    Alice        HR   50000           2
1      Bob        IT   60000           5
2  Charlie   Finance   55000           3
3    David        IT   70000           4
4      Eva  Marketing  65000           6
5    Frank   Finance   52000           2

ตัวอย่างการทำ Aggregating

ตัวอย่าง 1: การหาค่าสูงสุดและค่าต่ำสุดของประสบการณ์ในแต่ละแผนก

.agg (ย่อมาจาก aggregate) คือ function ใน pandas ที่ใช้สำหรับการคำนวณและสรุปค่าหลายประเภทพร้อมกันใน DataFrame หรือ Series โดยเราสามารถใช้ .agg ร่วมกับ function ทางคณิตศาสตร์ต่าง ๆ เช่น sum, mean, max, min, count และอื่น ๆ ได้ ซึ่งทำให้สามารถสรุปข้อมูลหลายค่าได้ในการเรียก .agg() เพียงครั้งเดียวได้ เช่น เคสนี้

python
# สรุปค่า max, min ไปพร้อมๆกัน
experience_agg_by_dept = df.groupby('Department')['Experience'].agg(['max', 'min'])
print(experience_agg_by_dept)

ผลลัพธ์

            max  min
Department           
Finance        3    2
HR             2    2
IT             5    4
Marketing      6    6

ตัวอย่าง 2: การใช้ Aggregation หลายฟังก์ชันพร้อมกัน

เราสามารถใช้หลายฟังก์ชันในเวลาเดียวกัน เช่น การหาผลรวม ค่าเฉลี่ย ค่าสูงสุด และค่าต่ำสุดในแต่ละแผนก

python
salary_agg_by_dept = df.groupby('Department')['Salary'].agg(['sum', 'mean', 'max', 'min'])
print(salary_agg_by_dept)

ผลลัพธ์

             sum     mean    max    min
Department                             
Finance     107000  53500.0  55000  52000
HR           50000  50000.0  50000  50000
IT          130000  65000.0  70000  60000
Marketing    65000  65000.0  65000  65000

การ Aggregating ข้อมูลใน Pandas ทำให้เราสามารถคำนวณและสรุปผลข้อมูลในกลุ่มต่าง ๆ ได้ สามารถนำไปใช้ในการวิเคราะห์เชิงสถิติ เช่น ผลรวม ค่าเฉลี่ย และการประมวลผลหลายคอลัมน์พร้อมกันได้เช่นกัน