Skip to content

Instantly share code, notes, and snippets.

View StephenFordham's full-sized avatar

Stephen Fordham StephenFordham

View GitHub Profile
@StephenFordham
StephenFordham / baseline_correction_normalisation.py
Created September 9, 2024 12:39
MALDI TOF MS baseline correction and normalisation functions for antibiotic resistance prediction
# Function for baseline correction using a simple rolling minimum
import numpy as np
from scipy.signal import savgol_filter
def baseline_correction(intensities, window_size=50, poly_order=3):
baseline = savgol_filter(intensities, window_length=window_size, polyorder=poly_order)
corrected_intensities = intensities - baseline
corrected_intensities[corrected_intensities < 0] = 0 # Ensuring no negative intensities
return corrected_intensities
@StephenFordham
StephenFordham / Repeat_confirmation.py
Created August 8, 2024 17:58
Repeat_confirmation
from Bio import SeqIO
def read_fasta_sequence(file_path):
sequence = ""
with open(file_path, 'r') as file:
for line in file:
if not line.startswith('>'):
sequence += line.strip()
return sequence
@StephenFordham
StephenFordham / depth_calc.py
Created July 7, 2024 13:34
short_read_depth_calculation
def depth_calc(file, read_depth=0):
df = pd.read_csv(file, sep='\t', header=None)
df.columns = ['consensus', 'base_position', 'depth']
plasmid_length = df['base_position'].max()
base_coverage = df[df['depth'] > read_depth].__len__()
cov_perc = (base_coverage/plasmid_length) * 100
return cov_perc
@StephenFordham
StephenFordham / Serving_data_scrape.py
Created August 7, 2019 12:12
Serving_data_scrape
for i in tqdm(range(1, 21)):
player = WebDriverWait(browser, 20).until(expected_conditions.visibility_of_element_located((By.XPATH, '//*[@id="rankingDetailAjaxContainer"]/table/tbody/tr['+str(i)+']/td[4]/a')))
Tennis_data_collection.write(player.text + ',')
WebDriverWait(browser, 20).until(expected_conditions.visibility_of_element_located((By.XPATH, '//*[@id="rankingDetailAjaxContainer"]/table/tbody/tr['+str(i)+']/td[4]/a'))).click()
turned_pro = WebDriverWait(browser, 20).until(expected_conditions.visibility_of_element_located((By.XPATH, '//*[@id="playerProfileHero"]/div[2]/div[2]/div/table/tbody/tr[1]/td[2]/div/div[2]'))).text
career_length = 2019 - int(turned_pro)
Tennis_data_collection.write(str(career_length) + ',')
WebDriverWait(browser, 20).until(expected_conditions.visibility_of_element_located((By.XPATH, '//*[@id="profileTabs"]/ul/li[6]/a'))).click()
@StephenFordham
StephenFordham / PRC_skillful_model.py
Created October 23, 2023 09:51
Precision-recall curve for a skillful model
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import precision_recall_curve, auc
import seaborn as sns
X, y = make_classification(n_samples=1000, n_classes=2, random_state=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=2)
model = LogisticRegression(solver='lbfgs')
@StephenFordham
StephenFordham / AUC_ROC_model.py
Last active October 23, 2023 08:26
AUC ROC Skillful model comparison
import matplotlib.pyplot as plt
# ROC and AUC modules
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve, roc_auc_score
import seaborn as sns
# generate 2 class dataset
X, y = make_classification(n_samples=1000, n_classes=2, weights=[0.5], random_state=1)
@StephenFordham
StephenFordham / default_decorator_arg.py
Created March 24, 2020 18:25
default_decorator_arg
def meta_decorator(arg):
def decorator_list(fnc):
def inner(list_of_tuples):
return [(fnc(val[0], val[1])) ** power for val in list_of_tuples]
return inner
if callable(arg):
power = 2
return decorator_list(arg)
else:
power = arg
@StephenFordham
StephenFordham / method_decorators_example2.py
Created May 13, 2020 09:13
method_decorators_example2
def integer_check(method):
def inner(ref, expo=None):
if expo == None:
if not isinstance(ref._val1, int) or not isinstance(ref._val2, int):
raise TypeError('Please enter numerical numbers for val1 and val2')
else:
return method(ref)
if expo:
if not isinstance(ref._val1, int) or not isinstance(ref._val2, int)\
or not isinstance(expo, int):
# Class Decorators: Using Decorators with methods defined in a Class
def integer_check(method):
def inner(ref):
if not isinstance(ref._val1, int) or not isinstance(ref._val2, int):
raise TypeError('val1 and val2 must be integers')
else:
return method(ref)
return inner
@StephenFordham
StephenFordham / custom_iterator_object.py
Created June 5, 2020 08:33
custom_iterator_object
class CustomIterTeams(object):
def __init__(self, division, teams=[]):
self._mng = division
self._teams = teams
self._index = -1
def __iter__(self):
return self
# def __iter__(self):