/Computacao-Cientifica

Disciplina de Computação Científica com Julia

Primary LanguageJuliaCreative Commons Attribution Share Alike 4.0 InternationalCC-BY-SA-4.0

Ciência de Dados e Computação Científica com Julia

CC BY-SA 4.0

Bem-vindo à Disciplina de Computação Científica com Julia do Mestrado e Doutorado em Informática e Gestão do Conhecimento (PPGI) da UNINOVE

A disciplina toda foi gravada e disponibilizada no YouTube na playlist abaixo:

Julia Computação Científica

Esta disciplina foi inspirada na disciplina do MIT "Computational Thinking, a live online Julia/Pluto textbook, https://computationalthinking.mit.edu".

Julia

Julia é uma linguagem rápida de tipagem dinâmica que compila just-in-time (JIT) em código nativo binário usando LLVM. Ela "roda como C mas escreve como Python", isto quer dizer que é extremamente rápida, de fácil prototipagem e leitura/escrita de código. Além disso, ela é multi-paradigma combinando as características de programação imperativa, funcional, e orientada a objetos.

Pré-requisito(s): lógica de programação e simples conceitos teóricos sobre dados tabulares, grafos e redes, otimização matemática, machine learning, estatística Bayesiana e redes neurais.

Sobre Julia:

Objetivos da Disciplina:

Ao completar essa disciplina, alunos estarão aptos à:

  1. programar em Julia
  2. programar algoritmos em Julia
  3. fazer benchmark correto de código Julia com BenchmarkTools.jl
  4. utilizar estrutura de dados de Julia
  5. executar operações em paralelo na CPU usando Threads.jl, ThreadsX.jl e SIMD com LoopVectorization.jl
  6. manipular dados tabulares com DataFrames.jl
  7. plotar dados com Plots.jl, StatsPlots.jl e AlgebraOfGraphics.jl
  8. criar, manipular e analisar grafos e redes com Graphs.jl
  9. especificar, modelar e otimizar matematicamente problemas complexos com JuMP.jl
  10. treinar algoritmos de machine learning com MLJ.jl
  11. especificar modelos probabilísticos Bayesianos e executar amostradores Markov Chain Monte Carlo (MCMC) com Turing.jl
  12. criar e treinar redes neurais usando Flux.jl

Tópicos

  1. Linguagem Julia e Estrutura de Dados Nativas (Bezanson et al., 2017; Perkel, 2019)
  2. Algoritmos e Benchmarks com BenchmarkTools.jl (Chen & Revels, 2016)
  3. Performance e Operações Paralelas
  4. Dados Tabulares com DataFrames.jl (White et al., 2020; Storopoli, Huijzer & Alonso, 2021)
  5. Séries Temporais DataFrames.jl(White et al., 2020; Storopoli, Huijzer & Alonso, 2021)
  6. Visualização de Dados com Plots.jl, StatsPlots.jl e AlgebraOfGraphics.jl (Breloff et al., 2021; Storopoli, Huijzer & Alonso, 2021)
  7. Grafos e Análise Redes com Graphs.jl (Bromberger & Contributors, 2017)
  8. Modelagem e Otimizações Matemáticas com JuMP.jl (Dunning et al., 2017)
  9. Modelos Probabilísticos Bayesianos com Turing.jl (Ge et al., 2018; Xu et al., 2020; Storopoli, 2021)
  10. Machine Learning com MLJ.jl (Blaom et al., 2020)
  11. Deep Learning com Flux.jl (Innes et al., 2018; Innes, 2018)

Autor

Jose Storopoli, PhD - Lattes CV - ORCID - https://storopoli.io

Como usar esse conteúdo?

Este conteúdo possui licença livre para uso (CC BY-SA). Você é mais do que bem-vindo para contribuir com issues e pull requests.

Para configurar um ambiente local:

  1. Baixe e instale Julia
  2. Clone o repositório do GitHub: git clone https://github.com/storopoli/Computacao-Cientifica.git
  3. Acesse o diretório: Computacao-Cientifica
  4. Abra os Notebooks Pluto no terminal de Julia:
    using Pkg
    Pkg.add("Pluto")
    using Pluto
    Pluto.run()

Como citar esse conteúdo

Para citar o conteúdo use:

Storopoli (2021). Ciência de Dados e Computação Científica com Julia. https://storopoli.github.io/Computacao-Cientifica.

Ou em formato BibTeX (LaTeX):

@misc{storopoli2021computacaocientificajulia,
  author = {Storopoli, Jose},
  title = {Ciência de Dados e Computação Científica com Julia},
  url = {https://storopoli.github.io/Computacao-Cientifica},
  year = {2021}
}

Referências

  • Bezanson, J., Edelman, A., Karpinski, S. & Shah, V. B. (2017). Julia: A Fresh Approach to Numerical Computing. SIAM review, 59(1), 65–98.

  • Blaom, A. D., Kiraly, F., Lienart, T., Simillides, Y., Arenas, D. & Vollmer, S. J. (2020). MLJ: A Julia Package for Composable Machine Learning. Journal of Open Source Software, 5(55), 2704. https://doi.org/10.21105/joss.02704

  • Breloff, T., Schwabeneder, D., Borregaard, M. K., Christ, S., Heinen, J., Yuval, Palugniok, A.,Simon, Vertechi, P., Zhanibek, Chamberlin, T., ma-laforge, Rackauckas, C., Schulz,O., Pfitzner, S., Arakaki, T., Yahyaabadi, A., Devine, J., Pech, S., ... Watson, S. S.(2021). JuliaPlots/Plots.Jl: V1.13.2. https://doi.org/10.5281/zenodo.4725318

  • Bromberger, S. & Contributors, O. (2017). Juliagraphs/Lightgraphs.Jl: An Optimized Graphs Package for the Julia Programming Language. https://doi.org/10.5281/ZENODO.889971

  • Chen, J. & Revels, J. (2016). Robust Benchmarking in Noisy Environments. arXiv:1608.04295[cs].

  • Dunning, I., Huchette, J. & Lubin, M. (2017). JuMP: A Modeling Language for Mathematical Optimization. SIAM Review, 59(2), 295–320. https://doi.org/10.1137/15M1020575

  • Gao, K., Mei, G., Piccialli, F., Cuomo, S., Tu, J. & Huo, Z. (2020). Julia Language in Machine Learning: Algorithms, Applications, and Open Issues. Computer Science Review, 37,100254. https://doi.org/10.1016/j.cosrev.2020.100254

  • Ge, H., Xu, K. & Ghahramani, Z. (2018). Turing: A Language for Flexible Probabilistic Inference. International Conference on Artificial Intelligence and Statistics, 1682–1690.

  • Innes, M., Saba, E., Fischer, K., Gandhi, D., Rudilosso, M. C., Joy, N. M., Karmali, T.,Pal, A. & Shah, V. (2018). Fashionable Modelling with Flux. CoRR,abs/1811.01457. https://arxiv.org/abs/1811.01457

  • Laurie, H. (2021). Julia Programming for Nervous Beginners. https://juliaacademy.com/p/julia-programming-for-nervous-beginner

  • Innes, M. (2018). Flux: Elegant Machine Learning with Julia. Journal of Open Source Software. https://doi.org/10.21105/joss.00602

  • Lauwens, B. & Downey, A. B. (2019). Think Julia: How to Think Like a Computer Scientist (1st edition). O’Reilly Media.

  • Nazarathy, Y., & Klok, H. (2021). Statistics with Julia: Fundamentals for Data Science, Machine Learning and Artificial Intelligence. Springer Nature.

  • Novak, K. (2021). Numerical Methods for Scientific Computing. 2nd Edition. Equal Share Press.

  • Perkel, J. M. (2019). Julia: Come for the Syntax, Stay for the Speed. Nature, 572(7767), 141–142. https://doi.org/10.1038/d41586-019-02310-3

  • Sengupta, A. & Edelman, A. (2019). Julia High Performance: Optimizations, Distributed Computing, Multithreading, and GPU Programming with Julia 1.0 and beyond, 2nd Edition. Packt Publishing.

  • Storopoli, J. (2021). Bayesian Statistics with Julia and Turing. https://storopoli.github.io/Bayesian-Julia

  • Storopoli, J., Huijzer, R. & Alonso, L. (2021). Julia Data Science. https://juliadatascience.io

  • TEDx Talks. (2020). A Programming Language to Heal the Planet Together: Julia | AlanEdelman | TEDxMIT.

  • The Julia Programming Language. (2019). JuliaCon 2019 | The Unreasonable Effectivenessof Multiple Dispatch | Stefan Karpinski.

  • White, J. M., Kamiński, B., powerdistribution, Milan Bouchet-Valat, Garborg, S., Quinn,J., Kornblith, S., cjprybol, Stukalov, A., Bates, D., Short, T., DuBois, C., Harris,H., Squire, K., Arslan, A., pdeffebach, Anthoff, D., Kleinschmidt, D., Noack, A.,... White, L. (2020). JuliaData/DataFrames.Jl: V0.22.1. https://doi.org/10.5281/zenodo.4282946

  • Xu, K., Ge, H., Tebbutt, W., Tarek, M., Trapp, M. & Ghahramani, Z. (2020). AdvancedHMC.Jl: A Robust, Modular and Efficient Implementation of Advanced HMC Algorithms. Symposium on Advances in Approximate Bayesian Inference, 1–10.

Licença

Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

CC BY-SA 4.0