Científico de Datos: Implementación de la API de PubChem en la Aplicación Mandy

Científico de Datos: Implementación de la API de PubChem en la Aplicación Mandy

Si este es el primer artículo que lees te recomendamos revisar primero la introducción de detalles sobre qué es Mandy y Cuál es la tecnología Wit.ai. Esto te permitirá complementar el código de programación de PubChem para utilizar el programa Mandy – el Acompañante Inteligente. Por otra parte, si estas solamente intentando usar el API de la libreria PubChem entonces puede continuar leyendo.

PubChem es una biblioteca pública que contiene alrededor de 110 millones de compuestos químicos registrados y que se pueden consultar utilizando diferentes puntos finales API. Mandy utiliza los nombres de los productos químicos y el intención identificada (Intent) para buscar información útil que ayude a los usuarios a saber qué hacer con los compuestos químicos o los productos que los contienen.

Las principales bibliotecas de Python que se utilizan en la implementación de la API de PubChem se pueden instalar mediante pip de la siguiente forma:

pip install [nombre de la biblioteca] , es decir, pip install re

Puede instalar esas bibliotecas de Python con pip install en la consola terminal: • re • requests • json • Pubchempy • smptlib, ssl

Esta sección está integrada con tres funciones que se integran para proporcionar información útil que está relacionada con la intención identificada del usuario.

 • Intension (Intent) chemical compatibility en Wit.ai integra las funciones: handling_store
 • Intension (Intent) Storage en Wit.ai integra las funciones: toxicity y ghs_classification 
 • Intension (Intent) Information en Wit.ai integra las funciones: ghs_classification y handling_store 

Intención de Compatibilidad Química

Los productos a veces se mezclan, agregan, agitan, combinan o ponen en contacto de modo que la interacción de dos o el mismo químico puede resultar en un tercer químico, subproducto, producto o desperdicio que es dañino o no deseado. Es entonces cuando los usuarios deben saber de antemano si es más probable que el producto químico produzca otro producto químico, desecho o compuestos químico peligroso. Por ejemplo, puede tener bicarbonato de sodio en casa y detergentes que cuando se mezclan o se exponen a diferentes ambientes podrían causar un problema.

compatibilidad-quimica

Una vez que wit.ai identificó que el usuario está buscando información que establezca la compatibilidad química de un compuesto químico, Mandy utiliza un punto final API de PubChem para buscar el compuesto químico y la información más relevante relacionada con su compatibilidad química. La respuesta del punto final de la API presenta los datos en formato json para que no solo pueda solicitar datos relacionados con la compatibilidad química de un compuesto químico, sino que también recibirá datos relacionados con la estructura, las propiedades químicas y físicas, los procedimientos de seguridad en la manipulación de químicos, clasificación de compuestos químicos y mucho más. Hay más de veinte categorías diferentes que puede identificar y saber más sobre un compuesto químico en específico.

El endpoint de la API desde el que busca Mandy es este:

API_ENDPOINT=’https://pubchem.ncbi.nlm.nih.gov/rest/pug_view/data/compound/’+str(cid)+’/JSON

Se recomienda que utilice un visor json en línea para familiarizarse con la estructura y las secciones que puede extraer y utilizar en su propia aplicación. Le sugerimos que utilice este visor en línea json https://countwordsfree.com/jsonviewer o cualquier otro más sofisticado.

A continuación, se presenta un ejemplo de la estructura json con la que trabajará:

{ “Record”:{ “RecordType”:”CID”, “RecordNumber”:8078, “RecordTitle”:”Cyclohexane”, “Section”:[ { “TOCHeading”:”Structures”, “Description”:”Structure depictions and information for 2D, 3D, and crystal related”, “Section”:[ { “TOCHeading”:”2D Structure”, “Description”:”A two-dimensional representation of the compound”, “DisplayControls”:{ “MoveToTop”:true }, “Information”:[ { “ReferenceNumber”:94, “Value”:{ “Boolean”:[ true ] } } }

Tenga en cuenta que podrá extraer los datos de diferentes niveles y profundidades con la función json_extract y extraer la subfunción. Estas funciones analizan los datos y extraen solo el valor solicitado o la clave de la respuesta del enpoint de la API.

Función handling_store

mix-chemicals-350.jpg

El almacén de manipulación es la función que extrae de PubChem los datos relacionados con los procedimientos de manipulación y las pautas de manipulación que se sugiere implementar al manipular productos químicos. Requiere dos parámetros, chemical_compound, que es el nombre de la sustancia química, y cid, que es la identificación con la que Pubchem identifica un compuesto químico específico. Por ejemplo, el cyclohexano se registra con el id = 8078, por lo que su punto final de API debe estar estructurado de esta manera:

API_ENDPOINT=’https://pubchem.ncbi.nlm.nih.gov/rest/pug_view/data/compound/’+str(8078)+’/JSON

Aquí está el código de programación incluido en esta función. Puede verificar que contiene las subfunciones json_extract y extract explicadas anteriormente.

def handling_store(chemical_compound,cid):

API_ENDPOINT='https://pubchem.ncbi.nlm.nih.gov/rest/pug_view/data/compound/'+str(cid)+'/JSON'   
dat={}
    #print(newintent)
headers = {'authorization': 'Bearer ','Content-Type': 'application/json'}
resp=requests.post(API_ENDPOINT,headers=headers,json=dat)
textt=json.loads(resp.content)   
def json_extract(obj,key):

    arr=[]
    def extract(obj,arr,key):
        if isinstance(obj,dict):
            for k,v in obj.items():
                if isinstance(v,(dict,list)):
                    extract(v,arr,key)
                elif v==key:
                    arr.append(obj)
        elif isinstance(obj,list):
            for item in obj:
                extract(item,arr,key)
        return (arr)
    values=extract(obj,arr,key)
    return values
result=json_extract(textt,'Handling and Storage')
result_validate=json_extract(result,'Not Classified')

#print('handling55:',result)
#print(json.dumps(result,indent=2,sort_keys=True))
result_handling_storage=''
response_title='Handling and Storage:\n\n'
#si no hay devolucion de datos
if len(result[0])==0:
    if result_validate[0]['validate']=='Not Classified':
        response_api="There are are not records of hazard classification so that it may not be dangerous, please look for other professional resources"
        result_handling_storage=response_title+response_api
        #print('No results:',result_handling_storage)
else:
    handling_storage={}
    result_handling_storage=''
    for key,value in result[0].items():
        if value not in handling_storage.values():
            handling_storage[key]=value

    result_handling_storage=handling_storage['Section'][0]['Information'][0]['Value']['StringWithMarkup'][0]['String']
return result_handling_storage

Intención de almacenamiento

storage-350.jpg

Cualquier casa o almacén de una empresa tiene un lugar especial para almacenar productos químicos que se consideran productos peligrosos o no peligrosos. Es fundamental que el usuario que almacena los productos químicos conozca los procedimientos de seguridad para implementarlos en los lugares donde se colocan esos productos químicos. No solo es importante saber qué hacer, sino que también es vital conocer la clasificación correcta para ejecutar los procedimientos correctos con los productos químicos adecuados. Las funciones toxicity y ghs_classification extraen los datos más críticos que los usuarios deben conocer para hacer un buen trabajo de almacenamiento. La abreviatura GHS significa Sistema Globalmente Armonizado, que es un sistema de clasificación que identifica si una sustancia química es inflamable, explosiva, etc. y proporciona recomendaciones específicas para superar posibles prácticas inseguras.

Función toxicity

Aquí está el código que puede modificar si está interesado en extraer datos relacionados con la toxicidad de productos químicos.

def toxicity(chemical_compound,cid):

API_ENDPOINT='https://pubchem.ncbi.nlm.nih.gov/rest/pug_view/data/compound/'+str(cid)+'/JSON'   
dat={}
headers = {'authorization': 'Bearer ','Content-Type': 'application/json'}
resp=requests.post(API_ENDPOINT,headers=headers,json=dat)
textt=json.loads(resp.content)   
def json_extract(obj,key):

    arr=[]
    def extract(obj,arr,key):
        if isinstance(obj,dict):
            for k,v in obj.items():
                if isinstance(v,(dict,list)):
                    extract(v,arr,key)
                elif v==key:
                    arr.append(obj)
        elif isinstance(obj,list):
            for item in obj:
                extract(item,arr,key)
        return (arr)
    values=extract(obj,arr,key)
    return values
result=json_extract(textt,'Toxicity Summary')
result_validate=json_extract(result,'Not Classified')

response_title='Toxicity Summary:\n'
if len(result[0])==0:
    if len(result_validate)>=1:
        response_api="There are are not records of hazard classification so that it may not be dangerous, please look for other professional resources"
        result_toxicity=response_title+response_api
else:
    toxicity={}
    for key,value in result[0].items():
        if value not in toxicity.values():
            toxicity[key]=value

    result_toxicity=toxicity['Information'][0]['Value']['StringWithMarkup'][0]['String']
return result_toxicity


Función ghs_classification

Aquí está el código de programación que puede modificar si está interesado en extraer datos sobre la clasificación de peligros del sistema armonizado globalmente

def ghs_classification(chemical_compound,cid): API_ENDPOINT=’https://pubchem.ncbi.nlm.nih.gov/rest/pug_view/data/compound/’+str(cid)+’/JSON
dat={}

    #print(newintent)
headers = {'authorization': 'Bearer ','Content-Type': 'application/json'}
resp=requests.post(API_ENDPOINT,headers=headers,json=dat)
textt=json.loads(resp.content)   
def json_extract(obj,key):

    arr=[]
    def extract(obj,arr,key):
        if isinstance(obj,dict):
            for k,v in obj.items():
                if isinstance(v,(dict,list)):
                    extract(v,arr,key)
                elif v==key:
                    arr.append(obj)
        elif isinstance(obj,list):
            for item in obj:
                extract(item,arr,key)
        return (arr)
    values=extract(obj,arr,key)
    return values
result=json_extract(textt,'GHS Classification')
result_validate=json_extract(result,'Not Classified')
#print(json.dumps(result_validate,indent=2,sort_keys=True))
#print(json.dumps(result,indent=2,sort_keys=True))

response_title="GHS Classification:\n"

if len(result[0])==0:
    if result_validate[0]['validate']=='Not Classified':
        response_api="There are are not records of hazard classification so that it may not be dangerous, please look for other professional resources"
        response_ghs_classification=response_title+response_api
else:
    results=json_extract(textt,'Pictogram(s)')
    ghs_classification={}
    for key,value in results[0].items():
        if value not in ghs_classification.values():
            ghs_classification[key]=value

    #print(json.dumps(ghs_classification,indent=2,sort_keys=True))
    response_api=""
    response=''
    number_classified=len(ghs_classification['Value']['StringWithMarkup'][0]['Markup'])

    #print("number:",number_classified)
    ghs_class=ghs_classification['Value']['StringWithMarkup'][0]['Markup']

    for ghs in range(number_classified):
       #print(ghs_class[ghs]['Extra'])
        response=ghs_class[ghs]['Extra']+" "
        response_api+=response
    response_ghs_classification=response_title+response_api
    #print(response_ghs_classification)
return response_ghs_classification

Intención de búsqueda de información

También es posible que wit.ai le ayude a identificar que está buscando datos que le ayuden a manejar y utilizar un compuesto químico de forma esporádica, por lo que solo necesita conocer los datos básicos del compuesto químico. Las funciones Handling_store y ghs_classification pueden extraer datos que le ayudarán a lograr esta intención. Por ejemplo: la ejecución de estas funciones le brindará la información necesaria para conocer el tipo de peligro que representan y los mejores procedimientos a seguir para manejar esos químicos en ambientes específicos.

Puede agregar o reducir los datos que se extraen de estas funciones para obtener un informe más completo de las mejores prácticas en la gestión de productos químicos peligrosos o no peligrosos.

Puede verificar, modificar y mejorar estas funciones. El código de programación para las funciones Handling_store y ghs_classification las puedes verificar en las secciones anteriores mencionadas y explicadas previamente.