Riccardo Cappuzzo

Riccardo Cappuzzo

@riccardocappuzzo.com

Research engineer at Inria Saclay, working on the Skrub library. PhD in computer science. Python, data preparation, ML, tabular learning. ORCID: 0000-0002-4448-2959 Hoshiyomi ☄️ https://www.riccardocappuzzo.com https://github.com/rcap107

237 followers596 following110 posts

Riccardo Cappuzzo reposted

🪄 Text in. Features out. Turn information rich strings into meaningful encodings via your favorite pretrained language models from Hugging Face 🤗 Encode text columns for machine learning with skrub.LLMEncoder. pip install skrub[transformers]

Riccardo Cappuzzo reposted

Ever tried to run a scikit-learn pipeline on a dataframe with mixed types? You need one encoder for categorical columns, another for text, a third for dates... it gets verbose fast! skrub.TableVectorizer is the "fit once, vectorize any table" transformer. skrub-data.org/stable/refer...

Riccardo Cappuzzo reposted

details leaked. this vulnerability is a full unauthenticated unconditional remote code execution exploit against any service running on a PHP version from 5.4 until latest yeah if anything deserves CVSS 11, this is it. this is CATACLYSMICALLY bad.

nightshade →eth0:2026@nightshade.technology

oh it's bad. oh it's BAD bad. oh this is CATASTROPHIC, drop-whatever-you're-doing-and-patch-NOW levels of bad cert.europa.eu/publications...

Riccardo Cappuzzo reposted

🐞 Bug fix release incoming 🐛 Version 0.10.1 of skrub is now live! In this release, we fixed a Cloudpickle import error that could be triggered by some updated dependencies, along with some other improvements. Release post: github.com/skrub-data/s... 1/4

github.comRelease 0.10.1 · skrub-data/skrub🌟 Skrub 0.10.1 has been released 🌟 Main features When a cross-validation splitter has been passed to .skb.mark_as_X(), it it now possible to select a specific split from it when calling .skb.train...

So, my evening was spent blindly debugging with Claude why my Pi wouldn't finish booting after a power cut. arp fishing for an IP, almost losing the SD in the thermal case, and a final decision of backing up and flashing the SD from scratch And all I had to do was plugging in the right HDD

As it turns out, the problem was that I misconfigured /etc/fstab so that said "right HDD" was mounted without the nofail flag, and I just so happened to unplug said HDD to bring it to work. So power went out, the Pi tried to boot but went "😱 no HDD" and got stuck

Lessons learned: The nofail flag is very important, Claude is great, but still not good enough to spot the solution before going along with the nuclear option and I absolutely need a bloody mini HDMI adapter, all my woes would have been solved by simply looking at the logs

Release day 🎉

Skrub@skrub-data.bsky.social

✨ Skrub version 0.9.0 has been released ✨ This release adds some advanced features to the Data Ops, the has_dtype() selector, as well as some clarity improvements for the Cleaner and TableReport. Release post: github.com/skrub-data/s...

Riccardo Cappuzzo reposted

✨ skrub version 0.8.0 has been released ✨ This version includes several new features, including multiple improvements to the functionality and performance of the Data Ops, along with a few bug fixes and improvements to the docs. Changelog: skrub-data.org/stable/CHANG... Highlights below ⤵️

skrub-data.orgRelease historyRelease 0.8.0: New Features: The eager_data_ops configuration option has been added. When set to False, no previews are computed and validation is deferred until the DataOp is actually used (e.g. w...

For context, $375M is about two days worth of profit for Meta in 2025

Forbes@forbes.com

The lawsuit concerned allegations that Meta covered up its platforms’ impact on children's mental health and its knowledge of child exploitation online.

Rabbit hole of the day: writing a command that fuzzy searches in the repository for any substring, shows me a preview of the line with context and opens the file at the given line in VS Code. Requires fzf, universal-ctags and batcat

And yes I understand that there may be some (a lot of?) human influence on the blog post. However, whether it was a human or an AI doesn't matter: the end result is the same, and the conditions for the same thing to happen with no human in the loop are likely already here.

The more I hear about Clawbot the more I'm convinced it's some kind of social experiment trying to figure out how many people are willing to put their entire private and professional lives in the hands of an overeager child open to the unlimited influence of the world wide web

Funny bug of the day: if you try to use pandas' "guess_datetime_format" with datetimes where the hour and minute are the same as the year (like 1959 and 19:59), the parser will fail and return None. This bug is present in pandas 2.3.3, but has been fixed in the dev version.

Random question shot into the ether: if I'm relying on VSCode's interactive windows to emulate notebooks, what are some reasons why I should switch to @marimo.io notebooks? I haven't looked into marimo's features, so maybe I'm missing out on things I can't do from VSCode.

Something that immediately ended up being a roadblock was the "This cell redefines variables..." error. I realized that when I'm plotting dataframes I always end up chaining df operations across different cells and this is putting a wrench in that. You might argue it's for the best, but still 😅

That's me! It was a fun presentation and we got a lot of interesting questions Also people laughed at the memes which is the most important thing, obviously

Skrub@skrub-data.bsky.social

The recording of the talk we did at @pydataparis.bsky.social 2025 is now available on the PyData Youtube channel! 🚀 You can find it here, if you want to check it out 👀 www.youtube.com/watch?v=k9MN...

My first actual talk in front of a ton of people 🙃

Skrub@skrub-data.bsky.social

📅 Less than a week away! The talk will be on Oct 1st at 10.05AM in room Louis Armand 1 - Est. If you want to contribute to skrub, we will also have a sprint on Thursday. See you there!

Riccardo Cappuzzo reposted

Do you have to deal with numerical features that involve large outliers, and need to train linear models or neural networks? Then you might want to try the skrub SquashingScaler. The SquashingScaler behaves like scikit-learn RobustScaler, but smoothly clips outliers to predefined boundaries.

Riccardo Cappuzzo reposted

Heads Up, #Python Developers! There is an active phishing attack targeting PyPI users. • Threat: Emails from noreply@pypj.org (with a 'j') link to a fake login page. • Action: Do not click any links. If you already did, change your PyPI password ASAP. • Note: PyPI itself has not been breached.

Huge release, and the first one where I felt like I actually contributed a lot to the final result. I really think DataOps are a game changer, and I can't wait to see what people come up with with them. I also ended up rewriting most of the user guide, hopefully improving it along on the way 😂

Skrub@skrub-data.bsky.social

⚡ Release 0.6.0 is now out! ⚡ 🚀 Major update! Skrub DataOps, various improvements for the TableReport, new tools for applying transformers to the columns, and a new robust transformer for numerical features are only some of the features included in this release.

Out of all the features in the expressions, this may be my personal favorite. I always end up adding too many configurations just because the syntax is so convenient.

Skrub@skrub-data.bsky.social

👀 This week's post will be another sneak peek into skrub expressions, an upcoming feature that will ease the preparation and execution of machine learning pipelines on dataframes. This time we will focus on how expressions can simplify the construction of complex hyperparameter grids.

Riccardo Cappuzzo reposted

📝 The skrub TextEncoder brings the power of HuggingFace language models to embed text features in tabular machine learning, for all those use cases that involve text-based columns.