67
Java Libraries for Data Science John Godoi @john_godoi

John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Embed Size (px)

Citation preview

Page 1: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Java Libraries for Data Science

John Godoi@john_godoi

Page 2: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Here is John Godoi speaking

Bacharel em Ciência da Computação pelo ICT - UNIFESP - SJC

Mestrando em Ciência da Computação pelo ICT - UNIFESP - SJC

Page 3: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Here is John Godoi speaking

Bacharel em Ciência da Computação pelo ICT - UNIFESP - SJC

Mestrando em Ciência da Computação pelo ICT - UNIFESP - SJC

Pesquisador bolsista do Centro de Arqueologia e Antropologia Forense da

UNIFESP

http://www.lawrence.edu/academics/s

tudy/anthropology

Page 4: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Here is John Godoi speaking

Bacharel em Ciência da Computação pelo ICT - UNIFESP - SJC

Mestrando em Ciência da Computação pelo ICT - UNIFESP - SJC

Pesquisador bolsista do Centro de Arqueologia e Antropologia Forense da

UNIFESP

~ 5 anos como Desenvolvedor Java (Spring, Hibernate, Struts, Maven, …)

Page 5: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Here is John Godoi speaking

Bacharel em Ciência da Computação pelo ICT - UNIFESP - SJC

Mestrando em Ciência da Computação pelo ICT - UNIFESP - SJC

Pesquisador bolsista do Centro de Arqueologia e Antropologia Forense da

UNIFESP

~ 5 anos como Desenvolvedor Java (Spring, Hibernate, Struts, Maven, …)

Computação forense em multimídia

Processamento de Imagens

Aprendizado de Máquina

Page 6: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR
Page 7: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

For Today’s Graduate, Just One Word: Statistics - NyTimes

“People think of field archaeology as Indiana Jones, but much of what you really do

is data analysis,” - Ms. Grimes - Google

“I keep saying that the sexy job in the next 10 years will be statisticians,” said Hal

Varian, chief economist at Google. “And I’m not kidding.

“But the big problem is going to be the ability of humans to use, analyze and make

sense of the data.” - an economist and director of the MIT’s Center for Digital

Business

http://www.nytimes.com/2009/08/06/technology/06stats.html

Page 8: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR
Page 9: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

O que é Ciência dos Dados?

“Uma forma de definir ciência dos dados é como uma passo revolucionário da interdisciplinaridade de áreas

como:

Análise de negoócios que incorporam

Ciência da Computação,

Modelagem,

Estatísticas,

Análises,

e matemática.“

http://datascience.nyu.edu/what-is-data-science

Page 10: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

As 3 fases da Ciência dos Dados

1. Organizar os dados

a localização física e

estrutura dos dados são planejadas

e executadas

http://www.datascientists.net/what-is-data-science

Page 11: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

As 3 fases da Ciência dos Dados

1. Organizar os dados

a localização física e

estrutura dos dados são planejadas

e executadas

2. Empacotar os dados

Protótipos são criados,

as estatísticas são realizadas

e a visualização é criada.

http://www.datascientists.net/what-is-data-science

Page 12: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

As 3 fases da Ciência dos Dados

1. Organizar os dados

a localização física e

estrutura dos dados são planejadas

e executadas

2. Empacotar os dados

Protótipos são criados,

as estatísticas são realizadas

e a visualização é criada.

3. Entregar os dados

A história é contada

http://www.datascientists.net/what-is-data-science

Page 13: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Organização

Page 14: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Conheça o domínio

1. O que são os dados?

O que representa cada registro?

Como esses dados foram obtidos ou devem ser obtidos?

Page 15: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Conheça o domínio

1. O que são os dados?

O que representa cada registro?

Como esses dados foram obtidos ou devem ser obtidos?

2. Qual a relação entre os dados?

Entre cada registro

Entre cada coluna (variável)

Page 16: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Conheça o domínio

1. O que são os dados?

O que representa cada registro?

Como esses dados foram obtidos ou devem ser obtidos?

2. Qual a relação entre os dados?

Entre cada registro

Entre cada coluna (variável)

3. O que você quer descobrir nos dados?

O que se espera entender a respeito dos dados?

Qual o valor esperado a ser obtido com a análise desses dados?

Page 17: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Tipos comuns de arquivos

Page 18: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Tipos comuns de arquivos

CSV

Arquivos em ASC, em que cada coluna é separada por vírgulas ,

Page 19: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Tipos comuns de arquivos

CSV private static final String [] FILE_HEADER_MAPPING = {AUTHORS, TITLE, YEAR, SOURCE};

public List<Article> loadArticlesFromCSV(String filename) {

ArrayList<Article> articles = Lists.newArrayList();

try {

FileReader reader = new FileReader(filename);

CSVFormat csvFileFormat = CSVFormat.DEFAULT.withHeader(FILE_HEADER_MAPPING);

CSVParser csvFileParser = new CSVParser(reader, csvFileFormat);

List<CSVRecord> csvRecords = csvFileParser.getRecords();

for (int i = 1; i < csvRecords.size(); i++) {

Article article = new Article();

CSVRecord csvRecord = csvRecords.get(i);

article.setCiteQuantity(csvRecord.get(AUTHORS));

//...

articles.add(article);

}

} catch (Exception e) {

e.printStackTrace();

}

return articles;

OpenCSV

Biblioteca Apache para leitura

de arquivos CSV

http://opencsv.sourceforge.net/

Page 20: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Tipos comuns de arquivos

DAT

Podem ser binários ou estarem em asc

É necessário conhecer como os dados estão organizados

Pode ser similar ao CSVDataInputStream input = new DataInputStream(new FileInputStream( "data.dat"));

while (input.available() > 0) {

int x = input.readInt();

System.out.println(x);

}

input.close();

http://stackoverflow.com/questions/23141851/reading-a-dat-file-into-an-array-in-java

Page 21: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Tipos comuns de arquivos

JSON

É composto por duas estruturas:

Uma coleção de pares de chaves/valores que representa um objeto.

Uma lista ordenada de valores.

http://www.json.org/

Page 22: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Tipos comuns de arquivos

JSON

É composto por duas estruturas:

Uma coleção de pares de chaves/valores que representa um objeto.

Uma lista ordenada de valores.

{"value1":1,"value2":"abc"}

https://github.com/google/gson

Page 23: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Tipos comuns de arquivos

JSON

É composto por duas estruturas:

Uma coleção de pares de chaves/valores que representa um objeto.

Uma lista ordenada de valores.

{"value1":1,"value2":"abc"}

class BagOfPrimitives {

private int value1 = 1;

private String value2 = "abc";

private transient int value3 = 3;

BagOfPrimitives() {

// no-args constructor

}

}

https://github.com/google/gson

Page 24: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Tipos comuns de arquivos

JSON

É composto por duas estruturas:

Uma coleção de pares de chaves/valores que representa um objeto.

Uma lista ordenada de valores.

{"value1":1,"value2":"abc"}

class BagOfPrimitives {

private int value1 = 1;

private String value2 = "abc";

private transient int value3 = 3;

BagOfPrimitives() {

// no-args constructor

}

}

BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class);

https://github.com/google/gson

Page 25: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Tipos comuns de arquivos

XML

Arquivo, em asc, que usa estrutura baseada

em árvore (DOM) formada por tags <>

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<customer id="100">

<age>29</age>

<name>mkyong</name>

</customer>

http://www.mkyong.com/java/jaxb-hello-world-example/

Page 26: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Tipos comuns de arquivos

XML

Arquivo, em asc, que usa estrutura baseada

em árvore (DOM) formada por tags <>

http://www.mkyong.com/java/jaxb-hello-world-example/

@XmlRootElement

public class Customer {

String name;

int age;

int id;

public String getName() {

return name;

}

@XmlElement

public void setName(String name) {

this.name = name;

}

//outros getters e setters

}

JAXB

API do JavaX para

manipulação de arquivos XML

Page 27: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Tipos comuns de arquivos

XML

Arquivo, em asc, que usa estrutura baseada

em árvore (DOM) formada por tags <>

http://www.mkyong.com/java/jaxb-hello-world-example/

File file = new File("C:\\file.xml");

JAXBContext jaxbContext =

JAXBContext.newInstance(Customer.class);

Unmarshaller jaxbUnmarshaller =

jaxbContext.createUnmarshaller();

Customer customer = (Customer)

jaxbUnmarshaller.unmarshal(file);

System.out.println(customer);

JAXB

API do JavaX para

manipulação de arquivos XML

Page 28: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Representação de Dados

Page 29: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Collections com tipos primitivos

Streams

Inseridas na Collection API do Java 8

Suporte a tipos primitivos sem a realização de autoboxing

Paralelização nativa do processamento dos dados

API Funcional

Page 30: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Collections com tipos primitivos

Streams

Inseridas na Collection API do Java 8

Suporte a tipos primitivos sem a realização de autoboxing

Paralelização nativa do processamento dos dados

API Funcional

public class StatisticalProcessor {

public static double calculateAverage(double ...values) {

return DoubleStream.of(values).average().getAsDouble();

}

//outras funções

public static double calculateVariance(double ...values) {

double average = calculateAverage(values);

return DoubleStream.of(values).map(p -> Math.pow((p - average),2)).sum()/values.length;

}

}

Page 31: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Collections com tipos primitivos

Opções para versões anteriores do Java

Joda-primitives

Provê uma implementação com suporte para primitivos de Collection, List e outros.

https://github.com/JodaOrg/joda-primitives/int[] a = new int[] {0, 6, 2};

ArrayIntList c = new ArrayIntList(a);

Page 32: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Collections com tipos primitivos

Opções para versões anteriores do Java

Joda-primitives

Provê uma implementação com suporte para primitivos de Collection, List e outros.

https://github.com/JodaOrg/joda-primitives/

Trove4J

Possui uma quantidade maior de implementações com suporte para primitivos

List

int[] a = new int[] {0, 6, 2};

ArrayIntList c = new ArrayIntList(a);

TDoubleDoubleMap N = new TDoubleDoubleHashMap();

double v = (N.containsKey(contourLabels[i][j]))?N.get(contourLabels[i][j]): 0.;

N.put(contourLabels[i][j], v+=1.);

Page 33: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

N-Dimensions

Arrays em usam inteiros para acessar indíces de um vetor

Logo há um limite da quantidade de elementos que podem ser usados.

A API de Collections, antes de Streams, só lidava com reference objects como

elementos.

Consumo elevado de memória

Page 34: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

ND4J

Criada para dar suporte para a biblioteca de aprendizado profundo, redes neurais

com aprendizado não supervisionado, Deeplearning4J.

Fornece uma API com:

Uma implementação versátil para vetor n-dimensional

Biblioteca com funções de álgebra linear e processamento de sinais

Funcionalidades multiplataformas e GPUs

http://nd4j.org/

Page 35: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

ND4J

INDArray arr1 = Nd4j.create(new float[]{1,2,3,4},new int[]{2,2});

System.out.println(arr1);

// [[1,00, 2,00],

// [3,00, 4,00]]

http://nd4j.org/

Page 36: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

ND4J

INDArray arr1 = Nd4j.create(new float[]{1,2,3,4},new int[]{2,2});

System.out.println(arr1);

// [[1,00, 2,00],

// [3,00, 4,00]]

arr1.addi(1);

System.out.println(arr1);

// [[2,00, 3,00],

// [4,00, 5,00]]

http://nd4j.org/

Page 37: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

ND4J

INDArray arr1 = Nd4j.create(new float[]{1,2,3,4},new int[]{2,2});

System.out.println(arr1);

// [[1,00, 2,00],

// [3,00, 4,00]]

arr1.addi(1);

System.out.println(arr1);

// [[2,00, 3,00],

// [4,00, 5,00]]

INDArray arr2 = Nd4j.create(new float[]{5,6,7,8},new int[]{2,2});

arr1.addi(arr2);

System.out.println(arr1);

// [[ 7,00, 9,00],

// [11,00, 13,00]]

http://nd4j.org/

Page 38: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Grafos

Grafos são:

São estruturas de dados compostas por nós e arestas.

As arestas podem conter pesos conforme a necessidade do problema

Podem ser direcionais ou não.

https://en.wikipedia.org/wiki/Graph_theory

Page 39: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Grafos

Grafos são:

São estruturas de dados compostas por nós e arestas.

As arestas podem conter pesos conforme a necessidade do problema

Podem ser direcionais ou não.

Exemplos do que pode ser representado:

Redes sociais

Page 40: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Grafos

Grafos são:

São estruturas de dados compostas por nós e arestas.

As arestas podem conter pesos conforme a necessidade do problema

Podem ser direcionais ou não.

Exemplos do que pode ser representado:

Redes sociais

Internet http://www.nature.com/nature/journal/v406/n679

4/full/406353a0.html

Page 41: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Grafos

Grafos são:

São estruturas de dados compostas por nós e arestas.

As arestas podem conter pesos conforme a necessidade do problema

Podem ser direcionais ou não.

Exemplos do que pode ser representado:

Redes sociais

Internet

Linhas áreas

...

http://openflights.org/data.html

Page 42: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Grafos (JGraphT)

JGraphT é um biblioteca em Java que possui uma API com suporte as

representações de grafos e diversos métodos para a manipulação dessas

estruturas.DirectedGraph<URL, DefaultEdge> g = new DefaultDirectedGraph<>(DefaultEdge.class);

URL amazon = new URL("http://www.amazon.com");

URL yahoo = new URL("http://www.yahoo.com");

URL ebay = new URL("http://www.ebay.com");

// add the vertices

g.addVertex(amazon);

g.addVertex(yahoo);

g.addVertex(ebay);

// add edges to create linking structure

g.addEdge(yahoo, amazon);

g.addEdge(yahoo, ebay);

System.out.println(hrefGraph.toString());

Page 43: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Grafos (JGraphT)

JGraphT é um biblioteca em Java que possui uma API com suporte as

representações de grafos e diversos métodos para a manipulação dessas

estruturas.DirectedGraph<URL, DefaultEdge> g = new DefaultDirectedGraph<>(DefaultEdge.class);

URL amazon = new URL("http://www.amazon.com");

URL yahoo = new URL("http://www.yahoo.com");

URL ebay = new URL("http://www.ebay.com");

// add the vertices

g.addVertex(amazon);

g.addVertex(yahoo);

g.addVertex(ebay);

// add edges to create linking structure

g.addEdge(yahoo, amazon);

g.addEdge(yahoo, ebay);

System.out.println(hrefGraph.toString());

([http://www.amazon.com, http://www.yahoo.com, http://www.ebay.com],

[(http://www.yahoo.com,http://www.amazon.com),

(http://www.yahoo.com,http://www.ebay.com)])

Page 44: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Pré-processamento

Page 45: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Adequação dos dados

Tratar dados faltantes

Valor padrão

Substituir por valor padrão

Page 46: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Adequação dos dados

Tratar dados faltantes

Valor padrão

Substituir por valor padrão

Remover colunas (variáveis) irrelevantes

Economizar memória

Simplificar manipulação dos dados

Page 47: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Adequação dos dados

Tratar dados faltantes

Valor padrão

Substituir por valor padrão

Remover colunas (variáveis) irrelevantes

Economizar memória

Simplificar manipulação dos dados

Tratar dados nominativos

Classes

Substituir por várias colunas

Page 48: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Processamento

Page 49: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Manipulações estatísticas

Alguns métodos estatísticos nos descrevem sobre a organização dos dados.

Média - em torno de qual valor os dados estão variando. É calculada somando todos os elementos e

então dividindo o resultados pela quantidade de elementos

DoubleStream.of(values).sum()/values.length;

Page 50: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Manipulações estatísticas

Alguns métodos estatísticos nos descrevem sobre a organização dos dados.

Média - em torno de qual valor os dados estão variando. É calculada somando todos os elementos e

então dividindo o resultados pela quantidade de elementos

Variância - quão distantes os valores estão da média. É calculada somando a diferença entre cada valor

para a média e elevada ao quadrado.

DoubleStream.of(values).sum()/values.length;

DoubleStream.of(values).map(p -> Math.pow((p - average),2)).sum()/values.length;

Page 51: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Manipulações estatísticas

Alguns métodos estatísticos nos descrevem sobre a organização dos dados.

Média - em torno de qual valor os dados estão variando. É calculada somando todos os elementos e

então dividindo o resultados pela quantidade de elementos

Variância - quão distantes os valores estão da média. É calculada somando a diferença entre cada valor

para a média e elevada ao quadrado.

Desvio Padrão - quão distantes os valores estão da média. É a raiz da variância.

DoubleStream.of(values).sum()/values.length;

DoubleStream.of(values).map(p -> Math.pow((p - average),2)).sum()/values.length;

Math.sqrt(calculateVariance(values));

Page 52: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Manipulações estatísticas

http://www.uh.edu/engines/epi1939.htm

Page 53: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Manipulações estatísticas

http://www.statisticshowto.com/bell-curve/

Page 54: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

ND4J

INDArray mulArray = arr1.mul(arr2);

System.out.println(mulArray);

// [[ 35,00, 54,00],

// [ 77,00, 104,00]]

assertEquals("Media da matriz",10.,arr1.meanNumber());

assertEquals("Variância da matriz",6.66666,arr1.varNumber());

assertEquals("Desvio padrão da matriz",2.58199,arr1.stdNumber().doubleValue());

http://nd4j.org/

Page 55: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Aprendizado de Máquina

Page 56: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Tarefas comuns de aprendizado de máquina

Classificação

Os dados são divididos em classes ou grupos ou tipos pré-definidos

http://openclassroom.stanford.edu/MainFolder

/CoursePage.php?course=MachineLearning

Page 57: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Tarefas comuns de aprendizado de máquina

Clusterização

Os dados são divididos em grupos nos quais cada integrante possui características comuns

http://docs.opencv.org/

Page 58: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Tarefas comuns de aprendizado de máquina

Predição (regressão)

Definir uma função ou método que dado algumas informações do registro possa descobrir qual o

valor de alguma outra variável do registro

https://azure.microsoft.com/en-

us/documentation/articles/machine-learning-

algorithm-choice/

Page 59: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Classificação por 1 vizinho mais próximo

Se tivermos dois registros previamente classificados em classes diferentes.

Terrestre

Marinho

Page 60: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Classificação por 1 vizinho mais próximo

Para cada registro do conjunto de dados poderíamos compará-los com os registros pré-classificados.

Terrestre

Marinho

?

Page 61: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Classificação por 1 vizinho mais próximo

E os que forem similares copiar a classe de uma para o outro.

Terrestre

Terrestre

Page 62: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Weka

É uma biblioteca com diversas implementações em Java para métodos de aprendizado de máquina e

mineração de dados. Disponibiliza tanto uma interface para o uso dessas ferramentas quanto uma API para

integração com código Java.

Possui ferramentas que dão suporte a:

Pré-processamento

Classificação

Regressão

Clusterização

Visualização

http://www.cs.waikato.ac.nz/ml/weka/

Page 63: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Entrega

Page 64: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Visualizando os Dados

JavaFX possui sua própria API para a criação de gráficos.

https://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm

Page 65: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Java Libraries for Data Science

John Godoi@john_godoi

Page 66: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Referências

1. Java 8 Prático - Casa do

Código - Paulo Silveira e

Rodrigo Turini

2. Inteligência Artificial - gen LTC -

Katti Faceli, Ana Carolina Lorna,

João Gama e André C. P. L. F.

de Carvalho

3. Machine Learning for Hackers -

O’Reilly - Drew Conway e John

Myles White

4. Data Mining - Morgan

Kaufmann - Ian H. Witten, Eibe

Frank e Mark A. Hall

Page 67: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR

Códigos https://github.com/johngodoi

/JavaDataScience