<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Michael Chow</title>
    <link>/</link>
    <description>Recent content on Michael Chow</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <copyright>Follow on &lt;a href=&#34;https://twitter.com/chowthedog&#34; target=&#34;_blank&#34;&gt;Twitter&lt;/a&gt; | &lt;a href=&#34;https://github.com/mgjohansen/hucore.git&#34; target=&#34;_blank&#34;&gt;Hucore theme&lt;/a&gt; &amp; &lt;a href=&#34;http://gohugo.io&#34; target=&#34;_blank&#34;&gt;Hugo&lt;/a&gt; ♥</copyright>
    <lastBuildDate>Wed, 22 Jul 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>PyPharma: Modernising Clinical Data Transformation (PHUSE NJ 2026)</title>
      <link>/posts/pypharma-phuse-nj/</link>
      <pubDate>Wed, 22 Jul 2026 00:00:00 +0000</pubDate>
      <guid>/posts/pypharma-phuse-nj/</guid>
      <description>This is an annotated version of my talk &amp;ldquo;PyPharma: Modernising Clinical Data Transformation&amp;rdquo;, given at the PHUSE Single Day Event in West Windsor, NJ in July 2026. Last year at the same event I talked about building the pharmaverse in Python with polars. This year&amp;rsquo;s talk picks up from a very different 2026: the year AI shook up how tools get built—including for the people who built the Python data stack.</description>
    </item>
    <item>
      <title>The Curse of Documentation (posit::conf 2025)</title>
      <link>/posts/curse-of-documentation/</link>
      <pubDate>Wed, 17 Sep 2025 00:00:00 +0000</pubDate>
      <guid>/posts/curse-of-documentation/</guid>
      <description>This is an annotated version of my talk &amp;ldquo;The Curse of Documentation&amp;rdquo;, given at posit::conf(2025) in Atlanta in September 2025. You can watch the video or flip through the original slides. The talk is about why documentation sites so often have tons of information but not the information you need—and how a good user guide breaks that curse.&#xA;The takeaway: docs become cursed when there&amp;rsquo;s nothing between one polished example and an API reference of 105 tiny functions—and a user guide is the thing that fills that middle layer.</description>
    </item>
    <item>
      <title>User Guides: engaging new users, delighting old ones (SciPy 2025)</title>
      <link>/posts/user-guides-scipy-2025/</link>
      <pubDate>Wed, 09 Jul 2025 00:00:00 +0000</pubDate>
      <guid>/posts/user-guides-scipy-2025/</guid>
      <description>This is an annotated version of a talk I gave at SciPy 2025 in Tacoma, WA, in July 2025. You can watch the video or view the original slides. The talk is about user guides—what they do that API references can&amp;rsquo;t, and the two key pieces to focus on for getting one right: onboarding and grazing.&#xA;The takeaway: an API reference alone strands newcomers in a sea of 40+ functions, and a user guide fixes that by being concrete and right-sized.</description>
    </item>
    <item>
      <title>Plotting art with plotnine</title>
      <link>/posts/plotnine-art/</link>
      <pubDate>Sun, 14 Jul 2024 00:00:00 +0000</pubDate>
      <guid>/posts/plotnine-art/</guid>
      <description>Recently, I&amp;rsquo;ve been helping the plotting library plotnine&amp;mdash;a port of ggplot2 to Python. plotnine normally is used to make plots for data analysis. But what if I told you there is another option: cobbling up generative art.&#xA;In this post I&amp;rsquo;ll walk through the basics of using plotnine to create generative art. I&amp;rsquo;ll look at three pieces:&#xA;plotting art data removing unecessary theme() elements (like axis ticks) examples of folks making generative art If you&amp;rsquo;re curious about plotnine and generative art, this is a great opportunity to submit something artsy to the 2024 Plotnine Contest (deadline is 26 July 2024).</description>
    </item>
    <item>
      <title>Two years at RStudio (now Posit)</title>
      <link>/posts/two-years-at-rstudio/</link>
      <pubDate>Sat, 01 Jun 2024 00:00:00 +0000</pubDate>
      <guid>/posts/two-years-at-rstudio/</guid>
      <description>Recently, I wrapped up two years working on the Open Source team at Posit. This last year was largely spent getting two open source tools—quartodoc and Great Tables—off the ground.&#xA;The two packages have very different audiences.&#xA;quartodoc feels developer focused. It creates API documentation for other packages, so its users are package developers. This audience is smaller, but willing to put in a lot of work to get what they need.</description>
    </item>
    <item>
      <title>Why did I join RStudio (now Posit)?</title>
      <link>/thoughts/why-rstudio/</link>
      <pubDate>Sat, 01 Jun 2024 00:00:00 +0000</pubDate>
      <guid>/thoughts/why-rstudio/</guid>
      <description>Travel back to 2021, and I find myself doing two things:&#xA;Living in a van in my brother’s driveway. Talking about my work on siuba at rstudio::conf. I didn’t plan to do either of those things: the van a result of getting cagey in a Philly apartment, rstudio::conf() a funky place to talk about python packages at the time.&#xA;After the conference, I ended up working as a consultant building out a data warehousing team for the California Department of Transportation1.</description>
    </item>
    <item>
      <title>Making Beautiful, Publication Quality Tables in Python is Possible in 2024 (PyCon US)</title>
      <link>/posts/beautiful-tables-python-pycon-2024/</link>
      <pubDate>Fri, 17 May 2024 00:00:00 +0000</pubDate>
      <guid>/posts/beautiful-tables-python-pycon-2024/</guid>
      <description>This is an annotated version of a talk I gave with Rich Iannone at PyCon US 2024 in Pittsburgh, about making beautiful, publication quality tables in Python with Great Tables. You can grab the original slides from Rich&amp;rsquo;s presentations repo. There are two recordings of the talk: a cleaner re-recording on the Posit YouTube channel (embedded below) and the live PyCon recording.&#xA;The takeaway: a display table is a data visualization—it deserves the same design care as a chart, and it belongs in your reproducible code workflow rather than pasted together in Excel.</description>
    </item>
    <item>
      <title>The project questionnaire: from ideas to action</title>
      <link>/posts/cfp-project-questionnaire/</link>
      <pubDate>Sat, 16 Mar 2024 00:00:00 +0000</pubDate>
      <guid>/posts/cfp-project-questionnaire/</guid>
      <description>Over the past 5 years—while helping create projects at Code for Philly and sitting on organizing committees for events—I’ve often reached for the Code for Philly Project Questionnaire.&#xA;In this post, I want to discuss what makes the questionnaire so useful, and the different situations I’ve ended up using it in.&#xA;Here are some quick numbers on project questionnaires filled out over the years:&#xA;Code for Philly projects: 25 questionnaires for projects related to bail funds, covid dashboards, etc&amp;hellip; (See this article discussing the projects we focused on in 2020).</description>
    </item>
    <item>
      <title>Poet Mouthwash</title>
      <link>/thoughts/poet-mouthwash/</link>
      <pubDate>Tue, 05 Mar 2024 00:00:00 +0000</pubDate>
      <guid>/thoughts/poet-mouthwash/</guid>
      <description>A few years ago, I went to a farewell poetry reading for my friend Maryan. We sat under her favorite tree in West Philly&amp;rsquo;s Clark Park&amp;mdash;the one with glittery bits of mica in its bedskirts&amp;mdash;as people got up to read poems.&#xA;Poems tend to stick around after they’re read&amp;mdash;not necessarily verbatim, but in parts and rhyme and semantic flavor&amp;mdash;so she would reset us with Poet Mouthwash, by reading from Gertrude Stein’s book Tender Buttons.</description>
    </item>
    <item>
      <title>The Dashboard</title>
      <link>/thoughts/the-dashboard/</link>
      <pubDate>Sun, 03 Dec 2023 00:00:00 +0000</pubDate>
      <guid>/thoughts/the-dashboard/</guid>
      <description>Here, all of it! Click the buttons, expand the dropdowns, fill the inputs, multi-select one or two or three onto the graph, with its period in days or weeks or months (your choice), not this tab but the next, the next, or wait no the hamburger.&#xA;Every insight there, the keen with the mundane, interspersed for your pleasure—the needle is yours but first the haystack. It can’t be made a slide deck, a slide deck could never capture the sheer interactive power of dashboard.</description>
    </item>
    <item>
      <title>GOTCHA</title>
      <link>/tiny/gotcha/</link>
      <pubDate>Sun, 18 Jun 2023 12:01:01 +0000</pubDate>
      <guid>/tiny/gotcha/</guid>
      <description>As you get halfway through a book called quit you begin to notice some turns into strange diversions until we feel like you are reading an entirely different altogether less compelling book </description>
    </item>
    <item>
      <title>GOD KNOWS WHERE</title>
      <link>/tiny/god-knows-where/</link>
      <pubDate>Sun, 18 Jun 2023 00:00:00 +0000</pubDate>
      <guid>/tiny/god-knows-where/</guid>
      <description>this is not a format I made up but borrowed from joy williams&amp;#39; 99 stories of god who borrowed from </description>
    </item>
    <item>
      <title>BOYS CLUB</title>
      <link>/tiny/boys-club/</link>
      <pubDate>Sat, 13 May 2023 00:00:00 +0000</pubDate>
      <guid>/tiny/boys-club/</guid>
      <description>Smokey bear has a friend named woodsy owl And it says something that all our wilderness advice comes from cartoon man creatures who sport great denim. </description>
    </item>
    <item>
      <title>TAKE TWO AND CALL ME IN THE MORNING</title>
      <link>/tiny/sweet-tart/</link>
      <pubDate>Sat, 13 May 2023 00:00:00 +0000</pubDate>
      <guid>/tiny/sweet-tart/</guid>
      <description>If a doctor prescribed 200mg of nerds it would be a sweet tart. </description>
    </item>
    <item>
      <title>One year on the open source team at RStudio (now Posit)</title>
      <link>/posts/one-year-at-rstudio/</link>
      <pubDate>Wed, 01 Feb 2023 00:00:00 +0000</pubDate>
      <guid>/posts/one-year-at-rstudio/</guid>
      <description>In early 2022 I joined RStudio&amp;rsquo;s open source group as its second full-time python developer. With one year under my belt, I wanted to look back on the things I&amp;rsquo;ve worked on, and what I&amp;rsquo;ve learned in the process.&#xA;I started at RStudio with a concrete task&amp;mdash;port the R library pins to python&amp;mdash;along with the expectation that I&amp;rsquo;d work on my tool for data analysis, siuba. Along the way, I collaborated with the shiny team, and ended up developed a real enthusiasm for the value of good documentation.</description>
    </item>
    <item>
      <title>The Accidental Analytics Engineer (Coalesce 2022)</title>
      <link>/posts/accidental-analytics-engineer/</link>
      <pubDate>Tue, 18 Oct 2022 00:00:00 +0000</pubDate>
      <guid>/posts/accidental-analytics-engineer/</guid>
      <description>This is an annotated version of a talk I gave at dbt Coalesce 2022 in New Orleans on October 18, 2022 — you can watch the video or flip through the original slides. It&amp;rsquo;s about how data scientists accidentally fall into analytics engineering, and a few things that make the landing softer.&#xA;The takeaway: there are two cultures of data science — the tidyverse worldview, focused on turning raw data into insight, and the modern data stack worldview, focused on serving clean data to end users — and data scientists fall into analytics engineering when their one-off analysis work quietly becomes a data-serving job.</description>
    </item>
    <item>
      <title>FELT GOOD AT THE TIME MIGHT DELETE LATER</title>
      <link>/tiny/felt-good-at-the-time/</link>
      <pubDate>Wed, 01 Jun 2022 12:01:12 +0000</pubDate>
      <guid>/tiny/felt-good-at-the-time/</guid>
      <description>You were so busy deploying apps that we forgot about the greatest app of all this app they call life </description>
    </item>
    <item>
      <title>HUNGER GAMES</title>
      <link>/tiny/hunger-games/</link>
      <pubDate>Wed, 01 Jun 2022 12:01:11 +0000</pubDate>
      <guid>/tiny/hunger-games/</guid>
      <description>You scatter seed but do not weed for we hate it and season to season the strongest the ones that rise against all odds live on although they can- not make a stew of the victor </description>
    </item>
    <item>
      <title>OPTIONALITY</title>
      <link>/tiny/optionality/</link>
      <pubDate>Wed, 01 Jun 2022 12:01:06 +0000</pubDate>
      <guid>/tiny/optionality/</guid>
      <description>My boss carries three pens, one black one blue one red. Everyday we write her novel in black pen. It&amp;#39;s arduous. He sweats as they write, and every day discusses a hurdle, the old ones: a block, a junction with two roads no one wants to commit to. The new ones: a loveless marriage, plumbing issues. After 700 pages of black pen you finish. </description>
    </item>
    <item>
      <title>OUT OF SIGHT</title>
      <link>/tiny/out-of-sight/</link>
      <pubDate>Wed, 01 Jun 2022 12:01:02 +0000</pubDate>
      <guid>/tiny/out-of-sight/</guid>
      <description>A Blind Dog crossing an invisible border into the neighbor&amp;#39;s yard </description>
    </item>
    <item>
      <title>IT&#39;S ON THE BOX</title>
      <link>/tiny/its-on-the-box/</link>
      <pubDate>Wed, 01 Jun 2022 12:01:01 +0000</pubDate>
      <guid>/tiny/its-on-the-box/</guid>
      <description>I started cooking us fishsticks but forgot to record the time but also time is a fiction so technically the fishsticks are done and will never be ready. </description>
    </item>
    <item>
      <title>(DRAFT) Three Contrasting Views in Education Research</title>
      <link>/drafts/three-contrasts-in-ed-1-rigor-relevance/</link>
      <pubDate>Sun, 11 Oct 2020 00:00:00 +0000</pubDate>
      <guid>/drafts/three-contrasts-in-ed-1-rigor-relevance/</guid>
      <description>Over the past several years, while designing skill assessment tools, I&amp;rsquo;ve stewed on something that might seem obvious: educational and cognitive psychology are distinct fields. Researchers in these fields often go to different conferences, cite different people in their papers, and sometimes use the same concept in ways foreign to the other field.&#xA;This may boil down to differences in approach:&#xA;Cognitive psychologists often use laboratory studies with simple materials (e.</description>
    </item>
    <item>
      <title>Pandas has a hard job (and does it well)</title>
      <link>/posts/pandas-has-a-hard-job/</link>
      <pubDate>Tue, 26 May 2020 00:00:00 +0000</pubDate>
      <guid>/posts/pandas-has-a-hard-job/</guid>
      <description>I&amp;rsquo;ve had to dive into pandas&amp;rsquo; code base over the last year for a project (siuba), and my attitude has shifted dramatically from..&#xA;old attitude: why does pandas have to make things so hard? new attitude: pandas has a crazy difficult job. I think this is most apparent in the functions that decide what dtype a Block&amp;mdash;the most basic thing that stores data in pandas&amp;mdash;should be.&#xA;For the ubiquitous Object dtype, it often figures out which of the many possible more specific types to cast it to.</description>
    </item>
    <item>
      <title>Single dispatch for democratizing data science tools</title>
      <link>/posts/2020-02-24-single-dispatch-data-science/</link>
      <pubDate>Mon, 24 Feb 2020 00:00:00 +0000</pubDate>
      <guid>/posts/2020-02-24-single-dispatch-data-science/</guid>
      <description>Imagine you had to implement some action across classes in 60 packages. You know what result you want, but may need to handle each class in a specific way.&#xA;For example,&#xA;Jupyter notebooks need to represent python classes as html. The broom package in R uses its tidy() function to summarize different statistical models. In this post I will discuss two approaches you could take to do this.&#xA;Class focused: have people define a specific method name on their classes.</description>
    </item>
    <item>
      <title>What would it take to recreate dplyr in python?</title>
      <link>/posts/2020-02-11-dplyr-in-python/</link>
      <pubDate>Tue, 11 Feb 2020 00:00:00 +0000</pubDate>
      <guid>/posts/2020-02-11-dplyr-in-python/</guid>
      <description>Recently, I left my job as a data scientist at DataCamp to focus full time on two areas:&#xA;co-directing the non-profit Code for Philly bringing the magic of dplyr to python In order to do the second part, I&amp;rsquo;ve worked over the past year on a data analysis library called siuba. As part of this work, I&amp;rsquo;ve found myself often discussing siuba&amp;rsquo;s hardest job: making grouped operations a delight.&#xA;In this post I&amp;rsquo;ll provide a high-level overview of three key challenges for porting dplyr to python.</description>
    </item>
    <item>
      <title>Using R and the A* Algorithm: Cruising Around Minecraft</title>
      <link>/posts/r-and-astar-with-minecraft/</link>
      <pubDate>Mon, 18 Mar 2019 00:00:00 +0000</pubDate>
      <guid>/posts/r-and-astar-with-minecraft/</guid>
      <description>(This article is the last in a series on using the A* algorithm in R. See the first and second posts for more.)&#xA;Last year at the NYC R conference, I had the chance to see David Smith demonstrate building and navigating a Minecraft maze, using the miner package. It was really cool! At the end of the talk, as we stepped out of the maze, my gaze turned to the lofty minecraft peaks in the distance.</description>
    </item>
    <item>
      <title>Using R and the A* Algorithm: Animated Pathfinding with gganimate</title>
      <link>/posts/r-and-astar-maze-viz/</link>
      <pubDate>Wed, 27 Feb 2019 00:00:00 +0000</pubDate>
      <guid>/posts/r-and-astar-maze-viz/</guid>
      <description>This post is the second part of a series on using the A* algorithm in R.&#xA;While my previous post introduced the machow/astar-r library, and how it works, in this one I&amp;rsquo;ll focus on visualizing it finding a solution with gganimate. Below is an outline of what I&amp;rsquo;ll cover.&#xA;manually define a maze and plot it with ggplot use an example class from the astar library to navigate it add a bonus picture of a gnome to the maze use a single line of gganimate to animate the A* search Drawing the maze # First, we&amp;rsquo;ll load in the necessary libraries, and create a simple maze to navigate.</description>
    </item>
    <item>
      <title>Using R and the A* Algorithm: Turning Cats into Dogs</title>
      <link>/posts/r-and-astar-cats-to-dogs/</link>
      <pubDate>Mon, 21 Jan 2019 00:00:00 +0000</pubDate>
      <guid>/posts/r-and-astar-cats-to-dogs/</guid>
      <description>Recently, I&amp;rsquo;ve come across a 3 problems that were solved quickly using the A* algorithm:&#xA;Splitting cantonese sentences into words (e.g. 我好肚餓 -&amp;gt; 我 - 好 - 肚餓). Comparing how similar sounding two english words are. Cruising around minecraft. Since I started on these problems using python, the python-astar package got me up and running quickly. However, when switching to R I wasn&amp;rsquo;t able to find it in any libraries, like igraph.</description>
    </item>
    <item>
      <title>The Prototype that Lived Forever</title>
      <link>/drafts/the-prototype/</link>
      <pubDate>Tue, 08 May 2018 12:00:00 -0400</pubDate>
      <guid>/drafts/the-prototype/</guid>
      <description>This is the story of a simple webapp that came into the world to answer a simple question. It was the result of a three day bender, that ended in a frenzied last minute deployment onto Heroku. The question it answered was this:&#xA;what do student submissions at DataCamp look like?&#xA;At the time, I was working on different ways of representing code, and wanted to see how a common way of breaking down code, Abstract Syntax Trees, would work for pulling insights for different python courses.</description>
    </item>
    <item>
      <title>Teaching Data Science to High Schoolers</title>
      <link>/posts/data-science-cbk/</link>
      <pubDate>Thu, 05 Apr 2018 11:17:07 -0400</pubDate>
      <guid>/posts/data-science-cbk/</guid>
      <description>Over the past year I&amp;rsquo;ve worked on the tools to execute and grade code behind the scenes at DataCamp. This work has ranged from expanding our open source tools for grading R and Python code, to running SQL and bash exercises. However, while helping scale up education data science education to thousands of students is something I&amp;rsquo;ve wanted to do since helping teach statistics in grad school, there&amp;rsquo;s is a certain sanity in being in a room with handful of students.</description>
    </item>
    <item>
      <title></title>
      <link>/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/about/</guid>
      <description>I&amp;rsquo;m a data science tool builder at Posit, where I work on open source tools for data analysis (like siuba).&#xA;Previously, I worked as a consultant building out a data team for Caltrans (and love all things GTFS).&#xA;I received a Ph.D. in Cognitive Psychology from Princeton University, and am interested in what drives expert data science performance. This led me to build DataCamp Signal, adapative tests of data science skill.</description>
    </item>
    <item>
      <title></title>
      <link>/projects/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/projects/</guid>
      <description>Work # Year Description 2023 great_tables - table styling taken to an unhealthy extreme (WIP; w/ Rich Ionnane). quartodoc - generate python API documentation in quarto. 2022 Wrote siuba.org guide. Wrote py-shiny guide. pins for python - save and share data using any cloud bucket. 2021 Consultant. Built out data team for warehousing all of California&amp;rsquo;s transit data (calitp.org, talk by Hunter Owens at rstudio::conf()). 2020 Spent the year working on siuba (rstudio::conf() talk).</description>
    </item>
  </channel>
</rss>
