PHPMem v2.0.1
Version
1.6.45
Uptime
15 days 20 hours 18 minutes 53 seconds
Memory
Total
512MB
Used
9,38MB (1.83%)
Free
502,62MB
Keys
Current
11 436
Total (since start)
35 066
Evictions
0
Reclaimed
738
Expired Unfetched
0
Evicted Unfetched
0
Connections
Current
7 / 1 024 max
Total
179 479
Rejected
0
llm:546fffac86a8dd62bb8a75644aedf89ba4f88265bb20505f2f2b7d2030fbb2fc
Edit
Yes. **Court surface is the most natural segmentation**, and it separates the records cleanly. A few other groupings are worth layering on top.
**1. Surface (strongest segment)**
The main fact tables have a 4-value `Surface` column: Hard, Clay, Grass and Carpet. In `raw.raw_kaggle` the segments differ a lot in size and in playing profile (the rendered surface tables from the queries show all of this):
| Surface | Rows | Avg aces | Avg double faults | Avg total points | Avg player rank |
|---|---|---|---|---|---|
| Hard | 117,571 | ~5.9 | ~2.97 | ~149 | ~311 |
| Clay | 107,650 | ~3.4 | ~2.81 | ~147 | ~361 |
| Grass | 9,479 | ~7.6 | ~3.17 | ~168 | ~151 |
| Carpet | 2,477 | ~7.9 | ~3.11 | ~146 | ~517 |
- **Hard and clay** make up almost all the data. Grass and carpet are small segments, and carpet looks like a legacy surface.
- **Clay is the low-ace surface**, at roughly half the aces of hard and about 40% of the grass and carpet averages.
- **Grass is the fast surface with the longest matches.** It has high aces, the most double faults, and the most total points per match (~168).
- **Grass draws a stronger field.** Its average rank is ~151, against 311 on hard and 361 on clay (lower means better). Some of the surface differences may therefore reflect who plays there, not just the court.
- **28 rows have no surface recorded.** Keep them as an "unknown" bucket or exclude them.
The same `Surface` split exists in the serve and return tables, and the gold tables `*_by_Surface` already aggregate it.
**2. Other natural groupings** (from the dataset card; I did not profile these in this turn)
- **Round (`Rd`, ~14 values):** early rounds versus deep rounds, to see how form changes as a tournament progresses.
- **Tournament (~3,963 distinct values):** too fine-grained to use directly. Group it into tournament level or tournament × surface, which the gold tables `*_by_Tournament_Surface` already provide.
- **Player rank bands (`Rk` / `vRk`):** these are continuous, with ranks from 1 to about 2,250. Bucket them, for example into top 10, top 100 and the rest, to compare profiles against stronger or weaker opponents. The `return_kaggle_by_Rk*` gold tables do this.
- **Break-point situations (`Bpsvd`, `BPCnv`):** serve and return behaviour under pressure.
- **Time (`Date` / year):** era-based segments, because the data spans 2006 or 2013 to 2024 depending on the table.
- **Player (`Name`):** a per-player entity grouping, with `raw.players_man_` and `raw.players_tournament_man_` as dimension tables.
**Caveat:** the tables have no verified join keys, so each segmentation has to be done within a single table. `Surface`, `Rd` and `Tournament` are shared by name across the three match fact tables, but I have not verified that their rows line up.
**Recommendation:** segment first by Surface, then by Round or rank band. Treat Grass and Carpet as small-sample groups.