CoolFace
Apppublic

netflypsb/simple_random_sampling

sourceHugging Facemitupdated 2y agoView on Hugging Face
0likes
app.py98 linesDownload Raw Back to root
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