
ภาพรวม: รูปภาพนี้แสดงไลบรารี Python ยอดนิยมต่างๆ ที่ใช้ในงานด้าน Data Analytics (การวิเคราะห์ข้อมูล) โดยแบ่งออกเป็นหมวดหมู่ตามลักษณะการใช้งาน ทำให้เห็นภาพรวมของเครื่องมือที่มีให้เลือกใช้ใน Python สำหรับงานข้อมูลประเภทต่างๆ
1. Data Manipulation (การจัดการข้อมูล)
pip install polars numpy pandas modin[ray] # หรือ modin[dask] datatable vaex
(หมายเหตุ: Modin ต้องการ engine เสริมเช่น Ray หรือ Dask)import pandas as pd
# สร้าง DataFrame (ตารางข้อมูล) อย่างง่าย
data = {'ชื่อ': ['แก้ว', 'กล้า', 'ขวัญ'], 'อายุ': [25, 30, 22]}
df = pd.DataFrame(data)
# แสดง DataFrame
print("DataFrame:")
print(df)
# เลือกดูเฉพาะคอลัมน์ 'อายุ'
print("\nคอลัมน์ อายุ:")
print(df['อายุ'])
# คำนวณอายุเฉลี่ย
print(f"\nอายุเฉลี่ย: {df['อายุ'].mean()}")
คำอธิบายโค้ด: สร้างตารางข้อมูลชื่อ df ที่มีคอลัมน์ 'ชื่อ' และ 'อายุ' จากนั้นแสดงตารางทั้งหมด, เลือกแสดงเฉพาะข้อมูลในคอลัมน์ 'อายุ', และคำนวณค่าเฉลี่ยของอายุ2. Data Visualization (การแสดงผลข้อมูล)
pip install plotly seaborn pygal bokeh altair folium matplotlib
(หมายเหตุ: Seaborn และบางไลบรารีมักต้องใช้ Matplotlib เป็นเบื้องหลัง)import seaborn as sns
import matplotlib.pyplot as plt # มักใช้ร่วมกับ seaborn เพื่อปรับแต่ง
# Seaborn มีชุดข้อมูลตัวอย่างให้ใช้
tips = sns.load_dataset("tips")
# แสดงข้อมูล 5 แถวแรก
print(tips.head())
# สร้าง Scatter plot เพื่อดูความสัมพันธ์ระหว่าง 'total_bill' และ 'tip'
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time") # แยกสีตาม 'time'
# แสดงกราฟ
plt.title("ความสัมพันธ์ระหว่างยอดบิลทั้งหมดและทิป")
plt.xlabel("ยอดบิลทั้งหมด (Total Bill)")
plt.ylabel("ทิป (Tip)")
plt.show()
``` **คำอธิบายโค้ด:** โหลดชุดข้อมูลตัวอย่าง `tips` จาก Seaborn จากนั้นใช้ `scatterplot` สร้างกราฟกระจายเพื่อดูว่ายอดบิลรวม (total_bill) สัมพันธ์กับจำนวนทิป (tip) อย่างไร โดยแยกสีของจุดตามช่วงเวลา (time) คือ Lunch หรือ Dinner
3. Statistical Analysis (การวิเคราะห์เชิงสถิติ)
scipy.stats สำหรับการคำนวณทางสถิติต่างๆ เช่น การทดสอบสมมติฐาน การแจกแจงความน่าจะเป็นpip install scipy pystan pingouin statsmodels lifelines torch
from scipy import stats
import numpy as np
# สมมติตัวอย่างคะแนนสอบของนักเรียน 2 กลุ่ม
group1_scores = np.array([85, 90, 78, 92, 88])
group2_scores = np.array([75, 82, 80, 70, 79])
# ทำ Independent Samples t-test เพื่อทดสอบว่าคะแนนเฉลี่ยของ 2 กลุ่มต่างกันหรือไม่
t_statistic, p_value = stats.ttest_ind(group1_scores, group2_scores)
print(f"T-statistic: {t_statistic:.4f}")
print(f"P-value: {p_value:.4f}")
# ตีความผล (ตัวอย่างง่ายๆ)
alpha = 0.05 # ระดับนัยสำคัญ
if p_value < alpha:
print("ปฏิเสธสมมติฐานหลัก: คะแนนเฉลี่ยของสองกลุ่มแตกต่างกันอย่างมีนัยสำคัญ")
else:
print("ยอมรับสมมติฐานหลัก: ไม่มีหลักฐานเพียงพอว่าคะแนนเฉลี่ยของสองกลุ่มแตกต่างกัน")
คำอธิบายโค้ด: สร้างข้อมูลคะแนนสมมติ 2 กลุ่ม แล้วใช้ฟังก์ชัน ttest_ind จาก scipy.stats เพื่อทดสอบว่าค่าเฉลี่ยของทั้งสองกลุ่มแตกต่างกันอย่างมีนัยสำคัญทางสถิติหรือไม่ โดยดูจากค่า p-value ที่ได้4. Time Series Analysis (การวิเคราะห์อนุกรมเวลา)
pip install pyflux sktime prophet autots kats tsfresh
(หมายเหตุ: บางไลบรารีอาจมี dependency ที่ซับซ้อน โปรดดูเอกสารประกอบ)from prophet import Prophet
import pandas as pd
# สร้างข้อมูลตัวอย่าง (ต้องมีคอลัมน์ 'ds' สำหรับวันที่ และ 'y' สำหรับค่า)
data = {
'ds': pd.to_datetime(['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05']),
'y': [10, 12, 15, 13, 16]
}
df = pd.DataFrame(data)
print("ข้อมูลตัวอย่าง:")
print(df)
# สร้างและ fit โมเดล Prophet
model = Prophet()
model.fit(df)
# สร้าง DataFrame สำหรับพยากรณ์อนาคต (เช่น 2 วันข้างหน้า)
future = model.make_future_dataframe(periods=2)
print("\nDataFrame สำหรับพยากรณ์:")
print(future.tail()) # แสดงเฉพาะส่วนท้ายที่เป็นอนาคต
# ทำการพยากรณ์
forecast = model.predict(future)
# แสดงผลการพยากรณ์ (เฉพาะส่วนที่สำคัญ)
print("\nผลการพยากรณ์:")
print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail())
คำอธิบายโค้ด: สร้าง DataFrame ที่มีคอลัมน์ ds (วันที่) และ y (ค่าที่ต้องการพยากรณ์) จากนั้นสร้างโมเดล Prophet, สอนโมเดลด้วยข้อมูล (fit), สร้างกรอบเวลาสำหรับอนาคต, และใช้โมเดลทำนายค่า (predict) พร้อมแสดงค่าพยากรณ์ (yhat) และช่วงความเชื่อมั่น (yhat_lower, yhat_upper)5. Database Operations (การดำเนินการกับฐานข้อมูล)
hdfs (สำหรับ HDFS), PyArrow (สำหรับไฟล์ฟอร์แมตต่างๆ) หรือผ่าน PySparkpyspark.pandas) มี API ที่คล้ายกับ Pandas แต่ทำงานบน Apache Spark ทำให้ง่ายสำหรับคนที่คุ้นเคยกับ Pandas ในการทำงานกับข้อมูลขนาดใหญ่บน Sparkpip install pyspark ray kafka-python pandas # pyspark.pandas มาพร้อม pyspark >= 3.2
# pip install hdfs pyarrow # สำหรับ Hadoop/HDFS โดยตรง (อาจต้องการการตั้งค่าเพิ่มเติม)
(หมายเหตุ: การใช้ PySpark, Ray, Hadoop, Kafka มักต้องมีการติดตั้งและตั้งค่าระบบพื้นฐานเหล่านั้นแยกต่างหาก Octoparse เป็นเครื่องมือ/บริการ ไม่ใช่ไลบรารี pip install โดยตรง)from pyspark.sql import SparkSession
import pandas as pd
# สร้าง SparkSession (จุดเริ่มต้นการทำงานกับ Spark)
# .master("local[*]") หมายถึงให้ทำงานบนเครื่อง local โดยใช้ core ทั้งหมด
spark = SparkSession.builder.appName("SimplePySparkExample").master("local[*]").getOrCreate()
# สร้าง PySpark DataFrame จาก Pandas DataFrame (ตัวอย่างง่ายๆ)
pandas_df = pd.DataFrame({'col1': [1, 2, 3], 'col2': ['A', 'B', 'C']})
spark_df = spark.createDataFrame(pandas_df)
print("PySpark DataFrame:")
spark_df.show() # แสดง DataFrame
# ทำการ Query ง่ายๆ
print("\nผลลัพธ์หลัง Filter:")
spark_df.filter(spark_df.col1 > 1).show()
# หยุด SparkSession
spark.stop()
คำอธิบายโค้ด: สร้าง SparkSession เพื่อเริ่มการทำงานกับ Spark จากนั้นแปลง Pandas DataFrame เป็น PySpark DataFrame แล้วแสดงผล และทดลองกรองข้อมูล (filter) ก่อนจะหยุด SparkSession (จำเป็นต้องติดตั้ง Spark ในเครื่อง หรือเชื่อมต่อกับ Cluster)6. Web Scraping (การดึงข้อมูลจากเว็บ)
requests เพื่อดาวน์โหลดหน้าเว็บก่อนrequests และ Beautiful Soup เพื่อจำลองการโต้ตอบกับเว็บไซต์ได้ง่ายขึ้น เช่น การกรอกฟอร์ม การคลิกปุ่ม โดยไม่ต้องใช้เบราว์เซอร์จริงpip install beautifulsoup4 requests scrapy mechanicalsoup selenium
(หมายเหตุ: Selenium ต้องดาวน์โหลด WebDriver สำหรับเบราว์เซอร์ที่ต้องการควบคุมแยกต่างหาก Octoparse เป็นเครื่องมือ/บริการ)import requests
from bs4 import BeautifulSoup
# URL ของเว็บที่ต้องการดึงข้อมูล (ตัวอย่างเว็บทดสอบง่ายๆ)
url = 'http://example.com/'
try:
# ส่ง HTTP GET request เพื่อดาวน์โหลดเนื้อหาเว็บ
response = requests.get(url)
response.raise_for_status() # ตรวจสอบว่า request สำเร็จหรือไม่
# ใช้ BeautifulSoup แยกโครงสร้าง HTML
soup = BeautifulSoup(response.text, 'html.parser')
# ค้นหา tag ที่ต้องการ (เช่น tag <title>)
title_tag = soup.find('title')
if title_tag:
print(f"Title ของเว็บ: {title_tag.string}")
else:
print("ไม่พบ tag <title>")
# ค้นหา tag <p> แรก
first_paragraph = soup.find('p')
if first_paragraph:
print(f"Paragraph แรก: {first_paragraph.get_text()}") # .get_text() เพื่อเอาเฉพาะข้อความ
else:
print("ไม่พบ tag <p>")
except requests.exceptions.RequestException as e:
print(f"เกิดข้อผิดพลาดในการเชื่อมต่อ: {e}")
คำอธิบายโค้ด: ใช้ requests เพื่อดาวน์โหลดเนื้อหา HTML จาก URL ที่กำหนด จากนั้นใช้ BeautifulSoup เพื่อแยกวิเคราะห์ HTML นั้น แล้วค้นหาแท็ก <title> และแท็ก <p> แรก เพื่อดึงข้อความออกมาแสดงผล7. Natural Language Processing (NLP) (การประมวลผลภาษาธรรมชาติ)
Transformers (จาก Hugging Face), TensorFlow, หรือ PyTorch เพื่อทำงาน NLP ที่ซับซ้อนและได้ผลลัพธ์แม่นยำสูงpip install nltk textblob gensim spacy polyglot transformers torch # หรือ tensorflow
# ต้องดาวน์โหลดโมเดลภาษาสำหรับ spaCy และ NLTK เพิ่มเติม
# python -m spacy download en_core_web_sm # ตัวอย่างดาวน์โหลดโมเดลภาษาอังกฤษสำหรับ spaCy
# python -m nltk.downloader punkt # ตัวอย่างดาวน์โหลดข้อมูลสำหรับ NLTK
import spacy
# โหลดโมเดลภาษาอังกฤษขนาดเล็ก (ต้องดาวน์โหลดก่อน: python -m spacy download en_core_web_sm)
try:
nlp = spacy.load("en_core_web_sm")
except OSError:
print("กรุณาดาวน์โหลดโมเดลภาษาก่อน: python -m spacy download en_core_web_sm")
exit()
# ข้อความตัวอย่าง
text = "Apple is looking at buying U.K. startup for $1 billion."
# ประมวลผลข้อความด้วย spaCy
doc = nlp(text)
print(f"ข้อความ: {text}")
# แสดง Token และ Part-of-Speech (POS) tag
print("\nTokens และ POS tags:")
for token in doc:
print(f"- {token.text} ({token.pos_})") # แสดงคำ และ ชนิดของคำ
# แสดง Named Entities (NER) ที่ระบุได้
print("\nNamed Entities:")
for ent in doc.ents:
print(f"- {ent.text} ({ent.label_})") # แสดง entity และ ประเภท (เช่น ORG=องค์กร, GPE=สถานที่)
คำอธิบายโค้ด: โหลดโมเดลภาษาอังกฤษของ spaCy จากนั้นนำไปประมวลผล (nlp(text)) ประโยคตัวอย่าง ผลลัพธ์ doc จะเก็บข้อมูลการวิเคราะห์ต่างๆ เช่น การตัดคำ (Token), ชนิดของคำ (POS), และการระบุชื่อเฉพาะ (NER) แล้วนำข้อมูลเหล่านี้มาแสดงผล8. Machine Learning (ML) (การเรียนรู้ของเครื่อง)
pip install scikit-learn keras tensorflow xgboost torch
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_regression # สร้างข้อมูลตัวอย่างสำหรับการถดถอย
from sklearn.metrics import mean_squared_error
# 1. สร้างข้อมูลตัวอย่าง
# สร้างข้อมูล X (features) 100 ตัวอย่าง, 1 feature และ y (target) ที่มีความสัมพันธ์เชิงเส้น + noise
X, y = make_regression(n_samples=100, n_features=1, noise=10, random_state=42)
# 2. แบ่งข้อมูลเป็นชุด Train และ Test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# test_size=0.2 คือแบ่งข้อมูลทดสอบ 20%
# 3. สร้างและสอนโมเดล Linear Regression
model = LinearRegression()
model.fit(X_train, y_train) # สอนโมเดลด้วยข้อมูล Train
# 4. ทำนายข้อมูล Test
y_pred = model.predict(X_test)
# 5. ประเมินผลโมเดล
mse = mean_squared_error(y_test, y_pred)
print(f"ข้อมูลตัวอย่าง X_test 5 ค่าแรก:\n{X_test[:5].flatten()}")
print(f"ค่าจริง y_test 5 ค่าแรก:\n{y_test[:5]}")
print(f"ค่าทำนาย y_pred 5 ค่าแรก:\n{y_pred[:5]}")
print(f"\nMean Squared Error (MSE) บน Test set: {mse:.4f}") # ค่า error ยิ่งน้อยยิ่งดี
print(f"ค่าสัมประสิทธิ์ (Coefficient): {model.coef_[0]:.4f}") # ความชัน
print(f"ค่าจุดตัดแกน (Intercept): {model.intercept_:.4f}") # จุดตัดแกน y
คำอธิบายโค้ด: สร้างข้อมูลตัวอย่างสำหรับปัญหา Linear Regression แบ่งข้อมูลเป็นชุดสำหรับสอน (Train) และทดสอบ (Test) สร้างโมเดล LinearRegression สอนโมเดลด้วยข้อมูล Train (fit) นำโมเดลไปทำนายค่าสำหรับข้อมูล Test (predict) และสุดท้ายประเมินผลด้วย Mean Squared Error เพื่อดูว่าโมเดลทำนายได้ใกล้เคียงค่าจริงแค่ไหนหวังว่าคำอธิบายเหล่านี้จะเป็นประโยชน์นะครับ! Python มีเครื่องมือที่ทรงพลังมากมายสำหรับงานด้านข้อมูลจริงๆ ครับ