$30 off During Our Annual Pro Sale. View Details »

Python - Uma análise da linguagem e seu ecossistema

Python - Uma análise da linguagem e seu ecossistema

Uma análise da linguagem Python e seu ecossistema

Alexandre Vicenzi

July 20, 2018
Tweet

More Decks by Alexandre Vicenzi

Other Decks in Programming

Transcript

  1. Python
    Uma análise da linguagem e seu ecossistema

    View Slide

  2. print(about_me)
    {
    "name": "Alexandre Vicenzi",
    "role": "Software Engineer",
    "loves_python": True,
    "social_accounts": {
    "twitter": "twitter.com/alxvicenzi",
    "github": "github.com/alexandrevicenzi",
    "linkedin": "linkedin.com/in/alexandrevicenzi",
    },
    }

    View Slide

  3. História
    ● Criada por Guido van Rossum
    ○ Centrum Wiskunde & Informatica (CWI)
    ● 1989 - 1990
    ● Inspirada na linguagem ABC e influenciada por Algol, C, Lisp e outras
    ● Ruby foi inspirada no Python
    ● Ênfase em legibilidade de código
    ● Monty Python's Flying Circus deu origem ao nome da linguagem

    View Slide

  4. Características da linguagem
    ● Orientada a objetos
    ● Imperativa
    ● Funcional
    ● Dinamicamente tipada
    ● Fortemente tipada
    ● Duck Typing
    ● Metaprogramação
    ● Gerenciamento de memória
    ● Interpretada

    View Slide

  5. Versões
    ● 1991 - Python 0.9.0 (Primeira versão pública)
    ● 1994 - Python 1.0
    ● 2000 - Python 2.0
    ● 2008 - Python 3.0 & Python 2.6
    ● 2009 - Python 3.1
    ● 2010 - Python 2.7
    ● 2011 - Python 3.2
    ● 2012 - Python 3.3
    ● 2014 - Python 3.4
    ● 2015 - Python 3.5
    ● 2018 - Python 3.7
    ● 2020 - Descontinuação do Python 2.7

    View Slide

  6. Implementações
    ● CPython (Implementação oficial escrita em C)
    ● IronPython (.NET)
    ● Jython (JVM)
    ● Numba (LLVM) - Suporte a GPU
    ● PyPy (JIT compiler)
    ● Pyston (LLVM e JIT) - Em desenvolvimento
    ● MicroPython (Micro controladores)
    ● Stackless
    ● Cython (Extensão da linguagem)

    View Slide

  7. Vantagens
    ● Popularidade
    ● Comunidade
    ● Fácil e elegante
    ● Produtiva
    ● Poderosa

    View Slide

  8. Desvantagens
    ● Mais lenta em alguns cenários
    ○ Em comparação a C e Go
    ● Erros em runtime
    ○ Por não ser compilada alguns erros só são percebidos durante a execução

    View Slide

  9. Talk is cheap.
    Show me the code.

    View Slide

  10. Hello World!
    print("Hello, I'm Python!")

    View Slide

  11. Fibonacci
    def fib(n):
    a, b = 0, 1
    while a < n:
    print(a, end=' ')
    a, b = b, a+b
    print()
    fib(1000)

    View Slide

  12. Classe
    class Dog:
    def __init__(self, name):
    self.name = name
    self.tricks = []
    def add_trick(self, trick):
    self.tricks.append(trick)
    d = Dog('Bud')
    d.add_trick('roll over')
    d.add_trick('play dead')

    View Slide

  13. Python 3

    View Slide

  14. Novidades
    ● 3.0
    ○ Print virou uma função
    ○ Alterações na sintaxe (incompatível com Python 2)
    ○ Novo formatador de string
    ● 3.4
    ○ Asynchronous I/O
    ● 3.5
    ○ Novo operador @ para multiplicação de matrizes
    ○ Type hints
    ○ Async e Await
    ● 3.6
    ○ String interpolation
    ● 3.7
    ○ Data Classes

    View Slide

  15. É mais usado
    Fonte: https://www.jetbrains.com/research/python-developers-survey-2017/

    View Slide

  16. É mais rápido
    Fonte: https://speed.python.org/comparison/

    View Slide

  17. Suporte de frameworks/bibliotecas
    ● A maioria suporta Python 3
    ○ Requests
    ○ Boto
    ○ Jinja2
    ○ IPython
    ○ Ansible
    ○ Entre outros
    ● Alguns estão começando a remover suporte a Python 2
    ○ Django
    ○ Tornado
    ○ NumPy
    ○ Pandas
    ○ Wagtail

    View Slide

  18. Estatísticas

    View Slide

  19. 2ª linguagem mais popular no GitHub
    Fonte: https://octoverse.github.com/

    View Slide

  20. Utilização por categoria
    Fonte: https://www.jetbrains.com/research/python-developers-survey-2017/

    View Slide

  21. Bibliotecas/Frameworks mais utilizados
    Fonte: https://www.jetbrains.com/research/devecosystem-2018/python/

    View Slide

  22. Python é mais usado para Data Science
    e Machine Learning do que para Web

    View Slide

  23. Python para Web

    View Slide

  24. Web Server Gateway Interface (WSGI)
    ● Interface entre Web Servers e Web Applications
    ● Padronização proposta pela PEP-333 e PEP-3333
    ● WSGI Servers populares
    ○ Gunicorn
    ○ uWSGI
    ○ Apache mod_wsgi

    View Slide

  25. Django
    ● Full Stack Framework
    ○ ORM
    ○ Template Engine
    ○ Site Admin
    ○ Internacionalização
    ● Seguro
    ○ XSS
    ○ CSRF
    ○ SQL Injection
    ○ Clickjacking
    ● Escalável (up to 50k req/s)
    ● Possui Web Server interno apenas para desenvolvimento

    View Slide

  26. Tornado
    ● Full Stack Framework
    ○ Template
    ○ Routing
    ○ Internacionalização
    ● Non-blocking I/O
    ● Ideal para long polling e websockets
    ● Suporte parcial ao WSGI
    ● Web Server assíncrono interno
    ● Mantido pelo Facebook

    View Slide

  27. Flask
    ● Micro Framework
    ○ Suporte a REST
    ○ Jinja2 Template
    ○ Suporte a cookies
    ● Possui Web Server interno apenas para desenvolvimento
    ● Compatível 100% com WSGI
    ● Extenções
    ○ Admin
    ○ Cache
    ○ Gerenciador de sessão
    ○ Internacionalização
    ○ ORM
    ○ OAuth

    View Slide

  28. Sanic
    ● Flask like
    ● Async requests
    ● Python 3.5+ (asyncio/uvloop)
    ● Possui Web Server interno
    ▄▄▄▄▄
    ▀▀▀██████▄▄▄ _______________
    ▄▄▄▄▄ █████████▄ / \
    ▀▀▀▀█████▌ ▀▐▄ ▀▐█ | Gotta go fast! |
    ▀▀█████▄▄ ▀██████▄██ | _________________/
    ▀▄▄▄▄▄ ▀▀█▄▀█════█▀ |/
    ▀▀▀▄ ▀▀███ ▀ ▄▄
    ▄███▀▀██▄████████▄ ▄▀▀▀▀▀▀█▌
    ██▀▄▄▄██▀▄███▀ ▀▀████ ▄██
    ▄▀▀▀▄██▄▀▀▌████▒▒▒▒▒▒███ ▌▄▄▀
    ▌ ▐▀████▐███▒▒▒▒▒▐██▌
    ▀▄▄▄▄▀ ▀▀████▒▒▒▒▄██▀
    ▀▀█████████▀
    ▄▄██▀██████▀█
    ▄██▀ ▀▀▀ █
    ▄█ ▐▌
    ▄▄▄▄█▌ ▀█▄▄▄▄▀▀▄
    ▌ ▐ ▀▀▄▄▄▀
    ▀▀▄▄▀

    View Slide

  29. Bottle
    ● Micro Framework
    ○ Routing
    ○ Templates (Jinja2, Mako e Cheeta)
    ○ Suporte a Cookies, File Upload
    ● Possui Web Server interno apenas para desenvolvimento
    ● Compatível com WSGI
    ● Arquivo único (.py)
    ● Sem dependências externas

    View Slide

  30. Outros frameworks
    ● Full Stack Frameworks
    ○ TurboGears
    ○ Web2py
    ● Micro Frameworks
    ○ CherryPy
    ○ Falcon
    ○ Pyramid
    ● CMS
    ○ Django CMS
    ○ Mezzanine
    ○ Wagtail
    ● Wiki Engine
    ○ MoinMoin

    View Slide

  31. Python para Data Science

    View Slide

  32. NumPy
    ● Pacote essencial para computação científica
    ● Sofisticado Array N-dimensional
    ● Integração com C/C++ e Fortran
    ● Cálculos
    ○ Álgebra Linear
    ○ Transformada de Fourier
    ○ Random Numbers

    View Slide

  33. SciPy
    ● Pacote para matemática, ciência e engenharia
    ● Depende do NumPy
    ● Vários módulos
    ○ Estatística
    ○ Otimização
    ○ Integração
    ○ Álgebra Linear
    ○ Transformada de Fourier
    ○ Processamento de imagens e sinais
    ○ ODE Solver

    View Slide

  34. Pandas
    ● Análise de dados e modelagem
    ● Ferramentas para leitura e gravação de estruturas de dados
    ○ CSV
    ○ Arquivos de texto
    ○ Microsoft Excel
    ○ Bancos SQL
    ○ HDF5
    ● Alternativa a linguagem R

    View Slide

  35. Matplotlib
    ● Plotagem 2D
    ○ Plotagem em geral
    ○ Histogramas
    ○ Densidade espectral
    ○ Bar Charts
    ○ Error Charts
    ○ Gráfico de dispersão
    ● MATLAB like
    ● Integrações
    ○ IPython
    ○ Jupyter Notebook
    ○ Web
    ○ GTK, Qt, WX, Tkinter

    View Slide

  36. Python para Machine Learning

    View Slide

  37. scikit-learn
    ● Ferramentas para mineração e análise de dados
    ● Baseado no NumPy, SciPy e Matplotlib
    ● Inclui vários algoritmos
    ○ Classificasão
    ○ Regressão
    ○ Clustering
    ○ Support Vector Machine
    ○ Random Forest
    ○ K-Means
    ● Popular no aprendizado de Machine Learning
    ● Sem suporte a GPUs

    View Slide

  38. TensorFlow
    ● Machine Learning e Deep Leaning para pesquisa e produção
    ● Suporte a CPUs, GPUs e TPUs
    ● Desenvolvido e mantido pelo Google
    ● Suporte a XLA (Accelerated Linear Algebra)
    ○ Compilador de Álgebra Linear que otimiza cálculos
    ● APIs de alto nível

    View Slide

  39. Python para Deep Learning

    View Slide

  40. Keras
    ● API de alto nível para redes neurais
    ● Prototipação rápida
    ● Suporta CNNs e RNNs
    ● Suporta múltiplos backends
    ○ TensorFlow
    ○ Theano
    ○ CNTK

    View Slide

  41. PyTorch
    ● Framework de Deep Learning
    ● Baseado no Torch (Lua)
    ● NumPy like que roda em GPUs
    ● Comumente utilizado para NLP
    ● Suporte a CPUs e GPUs
    ● Desenvolvido pelo Facebook

    View Slide

  42. Theano
    ● Biblioteca de computação numérica
    ○ Define, otimiza e calcula expressões matemáticas
    ● Integração com NumPy
    ● Usa GPU para cálculos
    ● Desenvolvida pelo MILA
    ● Suporte descontinuado

    View Slide

  43. Caffe
    ● Framework de Deep Learning
    ● Desenvolvido pela Berkeley Artificial Intelligence Research (BAIR)
    ● Modular
    ● Rápido
    ○ Processa 60M de imagens por dia em uma única NVIDIA K40
    ● Suporte a diferentes tipos de arquiteturas
    ○ CNN
    ○ RCNN
    ○ LSTM
    ○ FC NN
    ● Escrito em C++ com interface em Python

    View Slide

  44. Python para Visão Computacional

    View Slide

  45. OpenCV
    ● Focada em aplicações de tempo real
    ● Suporte a OpenCL e CUDA
    ● Desenvolvida pela Intel
    ● Escrito em C++ com interface em Python
    ● Principais módulos
    ○ Processamento de Images
    ○ Processamento de Vídeos
    ○ Estrutura de dados
    ○ Álgebra Linear
    ○ GUI
    ● Multi plataforma

    View Slide

  46. SimpleCV
    ● Framework para Visão Computacional em cima do OpenCV
    ● Mais simples e intuitivo que o OpenCV
    ● Possui shell interativo

    View Slide

  47. scikit-image
    ● Coleção de algoritmos para processamento de imagens
    ○ Segmentação
    ○ Transformações geométricas
    ○ Manipulação de Color Space
    ○ Análise
    ○ Filtros
    ○ Morfologia
    ○ Feature Detection
    ○ E mais
    ● Escrito em Python, Cython e C

    View Slide

  48. Python além da Web e Data Science

    View Slide

  49. Web Crawling
    ● Scrapy
    ● PySpider
    ● Parsel
    ● BeatifulSoup
    ● MechanicalSoup
    ● Requests
    ● lxml

    View Slide

  50. Desenvolvimento de jogos
    ● PyGame
    ● Pyglet
    ● Kivy
    ● Panda3D
    ● PyOpenGL

    View Slide

  51. Desenvolvimento Mobile
    ● BeeWare
    ● Kivy

    View Slide

  52. Desenvolvimento Desktop
    ● PyQt
    ● PySide
    ● PyGTK
    ● TKinter
    ● WxPython

    View Slide

  53. Ferramentas para Python

    View Slide

  54. Anaconda
    ● Gerenciador de pacotes
    ● Gerenciador de ambientes
    ● Distribuição Python
    ● Alternativa ao pip e pyenv

    View Slide

  55. Jupyter Notebook
    ● Editor web com várias funcionalidades
    ● Suporta as linguagens de programação dos cientistas de dados
    ○ Julia
    ○ Python
    ○ R
    ○ Scala
    ○ Entre outras
    ● Permite rodar código no browser
    ● Suporte a equações, visualizações e narração de textos
    ● Integração com Spark

    View Slide

  56. IPython
    ● Shell interativo poderoso
    ● Um kernel do Jupyter
    ● Tab completion
    ● Integração com pdb e profiler
    ● Persistência de histórico
    ● Syntax Highlighting

    View Slide

  57. Perguntas?

    View Slide

  58. Obrigado

    View Slide