2017-05-31 5 views
0

J'ai un fichier Excel avec différents cas et environ 75 événements pour chaque cas. Il y a une probabilité que chaque événement se produise dans chaque cas. Ainsi, le fichier Excel ressemble à ceci:Génération de nombres à partir de probabilités dans un fichier csv en python

 event1 event2 ... event75  

case1 0.0343 0.0234 ... 0.1194 

case2 0.0924 0.0532 ... 0.0023 

Je veux générer un nombre aléatoire en python, allant de 0 à 75 avec les probabilités du cas donné. Lorsque je travaillais avec des cas avec seulement deux événements qui pourraient se produire, j'ai utilisé un code comme ceci:

excel_cases = pd.read_csv('/.../cases.csv') 

def event_probabilities(case): 
event_probability = excel_cases.loc[excel_cases['Case'] == case, 'event1'].values[0] 
return event_probability 

event1_probability = event_probabilities("case1") 
np.random.choice(np.arange(1, 3), p=[event1_probability, (1 - event1_probability)]) 
# can also do an event2_probability instead of 1-event1_probability 

Toutefois, lorsque la gamme d'événements deviennent plus importants que je ne sais pas ce qui serait un moyen plus efficace de le faire . Merci pour l'aide.

* Pas même que l'autre question que je reçois les probabilités d'Excel

+1

Vous avez 75 événements, mais 76 valeurs de retour (0-75); Quel est le supplément? – Prune

+0

Je pensais que lorsque la plage (0,75), il ne comprend pas 75, donc il est 75 valeurs, 0 à 74 – memokerobi

Répondre

0

Il semble donc que vous allez 4 décimales de droite de précision? Donc ce que vous pouvez faire est d'obtenir un nombre aléatoire entre 0 et 9999:

from random import randint 
randomNum = randint(0,9999)) 

Et puis multiplier chaque probabilité par 10000 et mis en place un groupe d'instructions Elif pour chaque commutateur. Donc si event_1 a une probabilité de 0.0045 et event 2 a une probabilité de .0100, le elif ressemblerait à ceci.

if randomNum < 45: 
    event_1() 
elif randomNum > 45 && randomNum < 145: 
    event_2() 
.......... 

et ainsi de suite. Cela ne devrait pas nécessiter autant d'appels au hasard. Bien que la mise en place pourrait ne pas être triviale.

+0

Cela prendrait beaucoup de temps pour faire cela, ce n'est pas très pratique, tout comme la méthode que j'ai utilisée. Je cherche un moyen plus simple, je ne sais pas s'il y en a un. – memokerobi

+0

Cela ne prendrait pas trop de temps si vous génériez le code par programmation, mais c'est une tâche complètement différente. –