blog.dopana

Back

Python là ngôn ngữ số 1 cho Data Science — đơn giản, hệ sinh thái khổng lồ. Bài này dẫn bạn từ 0 đến phân tích dữ liệu cơ bản.

Cài Đặt#

pip install pandas numpy matplotlib seaborn jupyter
# Hoặc dùng conda
conda create -n ds python=3.12 pandas numpy matplotlib seaborn jupyter
bash

NumPy — Nền Tảng Tính Toán Số#

NumPy là thư viện nền tảng — cung cấp array và các phép toán số học hiệu quả.

Pandas — Xương Sống Của Data Science#

Series vs DataFrame#

import pandas as pd

# Series — 1 cột
s = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])

# DataFrame — bảng
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 30, 35],
    'salary': [50000, 60000, 70000],
})
python

Đọc/Ghi Dữ Liệu#

# CSV
df = pd.read_csv('sales.csv')
df.to_csv('cleaned.csv', index=False)

# Excel
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

# JSON
df = pd.read_json('data.json')

# SQL
from sqlalchemy import create_engine
engine = create_engine('postgresql://user:pass@localhost/db')
df = pd.read_sql('SELECT * FROM users', engine)
python

Khám Phá Dữ Liệu#

df.head(10)          # 10 dòng đầu
df.info()            # Kiểu dữ liệu, null count
df.describe()        # Thống kê cơ bản
df.shape             # (số dòng, số cột)
df.columns           # Danh sách cột
df['column'].value_counts()  # Đếm giá trị
df.isnull().sum()    # Số null mỗi cột
python

Lọc & Chọn#

# Lọc cột
df['name']
df[['name', 'salary']]

# Lọc dòng
df[df['age'] > 30]
df[(df['age'] > 25) & (df['salary'] > 55000)]
df.query('age > 25 and salary > 55000')

# Lọc bằng loc/iloc
df.loc[0:2, ['name', 'salary']]  # Label-based
df.iloc[0:2, 0:2]                # Index-based
python

Xử Lý Missing Data#

# Kiểm tra
df.isnull().sum()

# Xóa
df.dropna()                    # Xóa dòng có null
df.dropna(subset=['email'])    # Xóa dòng null ở cột cụ thể

# Điền giá trị
df['age'].fillna(df['age'].median(), inplace=True)
df['category'].fillna('Unknown', inplace=True)
df.fillna(method='ffill')      # Forward fill
python

Group By & Aggregate#

# Doanh thu trung bình theo phòng ban
df.groupby('department')['salary'].mean()

# Nhiều aggregate
df.groupby('department').agg({
    'salary': ['mean', 'median', 'min', 'max'],
    'age': 'mean',
})

# Pivot table
pd.pivot_table(df, values='salary', index='department',
               columns='gender', aggfunc='mean')
python

Apply — Transform Dữ Liệu#

# Tạo cột mới
df['bonus'] = df['salary'] * 0.1

# Apply function
df['name_length'] = df['name'].apply(len)

# Map giá trị
df['gender_code'] = df['gender'].map({'Male': 0, 'Female': 1})

# Vectorized string operations
df['email_domain'] = df['email'].str.split('@').str[1]
python

Matplotlib & Seaborn — Trực Quan Hóa#

Matplotlib Cơ Bản#

Seaborn — Đẹp Hơn, Dễ Hơn#

Ví Dụ Hoàn Chỉnh — Phân Tích Sales#

Kết Luận#

Data Science trong Python gồm 3 thư viện cốt lõi:

  • NumPy — Array và tính toán số
  • Pandas — Thao tác dữ liệu dạng bảng
  • Matplotlib/Seaborn — Trực quan hóa

Học theo thứ tự đó. Dành 80% thời gian cho Pandas — nó là thứ bạn dùng nhiều nhất. Jupyter Notebook là môi trường lý tưởng để thực hành.

Tài liệu tham khảo#