![Page 1: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/1.jpg)
Java Libraries for Data Science
John Godoi@john_godoi
![Page 2: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/6.jpg)
![Page 7: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/8.jpg)
![Page 9: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/13.jpg)
Organização
![Page 14: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/17.jpg)
Tipos comuns de arquivos
![Page 18: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/23.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/24.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/25.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/26.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/27.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/28.jpg)
Representação de Dados
![Page 29: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/29.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/30.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/31.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/32.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/33.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/34.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/35.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/36.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/37.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/38.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/39.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/40.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/41.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/42.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/43.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/44.jpg)
Pré-processamento
![Page 45: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/45.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/46.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/47.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/48.jpg)
Processamento
![Page 49: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/49.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/50.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/51.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/52.jpg)
Manipulações estatísticas
http://www.uh.edu/engines/epi1939.htm
![Page 53: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/53.jpg)
Manipulações estatísticas
http://www.statisticshowto.com/bell-curve/
![Page 54: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/54.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/55.jpg)
Aprendizado de Máquina
![Page 56: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/56.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/57.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/58.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/59.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/60.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/61.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/62.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/63.jpg)
Entrega
![Page 64: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/64.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/65.jpg)
Java Libraries for Data Science
John Godoi@john_godoi
![Page 66: John Godoi - Bibliotecas Java para ciência de dados - #oowBR #JavaOneBR](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/66.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062316/58ed24e81a28abf63c8b4663/html5/thumbnails/67.jpg)
Códigos https://github.com/johngodoi
/JavaDataScience