Skip to content

Instantly share code, notes, and snippets.

View AdamSpannbauer's full-sized avatar
👀
¯\_(ツ)_/¯

Adam Spannbauer AdamSpannbauer

👀
¯\_(ツ)_/¯
View GitHub Profile
@AdamSpannbauer
AdamSpannbauer / suggest_ljung_box_lags.R
Created March 19, 2023 15:20
Small helper function for suggesting number of lags in Ljung-Box test per Rob Hyndman advice in fpp3
# From: https://otexts.com/fpp3/diagnostics.html#portmanteau-tests-for-autocorrelation
#
# We suggest using l = 10 for non-seasonal data and l = 2 * m for seasonal data, where m is the period of
# seasonality. However, the test is not good when l is large, so
# if these values are larger than T / 5 then use l = T / 5.
# Translating into R function:
# * n_obs - number of observations in the series (referred to as T in the text)
# * n_seasonal_periods - NA if non-seasonal; 4 if quarterly; 12 if monthly; etc.
@AdamSpannbauer
AdamSpannbauer / prettify_discretize_labs.R
Created November 14, 2022 13:32
Convert arules::discretize's factor levels to a more approachable format for non-technical audience
prettify_discretize_labs <- function(x, sep = " to ") {
all_labs <- levels(x)
split_labs <- strsplit(all_labs, ",")
old_options <- options(scipen = 999)
pretty_labs <- vapply(split_labs, function(el) {
num_chrs <- gsub("\\[|\\]|\\(|\\)", "", el)
nums <- as.numeric(num_chrs)
pretty_lab <- paste(nums[1], nums[2], sep = sep)
}, character(1))
@AdamSpannbauer
AdamSpannbauer / native_dash_app.py
Last active June 27, 2022 13:18
Test using PyWebView to run a Plotly Dash app as a native web app
import webview
from dash import Dash, html
def run_native_dash_app(dash_app: Dash, window_title: str = None) -> None:
"""Run dash app as native web app
Use PyWebView to run a dash app as a native web app
* install with `pip install pywebview`
* project home page: https://pywebview.flowrl.com/
@AdamSpannbauer
AdamSpannbauer / sqldf_examples.R
Created February 15, 2022 16:04
sqldf examples
# install.packages('sqldf')
library(sqldf)
data("mtcars")
# Select all
sqldf("SELECT *
FROM mtcars")
# single column
@AdamSpannbauer
AdamSpannbauer / Sketch.js
Last active January 22, 2021 10:45
A base class for a p5js React Component
/*
A base class to create p5js sketches as React components.
Requires p5js: `npm install p5`
## Usage
### Extend Sketch and create a p5js sketch
```
@AdamSpannbauer
AdamSpannbauer / non_param_effect_size.py
Created August 6, 2020 11:41
Functions for non-parametric effect size calculations.
import numpy as np
from scipy import stats
# ---------------------------
# Independent samples -------
# ---------------------------
def cles_ind(x1, x2):
"""Calc common language effect size
@AdamSpannbauer
AdamSpannbauer / docstring.R
Created June 9, 2020 10:38
An extension of R's `help()` / `?` to work with roxygen style documentation written in a Pythonic / docstring style for non-packaged functions.
# An extension of help / `?` to work with roxygen documentation in a
# Pythonic / docstring style for non-packaged functions.
.fun_body = function(fun) {
#' Get body of function (including comments) as a character vector
#'
#' @param fun name of function obj to return body of
#'
#' @return character vector of function body (1 element per line)
# Modified from https://www.science-emergence.com/Articles/How-to-plot-a-normal-distribution-with-matplotlib-in-python-/
import numpy as np
import scipy.stats
import matplotlib.pyplot as plt
def plot_area(mean, std, pt1, pt2, fill):
plt.plot([pt1, pt1], [0.0, scipy.stats.norm.pdf(pt1, mean, std)], color='black')
plt.plot([pt2, pt2], [0.0, scipy.stats.norm.pdf(pt2, mean, std)], color='black')
@AdamSpannbauer
AdamSpannbauer / example_default_dict.py
Created January 22, 2020 11:53
Example for default dict to handle missing keys.
from collections import defaultdict
import numpy as np
def api_call(response_ok=True):
if response_ok:
return {'Released': 2010, 'Ratings': [{'Value': 98}]}
else:
return defaultdict(lambda: np.nan)
@AdamSpannbauer
AdamSpannbauer / print_vif.py
Last active September 1, 2020 14:05
VIF utility function for checking multicollinearity with stats models
import warnings
import statsmodels.api as sm
from statsmodels.stats.outliers_influence import variance_inflation_factor
def print_vif(x):
"""Utility for checking multicollinearity assumption
:param x: input features to check using VIF. This is assumed to be a pandas.DataFrame
:return: nothing is returned the VIFs are printed as a pandas series