Quiero generar una lista de say length 10000 a partir de dos elementos ('sí', 'no'). Y el código que tengo hace eso. El problema es que genera ~ 50% sí y 50% no. ¿Cómo puedo modificar este código para poder establecer el porcentaje de tiempo que selecciona sí? Supongamos que quiero que sí, como el 36.7% del tiempo. Y luego debe seleccionar el 'no' restante el 63.3% de tiempo restante. El código está abajo:

import random

category = ('yes','no')
length_of_field = 10000
print(length_of_field)
print(type(category))
category_attribute = [random.choice(category) for _ in range(length_of_field)]
print('\ncategory:')
print(len(category_attribute))
print(type(category_attribute))

from collections import Counter
a= Counter(category_attribute).keys()
b= Counter(category_attribute).values()
print(a,b)
0
Alhpa Delta 11 oct. 2019 a las 20:48

1 respuesta

La mejor respuesta
import numpy as np 
alist = np.random.choice(["No","Yes"], 1000, p=[0.633, 0.367]) 

Incorporada

import random 
alist = random.choices(["no", "yes"], weights=[0.633, 0.367], k=1000)

O

def generate_some_dist(p, n):
    '''
    p: 0~1, proba to generate yes
    n: size
    '''
    a = []
    for i in range(n):
        if random.random() <= p:
            a.append("yes")
        else:
            a.append("no")
    return a

a = generate_some_dist(.367, 10000)

O

p = 0.367
n = 1000
a = ["yes" if random.random() <= p else "No" for _ in range(n) ]
3
Mr_U4913 11 oct. 2019 a las 18:18