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