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
Gói deltatest vừa phát hành phiên bản 0.2.0 với hai cập nhật quan trọng: phương thức tidy() cho đối tượng deltatest và sửa lỗi tính giá trị p cho kiểm định một phía. Trước khi đi vào chi tiết, hãy nhắc lại nhanh mục đích của gói này. deltatest giải quyết bài toán gì deltatest cung cấp hàm deltatest() để thực hiện kiểm định Z hai mẫu dựa trên phương pháp Delta. Gói này thiết kế cho bối cảnh phổ biến trong thử nghiệm A/B trực tuyến: ngẫu nhiên hóa ở mức người dùng nhưng chỉ số đo lường ở đơn vị tốt hơn như lượt xem trang hoặc phiên làm việc. Trong thiết lập này, các kiểm định ngây thơ (Z-test chuẩn, kiểm định chi-bình phương, kiểm định hiệu tỷ lệ) thường thấp 추정 độ không chắc chắn vì các quan sát trong cùng một người dùng không độc lập. deltatest() khắc phục vấn đề này bằng bộ ước lượng phương sai dựa trên phương pháp Delta.
Trong bối cảnh các tổ chức chính phủ và tổ chức phi lợi nhuận ngày càng cần công cụ trực quan hóa dữ liệu minh bạch, mở và bền vững, việc lựa chọn công cụ phù hợp không chỉ ảnh hưởng đến chất lượng báo cáo mà còn quyết định tính khả thi trong dài hạn. D3po và Tabler – hai dự án mã nguồn mở được phát triển bởi pacha.dev – chính là giải pháp lý tưởng cho những ai cần biểu đồ tương tác mà không lo rủi ro pháp lý từ giấy phép GPL. D3po là một gói R thay thế miễn phí cho Highcharter, với thiết kế hướng đến sự đơn giản và hiệu suất cao. Thay vì bao gồm hàng trăm tùy chọn phức tạp, D3po tập trung vào các tính năng cốt lõi: biểu đồ dạng cây (treemap), biểu đồ đường, biểu đồ cột – tất cả đều được xây dựng trên nền tảng JavaScript mạnh mẽ nhưng không yêu cầu giấy phép trả phí cho mục đích tổ chức. Điều này đặc biệt quan trọng khi các cơ quan nhà nước hoặc NGO phải tuân thủ nghiêm ngặt về nguồn gốc phần mềm. Một trong những câu hỏi thường gặp sau khi giới thiệu D3po là: Liệu có thể tạo biểu đồ treemap lồng ghép (nested treemap) không? Câu trả lời là có. Trong gói demo được cung cấp, người dùng có thể khám phá cách xây dựng cấu trúc phân cấp rõ ràng, từ cấp quốc gia đến tỉnh thành, thể hiện dữ liệu phân bổ ngân sách hoặc dân số theo từng tầng. Sự linh hoạt này giúp người dùng truyền tải thông tin phức tạp một cách trực quan mà không cần đến các công cụ thương mại đắt đỏ.
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: [email protected]
Hotline: 03.57.94.7680 (Mrs. Hà)
Mạng xã hội