NBA
NBA data and analyses, including a generator of PDF player sheets in R Markdown.
From university lecture halls to football matches in 3D: years of curiosity turned into projects, alongside a career as a statistician, a data scientist and then an analytics engineer. Here is how it all connects.
From university to the major statistics institutes: learning to make numbers speak rigorously, before giving them a shape. The tools are already there: SAS, SQL, R.
It all starts with a passion: sport. The first Shiny apps rank football clubs, NBA player sheets write themselves and Twitter becomes the first playground for text analysis.
NBA data and analyses, including a generator of PDF player sheets in R Markdown.
Shiny app with football statistics (standings, players, budgets) and the scraping scripts.
Tweet analysis: the 2017 French presidential debate, Donald Trump's tweets, where Super Bowl 50 tweets came from, and sentiment with the NRC lexicons.
Ambitions grow: D3.js finds its way into Shiny, unemployment in every Luxembourg municipality goes on a map, the subscriber counts of French rap YouTube channels are recorded day after day and the big five leagues are collected season by season.
D3.js charts embedded in Shiny apps: foreign worker hiring, freight, steel production.
Player and goalkeeper statistics for the big five leagues, season by season (2012-2019), scraped from Squawka, with the fixtures.
The unemployment rate of every Luxembourg municipality from 2001 to 2015 (STATEC), on a map.
Daily subscriber counts of French rap YouTube channels in 2017.
Data comes to life: a bar chart race animates new car sales in Luxembourg, and an interactive map follows European fishing catches, area by area.
New car sales in Luxembourg by brand and by quarter, and a D3 bar chart race of the brands.
Fishing catches of European countries from 2010 to 2017 by FAO fishing area, by country and by species.
Every project starts with a question. Where are Luxembourg's companies and what do they do? How do Seattle's bikes get around? Why does a handful of causes produce most of the effects?
Luxembourg companies geolocated and classified by NACE activity, with their headcount.
Describing a Pareto phenomenon on a sample of European data.
Trips on Seattle's Pronto bike-share scheme (2014-2016), with stations and weather.
See the project →Sharing becomes as important as building: a complete R course, in slides, sees the light of day. On the project side, the Luxembourg housing market is mapped and the CAC 40 shareholding network is revealed.
The shareholding links between CAC 40 companies, as an interactive network.
Collecting and cleaning Luxembourg property listings (atHome, immotop, wort) and a search app: a map of listings by municipality and a filterable table.
A complete R course in slides: basics, import, charts, storytelling, R Markdown, highcharter, leaflet, rvest, Shiny.
Tools built to be used: a bar chart race on any Eurostat dataset, Luxembourg's local services on a map. And models: housing prices, tweet sentiment, Brazilian e-commerce.
A model of Luxembourg property prices built from atHome listings, explaining the variables that drive the price.
An app that turns any Eurostat dataset into an animated bar chart race with flags (D3 in Shiny), shown here on tourist overnight stays.
The Olist Brazilian e-commerce dataset: orders, payments, deliveries.
A tweet sentiment classifier (positive / negative), trained on the Sentiment140 dataset (1.6 million tweets).
See the project →Leaflet maps of music schools, conservatories, playgrounds and POST Luxembourg service points.
Data collection speeds up (TripAdvisor restaurants, Colruyt products) and the stories multiply: thirty years of Luxembourg's foreign trade, road accidents in France, shopping baskets, the Kaggle survey, the reach of LinkedIn posts.
Scraping the Colruyt product catalogue (categories, brands, prices, Nutri-Score).
Kaggle's annual survey of data science and machine learning jobs.
Cleaning and analysing the LinkedIn posts export: impressions, interactions, content type, hashtags.
Luxembourg's goods exports and imports by partner country since 1993 (Eurostat Comext): a trade balance map, trends by country and the products traded.
Market basket analysis (which products are bought together) on the Olist data, in Python.
Small reproducible R and Python examples: simulations, reading shapefiles, dates, multi-sheet Excel files.
Road traffic injury accidents in France (BAAC files): when, where and under what conditions they happen.
Scraping Luxembourg restaurants on TripAdvisor: rating, number of reviews, cuisine and price range.
A radar to measure your skills against data jobs, Paris Airbnb listings neighbourhood by neighbourhood, and a touchy sports question: does money buy the league table?
Paris Airbnb listings (Inside Airbnb, four snapshots from 2023): prices, neighbourhoods, property types.
Rate your skills from 1 to 10 and compare yourself with the typical profiles of data jobs (Data Engineer, ML Engineer, Data Scientist, Data Analyst).
A presentation of R in reveal.js slides: R Markdown, highcharter, leaflet, purrr, text analysis, rvest.
Budget, wages and standings: the NBA (a closed league) compared with Europe's football leagues, to measure how much money buys the table.
LinkedIn metrics flow into Notion on their own, freelance day rates are mapped, and football is back in the spotlight with the xG and xA of Europe's best players.
IT freelance day rates in France by job, experience and region, with a Tableau workbook and maps.
See the project →Fetching the metrics of my LinkedIn posts (views, reactions, comments) and updating an editorial calendar in Notion, with the naas tools.
Players' xG and xA scraped from FBref (Champions League and top 5 leagues) and charts in R: quadrants, lollipops, shots-on-target series.
A real football data collection takes shape: FotMob, WhoScored, a consolidated Ligue 1, a match analysis app and Tableau dashboards on Real Madrid.
Consolidated Ligue 1 2024-2025 data (matches, players, WhoScored events) prepared for an app.
See the project →Notebook that fetches FotMob match data: metadata, statistics and every shot with its xG.
Streamlit app for analysing LaLiga 2024-2025 matches from parquet files (matches, players, events, metrics), with a post-match dashboard.
Tableau dashboards (.twb files) on Real Madrid's 2024-2025 matches: events, players, market values, with pitch backgrounds drawn for the occasion.
Notebooks that find WhoScored match URLs and download their events and players, with a few visualisations.
Everything comes together: a data warehouse (MotherDuck, dbt), 3D matches, shot flows, Transfermarkt, the Ballon d'Or, Luxembourg in 3D and a daily podcast, all published on data-workers.com.
The automated production of Data Workers' daily podcast: every working day, finance and tech news received by email is filtered, summarised, voiced (ElevenLabs) and published to a feed picked up by Apple Podcasts and Spotify.
The 23,373 buildings of Luxembourg City in 3D, extruded to their height and coloured by year of construction, with the history of the city and of those who governed it.
A "Shot Flow" Sankey of a player's shots: zone → situation → body part → outcome, then the assist provider, how the goal was scored and the phase of play.
A data storytelling video on the leagues of the players ranked in the Ballon d'Or since 1976.
Fifty seasons of the French, English and Spanish leagues, the Champions League and the NBA on an interactive map.
Each line follows a theme from year to year: football, from the first Shiny app to the data platform; Luxembourg, from unemployment maps to the city in 3D. Each dot is a project: hover over it or tap it to find it in the story.