Translate

martes, 18 de septiembre de 2018

Libros Gratuitos sobre Python



Quiero compartir este post sobre libros de Python. Son 6 libros de temas variados pero todos sobre el lenguaje python. Además se pueden descargar en diferentes formatos.

Dejo link: http://unowp.com/free-python-programming-books-everyone/

domingo, 16 de septiembre de 2018

Concepto de ventana en Apache Spark Streaming

Hemos hecho un ejemplo con Apache Spark Streaming. Pero ahora, consideremos la idea de Windows. En Spark Streaming, tenemos pequeños lotes de datos que ingresan en un rango de tiempo o ventana de tiempo.

Spark hace un lote de los datos entrantes de acuerdo con el intervalo de tiempo, pero a veces debemos recordar cosas del pasado. Por ejemplo podemos querer mantener un promedio de treinta segundos para datos de entrada, pero queremos resultados cada cinco segundos. En este caso, desearía un intervalo de lote de cinco segundos, pero una longitud de ventana de treinta segundos. Spark proporciona varios métodos para realizar este tipo de cálculos.

La solución que tenemos tenemos que usar son funciones de ventana.

Windows nos permite tomar un primer lote y luego un segundo lote y luego un tercer lote y luego crear una ventana de todos los lotes en función del intervalo de tiempo especificado. De esta forma, siempre podemos tener el nuevo RDD y también el historial de los RDD que existieron en la ventana.

La función de ventana más simple es una ventana, que le permite crear una nueva DStream, calculada aplicando los parámetros de ventana al viejo DStream. Puede usar cualquiera de las operaciones de DStream en la nueva transmisión, para que tenga toda la flexibilidad que pueda desear.

Por ejemplo, desea PUBLICAR a todos los usuarios activos de los últimos cinco segundos, pero desea actualizar los resultados cada segundo.

sc = SparkContext(appName="ActiveUsers")
ssc = StreamingContext(sc, 1)
activeUsers = [
    ["Alice", "Bob"],
    ["Bob"],
    ["Carlos", "Dan"],
    ["Carlos", "Dan", "Erin"],
    ["Carlos", "Frank"],
]
rddQueue = []
for datum in activeUsers:
    rddQueue += [ssc.sparkContext.parallelize(datum)]
inputStream = ssc.queueStream(rddQueue)
inputStream.window(5, 1)\
    .map(lambda x: set([x]))\
    .reduce(lambda x, y: x.union(y))\
    .pprint()
ssc.start()
sleep(5)
ssc.stop(stopSparkContext=True, stopGraceFully=True)

Este ejemplo imprime todos los usuarios activos de los últimos cinco segundos, pero lo imprime cada segundo. No es necesario realizar un seguimiento manual del estado, ya que la función de ventana conserva los datos antiguos durante otros cuatro intervalos. La función de ventana le permite especificar la duración de la ventana y la duración de la diapositiva, o la frecuencia con la que desea que se calcule una nueva ventana.

Libros gratuitos de Java code Geeks




Cloud computing has been gaining momentum for years. As the technology leaves the early adopter phase and becomes mainstream, many organizations find themselves scrambling to overcome the challenges that come with a more distributed infrastructure. One of those difficulties is getting through a major cloud migration. It is one thing to roll out a few applications and cloud pilot projects, it is an entirely different challenge to start using the cloud across multiple lines of business at massive scale. That is the point that organizations are beginning to reach, and the time has come to take a serious look at cloud migration...

Application performance management technologies have evolved substantially since the advent of mainstream cloud computing technologies. AWS and APM have matured side-by-side, leading to complementary capabilities that allow organizations to test applications with a greater degree of precision. As a result, AWS has emerged as a stable, productive environment for APM initiatives. This eBook discusses the history of application performance testing, and with that backdrop, offers advice on combining performance testing and Application Performance Monitoring (APM) in the AWS cloud.

AngularJS (commonly referred to as “Angular”) is an open-source web application framework maintained by Google and by a community of individual developers and corporations to address many of the challenges encountered in developing single-page applications. It aims to simplify both the development and the testing of such applications by providing a framework for clientside model-view-controller (MVC) and model-view-viewmodel (MVVM) architectures, along with components commonly used in rich Internet applications. The AngularJS library works by first reading the HTML page, which has embedded into it additional custom tag attributes. Angular interprets those attributes as directives to bind input or output parts of the page to a model that is represented by standard JavaScript variables. The values of those JavaScript variables can be manually set within the code, or retrieved from static or dynamic JSON resources. In this ebook, we provide a compilation of AngularJS based examples that will help you kick-start your own web projects. We cover a wide range of topics...



jQuery is a cross-platform JavaScript library designed to simplify the client-side scripting of HTML. jQuery is the most popular JavaScript library in use today, with installation on 65% of the top 10 million highest-trafficked sites on the Web. jQuery’s syntax is designed to make it easier to navigate a document, select DOM elements, create animations, handle events, and develop Ajax applications. jQuery also provides capabilities for developers to create plug-ins on top of the JavaScript library. This enables developers to create abstractions for low-level interaction and animation, advanced effects and high-level, theme-able widgets. The modular approach to the jQuery library allows the creation of powerful dynamic web pages and web applications. In this ebook, we provide a compilation of jQuery based examples that will help you kick-start your own web projects. We cover a wide range of topics, from UI Widgets, to Drag and Drop functionality and CSS manipulation. With our straightforward tutorials, you will be able to get your own projects up and running in minimum time.
 
The primary intended audience for this document is any expert in professional services who needs to assure the health of SharePoint and systems connected to it. If you’re a systems architect, you can gain understanding of SharePoint components and how other applications can take advantage of SharePoint. If you’re an independent consultant, you’ll learn about the elements of comprehensive coverage and total visibility into operations with prebuilt monitoring configurations. Everything in this eBook is based on real-world examples and configurations where AppDynamics was deployed to monitor SharePoint.
 
 
Perhaps more than any programming language, Java continues to have a profound impact on how people navigate today’s world. Java’s functionality is responsible for setting a great deal of what users expect in terms of performance from their internet-accessible devices. The history of Java is more than two decades long and the language continues to grow and adapt in response to evolving consumer and business expectations. Throughout all of these changes, however, the performance of Java applications remains a paramount concern for developers. Read this eBook to get a deep dive on the top 5 Java Performance Considerations.
 
 
HTML5 is a core technology markup language of the Internet used for structuring and presenting content for the World Wide Web. As of October 2014 this is the final and complete fifth revision of the HTML standard of the World Wide Web Consortium (W3C). The previous version, HTML 4, was standardised in 1997. Its core aims have been to improve the language with support for the latest multimedia while keeping it easily readable by humans and consistently understood by computers and devices (web browsers, parsers, etc.). HTML5 is intended to subsume not only HTML 4, but also XHTML 1 and DOM Level 2 HTML. In this ebook, we provide a compilation of HTML5 based examples that will help you kick-start your own web projects. We cover a wide range of topics, from graphics and animation, to geolocation and offline storage. With our straightforward tutorials, you will be able to get your own projects up and running in minimum time.
 
 
Cascading Style Sheets (CSS) is a style sheet language used for describing the look and formatting of a document written in a markup language. Although most often used to change the style of web pages and user interfaces written in HTML and XHTML, the language can be applied to any kind of XML document, including plain XML, SVG and XUL. Along with HTML and JavaScript, CSS is a cornerstone technology used by most websites to create visually engaging webpages, user interfaces for web applications, and user interfaces for many mobile applications. CSS is designed primarily to enable the separation of document content from document presentation, including elements such as the layout, colors, and fonts. This separation can improve content accessibility, provide more flexibility and control in the specification of presentation characteristics, enable multiple HTML pages to share formatting by specifying the relevant CSS in a separate .css file..

martes, 11 de septiembre de 2018

Presto


Presto es una herramiento diseñada para correr consultas sobre grandes cantidades de datos usando consultas distribuidas, trabajando en el orden de los petabytes de datos.

Permite interactuar con Hadoop y su HDFS. Fue diseñado como una alternativa a otras herramientas que consultaba el HDFS usando conexiones a los jobs de MapReduce, como lo hace Hive.

Pero Presto no solo se limita a trabajar sobre el HDFS, también tiene un API que permite definir diferentes tipos de fuentes de datos, incluidos base de datos relacionales, base de datos no relacionales, archivos locales, entre otras fuentes.

Fue pensado para manejar datawarehouses, analytics, análisis de datos, agregación de grandes cantidades de datos o generar reportes. Esas características, permite definir a Presco como un OLAP (Online analytical Processing).

Presto es una herramienta distribuida basada en un motor SQL para realizar análisis interactivos contra bases de datos de todos los tamaños posibles.

Entre las características podemos nombrar:
  • Presto permite consultar datos desde varias fuentes, incluido Hive, Cassandra, bases de datos relacionales, archivos planos o incluso datastores privados, lo que permite cruzar datos desde muchas fuentes al mismo tiempo sin mucho esfuerzo.
  • Esta herramienta está apuntada para análisis donde los tiempos de respuestas son críticos para las tomas de decisiones.

Existen 2 tipos de servidores, los coordinadores (coordinators)  y los trabajadores (workers) y la comunicación entre ambos tipos de servidores es por REST API. Con fines de desarrollo y testeo, se puede configurar un nodo como coordinador y trabajador al mismo tiempo.

Los coordinadores son los nodos donde el “cliente” se conecta para enviarles las consultas que requiere. Son los responsables de parsear las sentencias, generar los planes de ejecución de las consultas, coordinar los trabajadores (mantiene un tracking de que está haciendo cada trabajador para coordinación).

Los trabajadores son responsables de ejecutar las tareas que el coordinador requiere y de procesar los datos para cumplirla. Se los configura que para que al momento de iniciar, se reporten al coordinador correspondiente para que éste los tenga en cuenta para las tareas futuras.

Un conector permite a los trabajadores conectarse a fuentes de datos, como Hive o una base de datos relacional. Se pueden pensar los mismos como un “driver” para cada base de datos en particular.

A la vez existe el concepto de catálogo este contiene esquemas que referencian a los datos a través del conector. Se configuran en archivos “properties” dentro de la carpeta de configuración de Presto.

Y un esquema es una manera de agrupación de tablas que pueden ser consultadas por los trabajadores. El mapeo de schemas queda delegado a cada tipo de conector en particular.

Y las tablas es un conjunto de filas desordenadas que se organizan en columnas con tipos definidos (parecido a una base de datos relacional). Este mapeo de datos a columnas y tipos lo define cada conector en particular.

Presto ejecuta consultas SQL basadas en el ANSI-SQL. Cuando Presto parsea una sentencia, convierte a esta en una consulta SQL y crea un plan de ejecución que va a distribuir entre sus trabajadores asociados.

La diferencia entre una sentencia y una consulta es que la sentencia es “texto plano” mientras que la consulta en si, es el plan asociado a esa sentencia. La consulta encapsula lo que son las etapas, tareas, splits, conectores y demás recursos necesarios para cumplir con esas sentencia.

Cuando Presto ejecuta una consulta, divide a ésta en etapas dentro del plan. Estas etapas quedan definidas como un árbol de ejecución, donde cada etapa tiene una etapa superior que se encarga de juntar los resultados de las etapas inferiores.

Y como si fuera poco Presto es open source.

lunes, 10 de septiembre de 2018

Dart 2 fue lanzado


Alguien recuerda a Dart? Hace mucho que no tenemos noticia, pero ahora nos encontramos que se a lanzado la versión 2 de este lenguaje.

Lo que más destaca de Dart 2 a nivel del propio lenguaje y las bibliotecas es que ahora está fuertemente tipado, las palabras clave de creación de instancias son ahora por lo general opcionales, el modo verificado ha sido eliminado y tanto el lenguaje como las bibliotecas principales han sido modificadas en parte como resultado de los cambios en los sistemas de tipos.

A nivel de herramientas, Pub ya no soporta transformadores, por lo que se recomienda utilizar el nuevo sistema de compilación en su lugar, además de haberse cambiado las herramientas relacionadas con el desarrollo web. Junto a todo lo introducido en Dart 2, también se ha publicado en el anuncio oficial el proceso general sobre cómo migrar proyectos de la primera a la segunda versión.

Si el relanzamiento funciona, seguiremos hablando de este lenguaje.

Por ahora dejo link: https://www.dartlang.org/dart-2

viernes, 7 de septiembre de 2018

Los mejores lenguajes de programación para Blockchain


Quiero compartir un post sobre lenguajes para programar en Blockchain, por que lo comparto? Porque es uno de los poco top que trae con sigo lenguajes originales hasta hay algunos que no conozco y ya voy a estudiar!

Claramente tienen que aparecer los lenguajes de moda y como están de moda existe una librería para casi todo: Java, C++, Python, javascript, Ruby.

Pero entre las novedades tenemos a : Solidity, Simplicity, Rholang.

Solidity es un lenguaje de alto nivel orientado a contratos. Fue influenciado por C ++, Python y JavaScript y está diseñado para la Máquina Virtual Ethereum (EVM).

Simplicity : un nuevo lenguaje para Blockchains. Y ya lo voy a estudiar.

Rholang es un lenguaje de programación concurrente, con un enfoque en el envío de mensajes y formalmente modelado por el cálculo ρ, una extensión reflexiva de orden superior del cálculo π. Está diseñado para ser utilizado para implementar protocolos y "contratos inteligentes" en una cadena de bloques de propósito general, pero también podría usarse en otros entornos.

Sin más dejo el post: https://www.geekboots.com/story/top-languages-that-are-best-for-blockchain-programming

miércoles, 5 de septiembre de 2018

HBase, la base de datos distribuida de Hadoop


Apache HBase es una base de datos noSQL distribuida y escalable para almacenar grandes volúmenes de datos.

Algunas características:
  • Random Access.
  • Acceso en tiempo real
  • Datos distribuidos
  • Versionado de datos
  • No relacional
  • Basada en Bigtable de Google
Los datos se almacenan en tablas, compuestas por filas y columnas.

No se debe confundir con el modelo de tablas de una BD relacional, en cambio, se lo debe pensar como un mapa multidimensional.

  • Tabla: Consiste de múltiples filas.
  • Fila: Consiste de una clave y una o más columnas asociadas a la clave. Las filas se ordenan alfabéticamente por clave, por eso es importante un buen diseño de la clave.
  • Columna: Consiste de una familia y un índice (qualifier), delimitado por ‘:’
  • Familia: Agrupa datos que son físicamente almacenados juntos por razones de performance.
  • Identificador de columna: Se agrega a la familia de la columna para identificar un conjunto de datos.
  • Celda: Combinación de fila, familia de columna, índice. Contiene un valor y un timestamp.
  • Timestamp: Identifica la versión de un valor.

En el teorema CAP, Hbase esta ubicado en CP es decir que se preocupa por la consistencia. 

Es de la organización Apache por lo que tiene licenca Apache 2 y se distribuye de forma gratuita. 

domingo, 2 de septiembre de 2018

5 librerías de machine learning para Java



El aprendizaje automático o machine learning esta en la cresta de la ola, por lo tanto vamos a nombrar 5 librerías o frameworks para machine learning en Java.

Weka : Weka 3 es un framework de trabajo totalmente basado en Java que se utiliza para aprendizaje automático. Weka se utiliza principalmente para la extracción de datos, el análisis de datos y el modelado predictivo. Es completamente gratuito, portátil y fácil de usar con su interfaz gráfica.
La fuerza de Weka radica en la clasificación, por lo que las aplicaciones que requieren clasificación automática de datos pueden beneficiarse de ella, pero también admite clustering, minería de reglas de asociación, predicción de series de tiempo, selección de características y detección de anomalías.

Massive Online Analysis (MOA) : MOA es un software de código abierto utilizado específicamente para el aprendizaje automático y la minería de datos en flujos de datos en tiempo real. Desarrollado en Java, también se puede usar fácilmente con Weka mientras escala a problemas más exigentes. La colección de MOA de algoritmos de aprendizaje automático y herramientas para la evaluación son útiles para la regresión, clasificación, detección de valores atípicos, clustering, sistemas de recomendación y detección de deriva de conceptos. MOA puede ser útil para grandes conjuntos de datos en evolución y flujos de datos, así como también para los datos producidos por los dispositivos del Internet of Things (IoT). MOA está específicamente diseñado para el aprendizaje automático en flujos de datos en tiempo real. Su objetivo es el procesamiento eficiente en tiempo y memoria. MOA proporciona un marco de referencia para ejecutar experimentos en el campo de minería de datos al proporcionar varias funciones útiles, que incluyen un marco fácilmente extensible para nuevos algoritmos, flujos y métodos de evaluación; configuraciones almacenables para flujos de datos (reales y sintéticos) para experimentos repetibles; y un conjunto de algoritmos y medidas existentes de la literatura para comparación.

Deeplearning4j : Deeplearning4j es una librería de deep-learning distribuida, de código abierto y esta programado en Java y Scala. Su misión es reunir redes neuronales profundas y aprendizaje de refuerzo profundo para entornos empresariales. Deeplearning4j está destinado a servir como herramienta de bricolaje para los programadores Java, Scala y Clojure que trabajan en Hadoop. Las redes neuronales profundas y el aprendizaje de refuerzo profundo son capaces de reconocimiento de patrones y aprendizaje automático orientado a objetivos. Todo esto significa que Deeplearning4j es muy útil para identificar patrones. Además, puede usarse para detectar anomalías en datos de series de tiempo como transacciones financieras.

MALLET : MALLET es un conjunto de herramientas de código abierto Java para aprendizaje automático de lenguaje a texto. Este paquete basado en Java admite el procesamiento estadístico de lenguaje natural, clustering, clasificación de documentos, extracción de información, modelado de temas y otras aplicaciones de aprendizaje automático para texto. La especialidad de MALLET incluye herramientas sofisticadas para la clasificación de documentos, tales como rutinas eficientes para la conversión de texto. Admite una amplia variedad de algoritmos (incluidos Naïve Bayes, Decision Trees y Maximum Entropy) y un código para evaluar el rendimiento de la clase. Además, MALLET incluye herramientas para el etiquetado de secuencias y el modelado de temas.

ELKI : El entorno para el desarrollo de aplicaciones KDD es un software de minería de datos de código abierto para Java. El enfoque de ELKI es la investigación en algoritmos, enfatizando los métodos no supervisados ​​en análisis de clusters, índices de bases de datos y detección de valores atípicos. ELKI permite una evaluación independiente de algoritmos de minería de datos y tareas de administración de datos separando los dos. Esta característica es única entre otros marcos de minería de datos como Weta o Rapidminer. ELKI también permite tipos de datos arbitrarios, formatos de archivo o medidas de distancia o similitud. Diseñado para investigadores y estudiantes, ELKI ofrece una gran colección de parámetros de algoritmos altamente configurables. Esto permite una evaluación justa y fácil y una evaluación comparativa de los algoritmos. ELKI es particularmente útil para la ciencia de datos.




sábado, 1 de septiembre de 2018

EBooks gratuitos sobre visualización de datos y Machine Learning





Quiero compartir un post de data science central donde regalan libros sobre visualización de datos y Machine Learning. Los títulos son los siguientes:


  • What You Need to Know about Machine Learning
  • HTML5 Graphing and Data Visualization Cookbook
  • Building Machine Learning Systems with Python
  • Practical Data Analysis
  • Machine Learning with R


Sin más dejo link: https://www.datasciencecentral.com/profiles/blogs/free-ebooks-on-data-visualization-and-machine-learning

jueves, 30 de agosto de 2018

Data science central


Quiero recomendarles la pagina data science central donde encontraran muy buenos post y libros gratuitos y muchísima información sobre data science.

Sin más, dejo link: https://www.datasciencecentral.com/

martes, 28 de agosto de 2018

6 lenguajes de programación que debes estudiar para Data Science


Quiero compartir un artículo sobre los lenguajes de programación que debes aprender para ser el capo máximo de data science. Ya que este es mi blog y los gustos me los tengo que dar en vida, voy a atreverme a ordenar los lenguajes según la importancia con respecto al data science:

  • SQL
  • Python
  • R
  • Scala
  • Java 
  • Julia

En que me baso? en mi opinión, es decir, no puedo se menos científico. Peroooo, tengo una explicación. SQL esta en todos lados, y si el motor de base de datos es noSQL, algún lenguaje de consulta similar a SQL (con sus restricciones) va a tener por esa razón me parece imprescindible saber SQL. Python y R son los más famosos lenguaje en data science por lejos...

Scala y Java por la sacudida que esta dando Spark. Y Julia, porque es un lenguaje que viene creciendo.

Dejo link: https://dzone.com/articles/what-is-data-science-programming-top-7-languages?utm_source=Top%205&utm_medium=email&utm_campaign=Top%205%202018-08-243

sábado, 25 de agosto de 2018

Haciendo un proyecto con scalatra y spark


Vamos a hacer un proyecto en Scala con Scalatra y Spark. La idea es hacer una Api Rest, la cual utilice Spark.

Lo primero que hacemos es el proyecto de scalatra como esta indicado aquí :
https://emanuelpeg.blogspot.com/2018/08/haciendo-un-proyecto-con-scalatra.html

Ya teniendo este proyecto agregamos las dependencias de spark y de jersey (este ultimo es necesario para el funcionamiento de los frameworks)

Es decir el buil.sbt nos va quedar así:

val ScalatraVersion = "2.6.3"

organization := "com.hexacta"

name := "Sparklatra"

version := "0.1.0-SNAPSHOT"

scalaVersion := "2.11.0"

resolvers += Classpaths.typesafeReleases

libraryDependencies ++= Seq(
  "org.scalatra" %% "scalatra" % ScalatraVersion  ,
  "org.scalatra" %% "scalatra-scalatest" % ScalatraVersion % "test" ,
  "ch.qos.logback" % "logback-classic" % "1.2.3" % "runtime" ,
  "org.eclipse.jetty" % "jetty-webapp" % "9.4.9.v20180320" % "container" ,
  "javax.servlet" % "javax.servlet-api" % "3.1.0" % "provided"  ,
  "com.sun.jersey" % "jersey-core" % "1.19.4" ,
  "com.sun.jersey" % "jersey-server" % "1.19.4" ,
  "org.apache.spark" %% "spark-core" % "2.3.1"
)

enablePlugins(SbtTwirl)
enablePlugins(ScalatraPlugin)

Luego de agregar estas dependencias vamos a hacer un objeto que contenga el contexto de Spark, dado que queremos utilizar un contexto en toda nuestra aplicación y lo hacemos de la siguiente manera :

package com.miEmpresa

import org.apache.spark.{SparkConf, SparkContext}

object SparkContext {

  //Create a SparkContext to initialize Spark
  val conf = new SparkConf()
  conf.setMaster("local")
  conf.setAppName("Word Count")
  val sc = new SparkContext(conf)

   def getSc = {
      sc
   }
}

Luego de hacer esto, vamos a servlet de scalatra y agregamos el método get que cuente palabras pasadas como parámetro en la url :

   get(s"/contar/:str") {

    //word count
    val counts = List({
      params("str")
    }).flatMap(line => line.split(" "))
      .map(word => (word, 1))

    val countsRdd = SparkContext.getSc.parallelize(counts).reduceByKey(_ + _).collect()

    var result = ListBuffer[(String,Int)]()

    countsRdd.foreach(line => result += line)

    Ok(compact(render(result)))

  }

En el get definimos que la url va a contener un string que es nuestro parámetro str. Luego hacemos un split por espacios en blanco y luego hacemos un mapa (palabra, 1).  Como ultimo paso convertimos nuestro map a RDD y reducimos por palabra. Es decir el proceso sería para la linea "hola hola mundo" de la siguiente manera :

 "hola hola mundo" -> split(" ") = ("hola","hola","mundo") -> map = ( ("hola", 1) , ("hola", 1) , ("mundo", 1) ) -> reduceByKey = ("hola",2), ("mundo",1)

Para probarlo primero debemos ejecutarlo con sbt y jetty. Vamos al directorio donde se encuentra el archivo build.sbt y escribimos:
sbt
--- Acá va correr un montón de cosas ---
jetty:start

Por ultimo, debemos ir a un browser y probar la url : http://localhost:8080/contar/

Como se envían los datos por el método get podemos probar con la siguiente url, por ejemplo:

"http://localhost:8080/contar/hola hola hola Mundo"

Y listo!!

jueves, 23 de agosto de 2018

miércoles, 22 de agosto de 2018

Java o Python para procesamiento de lenguaje natural?

Podríamos afirmar que en Java y Python son los lenguajes que tienen mayor éxito en la ciencia. Tal vez Python aventaje a Java, pero por muy poco.

Para procesamiento de lenguaje natural (NLP)  existen muchísimas librerías y como es de esperar una gran cantidad en Pyhton y Java.

Además de NLTK (www.nltk.org), que es la librería lider en NLP hay otras librerías para el procesamiento de texto en Python:

Si podemos elegir el lenguaje, usaremos el que nos sintamos más cómodos. En el tema de performance java en un poco más rápido pero los científicos eligen Python por su simpleza y su capacidad de hacer mucho escribiendo poco.

Tal vez además de las herramientas de procesamiento de lenguaje, necesitaría herramientas de aprendizaje automático para incorporar. Existe un amplio rango en Python y Java, y una vez más depende de las preferencias y si las bibliotecas son lo suficientemente amigables para el usuario:

Bibliotecas de Machine Learning en python:

Y en java

Además tenemos Spark MLlib que funciona con Python, Java y Scala. 

Si están interesados en otros lenguajes o simplemente leer :