Skip to content

Instantly share code, notes, and snippets.

View martinctc's full-sized avatar
🔥
Packaging up my workflows

Martin Chan martinctc

🔥
Packaging up my workflows
View GitHub Profile
@martinctc
martinctc / ci-plots.md
Last active September 11, 2025 09:33
[Python and R code for Causal Inference plots] #Python #R

Forest plot

import matplotlib.pyplot as plt
import numpy as np

interventions = ['Leadership Digest', 'Peer Nudges', 'Training Email']
ATEs = [0.045, 0.032, 0.018]
lower_CIs = [0.015, 0.005, -0.004]
upper_CIs = [0.075, 0.059, 0.040]
@martinctc
martinctc / describe_categorical_combinations.R
Created August 12, 2025 14:54
[Describe dataset using most common combinations of values]
#' @title
#' Analyze Categorical Variable Combinations to Describe Data Populations
#'
#' @description
#' This function analyzes categorical variables in a data frame to identify
#' the most common combinations of values. It generates all possible combinations
#' of the specified categorical variables (from single variables up to all
#' variables combined) and calculates their frequencies and proportions.
#'
#' The function is useful for understanding the composition of your data,
@martinctc
martinctc / Postcodes to location.R
Created April 10, 2025 14:37
[Convert postcodes to location] #R
library(tidyverse)
library(PostcodesioR)
# Customize with your own path
df_with_postcodes <- read_csv(
"path/data/postcodes.csv"
)
# Update with column name containing postcode
postcode_column <- df_with_postcodes[["postcode"]]
@martinctc
martinctc / apply_noise.R
Last active March 12, 2025 15:25
[Apply Noise to Specified Columns in a Data Frame] #R
#' @title Apply Noise to Specified Columns in a Data Frame
#'
#' @description This function applies a normal distribution-based noise to
#' specified columns in a data frame, grouped by a specified variable. The
#' noise is scaled to a range of -0.2 to 0.2.
#'
#' @param df Data frame to apply the normal distribution to for creating noise.
#' @param group_var String specifying the grouping variable.
#' @param cols Vector of column names to apply the noise to.
#' @param scale_from Numeric value specifying the lower bound of the scaling range.
@martinctc
martinctc / simulate_and_modify_by_rnorm.R
Last active March 12, 2025 15:14
[Simulate dataset, duplicate, and modify with a distribution] #R
# This script simulates a dataset, duplicates it over time, and modifies it to
# create a bell curve-like distribution.
# Set up
library(tidyverse)
library(uuid)
# Simulate dataset
temp_df <-
tibble(
@martinctc
martinctc / run-stats-tests.R
Last active February 6, 2025 15:28
run any statistical tests for two metrics
#' @title Perform a Statistical Test
#'
#' @description This function performs a statistical test (e.g., chi-squared, t-test) given a data frame, variable names, and any other parameters needed.
#'
#' @details Insert more detailed information here about what the function does, the assumptions it makes, and how it should be used.
#'
#' @param data A data frame containing the variables of interest.
#' @param var1 A string or symbol specifying the first variable.
#' @param var2 A string or symbol specifying the second variable (if applicable).
#' @param ... Additional arguments passed to the underlying test function.
@martinctc
martinctc / approx_num.R
Created March 5, 2024 14:31
[Convert numeric value to natural language approximation] #R
#' @title Convert a numeric value into a natural language approximation string
#'
#' @description
#' This function takes a numeric value and returns a string that approximates the value in natural language.
#'
#' @param x A numeric value.
#'
#' @examples
#' approx_num(0.5)
#' # [1] "increased by a half"
@martinctc
martinctc / test-python-rf-runtime.py
Last active January 15, 2024 14:20
Test run speeds for RF model in Python including simulation
# data cleaning and utility
import numpy as np
import pandas as pd
import vivainsights as vi
import os
# timing code
import time
import random
import sys
@martinctc
martinctc / get-pypi-stats.py
Created November 8, 2023 15:48
[Get PyPI statistics] #python
import requests
import pandas as pd
package_name = "vivainsights"
api_endpoint = f"https://pypistats.org/api/packages/{package_name}/overall"
response = requests.get(api_endpoint)
if response.status_code == 200:
data = response.json()
@martinctc
martinctc / power-analysis.R
Created January 9, 2023 15:18
[Power analysis and sample size estimation with R] #R
# See <https://rpubs.com/mbounthavong/sample_size_power_analysis_R>
library(pwr)
# Sample size estimations for two proportions
# `pwr::ES.h()` computes effect size for two proportions
# n provides required sample size
p0 <- pwr.2p.test(h = ES.h(p1 = 0.60, p2 = 0.50), sig.level = 0.05, power = .80)
plot(p0)