Untitled
unknown
plain_text
3 years ago
4.1 kB
4
Indexable
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
Editor is loading...