messenger_logo
Liên hệ qua Messenger
SciEco

Trích xuất dữ liệu nba bằng lệnh nba2stata trong stata

I
IEFPA
Ngày viết: 08/07/2026

Việc tiếp cận và phân tích dữ liệu thể thao chuyên nghiệp đã trở nên dễ dàng hơn bao giờ hết nhờ vào các công cụ web scraping mạnh mẽ. Trong lĩnh vực khoa học dữ liệu, Stata nổi bật là một phần mềm thống kê mạnh mẽ, và khi kết hợp với các lệnh tùy chỉnh như `nba2stata`, nó cho phép các nhà phân tích nhanh chóng thu thập và khám phá các bộ dữ liệu phức tạp. Lệnh `nba2stata` được thiết kế để trích xuất dữ liệu từ https://stats.nba.com, cung cấp một cầu nối trực tiếp để nghiên cứu các khía cạnh khác nhau của bóng rổ chuyên nghiệp. Tuy nhiên, điều quan trọng cần lưu ý là kể từ tháng 11 năm 2019, lệnh này không còn hoạt động do các hạn chế từ https://stats.nba.com.

Khái Quát Về nba2stata

Lệnh `nba2stata` được phát triển bởi Chris Hassell, người trước đó đã hoàn thành lệnh `nfl2stata`. Đây là một công cụ hữu ích cho những ai muốn phân tích dữ liệu bóng rổ chuyên nghiệp trực tiếp trong môi trường Stata. Để cài đặt lệnh này, người dùng cần chạy dòng lệnh sau trong Stata:

1net install http://www.stata.com/users/kcrow/nba2stata, replace

Khai Thác Dữ Liệu Cầu Thủ NBA

Với `nba2stata`, việc khám phá các xu hướng trong bóng rổ trở nên đơn giản. Một ví dụ điển hình là phân tích cách cú ném ba điểm đã thay đổi cục diện trận đấu. Chúng ta có thể dễ dàng tìm ra những cầu thủ ném ba điểm tốt nhất trong một mùa giải cụ thể hoặc theo dõi hiệu suất của một cầu thủ qua nhiều năm.

Để tìm danh sách các cầu thủ ném ba điểm hiệu quả nhất từ mùa giải 2017:

1nba2stata playerstats _all, season(2017) seasontype(reg) stat(season) clear
2Processing x/543 requests
3.........x.........x.........x.........x.........50
4...
5660 observation(s) loaded
6. gsort -threepointfieldgoalsmade
7. list playername teamname threepointfieldgoalsmade in 1/10
8+----------------------------------------------------+
9     |      playername                teamname   three~de |
10     |----------------------------------------------------|
11  1. |    James Harden         Houston Rockets        265 |
12  2. |     Paul George   Oklahoma City Thunder        244 |
13  3. |      Kyle Lowry         Toronto Raptors        238 |
14  4. |    Kemba Walker       Charlotte Hornets        231 |
15  5. |   Klay Thompson   Golden State Warriors        229 |
16     |----------------------------------------------------|
17  6. | Wayne Ellington              Miami Heat        227 |
18  7. |  Damian Lillard   Portland Trailblazers        227 |
19  8. |     Eric Gordon         Houston Rockets        218 |
20  9. |   Stephen Curry   Golden State Warriors        212 |
21 10. |      Joe Ingles               Utah Jazz        204 |
22     +----------------------------------------------------+

Hoặc, để xem tỷ lệ ba điểm của một cầu thủ như Dirk Nowitzki trong năm mùa giải gần nhất:

1nba2stata playerstat "Dirk", stat(season) seasontype(reg) clear
227 observation(s) loaded
3. gsort -playerage
4. list playername playerage threepointfieldgoalpercentage in 1/5
5+-------------------------------------+
6     |    playername   playe~ge   three~ge |
7     |-------------------------------------|
8  1. | Dirk Nowitzki         40       .409 |
9  2. | Dirk Nowitzki         39       .378 |
10  3. | Dirk Nowitzki         38       .368 |
11  4. | Dirk Nowitzki         37        .38 |
12  5. | Dirk Nowitzki         36       .398 |
13     +-------------------------------------+

Phân Tích Dữ Liệu Đội Tuyển

Lệnh `nba2stata` cũng cho phép phân tích dữ liệu ở cấp độ đội tuyển, chẳng hạn như kiểm tra ảnh hưởng của tỷ lệ ba điểm đến cơ hội chiến thắng. Ví dụ dưới đây cho thấy tỷ lệ thắng của Houston Rockets trong mùa giải 2017 khi tỷ lệ ba điểm của họ cao hơn 35%.

1nba2stata teamstats "HOU", season(2017) stat(game) seasontype(reg) clear
282 observation(s) loaded
3. keep if threepointfieldgoalpercentage > .35
4(35 observations deleted)
5. tab winloss
6Win / loss |      Freq.     Percent        Cum.
7------------+-----------------------------------
8          L |          4        8.51        8.51
9          W |         43       91.49      100.00
10------------+-----------------------------------
11      Total |         47      100.00

Cơ Chế Web Scraping JSON

Không giống như việc web scraping dữ liệu NFL từ các trang HTML, dữ liệu NBA được truy cập thông qua các JSON object từ https://stats.nba.com. JSON là một định dạng dữ liệu gọn nhẹ, dễ dàng phân tích. Do đó, `nba2stata` không cần một lệnh web scrape riêng biệt mà trực tiếp trích xuất và tải dữ liệu trong quá trình hoạt động.

Quy định về bản quyền của NBA tương tự như NFL; người dùng có thể sử dụng bản sao cá nhân của dữ liệu trên máy tính cá nhân. Nếu bất kỳ nội dung nào được "sử dụng, hiển thị hoặc xuất bản" từ dữ liệu này, người dùng phải ghi công rõ ràng tới "http://www.nba.com". Một điểm khác biệt nữa là dữ liệu NBA được lưu trữ trên http://stats.nba.com có thể có từ những năm 1960, tùy thuộc vào từng đội.

Các Lệnh Con Của nba2stata

`nba2stata` có bốn lệnh con chính, cho phép người dùng truy cập các loại dữ liệu khác nhau:

* Để trích xuất dữ liệu thống kê cầu thủ:

1nba2stata playerstats name_pattern [ , playerstats_options ]

* Để trích xuất dữ liệu hồ sơ cầu thủ:

1nba2stata playerprofile name_pattern [ , playerprofile_options ]

* Để trích xuất dữ liệu thống kê đội tuyển:

1nba2stata teamstats team_adv [ , teamstats_options ]

* Để trích xuất dữ liệu danh sách đội tuyển:

1nba2stata teamroster team_adv [ , teamroster_options ]

Tương tự như `nfl2stata`, người dùng sẽ cần sử dụng các lệnh Stata khác như `collapse`, `gsort`, và `merge` để tạo thống kê, sắp xếp dữ liệu và kết hợp hai hoặc nhiều bộ dữ liệu NBA để phân tích sâu hơn.

Các Ví Dụ Nâng Cao

Một câu hỏi thú vị là trường đại học nào đã sản sinh ra nhiều cầu thủ NBA nhất. Điều này có thể dễ dàng được tìm ra bằng cách sử dụng `nba2stata` kết hợp với `collapse` và `gsort`.

1nba2stata playerprofile "_all", clear
2Processing x/4308 requests
3.........x.........x.........x.........x.........50
4...
5.........x.........x.........x.........x.........4300
6........
74308 observation(s) loaded
8. save playerprofile, replace
9file playerprofile.dta saved
10. drop if school == ""
11(114 observations deleted)
12. gen ct = 1
13. collapse (count) ct, by(school)
14. gsort -ct
15. list in 1/10
16+---------------------+
17     |         school   ct |
18     |---------------------|
19  1. |       Kentucky   97 |
20  2. |           UCLA   86 |
21  3. | North Carolina   80 |
22  4. |           Duke   70 |
23  5. |         Kansas   69 |
24     |---------------------|
25  6. |        Indiana   57 |
26  7. |     Notre Dame   55 |
27  8. |     Louisville   53 |
28  9. |        Arizona   51 |
29 10. |       Syracuse   50 |
30     +---------------------+

Do lượng dữ liệu khổng lồ, việc tải tất cả dữ liệu hồ sơ cầu thủ có thể mất khá nhiều thời gian (ví dụ, khoảng một giờ trên một số máy). Do đó, nên lưu lại dữ liệu hồ sơ cầu thủ sau khi đã trích xuất.

Một ví dụ khác là tìm đội trẻ nhất và già nhất trong NBA. Có thể sử dụng dữ liệu danh sách đội tuyển để thực hiện việc này.

1nba2stata teamroster _all, season(2017) clear
2Processing x/30 requests
3.........x.........x.........x
4502 observation(s) loaded
5. collapse (mean) age, by(teamname)
6. sort age
7. list teamname age in 1/5
8+---------------------------------+
9     |              teamname       age |
10     |---------------------------------|
11  1. |          Phoenix Suns   24.4706 |
12  2. | Portland Trailblazers   24.8125 |
13  3. |         Chicago Bulls   24.8889 |
14  4. |         Atlanta Hawks   25.2222 |
15  5. |         Brooklyn Nets   25.3529 |
16     +---------------------------------+
17. list teamname age in -5/l
18+---------------------------------+
19     |              teamname       age |
20     |---------------------------------|
21 26. |    Washington Wizards     27.75 |
22 27. |     San Antonio Spurs   28.3529 |
23 28. | Golden State Warriors   28.6667 |
24 29. |   Cleveland Cavaliers        29 |
25 30. |       Houston Rockets   29.1765 |
26     +---------------------------------+

Việc triển khai lệnh `nba2stata` chủ yếu dựa trên các Java plugin của Stata và thư viện Gson.

✨ **Giá trị đắt giá** ✨

`nba2stata` đã từng là một công cụ mạnh mẽ, giúp các nhà phân tích dữ liệu truy cập trực tiếp vào dữ liệu NBA phức tạp qua JSON, cho phép nghiên cứu chuyên sâu về hiệu suất cầu thủ, chiến lược đội tuyển và xu hướng lịch sử một cách hiệu quả trong Stata.

Câu hỏi tư duy hoặc bài tập ứng dụng

Giả sử lệnh `nba2stata` vẫn hoạt động, bạn sẽ sử dụng nó như thế nào để phân tích mối tương quan giữa tuổi trung bình của một đội và số trận thắng của họ trong một mùa giải cụ thể? Hãy phác thảo các bước Stata cần thiết.


Bài viết khác
Trong bài viết trước, chúng ta đã khám phá ba phương pháp cơ bản để thực thi mã Python trực tiếp trong Stata. Mặc dù các ví dụ ban đầu khá đơn giản, chúng đã tạo nền tảng vững chắc để bạn bắt đầu kết hợp hai công cụ này. Tuy nhiên, sức mạnh thực sự của Python lại đến từ hệ sinh thái hàng nghìn thư viện mã nguồn mở phong phú. Bài viết này sẽ hướng dẫn bạn chi tiết cách quản lý, tải xuống và cài đặt các thư viện Python để mở rộng tối đa khả năng xử lý dữ liệu trong Stata. Kiểm tra cấu hình Python trong Stata Trước khi tiến hành cài đặt các gói mở rộng, chúng ta cần xác nhận rằng Python đã được tích hợp chính xác vào hệ thống và Stata đã sẵn sàng làm việc với môi trường này. Từ cửa sổ lệnh của Stata, bạn hãy chạy lệnh kiểm tra cấu hình:
Khi trình bày kết quả nghiên cứu, việc tạo ra các bảng biểu trực quan và đúng chuẩn xuất bản là tiêu chí vô cùng quan trọng. Trong các phiên bản Stata trước đây, việc định dạng bảng thường đòi hỏi nhiều thao tác thủ công hoặc chỉnh sửa lại trên các phần mềm xử lý văn bản. Stata 17 đã giải quyết triệt để thách thức này bằng hệ thống lệnh collect, cho phép người dùng tùy biến toàn bộ cấu trúc, nhãn hiển thị, đường viền và xuất bảng trực tiếp sang các định dạng tài liệu phổ biến. Khởi đầu với bảng thống kê cơ bản Để hiểu rõ cơ chế hoạt động của collect, hãy bắt đầu bằng việc tạo một bảng thống kê mô tả cơ bản kết hợp giữa hai biến số giới tính và huyết áp cao. Lệnh table dưới đây thu thập các thông số bao gồm tần suất, tỷ lệ phần trăm, giá trị trung bình và độ lệch chuẩn của tuổi tác.
SciEco
Science for Economics
Định hướng đào tạo phân tích dữ liệu, xây dựng chính sách, tối ưu hoá danh mục tài chính cá nhân và dự báo thị trường.
Liên hệ
Địa chỉ: Số 60, ngõ 41, Phố Thái Hà, Trung Liệt, Đống Đa, Hà Nội (Google Map)
Email: science.for.economics@gmail.com
Hotline: 03.57.94.7680 (Mrs. Hà)
Mạng xã hội