SlideShare uma empresa Scribd logo
Golang e Data Science
Minha Primeira API
Rodrigo Pinheiro
@_rodrigopa_
Agenda ● Como
● Por quê Go?
● Collections
● Álgebra linear
● Estatística
● Probabilidade
● Gráficos
2
Como surgiu a ideia?
3
Repositório - https://github.com/twgophers
● collections
○ Vector
○ Matrix
○ Zip
○ Counter
● linalg
● statistics
● probability
● nvd3-go-template
4
collections - Vetores
● São objetos que podem ser adicionados e
podem ser multiplicados por números.
5
collections - Vetores
collections.Vector
type Vector []float64
func (v Vector) Len() int
func (v Vector) Less(i, j int) bool
func (v Vector) Swap(i, j int)
func (v Vector) Max() float64
func (v Vector) Min() float64
Arrays ou Slices?
6
collections - Vetores
7
linalg
func Add(x, y collections.Vector) collections.Vector
func Subtract(x, y collections.Vector) collections.Vector
func Dot(x, y collections.Vector) float64
func SumOfSquares(sample collections.Vector) float64
func SquaredDistance(x, y collections.Vector) float64
func Distance(x, y collections.Vector) float64
8
linalg
func TestAdd(t *testing.T) {
cases := []struct {
x, y, want collections.Vector
}{
{collections.Vector{1.0, 1.0}, collections.Vector{0.0, 0.0}, collections.Vector{1.0,1.0}},
...
{collections.Vector{}, collections.Vector{2.0}, collections.Vector{}},}
for _, c := range cases {
got := Add(c.x, c.y)
if !reflect.DeepEqual(got, c.want)
t.Errorf("Add(%v, %v) want: %v; got: %v",c.x, c.y, c.want, got)
...
9
Estatística
● Estatística se refere a matemática
e técnicas utilizadas para
entender os dados.
10
Estatística
func Mean(sample collections.Vector) float64 {
check(sample)
return Sum(sample) / float64(sample.Len())
}
func check(sample collections.Vector) {
if sample.Empty() {
panic("Operation Not allowed with empty sample")
}
}
11
Estatística
import "testing"
func TestMeanPanicsWhenEmptySlice(t *testing.T) {
defer func() {
if recover() == nil {
t.Errorf("Expected mean panic when empty sample")
}
}()
Mean(collections.Vector{})
}
12
Estatística
func Median(sample collections.Vector) float64 {
check(sample)
sort.Float64s(sample)
half := sample.Len() / 2
if oddSize(sample) {
return sample[half]
}
return Mean(collections.Vector{sample[half-1], sample[half]})
}
13
Estatística - Interface Sort
package sort
type Interface interfacet {
Len() float64
Less(i, j int) bool
Swap(i, j int)
}
type Vector []float64
func (v Vector) Len() int {
return len(v)
}
func (v Vector) Less(i, j int) bool {
return v[i] < v[j]
}
func (v Vector) Swap(i, j int) {
v[i], v[j] = v[j], v[i]
} 14
Probabilidade
● Probabilidade é uma forma de
quantificar as incertezas
associadas com um evento escolhido
de um conjunto/universo de
eventos.
P(E)
15
Probabilidade
func Binomial(p float64, n int) (result int64, err error) {
if !(0.0 <= p && p <= 1.0) {
return -1, errors.New(fmt.Sprintf("Invalid probability p: %f", p))
}
if n <= 0 {
return -1, errors.New(fmt.Sprintf("Invalid parameter n: %d", n))
}
for i := 1; i <= n; i++ {
result += BernoulliTrial(p)
}
return result, nil
}
16
Probabilidade
func TestBinomial(t *testing.T) {
…
wantPositive, wantNegative := calculateMenWithError(c.p, c.n)
if got < wantNegative || got > wantPositive {
...
}
}
func calculateMenWithError(p float64, n int) (float64, float64) {
firstMean := mean(p, n)
meanMoreErrorTax := firstMean + 0.03*firstMean
meanLessErrorTax := firstMean - 0.03*firstMean
return meanMoreErrorTax, meanLessErrorTax
}
17
Gráficos Em Go
● Bibliotecas nativas em Go para
renderização de gráficos são
pobres.
Solução?
18
Gráficos Em JS
basic-line-chart01.html
lineChart.html
lineChart-csv.html
NVD3.js
19
Gráficos Em JS
20
Gráficos Em JS - Templates
● Um template é uma string ou um
arquivo contendo uma ou mais
partes entre chaves duplas,
{{...}}, chamadas ações.
21
Gráficos Em JS - Templates
function sinAndCos() {
var cos = [];
{{range .}}
cos.push({x: {{.X}}, y: {{.Y}}})
{{end}}
return ...
}
22
Gráficos Em JS - Templates
func init() {
t = template.Must(template.ParseFiles("templates/index.html",
"templates/js.tmpl"))
data = []Data_type{
Data_type{X: 1950, Y: 300.2},
...
Data_type{X: 2000, Y: 10289.7},
}
}
t.ExecuteTemplate(f, "index.html", data) 23
Próximos Pasos?
● Criar API para busca e download de
dados;
● Melhorar a visualização dos gráficos;
● Implementar algoritmos de machine
learning;
● Implementar especificação BLAS - Basic
Linear Algebra Subprograms
24
Repositório -
https://github.com/twgophers
25
Agradecimentos
26
27
28

Mais conteúdo relacionado

Mais procurados

Utilizando o Winplot como recurso ao ensino da matemática
Utilizando o Winplot como recurso ao ensino da matemáticaUtilizando o Winplot como recurso ao ensino da matemática
Utilizando o Winplot como recurso ao ensino da matemática
Carolina Farhat
 
Gráficos de funções de 1° e 2° graus
Gráficos de funções de 1° e 2° grausGráficos de funções de 1° e 2° graus
Gráficos de funções de 1° e 2° graus
Agapito Ribeiro Junior
 
Função afim
Função afimFunção afim
Função afim
wfsousamatematica
 
Aula 09 08-2013
Aula 09 08-2013Aula 09 08-2013
Aula 09 08-2013
Ludmylla Lima Figueiredo
 
Aula1 funcaoquadrática
Aula1 funcaoquadráticaAula1 funcaoquadrática
Aula1 funcaoquadrática
Josenildo Lima
 
Função de 1º Grau.
Função de 1º Grau.Função de 1º Grau.
Função de 1º Grau.
carolgouvea
 
Tarefa 7 execução do planejamento
Tarefa 7 execução do planejamentoTarefa 7 execução do planejamento
Tarefa 7 execução do planejamento
ShirleiXimenes
 
Função polinomial do 1º grau
Função polinomial do 1º grauFunção polinomial do 1º grau
Função polinomial do 1º grau
Jesrayne Nascimento
 
Projeto Final da disciplina Informatica e Internet
Projeto Final da disciplina Informatica e InternetProjeto Final da disciplina Informatica e Internet
Projeto Final da disciplina Informatica e Internet
monikpnog
 
Função afim 2013-2014
Função afim 2013-2014Função afim 2013-2014
Função afim 2013-2014
Carla Rebolo
 
Funções
FunçõesFunções
Funções
Gabriele Veleda
 
Função do 1º Grau
Função do 1º GrauFunção do 1º Grau
Função do 1º Grau
lucasjunyorgoncalves
 
Objeto de aprendizagem funcao afim
Objeto de aprendizagem  funcao afimObjeto de aprendizagem  funcao afim
Objeto de aprendizagem funcao afim
Washington Damasceno
 
Função do 1º grau
Função do 1º grauFunção do 1º grau
Função do 1º grau
Gabriela Ferreira
 
Funcoes1 2
Funcoes1 2Funcoes1 2
Funcoes1 2
izabelefrancisco
 
Matematica função.ppt [salvo automaticamente]
Matematica   função.ppt [salvo automaticamente]Matematica   função.ppt [salvo automaticamente]
Matematica função.ppt [salvo automaticamente]
pso2510
 
Função do 1º grau em ppt
Função do 1º grau em pptFunção do 1º grau em ppt
Função do 1º grau em ppt
Lucimeires Cabral Dias
 
Programação Estruturada 2 - Aula 02 - Código Fonte
Programação Estruturada 2 - Aula 02 - Código FonteProgramação Estruturada 2 - Aula 02 - Código Fonte
Programação Estruturada 2 - Aula 02 - Código Fonte
thomasdacosta
 
Resumo função afim pdf
Resumo função afim pdfResumo função afim pdf
Resumo função afim pdf
cristianomatematico
 
Funcão Afim
Funcão AfimFuncão Afim
Funcão Afim
Nome Sobrenome
 

Mais procurados (20)

Utilizando o Winplot como recurso ao ensino da matemática
Utilizando o Winplot como recurso ao ensino da matemáticaUtilizando o Winplot como recurso ao ensino da matemática
Utilizando o Winplot como recurso ao ensino da matemática
 
Gráficos de funções de 1° e 2° graus
Gráficos de funções de 1° e 2° grausGráficos de funções de 1° e 2° graus
Gráficos de funções de 1° e 2° graus
 
Função afim
Função afimFunção afim
Função afim
 
Aula 09 08-2013
Aula 09 08-2013Aula 09 08-2013
Aula 09 08-2013
 
Aula1 funcaoquadrática
Aula1 funcaoquadráticaAula1 funcaoquadrática
Aula1 funcaoquadrática
 
Função de 1º Grau.
Função de 1º Grau.Função de 1º Grau.
Função de 1º Grau.
 
Tarefa 7 execução do planejamento
Tarefa 7 execução do planejamentoTarefa 7 execução do planejamento
Tarefa 7 execução do planejamento
 
Função polinomial do 1º grau
Função polinomial do 1º grauFunção polinomial do 1º grau
Função polinomial do 1º grau
 
Projeto Final da disciplina Informatica e Internet
Projeto Final da disciplina Informatica e InternetProjeto Final da disciplina Informatica e Internet
Projeto Final da disciplina Informatica e Internet
 
Função afim 2013-2014
Função afim 2013-2014Função afim 2013-2014
Função afim 2013-2014
 
Funções
FunçõesFunções
Funções
 
Função do 1º Grau
Função do 1º GrauFunção do 1º Grau
Função do 1º Grau
 
Objeto de aprendizagem funcao afim
Objeto de aprendizagem  funcao afimObjeto de aprendizagem  funcao afim
Objeto de aprendizagem funcao afim
 
Função do 1º grau
Função do 1º grauFunção do 1º grau
Função do 1º grau
 
Funcoes1 2
Funcoes1 2Funcoes1 2
Funcoes1 2
 
Matematica função.ppt [salvo automaticamente]
Matematica   função.ppt [salvo automaticamente]Matematica   função.ppt [salvo automaticamente]
Matematica função.ppt [salvo automaticamente]
 
Função do 1º grau em ppt
Função do 1º grau em pptFunção do 1º grau em ppt
Função do 1º grau em ppt
 
Programação Estruturada 2 - Aula 02 - Código Fonte
Programação Estruturada 2 - Aula 02 - Código FonteProgramação Estruturada 2 - Aula 02 - Código Fonte
Programação Estruturada 2 - Aula 02 - Código Fonte
 
Resumo função afim pdf
Resumo função afim pdfResumo função afim pdf
Resumo função afim pdf
 
Funcão Afim
Funcão AfimFuncão Afim
Funcão Afim
 

Semelhante a Golang e data science oficial v1

Computação científica com numpy e scipy
Computação científica com numpy e scipyComputação científica com numpy e scipy
Computação científica com numpy e scipy
Silas Santiago
 
Aula actionscript basico
Aula actionscript basicoAula actionscript basico
Aula actionscript basico
Wemerson Silva
 
06 variavel-aleatoria
06 variavel-aleatoria06 variavel-aleatoria
06 variavel-aleatoria
奈莫 里玛
 
Manual winplot
Manual winplotManual winplot
Manual winplot
Franbfk
 
Cartilha de Octave para Matematica Computacional.pdf
Cartilha de Octave para Matematica Computacional.pdfCartilha de Octave para Matematica Computacional.pdf
Cartilha de Octave para Matematica Computacional.pdf
Edkallenn Lima
 
Sbc scipy
Sbc scipySbc scipy
Sbc scipy
Silas Santiago
 
Sbc scipy
Sbc scipySbc scipy
Sbc scipy
Silas Santiago
 
Booklet reais
Booklet reaisBooklet reais
Booklet reais
pm3d
 
Aulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton YagamiAulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton Yagami
Ayrton Yagami
 
Solução de equações não lineares weslley
Solução de equações não lineares weslleySolução de equações não lineares weslley
Solução de equações não lineares weslley
Weslley Assis
 
Função Quadrática
Função QuadráticaFunção Quadrática
Função Quadrática
Mayara Permanhane
 
Elementos de Matemática Básica - Funções
Elementos de Matemática Básica - FunçõesElementos de Matemática Básica - Funções
Elementos de Matemática Básica - Funções
Milton Henrique do Couto Neto
 
mod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaomod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacao
diogoa21
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compacto
Luciano Ramalho
 
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Os Fantasmas !
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
Luciano Ramalho
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
Anderson Sanches
 
As Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPontoAs Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPonto
Paulo Morgado
 
Repetições e vetores
Repetições e vetoresRepetições e vetores
Repetições e vetores
Thiago Luis Colozio Casácio
 
VetoresMatrizes.pdf
VetoresMatrizes.pdfVetoresMatrizes.pdf
VetoresMatrizes.pdf
DavidPaulino21
 

Semelhante a Golang e data science oficial v1 (20)

Computação científica com numpy e scipy
Computação científica com numpy e scipyComputação científica com numpy e scipy
Computação científica com numpy e scipy
 
Aula actionscript basico
Aula actionscript basicoAula actionscript basico
Aula actionscript basico
 
06 variavel-aleatoria
06 variavel-aleatoria06 variavel-aleatoria
06 variavel-aleatoria
 
Manual winplot
Manual winplotManual winplot
Manual winplot
 
Cartilha de Octave para Matematica Computacional.pdf
Cartilha de Octave para Matematica Computacional.pdfCartilha de Octave para Matematica Computacional.pdf
Cartilha de Octave para Matematica Computacional.pdf
 
Sbc scipy
Sbc scipySbc scipy
Sbc scipy
 
Sbc scipy
Sbc scipySbc scipy
Sbc scipy
 
Booklet reais
Booklet reaisBooklet reais
Booklet reais
 
Aulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton YagamiAulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton Yagami
 
Solução de equações não lineares weslley
Solução de equações não lineares weslleySolução de equações não lineares weslley
Solução de equações não lineares weslley
 
Função Quadrática
Função QuadráticaFunção Quadrática
Função Quadrática
 
Elementos de Matemática Básica - Funções
Elementos de Matemática Básica - FunçõesElementos de Matemática Básica - Funções
Elementos de Matemática Básica - Funções
 
mod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaomod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacao
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compacto
 
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
As Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPontoAs Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPonto
 
Repetições e vetores
Repetições e vetoresRepetições e vetores
Repetições e vetores
 
VetoresMatrizes.pdf
VetoresMatrizes.pdfVetoresMatrizes.pdf
VetoresMatrizes.pdf
 

Golang e data science oficial v1

  • 1. Golang e Data Science Minha Primeira API Rodrigo Pinheiro @_rodrigopa_
  • 2. Agenda ● Como ● Por quê Go? ● Collections ● Álgebra linear ● Estatística ● Probabilidade ● Gráficos 2
  • 3. Como surgiu a ideia? 3
  • 4. Repositório - https://github.com/twgophers ● collections ○ Vector ○ Matrix ○ Zip ○ Counter ● linalg ● statistics ● probability ● nvd3-go-template 4
  • 5. collections - Vetores ● São objetos que podem ser adicionados e podem ser multiplicados por números. 5
  • 6. collections - Vetores collections.Vector type Vector []float64 func (v Vector) Len() int func (v Vector) Less(i, j int) bool func (v Vector) Swap(i, j int) func (v Vector) Max() float64 func (v Vector) Min() float64 Arrays ou Slices? 6
  • 8. linalg func Add(x, y collections.Vector) collections.Vector func Subtract(x, y collections.Vector) collections.Vector func Dot(x, y collections.Vector) float64 func SumOfSquares(sample collections.Vector) float64 func SquaredDistance(x, y collections.Vector) float64 func Distance(x, y collections.Vector) float64 8
  • 9. linalg func TestAdd(t *testing.T) { cases := []struct { x, y, want collections.Vector }{ {collections.Vector{1.0, 1.0}, collections.Vector{0.0, 0.0}, collections.Vector{1.0,1.0}}, ... {collections.Vector{}, collections.Vector{2.0}, collections.Vector{}},} for _, c := range cases { got := Add(c.x, c.y) if !reflect.DeepEqual(got, c.want) t.Errorf("Add(%v, %v) want: %v; got: %v",c.x, c.y, c.want, got) ... 9
  • 10. Estatística ● Estatística se refere a matemática e técnicas utilizadas para entender os dados. 10
  • 11. Estatística func Mean(sample collections.Vector) float64 { check(sample) return Sum(sample) / float64(sample.Len()) } func check(sample collections.Vector) { if sample.Empty() { panic("Operation Not allowed with empty sample") } } 11
  • 12. Estatística import "testing" func TestMeanPanicsWhenEmptySlice(t *testing.T) { defer func() { if recover() == nil { t.Errorf("Expected mean panic when empty sample") } }() Mean(collections.Vector{}) } 12
  • 13. Estatística func Median(sample collections.Vector) float64 { check(sample) sort.Float64s(sample) half := sample.Len() / 2 if oddSize(sample) { return sample[half] } return Mean(collections.Vector{sample[half-1], sample[half]}) } 13
  • 14. Estatística - Interface Sort package sort type Interface interfacet { Len() float64 Less(i, j int) bool Swap(i, j int) } type Vector []float64 func (v Vector) Len() int { return len(v) } func (v Vector) Less(i, j int) bool { return v[i] < v[j] } func (v Vector) Swap(i, j int) { v[i], v[j] = v[j], v[i] } 14
  • 15. Probabilidade ● Probabilidade é uma forma de quantificar as incertezas associadas com um evento escolhido de um conjunto/universo de eventos. P(E) 15
  • 16. Probabilidade func Binomial(p float64, n int) (result int64, err error) { if !(0.0 <= p && p <= 1.0) { return -1, errors.New(fmt.Sprintf("Invalid probability p: %f", p)) } if n <= 0 { return -1, errors.New(fmt.Sprintf("Invalid parameter n: %d", n)) } for i := 1; i <= n; i++ { result += BernoulliTrial(p) } return result, nil } 16
  • 17. Probabilidade func TestBinomial(t *testing.T) { … wantPositive, wantNegative := calculateMenWithError(c.p, c.n) if got < wantNegative || got > wantPositive { ... } } func calculateMenWithError(p float64, n int) (float64, float64) { firstMean := mean(p, n) meanMoreErrorTax := firstMean + 0.03*firstMean meanLessErrorTax := firstMean - 0.03*firstMean return meanMoreErrorTax, meanLessErrorTax } 17
  • 18. Gráficos Em Go ● Bibliotecas nativas em Go para renderização de gráficos são pobres. Solução? 18
  • 21. Gráficos Em JS - Templates ● Um template é uma string ou um arquivo contendo uma ou mais partes entre chaves duplas, {{...}}, chamadas ações. 21
  • 22. Gráficos Em JS - Templates function sinAndCos() { var cos = []; {{range .}} cos.push({x: {{.X}}, y: {{.Y}}}) {{end}} return ... } 22
  • 23. Gráficos Em JS - Templates func init() { t = template.Must(template.ParseFiles("templates/index.html", "templates/js.tmpl")) data = []Data_type{ Data_type{X: 1950, Y: 300.2}, ... Data_type{X: 2000, Y: 10289.7}, } } t.ExecuteTemplate(f, "index.html", data) 23
  • 24. Próximos Pasos? ● Criar API para busca e download de dados; ● Melhorar a visualização dos gráficos; ● Implementar algoritmos de machine learning; ● Implementar especificação BLAS - Basic Linear Algebra Subprograms 24
  • 27. 27
  • 28. 28