Criando código reutilizável para projetos de ciência de dados

Como aspirantes a cientista de dados, passamos muito tempo escrevendo código, mas, olhando para o cenário geral, o núcleo da ciência de dados não é escrever código, mas para entender nossos dados em um GABINETE e extrair valor dele. A parte de codificação é apenas um meio para atingir esse objetivo. Obviamente, não podemos evitar escrever código e isso provavelmente é prejudicial para o processo; no entanto, podemos reduzir a quantidade de tempo que gastamos, o que nos permite gastar a maior parte do tempo desenvolvendo estratégias para atingir nosso objetivo principal.

O processo para a maioria de nós é o seguinte. Nós tendemos a escrever pequenos blocos de código e depois copiar, colar e modificar conforme necessário. Isso é bom para pequenas tarefas, mas fazer isso para grandes pedaços de código várias vezes pode desorganizar seu notebook, dificultando a localização de coisas e, mais frequentemente, quebrando o notebook enquanto você experimenta estratégias diferentes. Também pode ser extremamente irritante fazer alterações no código em vários locais diferentes, novamente, desperdiçando seu tempo.

Alguns de nós definem funções para contornar isso como adquirir um GABINETE THERMALTAKE, mas o problema é que precisamos continuar copiando essas funções em cadernos diferentes, sempre que criarmos novos. Além disso, quando trabalhamos em projetos posteriores, pode ser difícil recuperar funções que usamos em projetos anteriores, fazendo com que gastemos tempo tentando localizá-lo em todos os nossos projetos e, em seguida, desistindo e escrevendo novamente uma função personalizada.

PC GAMER, PC GAMER BARATO, PLACA DE VÍDEO, PLACA DE VÍDEO QUADRO, PLACA DE   VÍDEO QUADRO P400, GABINETE, GABINETE THERMALTAKE, GABINETE GAMER, MONITOR,   MONITOR AOC,  MONITOR 18.5

Nível 1 – Digite arquivos .py
A melhor solução para esse problema é manter seu código definido dentro das funções em arquivos py externos. Dessa forma, você pode reutilizar seu código sempre que precisar em qualquer bloco de notas que precisar. Tudo o que você precisa fazer é importar essas funções, assim como você importa suas bibliotecas favoritas e as utiliza. Isso mantém seu código organizado e focado na tarefa.

Não haverá grandes pedaços de código que desviem a atenção da tarefa principal, em um GABINETE GAMER e tentar encontrar coisas no seu notebook pode se tornar muito mais fácil. Quando você muda para um projeto diferente, tudo o que você precisa fazer é copiar esses arquivos py para a pasta do projeto e está tudo pronto. (No final do artigo, discuto algumas maneiras de ajudá-lo a evitar fazer isso também.)

Agora, como criamos esses arquivos? Vamos passo a passo usando um exemplo simples.
Vamos criar uma função chamada custom_mean () que recebe uma lista e adiciona dois a todos os valores, multiplica por dois e depois retorna a média. Obviamente, isso é muito simples para qualquer função realmente útil, mas você pode fazer o que precisar.
Agora, abra um editor de texto e copie a função nele. No topo da página, adicione as funções importadas que você usou para sua própria função. No meu caso, usei mean () do Numpy para que meu arquivo fique assim.
importar numpy como np
def my_mean (lista):
list = np.array (lista)
retornar np.mean ((lista + 2) * 2)
Em seguida, salve o arquivo com o nome que deseja que sua importação seja chamada com uma extensão .py. Vou chamar meu custom_means.py.
Agora, para importá-lo para o seu notebook, você pode fazer assim.
de custom_means import my_mean
Agora vamos tentar fazer uso disso.
lista = [34, 54, 46, 57, 86, 34]
print (‘Minha média:’, my_mean (lista))
# Resultado
# My Mean: 107.66666666666667
Isso foi fácil o suficiente. Agora, como você leva isso para o próximo nível?

PC GAMER, PC GAMER BARATO, PLACA DE VÍDEO, PLACA DE VÍDEO QUADRO, PLACA DE   VÍDEO QUADRO P400, GABINETE, GABINETE THERMALTAKE, GABINETE GAMER, MONITOR,   MONITOR AOC,  MONITOR 18.5
Nível 2 – Diretórios
Você pode adicionar mais funções aos seus arquivos à medida que seu projeto avança. Você também pode criar classes personalizadas para bibliotecas como o Scikit-Learn. Você pode aprender como fazer isso aqui.
Eventualmente, à medida que você escrever mais funções e classes, aprenderá que é importante ter um MONITOR e organizá-las também em arquivos diferentes, com base nos tipos de tarefas que realizam, assim como nas bibliotecas populares que usamos. Por exemplo, você espera que suas funções científicas de computação façam parte do numpy e seus utilitários gráficos façam parte do matplotlib. Portanto, seria sensato fazer o mesmo com suas funções.

À medida que o número de arquivos aumenta, você chega a um ponto em que seria mais fácil tê-los todos em uma pasta ou em várias pastas. Agora, como você importa funções de um arquivo se ele não está na mesma pasta em que você está trabalhando? A resposta é algo que você tem feito o tempo todo sem perceber. Eu posso ilustrar com um exemplo usando o mesmo arquivo no exemplo anterior. Vamos adicioná-lo a uma pasta chamada utilitários.
Agora temos MONITOR AOC e a pasta utilitários que contém o arquivo custom_means.py, em nosso diretório de trabalho. Para importar a mesma função agora, digitaríamos.
de utilities.custom_means import my_mean
Parece familiar, não é? Por exemplo, quando importamos o RandomForestRegressor do Scikit-learn da seguinte maneira,
sklearn.tree import RandomForestRegressor
Na verdade, o que estamos fazendo é acessar o diretório em árvore na instalação do sklearn e importar a classe do arquivo _classes.py. Você pode dar uma olhada aqui.
Observe que isso é um pouco diferente do nosso exemplo acima, mas a ideia é a mesma. As diferenças se devem ao fato de estarem usando maneiras adicionais de acelerar o código usando o Cython, para o qual são necessários arquivos adicionais. Eles têm uma maneira mais complexa, mas eficaz, de gerenciar seus arquivos devido à escala do projeto. O arquivo __init__.py informa automaticamente ao python qual arquivo procurar o código para cada classe, em vez de precisarmos explicitamente explicá-lo
de sklearn.tree._classes import RandomForestRegressor
# Observação: isso gera um erro, devido à maneira como o código é # organizado
Você não precisa se preocupar com isso por enquanto, mas é bom definir isso como uma meta para chegar a um dia.
Organizar todos os nossos utilitários personalizados em pastas pode ser muito útil. Agora só precisamos copiar a pasta para o diretório de trabalho de qualquer novo projeto e estamos prontos. À medida que suas ferramentas se tornam mais refinadas depois que você as ajusta ao longo do tempo, pode ser útil chamar esses utilitários sem ter que copiar suas pastas de utilitários a cada vez.
Nível 3 – Caminho do Python
Então vamos agora levar isso para o próximo nível. Não vale a pena fazer isso até que você tenha um conjunto de utilitários úteis, que não precisam ser editados com frequência. Se suas funções e classes não forem finalizadas, provavelmente você deve continuar copiando as pastas para os novos diretórios do projeto. Mas vamos fingir que temos alguns utilitários polidos por enquanto.
Para entender isso, precisamos entender o que acontece quando você importa um pacote com um MONITOR 18.5. Primeiro, o Python verifica seu diretório de trabalho e, em seguida, verifica a variável ‘caminho’ para ver se a função que você está importando está realmente lá. A variável path é essencialmente uma lista de locais em que vários pacotes estão instalados no seu computador. Você pode dar uma olhada na sua variável de caminho executando
sys de importação
sys.path
A saída no meu computador é a seguinte. Estou usando um sistema Linux e ele será diferente com base no sistema operacional que você usa, no entanto, o processo é o mesmo, independentemente do computador que você usa.
[‘/home/anupjsebastian/anaconda3/envs/my-env/lib/python37.zip’,
‘/home/anupjsebastian/anaconda3/envs/my-env/lib/python3.7’,
‘/home/anupjsebastian/anaconda3/envs/my-env/lib/python3.7/lib-dynload’,
”,
‘/home/anupjsebastian/anaconda3/envs/my-env/lib/python3.7/site-packages’,
‘/home/anupjsebastian/anaconda3/envs/my-env/lib/python3.7/site-packages/IPython/extensions’,
‘/home/anupjsebastian/.ipython’]
Se você colocar sua pasta de utilitários em um desses diretórios, poderá acessar suas funções e classes da mesma maneira que faz com todos os outros pacotes usados. Eu, pessoalmente, preferiria estar sob
/home/anupjsebastian/anaconda3/envs/my-env/lib/python3.7
como o restante, são na maioria subdiretórios desse diretório.

PC GAMER, PC GAMER BARATO, PLACA DE VÍDEO, PLACA DE VÍDEO QUADRO, PLACA DE   VÍDEO QUADRO P400, GABINETE, GABINETE THERMALTAKE, GABINETE GAMER, MONITOR,   MONITOR AOC,  MONITOR 18.5
Também existe uma maneira de colocá-lo em um local personalizado. Para Linux e Mac, digite o seguinte no terminal
# Para Linux
nano ~ / .bashrc
# Para Mac
nano ~ / .bash_profile
e adicione a seguinte linha ao final do arquivo.
# Para Linux
exportar PYTHONPATH = / Seu / caminho / aqui
# Para Mac
exportar PYTHONPATH = “/ Seu / caminho / aqui”
Para Windows, você pode descobrir aqui. Mais detalhes sobre o Python Path podem ser encontrados aqui.
É tudo o que existe: um roteiro completo sobre como reduzir gradualmente o tempo gasto em codificação e se concentrar na tarefa em questão, escrevendo código reutilizável e automatizando muitos dos processos tediosos que você acaba fazendo para cada novo projeto .
Este artigo contém muitas informações e pode ser muito útil ao mesmo tempo. Espero que o artigo tenha sido útil para você, não importa em que estágio do aprendizado você esteja. Mesmo que você não faça tudo o que é mencionado neste momento, pode ser útil voltar aqui sempre que precisar.
Boa sorte!

 

Referência