[Python] Generare dati artificialmente

Stefano Dal Pra s.dalpra a gmail.com
Mar 3 Lug 2012 11:21:16 CEST


Ciao,

mi ero trovato a scrivermi qualcosa di simile tempo fa;

ti copioincollo quel che ho fatto io, penso si possa adattare facilmente:


import random

#puoi mettere quanti nomi vuoi, con "frequenze assolute"
d = {'T':20,'C':80}

#calcola distribuzione cumulata
def cdistr(d):
    L = d.items()
    L.sort()
    X = sum(x[1] for x in L) + 0.0
    x = 0
    S = [0] * len(L)
    for n,t in enumerate(L):
        x += t[1]/X
        S[n] = (n,t[0],x)
    return S

#ricerca binaria su lista di tuple di 3 elementi ordinata rispetto al terzo
def bsearch(L,y0,key=lambda x : x[2]):
    n0,n1 = 0,len(L)-1
    while n0+1 < n1:
        n = (n0+n1) // 2
        y = key(L[n])
        if y > y0:
            n1 = n
        else:
            n0 = n
    if y0 < key(L[n0]):
        return L[n0]
    return L[n1]

#estrae un valore casuale secondo la distr di freq. F
def getrndval(F):
    y = random.random()
    t = bsearch(F,y)
    return t[1]


#Verifica:
F = cdistr(d)
C = {}

#Facciamo 100000 prove

for n in xrange(10000):
    tc = getrndval(F)
    try:
        C[tc] += 1
    except KeyError:
        C[tc] = 1

#Vediamo cosa viene:

>>> (C['T']+.0) / sum(C.values())
0.1968

#e ricordando che d = {'T':20,'C':80}
#abbiamo che 'T' esce circa il 20% delle volte, come giusto.

Spero ti torni grossomodo utile
Ciao
Stefano


2012/6/29 Antonio Piepoli <piepoli.antonio a gmail.com>

> Si mi rendo conto che finirņ a scrivermelo da solo ...
> Purtroppo chi gestisce quel sito non ha risposto alla mia domanda.
>
> Grazie anche per quel sito, provo a darci un'occhiata.
>
> Il giorno 28 giugno 2012 21:03, Marco Mariani <birbag a gmail.com> ha
> scritto:
>
>>  2012/6/28 Antonio Piepoli <piepoli.antonio a gmail.com>
>>
>> Sto cercando un sistema che generi tabelle. Ho trovato questo
>>> http://www.generatedata.com/#about ma purtroppo non forniscono nessuna
>>> informazione sulla statistica dei dati (quanti nomi ci sono? che
>>> distribuzione scelgono?).
>>>
>>> Qualcuno ne conosce altri ?
>>>
>>
>> io penso di avere usato questo, un paio di volte
>>
>> http://www.fakenamegenerator.com/order.php
>>
>>
>>
>> _______________________________________________
>> Python mailing list
>> Python a lists.python.it
>> http://lists.python.it/mailman/listinfo/python
>>
>>
>
>
> --
> Antonio Piepoli
>
>
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
>
-------------- parte successiva --------------
Un allegato HTML č stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20120703/b4f0369a/attachment.html>


Maggiori informazioni sulla lista Python