<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>data-science on francisco yirá&#39;s blog</title>
    
    
    
    <link>https://subscribe-btn--franciscoyira.netlify.app/categories/data-science/</link>
    <description>Recent content in data-science on francisco yirá&#39;s blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 15 Nov 2025 00:00:00 +0000</lastBuildDate>
    
	<atom:link href="https://subscribe-btn--franciscoyira.netlify.app/categories/data-science/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>How to validate DataFrame joins in Python</title>
      <link>https://subscribe-btn--franciscoyira.netlify.app/post/validate-dataframe-join-python-polars-pandas/</link>
      <pubDate>Sat, 15 Nov 2025 00:00:00 +0000</pubDate>
      
      <guid>https://subscribe-btn--franciscoyira.netlify.app/post/validate-dataframe-join-python-polars-pandas/</guid>
      <description>
        
          &lt;img src=&#34;https://subscribe-btn--franciscoyira.netlify.app/post/validate-dataframe-join-python-polars-pandas/images/validate_joins_cover.png&#34;/&gt;
          
        
        
        
          Ever spent too much time debugging a data issue, only to realize it was caused by a join where the keys weren&#39;t *actually* unique? Turns out, both polars AND pandas have a handy option that allows to detect duplicate keys early on, saving us from data explosions passing through silently and causing havoc downstream.
          
        
        </description>
    </item>
    
    <item>
      <title>Building an Airflow Pipeline That Talks to AWS — Data Pipelines in the Cloud (III)</title>
      <link>https://subscribe-btn--franciscoyira.netlify.app/post/airflow-pipeline-with-aws-data-cloud-part-3/</link>
      <pubDate>Fri, 14 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://subscribe-btn--franciscoyira.netlify.app/post/airflow-pipeline-with-aws-data-cloud-part-3/</guid>
      <description>
        
          &lt;img src=&#34;https://subscribe-btn--franciscoyira.netlify.app/post/airflow-pipeline-with-aws-data-cloud-part-3/images/airflow3.png&#34;/&gt;
          
        
        
        
          This tutorial is a complete guide to building an end-to-end data pipeline with Apache Airflow that communicates with AWS services like RDS (relational database) and S3 (object storage) to perform data transformations automatically and efficiently.
          
        
        </description>
    </item>
    
    <item>
      <title>Using Amazon Web Services (AWS) with the Command Line — Data Pipelines in the Cloud (II)</title>
      <link>https://subscribe-btn--franciscoyira.netlify.app/post/aws-command-line-data-pipelines-cloud-part-2/</link>
      <pubDate>Sun, 12 May 2024 00:00:00 +0000</pubDate>
      
      <guid>https://subscribe-btn--franciscoyira.netlify.app/post/aws-command-line-data-pipelines-cloud-part-2/</guid>
      <description>
        
          &lt;img src=&#34;https://subscribe-btn--franciscoyira.netlify.app/post/aws-command-line-data-pipelines-cloud-part-2/images/airflow2_resized.png&#34;/&gt;
          
        
        
        
          Welcome back to the &#39;Data Pipelines in the Cloud&#39; series! In the first part, I introduced Airflow as a tool for orchestrating data pipelines and demonstrated how to code and execute a minimal Airflow pipeline (DAG) on your local environment. In this second part, we&#39;ll lay the ground to build a more functional Airflow DAG by using the AWS Command Line Interface to set up a relational database in the cloud (PostgreSQL), along with a bucket for object storage (S3). We&#39;ll then upload a sample CSV file to the bucket, which we&#39;ll later use as input for an Airflow DAG that performs a meaningful transformation on this data.
          
        
        </description>
    </item>
    
    <item>
      <title>Sharing My Advent of Code 2023 with Quarto (And How You Can Do the Same)</title>
      <link>https://subscribe-btn--franciscoyira.netlify.app/post/advent-of-code-2023-quarto/</link>
      <pubDate>Thu, 28 Dec 2023 00:00:00 +0000</pubDate>
      
      <guid>https://subscribe-btn--franciscoyira.netlify.app/post/advent-of-code-2023-quarto/</guid>
      <description>
        
          &lt;img src=&#34;https://subscribe-btn--franciscoyira.netlify.app/post/advent-of-code-2023-quarto/images/advent.webp&#34;/&gt;
          
        
        
        
          As a Christmas enthusiast, I&#39;ve always been intrigued by the Advent of Code, a series of daily programming puzzles leading up to Christmas. This year, I&#39;m taking on the challenge with either R or Python, adding a touch of whimsy by using a spinning wheel to choose my language each day. I&#39;m also sharing my solutions on a special Advent of Code-themed website. Find out how you can create your own Advent of Code site and automate the process with the `aochelpers` R package.
          
        
        </description>
    </item>
    
    <item>
      <title>A Beginner&#39;s Introduction to Airflow with Docker — Data Pipelines in the Cloud (I)</title>
      <link>https://subscribe-btn--franciscoyira.netlify.app/post/data-pipelines-cloud-intro-airflow-docker/</link>
      <pubDate>Sun, 13 Aug 2023 00:00:00 +0000</pubDate>
      
      <guid>https://subscribe-btn--franciscoyira.netlify.app/post/data-pipelines-cloud-intro-airflow-docker/</guid>
      <description>
        
          &lt;img src=&#34;https://subscribe-btn--franciscoyira.netlify.app/post/data-pipelines-cloud-intro-airflow-docker/images/cover.jpeg&#34;/&gt;
          
        
        
        
          Learn the essentials of Apache Airflow for creating scalable and automated data pipelines in the cloud with this comprehensive, step-by-step beginner’s guide. Discover what problem Airflow solves and under what circumstances is better to use it and run your first Airflow DAG on Docker with the Linux subsystem for Windows.
          
        
        </description>
    </item>
    
    <item>
      <title>Matching in R (III): Propensity Scores, Weighting (IPTW) and the Double Robust Estimator</title>
      <link>https://subscribe-btn--franciscoyira.netlify.app/post/matching-in-r-3-propensity-score-iptw/</link>
      <pubDate>Sun, 01 May 2022 00:00:00 +0000</pubDate>
      
      <guid>https://subscribe-btn--franciscoyira.netlify.app/post/matching-in-r-3-propensity-score-iptw/</guid>
      <description>
        
          &lt;img src=&#34;https://subscribe-btn--franciscoyira.netlify.app/post/matching-in-r-3-propensity-score-iptw/images/cover.jpg&#34;/&gt;
          
        
        
        
          In the last part of this series about Matching estimators in R, we&#39;ll look at Propensity Scores as a way to solve covariate imbalance while handling the curse of dimensionality, and to how implement a Propensity Score estimator using the `twang` package in R. We&#39;ll also explore the importance of common support, the inverse probability weighting estimator (IPTW) and the double robust estimator, which combines a regression specification with a matching-based model in order to obtain a good estimate even when there is something wrong with one of the two underlying models.
          
        
        </description>
    </item>
    
    <item>
      <title>Matching in R (II): Differences between Matching and Regression</title>
      <link>https://subscribe-btn--franciscoyira.netlify.app/post/matching-in-r-2-differences-regression/</link>
      <pubDate>Thu, 31 Mar 2022 00:00:00 +0000</pubDate>
      
      <guid>https://subscribe-btn--franciscoyira.netlify.app/post/matching-in-r-2-differences-regression/</guid>
      <description>
        
          &lt;img src=&#34;https://subscribe-btn--franciscoyira.netlify.app/post/matching-in-r-2-differences-regression/images/clones_orphan_black.jpg&#34;/&gt;
          
        
        
        
          Welcome to the second part of the series about Matching estimators in R. This sequel will build on top of the first part and the concepts explained there, so if you haven’t read it yet, I recommend doing so before you continue reading. But if you don’t have time for that, don’t worry. Here it’s a quick summary of the key ideas from the previous past that are required to understand this new post.
          
        
        </description>
    </item>
    
    <item>
      <title>Matching in R (I): Subclassification, Common Support and the Curse of Dimensionality</title>
      <link>https://subscribe-btn--franciscoyira.netlify.app/post/matching-in-r-part-1/</link>
      <pubDate>Sun, 27 Feb 2022 00:00:00 +0000</pubDate>
      
      <guid>https://subscribe-btn--franciscoyira.netlify.app/post/matching-in-r-part-1/</guid>
      <description>
        
          &lt;img src=&#34;https://subscribe-btn--franciscoyira.netlify.app/post/matching-in-r-part-1/images/pikachus.png&#34;/&gt;
          
        
        
        
          Until this moment, the posts about causal inference on this blog have been centred around frameworks that enable the discussion of causal inference problems, such as Directed Acyclical Graphs (DAGs) and the Potential Outcomes model1. Now it’s time to go one step further and start talking about the “toolbox” that allows us to address causal inference questions when working with observational data (that is, data where the treatment variable is not under the full control of the researcher).
          
        
        </description>
    </item>
    
    <item>
      <title>Randomization Inference in R: a better way to compute p-values in randomized experiments</title>
      <link>https://subscribe-btn--franciscoyira.netlify.app/post/randomization-inference-causal-mixtape/</link>
      <pubDate>Tue, 18 Jan 2022 00:00:00 +0000</pubDate>
      
      <guid>https://subscribe-btn--franciscoyira.netlify.app/post/randomization-inference-causal-mixtape/</guid>
      <description>
        
          &lt;img src=&#34;https://subscribe-btn--franciscoyira.netlify.app/post/randomization-inference-causal-mixtape/images/dices2.jpg&#34;/&gt;
          
        
        
        
          Welcome to a new post of the series about the book Causal Inference: The Mixtape. In the previous post, we saw an introduction to the potential outcomes notation and how this notation allows us to express key concepts in the causal inference field.
One of those key concepts is that the simple difference in outcomes (SDO) is an unbiased estimator of the average treatment effect whenever the treatment has been randomly assigned (i.
          
        
        </description>
    </item>
    
    <item>
      <title>Analyzing my music collection with Python and R</title>
      <link>https://subscribe-btn--franciscoyira.netlify.app/post/music-analysis-python-pandas-matplotlib-r/</link>
      <pubDate>Thu, 30 Dec 2021 00:00:00 +0000</pubDate>
      
      <guid>https://subscribe-btn--franciscoyira.netlify.app/post/music-analysis-python-pandas-matplotlib-r/</guid>
      <description>
        
          &lt;img src=&#34;https://subscribe-btn--franciscoyira.netlify.app/post/music-analysis-python-pandas-matplotlib-r/images/cover_music_python_R.jpg&#34;/&gt;
          
        
        
        
          A couple of months ago, I decided that it was time for me to finally grow out of my R comfort zone and start studying Python. I began my Python journey by reading the book Python for Data Analysis from Wes McKinney (creator of pandas, the Python equivalent of the tidyverse), and having finished it I wanted to put into practice what I’ve learned through an applied data analysis.
          
        
        </description>
    </item>
    
    <item>
      <title>Potential Outcomes Model (or why correlation is not causality)</title>
      <link>https://subscribe-btn--franciscoyira.netlify.app/post/potential-outcomes-causal-inference-mixtape/</link>
      <pubDate>Thu, 09 Dec 2021 00:00:00 +0000</pubDate>
      
      <guid>https://subscribe-btn--franciscoyira.netlify.app/post/potential-outcomes-causal-inference-mixtape/</guid>
      <description>
        
          &lt;img src=&#34;https://subscribe-btn--franciscoyira.netlify.app/post/potential-outcomes-causal-inference-mixtape/images/homer_potential_outcomes.jpg&#34;/&gt;
          
        
        
        
          This article, the second one of the series about the book Causal Inference: The Mixtape, is all about the Potential Outcomes notation and how it enables us to tackle causality questions and understand key concepts in this field1.
The central idea of this notation is the comparison between 2 states of the world:
 The actual state: the outcomes observed in the data given the real value taken by some treatment variable.
          
        
        </description>
    </item>
    
    <item>
      <title>Introduction to causal diagrams (DAGs)</title>
      <link>https://subscribe-btn--franciscoyira.netlify.app/post/2021-07-11-diagramas-causalidad-cap-3-causal-inference-mixtape/</link>
      <pubDate>Sat, 31 Jul 2021 00:00:00 +0000</pubDate>
      
      <guid>https://subscribe-btn--franciscoyira.netlify.app/post/2021-07-11-diagramas-causalidad-cap-3-causal-inference-mixtape/</guid>
      <description>
        
          &lt;img src=&#34;https://subscribe-btn--franciscoyira.netlify.app/post/2021-07-11-diagramas-causalidad-cap-3-causal-inference-mixtape/alice_in_wonderland.jpg&#34;/&gt;
          
        
        
        
          This article is the first in a series dedicated to the content of the book Causal Inference: The Mixtape, in which I will try to summarize the main topics and methodologies exposed in the book.
DAGs (Directed Acyclic Graphs) are a type of visualization that has multiple applications, one of which is the modeling of causal relationships.
We can use DAGs to represent the causal relationships that we believe exist between the variables of interest.
          
        
        </description>
    </item>
    
  </channel>
</rss>