O mundo é governado pelo acaso. A aleatoriedade nos persegue todos os dias de nossa vida.
– Paul Auster
Números aleatórios nos cercam no mundo da ciência de dados. De vez em quando, preciso criar rapidamente alguns números aleatórios para fazer um experimento mental ou demonstrar um conceito para o público., mas sem ter que baixar grandes conjuntos de dados.
Da criação de dados fictícios à reprodução aleatória dos dados para fins de treinamento e teste ou inicialização de pesos de uma rede neural, nós geramos números aleatórios o tempo todo em python. Você vai adorar esse conceito assim que pegar o jeito depois deste artigo.
Na minha opinião, A geração de números aleatórios é um tópico que qualquer pessoa na ciência de dados deve saber. Vou guiá-lo por todo o processo de geração de números aleatórios em Python aqui e também demonstrá-lo usando diferentes técnicas.
Novo em Python? Estes dois cursos gratuitos irão ajudá-lo a começar:
Tabela de conteúdo
- Biblioteca aleatória
- Semeando números aleatórios
- Gerando números aleatórios em um intervalo
- Tirar aleatoriamente de uma lista
- Misture uma lista
- Geração de números aleatórios de acordo com distribuições
Gerando números aleatórios em Python usando a biblioteca aleatória
Esta é a boa notícia: Existem várias maneiras de gerar números aleatórios em python. O método mais fácil é usar aleatória módulo. É um módulo integrado em Python e não requer instalação. Este módulo usa um gerador de número pseudo-aleatório (PRNG) conhecido como Mersenne Twister para gerar números aleatórios.
Um gerador de número pseudo-aleatório é um gerador de número aleatório determinístico. Não gera números verdadeiramente aleatórios. Pegue um número como entrada e gere um número aleatório para ele.
Observação: Não use o aleatória módulo para gerar números aleatórios por razões de segurança. Para usos criptográficos e de segurança, você pode usar o mistérios módulo que você usa verdadeiros geradores de números aleatórios (BRANCO).
Semeando números aleatórios
Como discutimos na seção anterior, o módulo aleatório recebe um número como entrada e gera um número aleatório para ele. Esse valor inicial é conhecido como semente e o procedimento é conhecido como semente..
Os números que geramos usando geradores de números pseudo-aleatórios são determinísticos. Isso significa que eles podem ser replicados usando a mesma semente..
Vamos entender com um exemplo:
importar aleatório imprimir('Número aleatório 1=>',random.random()) imprimir('Número aleatório 2=>',random.random())
Aqui, estou usando uma função aleatória () que gera um número aleatório no intervalo [0.0, 1.0]. Observe aqui que não mencionei o valor da semente. Por padrão, a hora atual do sistema em milissegundos é usada como semente. Vamos dar uma olhada na saída.
Ambos os números são diferentes devido à mudança no tempo durante a execução da primeira instrução para a segunda instrução. Vamos ver o que acontece se plantarmos os geradores com o mesmo valor:
random.seed(42)
imprimir('Número aleatório 1=>',random.random())
random.seed(42)
imprimir('Número aleatório 2=>',random.random())
Temos os mesmos números aqui. É por isso que os geradores de números pseudo-aleatórios são determinísticos e não são usados para fins de segurança porque qualquer pessoa que tiver a semente pode gerar o mesmo número aleatório.
Gerando números aleatórios em um intervalo
Até agora, sabemos como criar números aleatórios no intervalo [0.0, 1.0]. Mas, E se tivermos que criar um número em um intervalo diferente deste?
Uma maneira é multiplicar e adicionar números ao número retornado pelo aleatória() Função. Por exemplo, random.random () * 3 + 2 retornará números no intervalo [2.0, 5.0]. Porém, esta é mais uma solução alternativa, não é uma solução direta.
Não te preocupes! O módulo aleatório está de volta aqui. Fornece uniforme() e namorando () funções que podemos usar para este propósito. Vamos entender um por um.
uniforme()
A função uniforme () del random modulo pega os valores inicial e final de um intervalo como argumentos e retorna um número de ponto flutuante aleatório no intervalo. [iniciando, final]:
imprimir('Número aleatório no intervalo(2,8)=>', random.uniform(2,8))
namorando ()
Esta função é semelhante à função uniforme (). A única diferença é que a função uniforme () retorna números aleatórios de ponto flutuante e a função randint () retorna um inteiro. Também retorna o número no intervalo [iniciando, final]:
imprimir('Número aleatório num intervalo(2,8)=>', random.randint(2,8))
Tirar aleatoriamente de uma lista
escolha() E opções () são as duas funções fornecidas pelo módulo aleatório que podemos usar para selecionar valores aleatoriamente de uma lista. Ambas as funções pegam uma lista como argumento e selecionam aleatoriamente um valor dela. Você consegue adivinhar qual é a diferença entre escolha() e opções () isto é?
escolha() basta escolher um único valor de uma lista, enquanto que opções () escolha vários valores de uma lista com substituição. Uma coisa boa sobre essas funções é que elas também funcionam em uma lista que contém strings. Vamos vê-los em ação:
a =[5, 9, 20, 10, 2, 8]
imprimir('Número escolhido aleatoriamente=>',random.choice(uma))
imprimir('Número escolhido aleatoriamente=>',random.choices(uma,k = 3))
Como você pode ver, escolha() retornou um valor único de uma e opções () retornou três valores de uma. Aqui, k é o comprimento da lista retornada por opções ().
Mais uma coisa que você pode notar nas respostas retornadas por opções () é que cada valor ocorre apenas uma vez. Você pode aumentar a probabilidade de que cada valor seja escolhido passando uma matriz como pesos al opções () Função. Então, vamos aumentar a probabilidade de 10 até mais três vezes e vamos ver os resultados:
para _ dentro do alcance(5):
imprimir('Número escolhido aleatoriamente=>',random.choices(uma,pesos =[1,1,1,3,1,1],k = 3))
Aqui, podemos ver o que aconteceu 10 em cada sorteio da lista. Há também um shows() função em módulo aleatório que funciona semelhante a opções () função, mas obtém amostras aleatórias de uma lista sem substituição.
Misture uma lista
Digamos que não queremos selecionar valores de uma lista, nós só queremos reordená-los. Podemos fazer isso usando o embaralhar() função de módulo aleatório. Está embaralhar() A função pega a lista como um argumento e embaralha a lista ao invés:
imprimir('Lista original=>',uma)
random.shuffle(uma)
imprimir('Lista embaralhada=>',uma)
Observação: a função shuffle () não retorna uma lista.
Geração de números aleatórios de acordo com distribuições
Uma característica mais surpreendente do módulo aleatório é que ele nos permite gerar números aleatórios com base em diferentes distribuições de probabilidade. Existem várias funções como Gauss(), expovar (), etc., que nos ajudam a fazer isso.
Se você não está familiarizado com as distribuições de probabilidade, Eu recomendo que você leia este artigo: 6 Distribuições de probabilidade comuns que todo profissional de ciência de dados deve saber.
Gauss()
Vamos começar com a distribuição de probabilidade mais comum, quer dizer, distribuição normal. Gauss() é uma função do módulo aleatório usado para gerar números aleatórios de acordo com uma distribuição normal. Tome a média e o desvio padrão como um argumento e retorne um número aleatório:
para _ dentro do alcance(5): imprimir(random.gauss(0,1))
Aqui, vestígio 1000 números aleatórios gerados pelo Gauss() função para média igual a 0 e desvio padrão como 1. Você pode ver acima que todos os pontos são distribuídos em torno da média e não amplamente distribuídos, uma vez que o desvio padrão é 1.
expovar ()
A distribuição exponencial é outra distribuição de probabilidade muito comum que você encontrará. a expovar () A função é usada para obter um número aleatório de acordo com a distribuição exponencial. Ele pega o valor de lambda como um argumento e retorna um valor de 0 para infinito positivo se lambda for positivo, e de infinito negativo para 0 se lambda é negativo:
imprimir('Número aleatório da distribuição exponencial=>',random.expovariate(10))
Notas finais
Costumo usar números aleatórios para criar conjuntos de dados fictícios e para amostragem aleatória. Eu adoraria saber como você usa números aleatórios em seus projetos, então, comente abaixo com suas idéias e compartilhe-as com a comunidade.
Se você achou este artigo informativo, Compartilhe com seus amigos e comente abaixo sobre suas perguntas e comentários. Listei alguns artigos incríveis relacionados a Python e ciência de dados abaixo para sua referência:








