Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
4.1 kB
1
Indexable
Never
import numpy as np
import random
import pandas as pd

def generar_nombre_aleatorio(lista_nombres: np.array, lista_apellidos: np.array, numero_nombres: int):
  # Seleccionamos un nombre y un apellido aleatorios de las listas
  nombres: list[str] = [np.random.choice(lista_nombres) for i in range(numero_nombres)]
  apellidos: list[str] = [np.random.choice(lista_apellidos) for i in range(numero_nombres)]

  nombres: np.array = np.array(nombres)
  apellidos: np.array = np.arry(apellidos)
  
  # Devolvemos el nombre y el apellido concatenados
  return nombres, apellidos


def generar_dni_aleatorio(numero_dnis: int):
    # Generamos un número aleatorio entre 100000000 y 999999999 para cada DNI
    numeros = np.random.randint(100000000, 999999999, size=numero_dnis)
    # Calculamos la letra del DNI a partir del número generado
    letras = "TRWAGMYFPDXBNJZSQVHLCKE"
    restos = numeros % 23
    letra = [letras[valor] for valor in restos]
    # Creamos una lista de DNI como cadenas de 8 dígitos y una letra
    dnis = [f"{numero}{letra}" for numero, letra in zip(numeros.astype(str), letra)]
    # Convertimos la lista de DNI en un conjunto para eliminar los DNI repetidos
    dnis_unicos = set(dnis)
    # Si el número de DNI únicos es menor que el número de DNI solicitado, volvemos a generar DNI
    # hasta que el conjunto tenga el número de elementos solicitado
    while len(dnis_unicos) < numero_dnis:
        numeros = np.random.randint(100000000, 999999999, size=numero_dnis)
        restos = numeros % 23
        letra = [letras[valor] for valor in restos]
        dnis = [f"{numero}{letra}" for numero, letra in zip(numeros.astype(str), letra)]
        dnis_unicos.update(dnis)
    # Devolvemos la lista de DNI únicos
    return list(dnis_unicos)

def sumar_listas(lista1, lista2):
  # Sumamos cada par de elementos usando la función map()
  suma = list(map(lambda x, y: x + y, lista1, lista2))
  
  # Devolvemos la suma
  return suma


def generar_lista_normal(n):
  # Generamos una lista de n números aleatorios que sigan una distribución normal estándar
  lista = [random.normalvariate(0, 1) for _ in range(n)]
  
  # Calculamos la suma de la lista
  suma = sum(lista)
  
  # Dividimos cada número de la lista por la suma para obtener una lista cuyos elementos sumen 1
  lista_normalizada = [x / suma for x in lista]
  
  # Comprobamos que la lista esté normalizada
  while sum(lista_normalizada) != 1:
    # Si no lo está, volvemos a generar la lista y a normalizarla
    lista = [random.normalvariate(0, 1) for _ in range(n)]
    suma = sum(lista)
    lista_normalizada = [x / suma for x in lista]
  
  # Devolvemos la lista normalizada
  return lista_normalizada


def generar_lista_probabilidades(cadenas: list, probabilidades: list, tamaño: int) -> list:
    # Comprobamos que las listas tengan la misma longitud
    if len(cadenas) != len(probabilidades):
        raise ValueError("Las listas de cadenas y probabilidades deben tener la misma longitud")
    # Comprobamos que las probabilidades sumen 1
    if sum(probabilidades) != 1:
        raise ValueError("Las probabilidades deben sumar 1")
    # Generamos la lista resultante
    resultado = []
    for cadena, probabilidad in zip(cadenas, probabilidades):
        resultado += [cadena] * int(probabilidad * tamaño)
    # Mezclamos la lista resultante
    random.shuffle(resultado)

    return resultado

def calcular_frecuencia_normalizada(lista):
  # Creamos un diccionario para contar la frecuencia de cada elemento
  frecuencias = {}
  
  # Recorremos la lista y contamos la frecuencia de cada elemento
  for elemento in lista:
    if elemento in frecuencias:
      frecuencias[elemento] += 1
    else:
      frecuencias[elemento] = 1
  
  # Calculamos la suma de las frecuencias
  suma = sum(frecuencias.values())
  
  # Calculamos la frecuencia normalizada de cada elemento
  frecuencias_normalizadas = {k: v / suma for k, v in frecuencias.items()}
  
  # Devolvemos el diccionario con las frecuencias normalizadas
  return frecuencias_normalizadas