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 ที่มีข้อมูลเกี่ยวกับพนักงานในบริษัท ดังนี้
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
# สามารถใส่ 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 บาท
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
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 ที่มีข้อมูลเกี่ยวกับพนักงานในบริษัท ดังนี้
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: การเรียงลำดับข้อมูลตามอายุจากน้อยไปหามาก
# 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: การเรียงลำดับข้อมูลตามเงินเดือนจากมากไปหาน้อย
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: การเรียงลำดับตามแผนกก่อน แล้วเรียงตามอายุในแต่ละแผนก
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) มีเป้าหมายและจุดประสงค์ที่สำคัญหลายประการ ซึ่งช่วยให้การทำงานและการวิเคราะห์ข้อมูลเป็นไปอย่างมีประสิทธิภาพมากขึ้น จุดประสงค์หลักของการเรียงข้อมูลมีดังนี้
- เพื่อความสะดวกในการอ่านและทำความเข้าใจ การเรียงข้อมูลช่วยให้ข้อมูลดูมีระเบียบและเข้าใจง่ายขึ ้น โดยเฉพาะเมื่อมีข้อมูลจำนวนมาก การจัดลำดับตามคอลัมน์ที่สำคัญทำให้สามารถดูข้อมูลที่ต้องการได้ง่ายขึ้น เช่น เรียงตามอายุจากน้อยไปหามาก หรือเรียงตามยอดขายจากมากไปน้อย เป็นต้น
- การค้นหาข้อมูลที่มีค่าโดดเด่น การเรียงข้อมูลทำให้ค้นหาข้อมูลที่มีค่าตามลำดับได้อย่างรวดเร็ว เช่น การหาพนักงานที่มีเงินเดือนสูงสุดหรือต่ำสุด การหาลูกค้าที่ทำยอดซื้อสูงสุด หรือการหานักเรียนที่มีคะแนนต่ำสุดและสูงสุด
- การวิเคราะห์และทำการเปรียบเทียบข้อมูล การเรียงข้อมูลช่วยให้สามารถเปรียบเทียบข้อมูลในลำดับที่สัมพันธ์กันได้ เช่น การเปรียบเทียบยอดขายของแต่ละแผนก หรือเปรียบเทียบการเติบโตในแต่ละเดือน การเรียงข้อมูลทำให้เห็นแนวโน้มหรือการเปลี่ยนแปลงของข้อมูลในแต่ละช่วงได้ชัดเจน
- การเตรียมข้อมูลเพื่อการวิ เคราะห์ทางสถิติ การเรียงลำดับข้อมูลช่วยในการเตรียมข้อมูลสำหรับการวิเคราะห์ เช่น การหาค่ามัธยฐาน (median) หรือตำแหน่งในลำดับ การเรียงข้อมูลเป็นขั้นตอนที่สำคัญในการคำนวณและทำการวิเคราะห์เชิงสถิติ
- การช่วยค้นหาข้อมูลที่ผิดปกติ (Outliers) การเรียงข้อมูลสามารถช่วยให้เห็นข้อมูลที่มีค่าโดดออกมาจากกลุ่ม ทำให้ง่ายต่อการสังเกตและตรวจสอบข้อมูลที่อาจเป็นข้อผิดพลาด หรือการหาค่าที่ผิดปกติซึ่งอาจจำเป็นต้องทำการตรวจสอบเพิ่มเติม
- การจัดลำดับเพื่อการตัดสินใจ (Ranking) สำหรับการตัดสินใจที่เกี่ยวข้องกับลำดับความสำคัญ เช่น การคัดเลือกพนักงานที่มีผลงานยอดเยี่ยม การจัดลำดับลูกค้าที่มีคุณค่ามากที่สุด หรือการจัดอันดับผลิตภัณฑ์ที่ขายดีที่สุดในรอบปี เป็นต้น การเรียงข้อมูลช่วยในการสร้างลำดับที่ใช้ในการตัดสินใจ
Grouping
Grouping คือกระบวนการจัดกลุ่มข้อมูลใน DataFrame ตามค่าที่มีลักษณะร่วมกันในคอลัมน์ที่กำหนด โดยมักใช้เมื่อเราต้องการสรุปข้อมูล เช่น การหาค่าเฉลี่ย ผลรวม หรือจำนวนข้อมูลในแต่ละกลุ่ม การจัดกลุ่มข้อมูลช่วยให้เราสามารถวิเคราะห์และเปรียบเทียบข้อมูลในแต่ละกลุ่มได้อย่างมีประสิทธิภาพ
ใน Python เราสามารถใช้ groupby()
จาก pandas
library เพื่อจัดกลุ่มข้อมูลและคำนวณค่าที่ต้องการได้
ตัวอย่างการจัดกลุ่มข้อมูลใน DataFrame ด้วย Pandas สมมติว่าเรามี DataFrame ที่มีข้อมูลเกี่ยวกับพนักงานในบริษัท ดังนี้:
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
) ในแต่ละแผนก
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()
เพื่อหาค่าเฉลี่ยของเงินเดือนในแต่ละแผนก
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()
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 นี้
# ตัวอย่างการจัดกลุ่มหลายคอลัมน์
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 ที่มีข้อมูลเกี่ยวกับพนักงานในบริษัท ดังนี้
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()
เพียงครั้งเดียวได้ เช่น เคสนี้
# สรุปค่า 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 หลายฟังก์ชันพร้อมกัน
เราสามารถใช้หลายฟังก์ชันในเวลาเดียวกัน เช่น การหาผลรวม ค่าเฉลี่ย ค่าสูงสุด และค่าต่ำสุดในแต่ละแผนก
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 ทำให้เราสามารถคำนวณและสรุปผลข้อมูลในกลุ่มต่าง ๆ ได้ สามารถนำไปใช้ในการวิเคราะห์เชิงสถิติ เช่น ผลรวม ค่าเฉลี่ย และการประมวลผลหลายคอลัมน์พร้อมกันได้เช่นกัน