<jupyter_start><jupyter_text>Genere una rutina que actualice un indicador y “modifique” los “datos operativos” y la bodega de datos de manera coherente para corresponderse con el indicador Los pasos a seguir son:1. Generar una función para el cambio del indicador2. Genera una función que calcule la diferencia entre los indicadores iniciales y los indicadores modificados3. definir una función que actualice la base de datos para que los indicadores calculados desde la base de datos sean iguales a los indicadores modificados<jupyter_code>import pymongo
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.taller_MDB
db.bodega.count_documents({})<jupyter_output><empty_output><jupyter_text>Paso 1<jupyter_code>items=['AngularJS', 'C', 'CPlusPlus', 'CSS', 'CSharp', 'HTML5', 'Java',
       'JavaScript', 'Nodejs', 'ObjectiveC', 'PHP', 'Perl', 'Python',
       'Ruby', 'SQL', 'SQL_Server', 'TypeScript', 'jQuery']
values=['AngularJS', 'C', 'C++', 'CSS', 'C#', 'HTML5', 'Java',
       'JavaScript', 'Node.js', 'Objective-C', 'PHP', 'Perl', 'Python',
       'Ruby', 'SQL', 'SQL Server', 'TypeScript', 'jQuery']
Indicadores_Iniciales = {}
for i in range(len(items)):
    Indicadores_Iniciales[items[i]]=db.bodega.count_documents({items[i]:values[i]})
Indicadores_Iniciales
def cambio_indicador(lenguaje, veces):
    """Lenguaje:  corresponde al lenguaje de programación que se quiere incluir
        Veces: el numero de programadores que se quieren incluir en los indicadores
    """
    Indicadores_Modificados = Indicadores_Iniciales.copy()
    for k,v in Indicadores_Iniciales.items():
        if k==lenguaje:
            for i in range(veces):
                Indicadores_Modificados[k]=Indicadores_Modificados[k]+1
    return Indicadores_Modificados         
Indicadores_Modificados = cambio_indicador("C", 2)
Indicadores_Modificados<jupyter_output><empty_output><jupyter_text>Paso 2 - evaluar diferencias<jupyter_code>def diferencias(inicial,modificado):
    dif = {}
    for k,v in inicial.items():
        dif[k] = modificado[k]-inicial[k]
    return dif
diferencias = diferencias(Indicadores_Iniciales,Indicadores_Modificados)
diferencias<jupyter_output><empty_output><jupyter_text>Paso 3 - función que genera registros para que la base de datos genere indicadores modificados<jupyter_code>dict_ini = dict(zip(items,values))
dict_ini
def actualizar_db(diferencias, dict_ini):
    for k,v in diferencias.items():
        if v==0:
            pass
        else:
            for i in range(v):
                n=v
                name = "Nuevo"+str(k)+str(i)
                db.bodega.insert_one({'_id': name, k:dict_ini[k]})
    return print("se han insertados {} registros a la base de datos".format(n))
                
                
actualizar_db(diferencias, dict_ini)
Indicadores_Iniciales = {}
for i in range(len(items)):
    Indicadores_Iniciales[items[i]]=db.bodega.count_documents({items[i]:values[i]})
Indicadores_Iniciales<jupyter_output><empty_output><jupyter_text>Se observa que la base de datos ya genera los inidicadores iguales a los indicadores modificados<jupyter_code>#diferencias1 = diferencias(Indicadores_Iniciales,Indicadores_Modificados)<jupyter_output><empty_output><jupyter_text>A continuación se ven los nuevos registro generados<jupyter_code>import pprint
pprint.pprint(db.bodega.find_one({"_id":"NuevoC1"}))
for doc in db.bodega.find({"_id":{"$regex":"^Nuevo"}}):
    print(doc)<jupyter_output>{'_id': 'NuevoC0', 'C': 'C'}
{'_id': 'NuevoC1', 'C': 'C'}<jupyter_text>Se borran los nuevos registros para reestablecer la base de datos original<jupyter_code>db.bodega.delete_one({"_id":"NuevoC0"})
db.bodega.delete_one({"_id":"NuevoC1"})
Indicadores_Iniciales = {}
for i in range(len(items)):
    Indicadores_Iniciales[items[i]]=db.bodega.count_documents({items[i]:values[i]})
Indicadores_Iniciales
client.close()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12285641156897875, 'fraction_numerical': 0.005630918863578193, 'mean_word_length': 5.213036565977743, 'pattern_counts': {'":': 5, '<': 28, '<?xml version=': 0, '>': 28, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '53242', 'license': 'MIT', 'n_tokens_mistral': 1425, 'n_tokens_neox': 1392, 'n_words': 306, 'path': 'Trabajo Final Pregunta 7.ipynb', 'repo_name': 'efvillar/Trabajo_Final_Bases_Datos', 'size': '3907'}