🐍 Python for Data Science
เปลี่ยนข้อมูลให้เป็นความรู้ที่มีค่า
เรียนรู้การใช้ Python ในการประมวลผลและวิเคราะห์ข้อมูล พร้อมใบประกาศนียบัตร
🎯 เรียนจบแล้วได้อะไร?
วิเคราะห์ข้อมูลเชิงลึก
สร้างโมเดล AI
ทำนายแนวโน้ม
รับใบประกาศนียบัตร
📊 รู้จัก Data Science
Data Science คืออะไร?
วิทยาศาสตร์ข้อมูลที่ใช้วิธีการทางวิทยาศาสตร์ กระบวนการ อัลกอริทึม และระบบต่างๆ เพื่อสกัดความรู้และข้อมูลเชิงลึกจากข้อมูลที่มีโครงสร้างและไม่มีโครงสร้าง เปรียบเสมือนการเป็นนักสืบในโลกดิจิทัล ที่รวบรวมหลักฐาน (ข้อมูล) มาวิเคราะห์เพื่อค้นหารูปแบบและความเชื่อมโยงที่ซ่อนอยู่ เป้าหมายสูงสุดคือการตอบคำถามที่ซับซ้อน คาดการณ์อนาคต และนำไปสู่การตัดสินใจทางธุรกิจที่ขับเคลื่อนด้วยข้อมูลอย่างแท้จริง
ความสำคัญของ Data Science
ช่วยในการตัดสินใจทางธุรกิจ พยากรณ์แนวโน้ม ค้นหาแพทเทิร์น และสร้างมูลค่าจากข้อมูลที่มีอยู่ เพื่อเพิ่มประสิทธิภาพและความสามารถในการแข่งขัน โดยเปลี่ยนจากการคาดเดามาเป็นการตัดสินใจบนข้อเท็จจริง เช่น การวิเคราะห์ข้อมูลเพื่อพยากรณ์ยอดขายในไตรมาสถัดไป, การค้นหากลุ่มลูกค้าที่ตอบสนองต่อแคมเปญการตลาดได้ดีที่สุด หรือการปรับปรุงกระบวนการผลิตเพื่อลดของเสีย ทั้งหมดนี้ล้วนเป็นการสร้างความได้เปรียบที่วัดผลได้จริง
กระบวนการ Data Science
1. เก็บรวบรวมข้อมูล
2. ทำความสะอาดข้อมูล
3. สำรวจและวิเคราะห์
4. สร้างโมเดล
5. ประเมินผล
6. นำไปใช้งานจริง
📈 ความคืบหน้าการเรียน
0% เสร็จสิ้น
📁 การอ่านไฟล์ข้อมูล
การอ่านข้อมูลถือเป็นประตูบานแรกสู่การทำ Data Science เพราะเป็นการนำข้อมูลดิบจากแหล่งต่างๆ เข้ามาสู่สภาพแวดล้อมที่เราจะใช้วิเคราะห์ ไม่ว่าข้อมูลนั้นจะอยู่ในรูปแบบตารางอย่าง CSV, Excel, รูปแบบเว็บอย่าง JSON หรือระบบฐานข้อมูลขนาดใหญ่ การเรียนรู้วิธีดึงข้อมูลเหล่านี้จึงเป็นทักษะพื้นฐานที่จำเป็น เพื่อเตรียมข้อมูลให้พร้อมสำหรับขั้นตอนการสำรวจและสร้างโมเดลต่อไป
📊 อ่านไฟล์ CSV
import pandas as pd
# อ่านไฟล์ CSV
df = pd.read_csv('data.csv')
print(df.head())
print(f"ขนาดข้อมูล: {df.shape}")
📈 อ่านไฟล์ Excel
import pandas as pd
# อ่านไฟล์ Excel
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
print(df.info())
print(df.describe())
📄 อ่านไฟล์ JSON
import pandas as pd
# อ่านไฟล์ JSON
# orient='records' เหมาะสำหรับ JSON ที่อยู่ในรูปแบบ list of dictionaries
df = pd.read_json('data.json', orient='records')
print(df.head())
🧪 แบบฝึกหัด - การอ่านไฟล์
1. คำสั่งใดใช้สำหรับอ่านไฟล์ CSV ใน pandas?
2. คำสั่ง df.head() ใช้เพื่ออะไร?
3. df.shape จะแสดงผลลัพธ์เป็นอะไร?
🧹 การ Cleansing ข้อมูล
การทำความสะอาดข้อมูลเปรียบเสมือนการเตรียมวัตถุดิบก่อนทำอาหาร ซึ่งเป็นขั้นตอนที่สำคัญอย่างยิ่ง เพราะคุณภาพของข้อมูลส่งผลโดยตรงต่อความแม่นยำของผลลัพธ์ ตามหลักการ 'Garbage In, Garbage Out' หากเราใช้ข้อมูลที่ไม่มีคุณภาพ โมเดลหรือข้อมูลเชิงลึกที่ได้ก็จะผิดเพี้ยนและไม่น่าเชื่อถือ ดังนั้น เราจึงต้องเรียนรู้วิธีจัดการกับปัญหาทั่วไป เช่น ค่าว่าง (Missing Values) ที่ทำให้การคำนวณคลาดเคลื่อน, ข้อมูลซ้ำ (Duplicates) ที่ทำให้ผลลัพธ์เอนเอียง, และข้อมูลผิดปกติ (Outliers) ที่บิดเบือนภาพรวมทั้งหมด
🕳️ การจัดการค่าว่าง
1. การลบข้อมูล (Deletion)
เป็นวิธีที่ง่ายที่สุด คือการใช้ .dropna()
เพื่อลบแถวหรือคอลัมน์ที่มีค่าว่างทิ้งไป เหมาะสำหรับกรณีที่ข้อมูลมีค่าว่างเป็นส่วนน้อย เพื่อไม่ให้เสียข้อมูลสำคัญส่วนใหญ่ออกไป
2. การเติมค่าทดแทน (Imputation)
เป็นการใช้ .fillna()
เพื่อเติมค่าลงในช่องว่าง โดยสามารถใช้ค่าทางสถิติ เช่น ค่าเฉลี่ย (mean), มัธยฐาน (median), ฐานนิยม (mode) หรือเติมด้วยค่าคงที่ก็ได้
# ตรวจสอบค่าว่าง
print(df.isnull().sum())
# ลบแถวที่มีค่าว่าง
df_clean = df.dropna()
# เติมค่าว่างด้วยค่าเฉลี่ย
df['column'] = df['column'].fillna(df['column'].mean())
🔄 การจัดการข้อมูลซ้ำ
ข้อมูลที่ซ้ำซ้อนกัน (Duplicate Data) อาจทำให้การวิเคราะห์ของเราเอนเอียงได้ เช่น หากมีข้อมูลลูกค้าคนเดียวกันซ้ำกัน 2 ครั้ง เมื่อนับจำนวนลูกค้าทั้งหมดก็จะนับเกินไป 1 คน
การลบข้อมูลที่ซ้ำกันทิ้งไปด้วย .drop_duplicates()
จึงเป็นสิ่งสำคัญเพื่อให้ได้ผลลัพธ์ทางสถิติที่ถูกต้องและสร้างโมเดล Machine Learning ที่มีประสิทธิภาพและน่าเชื่อถือ
# ตรวจสอบข้อมูลซ้ำ
print(df.duplicated().sum())
# ลบข้อมูลซ้ำ
df_unique = df.drop_duplicates()
# ตรวจสอบข้อมูลซ้ำในคอลัมน์เฉพาะ
df.drop_duplicates(subset=['column1'])
📊 การหา Outliers
Outlier คือ ข้อมูลที่มีค่าสุดโต่ง หรือแตกต่างจากข้อมูลส่วนใหญ่อย่างชัดเจน เช่น ข้อมูลอายุของนักเรียนในห้องส่วนใหญ่คือ 15-17 ปี แต่อาจมีข้อมูลอายุ 45 ปีหลุดเข้ามา
ข้อมูลเหล่านี้อาจเกิดจากความผิดพลาดในการเก็บข้อมูล หรือเป็นข้อมูลพิเศษจริงๆ ก็ได้ การจัดการ Outliers เป็นสิ่งสำคัญ เพราะมันสามารถบิดเบือนผลการวิเคราะห์ทางสถิติและลดความแม่นยำของโมเดล Machine Learning ได้
# หา Outliers ด้วย IQR
Q1 = df['column'].quantile(0.25)
Q3 = df['column'].quantile(0.75)
IQR = Q3 - Q1
# กำหนดขอบเขต
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
# กรองข้อมูลที่ผิดปกติ
df_filtered = df[(df['column'] >= lower) & (df['column'] <= upper)]
# ลบข้อมูลที่ผิดปกติ
df_no_outliers = df.drop(df_filtered)
print('ขนาดข้อมูลเดิม:', df.shape)
print('ขนาดข้อมูลหลังกำจัด Outliers:', df_no_outliers.shape)
🧪 แบบฝึกหัด - การ Cleansing
1. คำสั่งใดใช้สำหรับตรวจสอบค่าว่างในข้อมูล?
2. IQR ย่อมาจากอะไร?
3. คำสั่งใดใช้สำหรับลบข้อมูลซ้ำ?
📊 การประมวลผลด้วยสถิติพื้นฐาน
สถิติพื้นฐานช่วยให้เราเข้าใจข้อมูลได้ดีขึ้น เราจะเรียนรู้การคำนวณค่าเฉลี่ย มัธยฐาน ส่วนเบี่ยงเบนมาตรฐาน และการสร้างกราฟเพื่อแสดงข้อมูล
📈 สถิติเชิงพรรณนา
# สถิติพื้นฐาน
print("ค่าเฉลี่ย:", df['column'].mean())
print("มัธยฐาน:", df['column'].median())
print("ฐานนิยม:", df['column'].mode()[0])
print("ส่วนเบี่ยงเบนมาตรฐาน:", df['column'].std())
# สรุปสถิติทั้งหมด
print(df.describe())
📊 การสร้างกราฟ
import matplotlib.pyplot as plt
import seaborn as sns
# Histogram
plt.figure(figsize=(10, 6))
plt.hist(df['column'], bins=20)
plt.title('การกระจายของข้อมูล')
plt.show()
# Box plot
sns.boxplot(data=df, x='column')
plt.show()
🔗 การวิเคราะห์ความสัมพันธ์
# Correlation Matrix
correlation_matrix = df.corr()
print(correlation_matrix)
# Heatmap
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')
plt.title('Correlation Heatmap')
plt.show()
# Scatter plot
plt.scatter(df['x'], df['y'])
plt.xlabel('X Variable')
plt.ylabel('Y Variable')
plt.show()
🧪 แบบฝึกหัด - สถิติพื้นฐาน
1. คำสั่งใดใช้สำหรับคำนวณค่าเฉลี่ย?
2. Correlation coefficient มีค่าอยู่ในช่วงใด?
3. Box plot ใช้สำหรับแสดงอะไร?
🔮 การทำนายผล
Machine Learning คือหัวใจสำคัญของการสร้างแบบจำลองเพื่อทำนายอนาคต โดยเป็นการสอนให้คอมพิวเตอร์เรียนรู้รูปแบบจากข้อมูลในอดีต เราจะเริ่มต้นเรียนรู้จากโมเดลพื้นฐานอย่าง Linear Regression สำหรับการทำนายค่าตัวเลข, Decision Tree สำหรับการจำแนกประเภทข้อมูล และสุดท้ายคือการวัดผล (Evaluation) เพื่อให้แน่ใจว่าโมเดลที่เราสร้างขึ้นนั้นแม่นยำและน่าเชื่อถือ
📈 Linear Regression
Linear Regression หรือ "การถดถอยเชิงเส้น" เป็นโมเดล Machine Learning พื้นฐานที่สุดสำหรับการทำนายค่าตัวเลขต่อเนื่อง เช่น การทำนายราคาบ้านจากขนาดพื้นที่ หรือการทำนายยอดขายจากงบโฆษณา
หลักการของมันคือการพยายามหา "เส้นตรง" ที่ลากผ่านกลุ่มข้อมูลแล้วอธิบายความสัมพันธ์ของข้อมูลได้ดีที่สุด (Best-Fit Line) เพื่อใช้เส้นตรงนั้นเป็นสมการในการทำนายค่าใหม่ๆ ที่ยังไม่เคยเห็นมาก่อน
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
# แบ่งข้อมูล
X = df[['feature1', 'feature2']]
y = df['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# สร้างโมเดล
model = LinearRegression()
model.fit(X_train, y_train)
# ทำนายผล
y_pred = model.predict(X_test)
print(f"R² Score: {r2_score(y_test, y_pred)}")
🌳 Decision Tree
Decision Tree หรือ "ต้นไม้ตัดสินใจ" เป็นโมเดลที่เลียนแบบการตัดสินใจของมนุษย์ โดยสร้างชุดคำถาม "ใช่/ไม่ใช่" (If/Else) ต่อกันไปเรื่อยๆ เป็นชั้นๆ เหมือนโครงสร้างของต้นไม้เพื่อจำแนกข้อมูล
จุดเด่นคือเป็นโมเดลที่ **เข้าใจง่ายและตีความได้** (White Box Model) เราสามารถเห็นภาพได้ชัดเจนว่าโมเดลใช้เงื่อนไขอะไรในการตัดสินใจ เหมาะสำหรับการทำนายผลแบบจัดกลุ่ม (Classification) เช่น การอนุมัติสินเชื่อ (อนุมัติ/ไม่อนุมัติ)
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report
# สร้างโมเดล Decision Tree
dt_model = DecisionTreeClassifier(random_state=42)
dt_model.fit(X_train, y_train)
# ทำนายผล
y_pred = dt_model.predict(X_test)
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
print(classification_report(y_test, y_pred))
📊 การประเมินโมเดล
การประเมินโมเดลเปรียบเสมือน **"การสอบวัดผล"** หลังจากที่เราสอน (Train) โมเดลไปแล้ว เราต้องทดสอบกับข้อมูลชุดใหม่ที่โมเดลไม่เคยเห็นมาก่อน (Test Data) เพื่อให้แน่ใจว่าโมเดลของเราไม่ได้แค่ "ท่องจำ" คำตอบจากชุดข้อมูลที่ใช้สอน
ขั้นตอนนี้สำคัญมาก เพราะเป็นการวัดประสิทธิภาพที่แท้จริงและตรวจสอบว่าโมเดลมีความแม่นยำและน่าเชื่อถือพอที่จะนำไปใช้งานจริงหรือไม่ โดยเราจะใช้ค่าชี้วัด (Metrics) ต่างๆ มาเป็นเกณฑ์ในการตัดสิน
from sklearn.metrics import confusion_matrix
import seaborn as sns
# Confusion Matrix
cm = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(8, 6))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues')
plt.title('Confusion Matrix')
plt.ylabel('Actual')
plt.xlabel('Predicted')
plt.show()
# Cross Validation
from sklearn.model_selection import cross_val_score
scores = cross_val_score(model, X, y, cv=5)
print(f"Cross Validation Score: {scores.mean():.3f} (+/- {scores.std() * 2:.3f})")
🧪 แบบฝึกหัด - การทำนายผล
1. R² Score วัดอะไร?
2. Cross Validation ใช้เพื่ออะไร?
3. Decision Tree เหมาะสำหรับปัญหาประเภทใด?
🎯 การจัดกลุ่มข้อมูล
การจัดกลุ่มข้อมูล (Clustering) คือเทคนิค Machine Learning ประเภทหนึ่งที่ไม่มีการ "เฉลย" คำตอบ (Unsupervised Learning) โดยมีเป้าหมายเพื่อค้นหาโครงสร้างที่ซ่อนอยู่ในข้อมูลและจัดกลุ่มข้อมูลที่มีความคล้ายคลึงกันเข้าไว้ด้วยกัน
เปรียบเสมือนการที่เรามีตะกร้าผลไม้รวม แล้วเราพยายามแยกผลไม้แต่ละชนิดออกจากกันเป็นกองๆ โดยดูจากลักษณะภายนอก เช่น สี, ขนาด, รูปทรง โดยที่เราไม่จำเป็นต้องรู้ชื่อของผลไม้แต่ละชนิดมาก่อนเลย ตัวอย่างการใช้งานจริงคือ การแบ่งกลุ่มลูกค้า (Customer Segmentation) ตามพฤติกรรมการซื้อ
Clustering เป็นเทคนิค Unsupervised Learning ที่ช่วยจัดกลุ่มข้อมูลที่มีลักษณะคล้ายกัน เราจะเรียนรู้ K-Means, Hierarchical Clustering และการประเมินผลการจัดกลุ่ม
⭕ K-Means Clustering
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# เตรียมข้อมูล
X = df[['feature1', 'feature2']]
# สร้างโมเดล K-Means
kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(X)
# แสดงผล
plt.figure(figsize=(10, 8))
plt.scatter(X.iloc[:, 0], X.iloc[:, 1], c=clusters, cmap='viridis')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], c='red', marker='x', s=200)
plt.title('K-Means Clustering')
plt.show()
🌳 Hierarchical Clustering
Hierarchical Clustering เป็นอีกวิธีในการจัดกลุ่มข้อมูล โดยจะสร้างโครงสร้างการจัดกลุ่มแบบ **"ลำดับชั้น"** ที่มีลักษณะคล้ายแผนภูมิต้นไม้ (Dendrogram) ทำให้เราเห็นภาพว่าข้อมูลแต่ละจุดค่อยๆ ถูกรวมกลุ่มกัน (หรือถูกแบ่งกลุ่ม) ที่ระดับความคล้ายคลึงต่างๆ กันอย่างไร
เปรียบเสมือนการสร้างแผนผังครอบครัว ที่เริ่มจากแต่ละคน (ข้อมูล) แล้วค่อยๆ จับคู่คนที่ใกล้ชิดกันที่สุดขึ้นไปเรื่อยๆ จนรวมเป็นตระกูลใหญ่ตระกูลเดียว จุดเด่นของวิธีนี้คือเรา **ไม่จำเป็นต้องกำหนดจำนวนกลุ่มล่วงหน้า** เพราะสามารถเลือกตัดลำดับชั้นที่ความสูงต่างๆ เพื่อให้ได้จำนวนกลุ่มที่ต้องการได้ในภายหลัง
from sklearn.cluster import AgglomerativeClustering
from scipy.cluster.hierarchy import dendrogram, linkage
# Hierarchical Clustering
hierarchical = AgglomerativeClustering(n_clusters=3)
clusters = hierarchical.fit_predict(X)
# สร้าง Dendrogram
linkage_matrix = linkage(X, method='ward')
plt.figure(figsize=(12, 8))
dendrogram(linkage_matrix)
plt.title('Hierarchical Clustering Dendrogram')
plt.show()
📊 การประเมินการจัดกลุ่ม
เนื่องจากการจัดกลุ่มเป็น Unsupervised Learning จึง **ไม่มี "คำตอบที่ถูกต้อง"** ให้เปรียบเทียบเหมือนโมเดลประเภทอื่น การประเมินจึงไม่ใช่การวัดความแม่นยำ แต่เป็นการวัด **"คุณภาพ"** ของกลุ่มที่โมเดลสร้างขึ้น
หลักการที่ดีคือ "ข้อมูลภายในกลุ่มควรจะคล้ายกันมากที่สุด และข้อมูลระหว่างกลุ่มควรจะแตกต่างกันมากที่สุด" เราจึงใช้ค่าชี้วัดทางคณิตศาสตร์ เช่น Silhouette Score มาช่วยประเมินคุณภาพนี้เป็นคะแนนเพื่อให้ง่ายต่อการเปรียบเทียบและตัดสินใจ
from sklearn.metrics import silhouette_score, calinski_harabasz_score
# Silhouette Score
silhouette_avg = silhouette_score(X, clusters)
print(f"Silhouette Score: {silhouette_avg:.3f}")
# Calinski-Harabasz Score
ch_score = calinski_harabasz_score(X, clusters)
print(f"Calinski-Harabasz Score: {ch_score:.3f}")
# Elbow Method สำหรับหาจำนวน cluster ที่เหมาะสม
inertias = []
K_range = range(1, 11)
for k in K_range:
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(X)
inertias.append(kmeans.inertia_)
plt.plot(K_range, inertias, 'bo-')
plt.xlabel('Number of Clusters (k)')
plt.ylabel('Inertia')
plt.title('Elbow Method')
plt.show()
🧪 แบบฝึกหัด - การจัดกลุ่ม
1. K-Means ต้องกำหนดอะไรล่วงหน้า?
2. Silhouette Score วัดอะไร?
3. Elbow Method ใช้เพื่ออะไร?
📝 แบบทดสอบท้ายบทเรียน
แบบทดสอบนี้จะประเมินความเข้าใจของคุณในเนื้อหา Python for Data Science ทั้งหมด ตอบให้ถูกต้อง 70% ขึ้นไปเพื่อผ่านการทดสอบ
1. Library ใดที่ใช้สำหรับการจัดการข้อมูลใน Python?
2. คำสั่งใดใช้สำหรับแสดงข้อมูล 5 แถวสุดท้าย?
3. การหา Outliers ด้วย IQR ใช้สูตรใด?
4. ค่า Correlation ที่เท่ากับ -1 หมายถึงอะไร?
5. Linear Regression เหมาะสำหรับปัญหาประเภทใด?
6. ข้อใดคือ Supervised Learning?
7. Cross Validation แบ่งข้อมูลกี่ส่วน (k-fold)?
8. Confusion Matrix ใช้สำหรับประเมินอะไร?
9. K-Means จัดกลุ่มข้อมูลโดยใช้หลักการใด?
10. Silhouette Score มีค่าอยู่ในช่วงใด?
🎓 รับเกียรติบัตร
เกียรติบัตร
Certificate of Completion
ขอแสดงความยินดีกับ
This is to certify that
ได้ผ่านการเรียนรู้หลักสูตร
has successfully completed the course
Python for Data Science
ครอบคลุมเนื้อหาการอ่านไฟล์ การทำความสะอาดข้อมูล สถิติพื้นฐาน การทำนายผล และการจัดกลุ่มข้อมูล
วันที่ออกเกียรติบัตร
Python Data Science
Certification
Nattapon Buaurai
ผู้อำวยการหลักสูตร