PHPMem v2.0.1
Version
1.6.45
Uptime
17 days 21 hours 37 minutes 49 seconds
Memory
Total
512MB
Used
12,72MB (2.48%)
Free
499,28MB
Keys
Current
14 060
Total (since start)
40 994
Evictions
0
Reclaimed
760
Expired Unfetched
0
Evicted Unfetched
0
Connections
Current
3 / 1 024 max
Total
241 890
Rejected
0
llm:4fa44229b220ff53c97a4b4443763be33f417c1e1b58c01a79049ca63708ed63
Edit
**The most surprising finding is that this "tennis player data" is really a lower-tier, patchily recorded dataset, and the surface comparisons rest on very uneven coverage.**
1. **The typical player is not elite.** The mean player rank is about 311 on hard courts, 361 on clay and 517 on carpet. Medians are 237, 288 and 440, and ranks run as high as 2,225. The dataset covers roughly 237k player-matches and about 3,963 distinct tournament strings, so most of it is the Challenger and qualifying level. A reader expecting a dataset of tour stars would find the opposite.
2. **Serve stats are missing for a large and uneven share of matches.** The share of player-matches with serve stats (aces, double faults, points won) is 86.5% on grass, 66.6% on hard, 58.9% on clay and only 19.3% on carpet (479 of 2,477 rows). Missingness depends heavily on surface, so the data is not missing at random.
3. **The headline surface effects partly reflect who plays where, and what gets recorded.**
- Average aces per match are 7.94 on carpet, 7.57 on grass, 5.88 on hard and 3.38 on clay. The ordering is plausible.
- Grass matches feature far higher-ranked players (mean rank 151, median 109) than clay (361 and 288). So the ace gap mixes surface speed with player quality.
- The carpet figure rests on only 479 matches with serve data.
- Double faults barely vary by surface, at 2.81 to 3.17 per match. Surface seems to change how often players hold serve far more than how often they fault.
4. **Minor data quality issue.** 28 player-matches have a blank surface and no serve stats at all.
Together these points mean any "best surface" or win-probability model built on this data needs to control for rank and handle the missing serve stats explicitly. Otherwise it will mistake data selection for tennis.
This is based on the per-surface aggregates and the coverage query I ran on `raw_kaggle`. I did not test how much of the ace gap survives after controlling for rank.