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, replaceKhai 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.00Cơ 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.


