Bỏ qua tới nội dung chính
Quay lại tin tức

Tôi đã xây dựng đường ống ETL đầu tiên của mình khi còn là người mới bắt đầu. Đây là cách thực hiện.

Towards Data Science· Ibrahim Salami· 25/5/2026general

Hướng dẫn chi tiết về quy trình Extract, Transform, Load (ETL) sử dụng GitHub API dành cho người mới bắt đầu Bài viết Tôi đã xây dựng quy trình ETL đầu tiên của mình với tư cách là người hoàn toàn mới bắt đầu. Đây là cách thực hiện. xuất hiện lần đầu trên Towards Data Science.

Kỹ thuật dữ liệu Tôi đã xây dựng đường ống ETL đầu tiên của mình với tư cách là người mới bắt đầu hoàn toàn. Đây là cách thực hiện. Hướng dẫn chân thực dành cho người mới bắt đầu về Trích xuất, Chuyển đổi, Tải bằng API GitHub Ibrahim Salami Ngày 25/5/2026 7 phút đọc Chia sẻ Được tạo bằng Gemini Đây là phần hai trong loạt bài về hành trình kỹ thuật dữ liệu của tôi. Trong phần một, tôi đã chia sẻ lộ trình 12 tháng của mình để chuyển đổi từ nhà phân tích dữ liệu sang kỹ sư dữ liệu. Đây là nơi việc xây dựng thực sự bắt đầu. Khi tôi xuất bản bài viết đầu tiên ghi lại hành trình kỹ thuật dữ liệu của mình, một điều bất ngờ đã xảy ra. Mọi người đã đồng cảm với nó. Tôi đã nhận được tin nhắn từ những người lạ nói rằng họ rất hào hứng muốn theo dõi. Điều đó thật tuyệt. Nhưng nó cũng đi kèm với áp lực. Đột nhiên, đây không chỉ là một mục tiêu cá nhân mà tôi có thể lặng lẽ từ bỏ nếu mọi thứ trở nên khó khăn. Mọi người đang theo dõi. Mọi người đang ở trong cùng một hoàn cảnh. Và trách nhiệm đó, thành thật mà nói, là một phần lý do tại sao bạn đang đọc bài viết này ngay bây giờ. Vì vậy, tôi phải hành động. Và giống như bất kỳ ai bắt đầu một kỹ năng mới, điều đầu tiên tôi làm là tìm kiếm tài nguyên. Có vô số hướng dẫn trên internet về kỹ thuật dữ liệu. Video YouTube, khóa học, hướng dẫn bằng văn bản. Nhiều hơn bạn có thể hoàn thành. Nhưng tôi không thể chỉ tiêu thụ lý thuyết. Tôi cần xây dựng một cái gì đó. Một cái gì đó thực tế, với dữ liệu thực, mà cuối cùng thực sự hoạt động. Vì vậy, tôi đã đóng các hướng dẫn và mở một sổ ghi chép Google Colab thay vào đó. Tôi đã tìm thấy tài liệu API GitHub và quyết định rằng tôi sẽ xây dựng đường ống ETL đầu tiên của mình từ đầu. Không có sự giúp đỡ. Chỉ có tôi, một chút Python và một mục tiêu. Bài viết này là trải nghiệm đó được ghi lại đầy đủ. Mã, sự bối rối, những chiến thắng nhỏ và những gì tôi thực sự học được bằng cách thực hiện nó. Đầu tiên, ETL là gì? Trước khi tôi đi sâu vào những gì tôi đã xây dựng, hãy để tôi nhanh chóng giải thích ETL thực sự có nghĩa là gì vì tôi đã phải tự tìm hiểu điều này cách đây không lâu. ETL là viết tắt của Extract, Transform, Load (Trích xuất, Chuyển đổi, Tải). Đây là một trong những khái niệm cơ bản nhất trong kỹ thuật dữ liệu. Trích xuất có nghĩa là đi đến một nơi nào đó để lấy dữ liệu. Một API, một cơ sở dữ liệu, một trang web, một tệp. Bạn đang kéo thông tin thô từ một nguồn. Chuyển đổi có nghĩa là làm sạch và định hình dữ liệu đó. Xóa các hàng xấu, thêm các cột mới, cấu trúc lại nó để nó thực sự hữu ích. Tải có nghĩa là lưu dữ liệu đã được làm sạch ở một nơi nào đó. Một cơ sở dữ liệu, một kho dữ liệu, một tệp CSV đơn giản. Chỉ vậy thôi. Ba bước đó, được thực hiện theo trình tự, là một đường ống dữ liệu. Mọi thứ khác trong kỹ thuật dữ liệu, Airflow, Spark, Databricks, chỉ là những cách tinh vi hơn để thực hiện ba điều tương tự đó ở quy mô lớn. Tôi đang ở giai đoạn đầu của lộ trình, vì vậy tôi đã giữ nó đơn giản. Python thuần túy, chưa có công cụ điều phối. Nhưng hình dạng của vấn đề là như nhau. Những gì tôi đã xây dựng Tôi đã trích xuất dữ liệu từ API GitHub, cụ thể là các kho lưu trữ Python được gắn dấu sao nhiều nhất được tạo trong 30 ngày qua. Sau đó, tôi đã làm sạch nó, thêm một cột mới và lưu kết quả dưới dạng tệp CSV. Đơn giản. Thực tế. Hoàn toàn là của tôi. Đây là cách nó diễn ra. Bước 1: Trích xuất Điều đầu tiên tôi phải làm là tìm ra cách giao tiếp với API GitHub. API về cơ bản là một cánh cửa mà một công ty hoặc nền tảng mở ra để các nhà phát triển có thể yêu cầu dữ liệu từ đó theo chương trình, mà không cần phải sao chép và dán thủ công bất cứ điều gì. GitHub có một API công khai, miễn phí. Không cần tài khoản hoặc gói trả phí cho các tìm kiếm cơ bản. Đây là mã tôi đã viết để trích xuất dữ liệu: import requests url = "https://api.github.com/search/repositories" ```python params = { "q": "language:python created:>2025-04-22", "sort": "stars", "order": "desc", "per_page": 30 } response = requests.get(url, params=params) data = response.json() print(response.status_code) print(data.keys()) ``` Khối mã này ban đầu gây khó khăn. Thư viện `requests` là một khái niệm mới. Cú pháp `q` trong từ điển `params` có vẻ xa lạ. Người dùng không biết ngay `json()` đang làm gì hoặc tại sao cần sử dụng nó. Để giải thích một cách đơn giản: `requests.get()` là cách để "gõ cửa" GitHub và yêu cầu thông tin. `url` là địa chỉ của thông tin đang được yêu cầu. Từ điển `params` là câu hỏi cụ thể đang được đặt ra. Trong trường hợp này: "cung cấp các kho lưu trữ (repo) Python, sắp xếp theo số sao, được tạo sau ngày 22/4, hiển thị 30 kết quả." `.json()` chuyển đổi phản hồi của GitHub từ văn bản thô thành một từ điển Python có thể làm việc được. Khi chạy mã, kết quả nhận được là: ``` 200 dict_keys(['total_count', 'incomplete_results', 'items']) ``` Mã `200` có nghĩa là thành công. Đây là cách Internet thông báo rằng "yêu cầu của bạn đã được xử lý." Nếu thấy `403` hoặc `404`, có nghĩa là đã xảy ra lỗi. Từ điển có ba khóa. `total_count` cho biết có bao nhiêu kho lưu trữ khớp với tìm kiếm. `incomplete_results` cho biết liệu GitHub có phải cắt bớt bất kỳ thông tin nào không. Và `items` là nơi chứa dữ liệu thực tế. Sau đó, người dùng đã chạy một khối mã thứ hai để xem xét bên trong: ```python print("Total matches on GitHub:", data['total_count']) print("Repos returned:", len(data['items'])) first_repo = data['items'][0] print("\nFirst repo name:", first_repo['name']) print("Stars:", first_repo['stargazers_count']) print("Language:", first_repo['language']) print("URL:", first_repo['html_url']) ``` Kết quả đầu ra: ``` Total matches on GitHub: 9228201 Repos returned: 30 First repo name: skills Stars: 139136 Language: Python URL: https://github.com/anthropics/skills ``` Kết quả đầu tiên là một kho lưu trữ của Anthropic với 139.000 sao. Đây là dữ liệu thực, trực tiếp, được lấy bằng mã đã viết. Như vậy, bước "Trích xuất" (Extract) đã hoàn thành. Bước 2: Chuyển đổi (Transform) Hiện tại, có 30 kho lưu trữ nằm trong một danh sách Python, mỗi kho là một từ điển lồng nhau với hàng chục trường. Hầu hết các trường này đều không cần thiết. Bước "Chuyển đổi" là nơi lấy dữ liệu thô, lộn xộn đó và định hình nó thành một cái gì đó sạch sẽ và có mục đích. Đầu tiên, người dùng chỉ trích xuất các trường quan tâm và tải chúng vào một DataFrame của Pandas: ```python import pandas as pd repos = [] for repo in data['items']: repos.append({ "name": repo['name'], "owne ```

Nguồn tin: Towards Data Science — Tác giả: Ibrahim Salami. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.