RSS page de blog - 1/2 ==> Blog calcul_matriciel (2) cours (3) numpy (2) pandas (3)


page de blog - 1/2

Mettre à jour un module sous Windows

2016-11-15

Comme il n’existe pas de compilateur par défaut sous Windows, l’installation ou la mise à jour des modules requiert de passer toujours par les mêmes étapes. Si la distribution Anaconda est installée et que le module est maintenu, il faut toujours exécuter :

conda install <module>

Et :

conda update <module>

Si le module n’est pas maintenu ou que la distribution Anaconda n’est pas utilisé, il existe trois cas possibles.

  1. Le module est écrit en Python pur (exemple : seaborn).
  2. Le module contient du C++ et est compilé par le site Unofficial Windows Binaries for Python Extension Packages (exemple : numpy).
  3. Le module contient du C++ et n’est pas compilé par le site Unofficial Windows Binaries for Python Extension Packages : (exemple : xgboost).

Le cas 1 est simple si le module dépend de modules tous écrits en Python (voir plus bas). Il suffit d’exécuter :

pip install <module>

Ou :

pip install <module> --upgrade

Si on souhaite installer ou mettre à jour le module sans les dépendances, il faut ajouter l’option --no-deps. Cette option est indispensable lorsqu’on met à jour un module qui prend une dépendance sur un autre module qui contient du C++ comme seaborn. La mise à jour de ce module entraîne la mise à jour de numpy qui échoue car elle requiert un compilateur C++ et Intel® Math Kernel Library.

NumPy, a fundamental package needed for scientific computing with Python. Numpy+MKL is linked to the Intel® Math Kernel Library and includes required DLLs in the numpy.core directory.

Le cas 2 est simple aussi dans la mesure où il suffit de télécharger le fichier .whl depuis le site Unofficial Windows Binaries for Python Extension Packages. Une fois ce fichier téléchargé, il suffit d’exécuter :

pip install <fichier>

La mise à jour se fait de la même façon :

pip install <fichier>

Le cas 3 est plus complexe. Il requiert que le module soit compilé. Pypi propose parfois une version compilée comme pour scipy mais il faut vérifier qu’il existe une version pour la distribution de Python installée. Il existe deux sous-cas.

Cas 3.1 : le site du module explique comment compiler le module sous Windows. C’est le cas de xgboost. Lire Build xgboost on Windows.

Cas 3.2 : le module peut être compilé avec les instructions standard. Exemple : Build param on Windows.

Que fait le module pymyinstall ?

Le module pymyinstall peut installer ou mettre à jour une liste de modules utilisée pour mes enseignements. C’est un mélange de module Python (cas 1), de module C++ accessibles depuis le site Unofficial Windows Binaries for Python Extension Packages ou non (cas 3). Dans ce dernier cas, le module va chercher la dernière version compilé sur le site www.xavierdupre.fr. Pour s’en servir :

pymy_install <module>

Ou pour mettre à jour :

pymy_update <module>

Les instructions pour compiler certains modules compliqués sont décrites sur ce blog.

post

Télécharger en Python via un proxy

2016-10-10

Il n’est pas facile de télécharger des données via un proxy. Je retranscris différents essais reçu par mail. La fonction urllib.request.urlopen ne fonctionne pas pour ce genre d’usage. Il faut utiliser le module python-requests. Ce qui ne marche pas avec un proxy :

import urllib.request
with urllib.request.urlopen('http://www.python.org/') as f:
    content = f.read(300)

Ce qui marche avec un proxy :

import requests
s = requests.Session()
s.proxies = {"http": "http://<login>\\<pwd>:<user>@<proxy>:<port>"}
result = s.get("http://www.python.org")

result.content retourne le contenu brut au format bytes. result.text convertit result.content au format texte. Si on veut ne lire qu’une partie de la page web, il faut explicitement demander que la fonction retourne un stream :

result = s.get("http://www.python.org", stream=True)
content = result.raw.read(100)

Pour le reste, la documentation n’est pas très explicite quant à la méthode get, il faut revenir au code de get qui appelle la méthode request

post

Eviter les mots de passe dans les notebooks

2016-09-24

Il arrive fréquemment qu’on ait besoin d’une ressource protégée par un mot de passe, service web, API, login et le plus simple est toujours d’écire ce mot de passe en clair dans le notebook. On se dit qu’il faudra penser à l’enlever avant de partager le notebook et on oublie toujours de l’enlever. C’est mon cas en tout cas. J’ai dû plusieurs fois changer de mot de passe car le précédent est parti sur GitHub par inadvertance (programmée).

Ma première réponse à ce mécanisme était d’ouvrir un formulaire javascript dans le notebook. J’ai créé la fonction open_html_form. Cette solution est pratique mais elle implique de rentrer le mot de passe à chaque fois qu’on ouvre le notebook. Et elle ne sert à rien pour les notebooks.

La seconde réponse et à mon avis la meilleur est d’utiliser le module keyring. D’un côté, on écrit ceci sur une ligne de commande Python une et une seule fois :

import keyring
keyring.set_password("actuariat", "dupre", "mon mot de passe")

Puis dans le notebook, il suffit d’exécuter le code suivant pour récupérer le mot de passe :

import keyring
keyring.get_password("actuariat", "dupre")

Le mot de passe n’apparaît pas dans le notebook, il n’est pas besoin de le saisir à chaque fois qu’on se sert du notebook et il peut tout aussi bien servier pour récupérer le notebook dans un test unitaire.

post

Références, séance du 14 juin 2016

2016-06-14

Trucs et astuces sur Internet

  • Chercher sur un moteur de recherche <module> cheatsheet pour retrouver les usages les plus fréquents avec un module

Autres trucs et astuces

Installation sous Windows, essayer dans l’ordre :

  1. conda install <module>
  2. Regarder sur la page Unofficial Windows Binaries for Python Extension Packages si elle contient le module souhaité. Si oui, il y a de grandes chances que le module nécessite un compilateur C. Essayer pip install <wheel>.
  3. Enfin, essayer pip install <module>.

Si cela ne marche pas, installer Visual Studio 2015 Community.

Notebooks

Visualisation

post

Challenge Kaggle Assurance

2016-06-10

Can you accelerate BNP Paribas Cardif’s claims management process?

Le challenge consisté à accélérer le traitement des demandes de remboursement. Les données sont conséquentes environ 50 Mo.

post

Jupyter et R

2016-04-07

Jupyter fonctionne aussi avec R (voir Supports de cours en R). L’installation repose sur les éléments suivants :

  • Installer Jupyter (avec Anaconda) par exemple)
  • Mettre à jour la distribution (conda update --all)
  • Installer R
  • Installer le package IRKernel en suivant les instructions décrites sur le site de IRKernel
  • Installer le kernel toujours en suivant les instructions du site IRKernel

Cette dernière étape devrait installer un fichier json (dans C:\ProgramData\jupyter\kernels sous Windows) qui ressemble à :

{"display_name": "R",
 "argv": ["C:\\Program Files\\R\\bin\\x64\\R.exe",
          "--quiet", "-e", "IRkernel::main()",
          "--args",  "{connection_file}"],
 "language": "R"}

On peut trouver des kernels pour les autres langages IPython kernels for other languages. Le kernel est le bout de code qui gère la communication entre Jupyter et l’interpréteur ou le compilateur du langage considéré.

post

Balade d’avril

2016-04-05

  1. Python, Distributions, Module OS

  2. DataFrame

  3. Pause récréative

  4. Algorithme récréatif

http://ecx.images-amazon.com/images/I/81RPCdhb+TL._SL1500_.jpg

post

pandas et SAS

2016-03-12

La fonction read_sas est apparue dans le module pandas version 0.17, améliorée dans la version 0.18 : pd.read_sas() changes.

post

Exam, doubts and poetry

2016-03-03

This is one question we decided to remove from the final exam but I still do like it because it challenges people. How to make a connection between known algorithms and the following code. To your opinion, the following code is closed to:

import math

def meslogs_jusque(N):
    memolog = { 1:0.0 }
    for i in range(2,N+1):
        if i in memolog:
            pass
        else:
            l = math.log(i)
            total = i
            for j in range(total, N+1, total):
                memolog[j] = memolog.get(j, 0.0) + l
            total *= i
            while total < N+1:
                for j in range(total, N+1, total):
                    memolog[j] += l
                total *= i
    return memolog

post

Grandes tables, Guillemets

2015-06-20

Très populaire, le module pandas permet de lire les formats de données les plus classiques ou des formats de fichiers plats inattendus. C’est ce que montre le notebook Tables avec guillemets. Il montre également comment parcourir par petits bouts une table trop grande pour tenir en mémoire.

post


RSS page de blog - 1/2 ==> 2015-05 (1) 2015-06 (3) 2016-03 (2) 2016-04 (2) 2016-06 (2) 2016-09 (1) 2016-10 (1) 2016-11 (1)