Twitter data analysis using Python

Datos de NASDAQ por minuto usando Python

Introducción

Si el análisis es el cuerpo, los datos son el alma.

En nuestro proyecto de análisis bursátil basado en los sentimientos de Twitter. Seleccionamos algunas compañías de muestra. Decidimos lo que necesitábamos, pero todavía teníamos que lanzar algunos hechizos para llegar a los datos básicos.

Por mucho que soñemos con asistir a Hogwarts, no podemos simplemente decir ‘Accio’ para que los datos nos lleguen. La computadora generalmente aún no comprende los hechizos del mundo mágico. Sino, simplemente vamos a crear algunos de nuestros hechizos usando Python.

Ahora que se ha hecho la elección del lenguaje, empezaremos con la codificación. Para obtener los datos, necesito una API que pueda proporcionarme datos confiables de NASDAQ. Con numerosas búsquedas en Google, encontré uno llamado ‘Alpha Vantage’. Proporciona una API simple y fácil de usar, para recuperar los últimos 10 días de datos por minuto. Lo suficientemente bueno para seguir adelante.

Configuración del Script

Ahora, con esta API, puedo simplemente descargar el archivo JSON todos los días haciendo cambios en la llamada de la API o simplemente puedo escribir código para obtener los datos en tiempo real. Descargarlo todos los días es una forma, pero elegí la posterior.



“Para ejecutar este script con otros, requería servicios de almacenamiento de datos confiables, así como buenas tasas de transferencia. Además, quería un servicio que pudiera ayudarme a configurar mi máquina sin ningún esfuerzo. Había leído sobre CloudSigma en mis clases de Cloud Computing. Por esto, sabía que era confiable. Por eso decidí ejecutarlo en CloudSigma. Pude configurar el servidor en segundos y obtuve soporte completo por el 24/7 Live Chat”

— Akshay Nagpal


Vamos a empezar captando los datos de la API. Escribiré una función simple usando la librería de Python ‘urllib’. He eliminado mi clave API del código, pero se puede obtener de forma gratuita desde el sitio web de Alpha Vantage.

import urllib.request

def import_web(ticker):
    """
    :param identifier: List, Takes the company name
    :return:displays companies records per minute
    """
    url = 'https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol='+ticker +'&interval=1min&apikey=’+YOUR_API_KEY+’&outputsize=full&datatype=json'
    fp = urllib.request.urlopen(url)
    mybytes = fp.read()
    mystr = mybytes.decode("utf8")
    fp.close()
    return mystr

Esta función analiza el sitio web que tiene contenido JSON escrito en él. Lee el contenido JSON y luego lo decodifica en el formato UTF-8. Está devolviendo la cadena completa que tiene el contenido JSON del sitio web.

Ahora que tengo la cadena, necesito operar en el contenido JSON. Con el mismo propósito, puedo usar la función de cargas de JSON, cual carga la cadena que tiene contenido JSON en formato de diccionario.

import json
def get_value(ticker):
    js = import_web(ticker)
    parsed_data = json.loads(js) # loads the json and converts the json string into dictionary
    ps = parsed_data['Time Series (1min)']
    partitionSave(ps,ticker)

Ahora que tengo la cadena, necesito operar en el contenido JSON. Con el mismo propósito, puedo usar la función de cargas de JSON, cual carga la cadena que tiene contenido JSON en formato de diccionario.

Esta función analizará los datos y creará carpetas de acuerdo con la fecha mencionada en la marca de tiempo en los datos. Una vez que se asegura de que se todos los directorios han sido creados, pasa a escribir los datos en el sistema de archivos.

def partitionSave(ps,ticker):
    date = {}
    for i in ps:
        date[i[:10]] = "date"
    for d in date.keys():
        tmp = {}
        for i in ps:
            if(i[:10] == d):
                tmp[i] = ps[i]
        if(os.path.isdir(d) == False):
            os.mkdir(d)
        fname = ticker + "_dann"
        try:
            with open(os.path.join(d,fname),'r') as f:
                t = json.load(f)
                for i in t:
                    tmp[i]=t[i]
        except Exception as e:
            pass
                
        with open(os.path.join(d,fname), 'w') as f:
            json.dump(tmp, f)

Ejecutación del Script

Finalmente, todos mis hechizos están hechos. Solo escribo el método principal para que estos hechizos funcionen de acuerdo con mis necesidades.

def main():
    #Start Process
    company_list = ['GOOGL','MSFT','ORCL','FB','AAPL','TSLA'];
    try:
        for company in company_list:
            print("Starting with " + company)
            get_value(company)
            print("Ended Writing Data of " + company)
    except Exception as e:
        print(e)

main()

Ahora, obtengo datos por minuto a la vez para los últimos 10 días. Lo he usado durante algunas semanas para captar datos de NASDAQ y NSE, y funciona sin problemas.

Si también está interesado en hacer análisis de opinión, puede encontrar el código completo aquí: GitHub.

Share this Post

Dddb3fe3f821565ec08f9b2ca166fbb2?s=80&r=g

About Akshay Nagpal

Big Data Analytics and ML enthusiast.