netflypsb/simple_random_sampling
0
1import streamlit as st2import random3import numpy as np4 5def simple_random_sampling(population_size, sample_size, seed=None):6 if seed is not None:7 random.seed(seed)8 population = list(range(1, population_size + 1))9 if sample_size > population_size:10 st.error("Sample size cannot be greater than population size.")11 return None12 return random.sample(population, sample_size)13 14def stratified_sampling(population_size, sample_size, strata_sizes, seed=None):15 if seed is not None:16 random.seed(seed)17 strata_boundaries = np.cumsum(strata_sizes)18 population = list(range(1, population_size + 1))19 sample = []20 21 for i, size in enumerate(strata_sizes):22 start = 0 if i == 0 else strata_boundaries[i-1]23 end = strata_boundaries[i]24 stratum_population = population[start:end]25 stratum_sample_size = int(size / population_size * sample_size)26 sample.extend(random.sample(stratum_population, stratum_sample_size))27 return sample28 29def cluster_sampling(clusters, selected_clusters, seed=None):30 if seed is not None:31 random.seed(seed)32 selected = random.sample(clusters, selected_clusters)33 return [item for sublist in selected for item in sublist]34 35def systematic_sampling(population_size, sample_size, seed=None):36 if seed is not None:37 random.seed(seed)38 step = population_size // sample_size39 start = random.randint(0, step - 1)40 return list(range(start, population_size, step))[:sample_size]41 42def snowball_sampling(initial_samples, recruit_per_sample, population):43 sample = set(initial_samples)44 while len(sample) < recruit_per_sample:45 recruits = [random.choice(population) for _ in range(recruit_per_sample)]46 sample.update(recruits)47 return list(sample)[:recruit_per_sample]48 49def main():50 st.title('Advanced Sampling Methods App')51 st.markdown("""52 ## Description53 Select from various sampling methods depending on your research needs.54 Each method has specific inputs tailored to different research scenarios.55 """)56 57 sampling_method = st.sidebar.selectbox("Choose the sampling method", 58 ("Simple Random Sampling", "Stratified Sampling", 59 "Cluster Sampling", "Systematic Sampling", 60 "Snowball Sampling"))61 62 population_size = st.sidebar.number_input('Enter Population Size', min_value=1, value=1000, step=1)63 sample_size = st.sidebar.number_input('Enter Sample Size', min_value=1, value=50, step=1)64 seed = st.sidebar.number_input('Enter Random Seed (optional)', min_value=0, value=None, step=1, format='%d', key='seed')65 66 if sampling_method == "Stratified Sampling":67 strata_sizes = st.sidebar.text_input('Enter Strata Sizes (comma-separated, e.g., 10,20,30)')68 strata_sizes = list(map(int, strata_sizes.split(','))) if strata_sizes else []69 70 if sampling_method == "Cluster Sampling":71 num_clusters = st.sidebar.number_input('Enter Number of Clusters', min_value=1, value=5, step=1)72 selected_clusters = st.sidebar.number_input('Enter Number of Clusters to Sample', min_value=1, value=2, step=1)73 clusters = [list(range(i * 100, (i + 1) * 100)) for i in range(num_clusters)]74 75 if st.sidebar.button('Generate Sample'):76 sample = []77 if sampling_method == "Simple Random Sampling":78 sample = simple_random_sampling(population_size, sample_size, seed)79 elif sampling_method == "Stratified Sampling":80 sample = stratified_sampling(population_size, sample_size, strata_sizes, seed)81 elif sampling_method == "Cluster Sampling":82 sample = cluster_sampling(clusters, selected_clusters, seed)83 elif sampling_method == "Systematic Sampling":84 sample = systematic_sampling(population_size, sample_size, seed)85 elif sampling_method == "Snowball Sampling":86 initial_samples = [random.randint(1, population_size) for _ in range(5)]87 sample = snowball_sampling(initial_samples, sample_size, range(1, population_size + 1))88 89 if sample:90 st.write(f'### {sampling_method} Output')91 st.write(f'Sample: {sample}')92 st.write(f'Sample Size: {len(sample)}')93 if seed is not None:94 st.write(f'Random Seed Used: {seed}')95 96if __name__ == '__main__':97 main()98 