Tư duy Tính toán

Thư viện Python phổ biến
(Popular Python Libraries)

Trường ĐH Công nghệ – Đại học Quốc gia Hà Nội

Nội dung

  1. Giới thiệu về thư viện Python
  2. Thư viện chuẩn (standard library)
  3. Quản lý thư viện ngoài với pip
  4. Trực quan hóa dữ liệu với matplotlib
  5. Làm việc với dữ liệu bảng bằng pandas

1.
Giới thiệu
Thư viện Python

Thư viện Python

  • Thư viện là một tập hợp các module chứa hàm, lớp, phương thức.
  • Mục tiêu: tái sử dụng code, tăng hiệu quả, tiếp cận chức năng chuyên biệt.
  • Ví dụ thư viện phổ biến: math, datetime, random, matplotlib, pandas.

>>> import math
>>> x = 99
>>> math.sqrt(x)
          

Hai loại thư viện

Loại Mô tả Ví dụ
Thư viện chuẩn Có sẵn trong mọi bản cài Python, dùng ngay math, random, datetime
Thư viện ngoài Cài thêm bằng trình quản lý gói (ví dụ pip) pandas, matplotlib, numpy

Gợi ý: ưu tiên thư viện chuẩn khi đủ dùng; dùng thư viện ngoài khi cần năng lực chuyên sâu.

2.
Thư viện chuẩn
(Standard libraries)

Thư viện math

  • Cung cấp các hàm & hằng số toán học thông dụng.
  • Hữu ích cho bài toán hình học, tính toán khoa học, xử lý số.
Hằng số Ý nghĩa Ghi chú
math.pi π ≈ 3.1415 Dùng cho đường tròn, mặt cầu
math.e e ≈ 2.71828 Nền tảng log tự nhiên, giải tích

Thư viện math

Ví dụ: tính chu vi đường tròn


import math

radius = 5
circumference = 2*math.pi*radius
print(circumference)
          

Hàm math: làm tròn

Hàm Mô tả Ví dụ
math.ceil(x) Làm tròn lên print(math.ceil(4.1))5
math.floor(x) Làm tròn xuống print(math.floor(4.9))4
math.trunc(x) Cắt phần thập phân math.trunc(4.9)4
math.trunc(-4.1)-4

import math

print(math.ceil(4.1))   # Output: 5
print(math.floor(4.9))  # Output: 4
print(math.trunc(4.9))  # Output: 4
print(math.trunc(-4.1)) # Output: -4
          

Hàm math: lũy thừa & căn

  • math.pow(base, exp): luôn trả về float.
  • math.sqrt(x): căn bậc hai; x ≥ 0.

import math
print(math.pow(2, 3)) # Output: 8.0
print(2**3)           # Output: 8
print(math.sqrt(25))  # Output: 5.0
          

Ứng dụng: định lý Pythagoras


import math
a = 3
b = 4
hypotenuse = math.sqrt(math.pow(a, 2) + math.pow(b, 2))
print(f"Hypotenuse: {hypotenuse}") # Output: 5.0
          

Thư viện random

  • Dùng để mô phỏng ngẫu nhiên / bất định.
  • Ứng dụng: mô phỏng khoa học, trò chơi, sinh dữ liệu kiểm thử.

import random

print(random.random())        # ví dụ: 0.95...
print(random.randint(1, 10))  # trả về số nguyên từ 1 đến 10
          

Chọn ngẫu nhiên & xáo trộn

  • random.choice(sequence): chọn 1 phần tử.
  • random.shuffle(list): xáo trộn tại chỗ (in-place).

import random

choices = ["Rock", "Paper", "Scissors"]
choice = random.choice(choices)
print(choice)

my_list = [1, 2, 3, 4, 5]
random.shuffle(my_list)
print(my_list)
          

Thư viện datetime

  • Quản lý thời gian ở dạng dễ đọc: ngày, giờ, phút, giây, microseconds…
  • Lấy “thời điểm hiện tại” bằng datetime.datetime.now().

import datetime

current_time = datetime.datetime.now()
print(current_time)
          

Thường hiển thị theo dạng:


YYYY-MM-DD HH:MM:SS.microseconds
          

Tạo thời điểm cụ thể

  • datetime.date(year, month, day) → đối tượng ngày.
  • datetime.time(hour, minute, second) → đối tượng giờ.
  • datetime.datetime(...) → ngày + giờ.

import datetime

christmas = datetime.date(2023, 12, 25)
noon = datetime.time(12, 0, 0)
event = datetime.datetime(2024, 7, 4, 9, 30, 0)
          

Tính toán thời gian với timedelta

  • timedelta biểu diễn một khoảng thời gian.
  • Có thể cộng/trừ với datetime.

from datetime import datetime, timedelta

today = datetime.now()
seven_days_later = today + timedelta(days=7)

print(f"Today: {today.date()}")
print(f"Deadline in 7 days: {seven_days_later.date()}")
          

Đơn vị thường dùng: days, seconds, minutes, hours, weeks.

Định dạng thời gian với strftime

  • Chuyển đối tượng thời gian thành chuỗi theo mẫu (format code).
Ý nghĩa Ví dụ
%Y Năm đầy đủ 2023
%m Tháng (01–12) 01
%d Ngày (01–31) 25
%H Giờ (00–23) 14
%M Phút (00–59) 05
%S Giây (00–59) 09
%A Tên thứ trong tuần Monday

from datetime import datetime

today = datetime.now()
formatted_date = today.strftime("%m/%d/%Y")
print(formatted_date)
          

3.
Quản lý thư viện ngoài với pip

pip: trình cài gói Python

  • pip là hệ thống quản lý gói chuẩn của Python.
  • Kết nối tới PyPI (Python Package Index) – kho thư viện khổng lồ.
  • Tự xử lý phụ thuộc (dependencies) khi cài đặt.

Cài thư viện: pip install <tên_thư_viện>.


pip install pandas
pip install matplotlib
          

Các lệnh pip thường dùng

Lệnh Tác dụng Gợi ý
pip list Liệt kê gói đã cài & phiên bản ✅ Kiểm tra môi trường
pip uninstall Gỡ cài đặt thư viện ✅ Dọn dẹp
pip install --upgrade Nâng cấp lên phiên bản mới nhất ⚠️ Cẩn thận tương thích

4.
Trực quan hóa dữ liệu với Matplotlib

Vì sao cần trực quan hóa?

  • Giao tiếp thông tin hiệu quả: “một hình hơn ngàn lời”.
  • Nhìn nhanh xu hướng & điểm bất thường (outliers).
  • Rất phổ biến trong Khoa học dữ liệu, Học máy, báo cáo…

Giới thiệu matplotlib

  • Thư viện vẽ biểu đồ 2D rất phổ biến trong Python.
  • Hỗ trợ biểu đồ tĩnh, hoạt ảnh, tương tác (tùy môi trường).
  • Thông thường dùng module pyplot với alias plt.

import matplotlib.pyplot as plt
          

Quy trình vẽ cơ bản

  1. Chuẩn bị dữ liệu (list/array…)
  2. Vẽ bằng hàm phù hợp (ví dụ plt.plot, plt.bar)
  3. Hiển thị bằng plt.show()

Mục tiêu: làm rõ thông điệp, không chỉ “vẽ cho đẹp”.

Biểu đồ đường (line plot)

  • Dùng để thể hiện biến thiên theo một trục liên tục (thường là thời gian).
  • Hàm lõi: plt.plot(x, y)

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.plot(x, y)
plt.show()
          

Tăng khả năng đọc

tiêu đề & nhãn

  • Thêm bối cảnh cho biểu đồ.
  • plt.title, plt.xlabel, plt.ylabel.

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.plot(x, y)
plt.title("Sine Wave")
plt.xlabel("Angle (radians)")
plt.ylabel("Amplitude")
plt.show()
          

Chú giải (legend)

  • Khi có nhiều đường dữ liệu, legend giúp phân biệt.
  • Gắn label=... cho mỗi đường và gọi plt.legend().

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

plt.plot(x, y1, label="sin")
plt.plot(x, y2, label="cos")
plt.legend()
plt.show()
          

Biểu đồ cột (bar)

  • Dùng để so sánh các nhóm rời rạc (categories).
  • Hàm lõi: plt.bar(categories, values)

Ví dụ: biểu đồ cột


import matplotlib.pyplot as plt

categories = ["Product A", "Product B", "Product C", "Product D", "Product E"]
values = [25, 40, 15, 30, 20]

plt.bar(categories, values, color="skyblue", edgecolor="navy")
plt.xlabel("Categories")
plt.ylabel("Sales (Units)")
plt.title("Monthly Product Performance")
plt.show()
          

Biểu đồ tròn (pie)

  • Thể hiện tỉ trọng “phần trong tổng”.
  • Hàm lõi: plt.pie(sizes, labels=..., autopct=..., startangle=...)
  • autopct hiển thị phần trăm lên từng lát.

Ví dụ: biểu đồ tròn


import matplotlib.pyplot as plt

labels = ["Rent", "Groceries", "Utilities", "Entertainment", "Savings"]
sizes = [1200, 450, 200, 150, 500]
colors = ["#ff9999", "#66b3ff", "#99ff99", "#ffcc99", "#c2c2f0"]

plt.pie(sizes, labels=labels, autopct="%1.1f%%", startangle=140, colors=colors)
plt.axis("equal")
plt.title("Monthly Expense Breakdown")
plt.show()
          

Histogram: phân phối dữ liệu

  • Hiển thị phân phối của một biến liên tục (tần suất theo khoảng).
  • Hữu ích để nhìn độ lệch, đỉnh, độ trải rộng…
  • Hàm lõi: plt.hist(data, bins=..., edgecolor=...)

Ví dụ: histogram


import matplotlib.pyplot as plt
import numpy as np

data = np.random.randn(1000)

plt.hist(data, bins=30, color="forestgreen", edgecolor="black", alpha=0.7)
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.title("Data Distribution")
plt.show()
          

5.
Dữ liệu bảng
Pandas

Dữ liệu trong thực tế

  • Dữ liệu xuất hiện dưới nhiều dạng: văn bản, ảnh/đa phương tiện, và dữ liệu bảng.
  • Dữ liệu bảng thường gặp:
    • Excel
    • CSV
  • Giới hạn của cấu trúc cơ bản (list/dict) khi dữ liệu lớn và phức tạp.

Giới thiệu pandas

  • pandas là công cụ tiêu chuẩn để xử lý dữ liệu bảng.
  • Có thể: sắp xếp dữ liệu dạng bảng, lọc theo điều kiện, thao tác tạo insight.
  • Tối ưu nhờ phép toán vector hóa (nhanh hơn vòng lặp thuần).

Series

  • Series là cấu trúc 1 chiều, gồm:
    • Values: dãy giá trị
    • Index: nhãn cho từng giá trị
  • Alias phổ biến: import pandas as pd

import pandas as pd

s = pd.Series(["welcome", "to", "COM1050"])
print(s.index)
print(s.values)
          

Chọn dữ liệu trong Series

  • Chọn theo nhãn, theo danh sách nhãn, hoặc theo điều kiện.
  • Điều kiện tạo boolean mask rồi lọc.

import pandas as pd

s = pd.Series([4, -2, 0, 6], index=["a", "b", "c", "d"])

print(s["a"])
print(s[["a", "c"]])

mask = s > 0
print(mask)
print(s[mask])
          

DataFrame: “trái tim” của pandas

  • DataFrame là một bảng (rows × columns).
  • Có thể coi như tập hợp nhiều Series cùng chung index.
  • Thao tác thuận tiện: lọc, join, group, sort, thống kê…

Tạo DataFrame

  • Cú pháp tổng quát: pandas.DataFrame(data, index, columns)
  • Có thể tạo từ:
    • CSV/Excel
    • dict
    • Series
  • Quan trọng hơn việc “học thuộc”: hiểu mục tiêu rồi tra cú pháp.

Tạo DataFrame từ CSV


import pandas as pd

elections = pd.read_csv("elections.csv")
print(elections.head())
          

Tạo DataFrame từ dict

  • Dạng “cột” (keys là cột):

import pandas as pd
df1 = pd.DataFrame({
    "Fruit": ["Strawberry", "Orange"],
    "Price": [5.49, 3.99]
})
          
  • Dạng “hàng” (mỗi phần tử là 1 record):

import pandas as pd
df2 = pd.DataFrame([
    {"Fruit": "Strawberry", "Price": 5.49},
    {"Fruit": "Orange", "Price": 3.99}
])
          

Tạo DataFrame từ Series


import pandas as pd

s_a = pd.Series(["a1", "a2", "a3"], index=["r1", "r2", "r3"])
s_b = pd.Series(["b1", "b2", "b3"], index=["r1", "r2", "r3"])

df = pd.DataFrame({"A-column": s_a, "B-column": s_b})

df_single = pd.DataFrame(s_a)
df_frame = s_a.to_frame()
          

API của DataFrame

  • API rất lớn: rất nhiều thuộc tính & phương thức.
  • Thực hành quan trọng trong lập trình: tra cứu tài liệu chính thức.
  • Từ khóa hữu ích: pandas.DataFrame, pandas.pydata.org, Stack Overflow…

Trích xuất dữ liệu

  • Lấy nhanh vài dòng đầu/cuối: df.head(n), df.tail(n)
  • Lấy theo nhãn (labels) → .loc
  • Lấy theo vị trí (integers) → .iloc
  • Cú pháp ngắn gọn theo ngữ cảnh → [ ]

Trích xuất theo nhãn: .loc

  • .loc dùng label của hàng và cột.
  • Cú pháp: df.loc[row_labels, column_labels]

# khung cú pháp
df.loc[row_labels, column_labels]
          

.loc: các dạng tham số

  • Mỗi đối số có thể là:
    • Danh sách: [87, 25, 179]
    • Slice (bao gồm cả biên phải): "Popular vote":"%"
    • Giá trị đơn: 0 hoặc "Candidate"

# ví dụ minh họa (giả sử có DataFrame elections)
elections.loc[[87, 25, 179], ["Year", "Candidate", "Result"]]
elections.loc[[87, 25, 179], "Popular vote":"%"]
elections.loc[0, "Candidate"]
          

Trích xuất theo vị trí: .iloc

  • .iloc dùng chỉ số nguyên (0, 1, 2, …).
  • Quy ước Python: vị trí đầu tiên là 0.
  • Cú pháp: df.iloc[row_integers, column_integers]

# khung cú pháp
df.iloc[row_integers, column_integers]
          

.iloc: các dạng tham số

  • Mỗi đối số có thể là:
    • Danh sách: [1, 2, 3]
    • Slice (không gồm biên phải): 0:3
    • Giá trị đơn: 0

# ví dụ minh họa (giả sử có DataFrame elections)
elections.iloc[[1, 2, 3], [0, 1, 2]]
elections.iloc[[1, 2, 3], 0:3]
elections.iloc[0, 1]
          

Cú pháp ngữ cảnh: [ ]

  • [ ] chỉ nhận 1 đối số, nhưng “hiểu theo ngữ cảnh”.
  • Có thể là:
    • Slice số hàng (biên phải loại trừ)
    • Danh sách nhãn cột
    • Một nhãn cột
  • Ưu điểm: ngắn gọn, rất phổ biến.

[ ]: cắt theo hàng


# lấy các hàng 3,4,5,6 (biên phải loại trừ)
elections[3:7]
          

[ ]: chọn nhiều cột


# chọn nhiều cột
elections[["Year", "Candidate", "Result"]]
          

⚠️ Lỗi hay gặp: quên ngoặc vuông bên trong.

Kết hợp với NumPy

  • SeriesDataFrame hỗ trợ nhiều phép toán số.
  • Khi dữ liệu là số, có thể dùng numpy để tính thống kê nhanh.

import numpy as np

yash_count = babynames[babynames["Name"] == "Yash"]["Count"]
print(np.mean(yash_count))
print(np.max(yash_count))
          

Phương thức tiện ích trong pandas

  • Rất nhiều hàm hỗ trợ khám phá dữ liệu:
    • size, shape
    • describe, sample
    • value_counts, unique
    • sort_values, …

.sort_values()

  • Sắp xếp DataFrame/Series theo giá trị.
  • Thường dùng với tham số by=... (DataFrame).

# ví dụ minh họa
df.sort_values(by="Price", ascending=True)
          

Áp dụng hàm theo hàng: apply

  • dt.apply(f) tạo mảng kết quả khi áp dụng hàm f cho từng hàng.
  • Với DataFrame, thường chỉ định axis=1 để chạy theo hàng.

# khung cú pháp
dt.apply(f, axis=1)
          

Ví dụ: tính tổng theo hàng


import pandas as pd

def calculate_total(row):
    """Calculates price * quantity and adds a shipping fee."""
    total = (row["Price"] * row["Quantity"]) + 10
    return total

data = {
    "Product": ["Laptop", "Mouse", "Monitor", "Keyboard"],
    "Price": [1200, 25, 300, 75],
    "Quantity": [2, 10, 3, 5]
}

df = pd.DataFrame(data)
df["Total_with_Shipping"] = df.apply(calculate_total, axis=1)
          

Vẽ biểu đồ trực tiếp

  • Dựa trên matplotlib.
  • Cần cài cả hai: pandasmatplotlib.
  • Hàm lõi: df.plot(..., kind="line|bar|pie|hist|...")

import pandas as pd
import matplotlib.pyplot as plt

data = {"Month": ["Jan", "Feb", "Mar", "Apr", "May"],
        "Sales": [2500, 3200, 2100, 4000, 4500]}

df = pd.DataFrame(data)
df.plot(x="Month", y="Sales", kind="line", marker="o", title="Monthly Sales Trend")
plt.show()
          

Tổng kết

  • math: hàm & hằng số toán học cơ bản.
  • random: mô phỏng ngẫu nhiên, chọn phần tử, xáo trộn.
  • datetime: thao tác ngày/giờ, timedelta, strftime.
  • matplotlib: trực quan hóa dữ liệu bằng nhiều loại biểu đồ.
  • pandas: chuẩn công nghiệp cho dữ liệu bảng (Series/DataFrame).
  • pip: cài và quản lý thư viện ngoài từ PyPI.

Tài liệu tham khảo

  • UC Berkeley, Data 100: Principles and Techniques of Data Science, Fall 2025