Outils pour utilisateurs

Outils du site


issue82:programmer_en_python

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
issue82:programmer_en_python [2014/07/09 12:05] andre_domenechissue82:programmer_en_python [2014/07/25 20:46] (Version actuelle) – [10] fredphil91
Ligne 4: Ligne 4:
 Now on to bigger and better things.** Now on to bigger and better things.**
  
-Avant de commencer l'article python de ce mois-ci, permettez-moi une courte page d'auto-publicité. Fin décembre et début janvier, mon premier livre sur Python a été publié aux éditions Apress. Il est intitulé //The Python Quick Syntax Reference//et est disponible dans un certain nombre d'endroits. Vous pouvez le trouver sur les sites Apress (http://www.apress.com/9781430264781), Springer.com (http://www.springer.com/computer/book/978-1-4302-6478-1) et Amazon (http://www.amazon.com/The-Python-Quick-Syntax-Reference/dp/1430264780), ainsi que d'autres. Il s'agit, comme le titre l'indique, d'une référence à la syntaxe qui aidera ceux d'entre nous qui programment aussi dans d'autres langages que Python à se rappeler comment une certaine commande fonctionne et les prérequis pour cette commande. S'il vous plaît, aidez un ancien programmeur à gagner sa vie en achetant le livre, si vous le pouvez.+Avant de commencer l'article python de ce mois-ci, permettez-moi une courte page d'auto-publicité. Fin décembre et début janvier, mon premier livre sur Python a été publié aux éditions Apress. Intitulé The Python Quick Syntax Reference, il est disponible dans un certain nombre d'endroits. Vous pouvez le trouver sur les sites Apress (http://www.apress.com/9781430264781), Springer.com (http://www.springer.com/computer/book/978-1-4302-6478-1) et Amazon (http://www.amazon.com/The-Python-Quick-Syntax-Reference/dp/1430264780), ainsi que d'autres. Il s'agit, comme le titre l'indique, d'un ouvrage de référence sur la syntaxe qui aidera ceux d'entre nous qui programment aussi dans d'autres langages que Python à se rappeler le fonctionnement d'une certaine commande et les prérequis pour cette commande. S'il vous plaît, aidez un ancien programmeur à gagner sa vie en achetant le livre, si vous le pouvez.
  
 Passons maintenant à des choses plus importantes et passionnantes. Passons maintenant à des choses plus importantes et passionnantes.
Ligne 15: Ligne 15:
 The part in square brackets (IF NOT EXISTS) is totally optional, which will create the table only if it doesn’t exist already. The part in curly brackets, however, is not. The first is the new table name and the second is the query that you want to use to pull data and create the new table.** The part in square brackets (IF NOT EXISTS) is totally optional, which will create the table only if it doesn’t exist already. The part in curly brackets, however, is not. The first is the new table name and the second is the query that you want to use to pull data and create the new table.**
  
-Alors que je travaillais sur mon dernier livre pour Apress, j'ai redécouvert une commande SQL dont je n'avais pas parlé lorsque nous travaillions avec des bases de données SQL, il y a longtemps, alors j'ai pensé que je partagerais l'information avec vous. Il s'agit de la commande CREATE TABLE AS SELECT, qui nous permet d'exécuter une requête sur une table (ou des tables jointes) et de créer une autre table à la volée. La syntaxe générale est :+Alors que je travaillais sur mon dernier livre pour Apress, j'ai redécouvert une commande SQL dont je n'avais pas parlé lorsque nous travaillions avec des bases de données SQL, il y a longtemps, et j'ai pensé que je partagerais l'information avec vous. Il s'agit de la commande CREATE TABLE AS SELECT, qui nous permet d'exécuter une requête sur une table (ou sur des tables jointes) et de créer une autre table à la volée. La syntaxe générale est :
  
 CREATE TABLE [IF NOT EXISTS] {Nouveau nom de la table} AS SELECT {requête} CREATE TABLE [IF NOT EXISTS] {Nouveau nom de la table} AS SELECT {requête}
  
-La partie entre crochets (IF NOT EXISTS) est totalement optionnelleet créera la table seulement si elle n'existe pas déjà. Les parties entre accolades, par contre, ne le sont pas. La première est le nouveau nom de la table et la seconde est la requête que vous souhaitez utiliser pour extraire des données et créer la nouvelle table.+La partie entre crochets (IF NOT EXISTS) est totalement optionnelle et créera la table seulement si elle n'existe pas déjà. Les parties entre accolades, par contre, ne le sont pas. La première est le nouveau nom de la table et la seconde est la requête que vous souhaitez utiliser pour extraire des données et créer la nouvelle table.
  
 ====== 3 ====== ====== 3 ======
Ligne 59: Ligne 59:
 On reçoit simplement un ensemble de données retourné par la requête, mais nous pourrions avoir envie de faire une analyse plus approfondie des données, donc nous voulons mettre les données résultant de la requête dans une table. C'est pourquoi nous aimerions créer une table à partir de la requête. Ainsi, dans l'exemple suivant, ci-dessus à droite, nous créons une table nommée « JoursDeSemaine » en utilisant la même requête que nous avons montrée ci-dessus.  On reçoit simplement un ensemble de données retourné par la requête, mais nous pourrions avoir envie de faire une analyse plus approfondie des données, donc nous voulons mettre les données résultant de la requête dans une table. C'est pourquoi nous aimerions créer une table à partir de la requête. Ainsi, dans l'exemple suivant, ci-dessus à droite, nous créons une table nommée « JoursDeSemaine » en utilisant la même requête que nous avons montrée ci-dessus. 
  
-Maintenant quand nous aurons besoin de cet ensemble de données des jours de semaine, nous pourrons simplement exécuter une requête sur la table « JoursDeSemaine ».+Maintenantquand nous aurons besoin de cet ensemble de données des jours de semaine, nous pourrons simplement exécuter une requête sur la table « JoursDeSemaine ».
  
 ====== 5 ====== ====== 5 ======
Ligne 70: Ligne 70:
 Une fois que nous savons ce que nous voulons, et que nous avons testé la requête, nous pouvons commencer notre code. En supposant que nous avons déjà la table « étude » créée et remplie, nous pouvons utiliser Python pour créer notre nouvelle table dans la base de données principale. Pour votre information, j'utilise la bibliothèque APSW SQLite pour faire le travail de base de données. Une fois que nous savons ce que nous voulons, et que nous avons testé la requête, nous pouvons commencer notre code. En supposant que nous avons déjà la table « étude » créée et remplie, nous pouvons utiliser Python pour créer notre nouvelle table dans la base de données principale. Pour votre information, j'utilise la bibliothèque APSW SQLite pour faire le travail de base de données.
  
-Nous devons, bien sûr, ouvrir une connexion (à droite) et créer un curseur pour la base de données SQLite. Nous avons vu ceci dans un certain nombre d'articles précédents. +Nous devons, bien sûr, ouvrir une connexion (à droite) et créer un curseur pour la base de données SQLite. Nous avons vu ceci dans de nombreux articles précédents. 
  
-Maintenant, nous devons créer la routine qui crée la table avec l'ensemble de données retourné par la requête, ci-dessous, puis la modifie et exécute quelques calculs.+Maintenant, nous devons créer la routine qui crée la table avec l'ensemble de données retourné par la requête, ci-dessous, puis la modifier et exécuter quelques calculs.
  
 ====== 6 ====== ====== 6 ======
Ligne 83: Ligne 83:
 Comme vous pouvez le voir, nous créons un deuxième curseur pour ne pas risquer que le premier curseur contienne des données que nous devons conserver. Nous l'utiliserons dans la dernière partie du code. Nous supprimons la table si elle existe et exécutons notre requête sur la table « étude ».  Comme vous pouvez le voir, nous créons un deuxième curseur pour ne pas risquer que le premier curseur contienne des données que nous devons conserver. Nous l'utiliserons dans la dernière partie du code. Nous supprimons la table si elle existe et exécutons notre requête sur la table « étude ». 
  
-Maintenant, nous créons trois colonnes de plus (ci-dessous) dans la table des jours de semaine, nommées « probabilité », « inférieur » et « supérieur ». Nous faisons cela en utilisant la commande SQL « ALTER TABLE».+Maintenant, nous créons trois colonnes de plus (ci-dessous) dans la table des jours de semaine, nommées « probabilité », « inférieur » et « supérieur ». Nous faisons cela en utilisant la commande SQL « ALTER TABLE ».
  
-L'étape suivante (en haut à droite) sera d'ajouter les données dans le champ NombreDeJoursDeSemaine.+L'étape suivante (en haut à droite) sera d'additionner les données dans le champ NombreDeJoursDeSemaine.
  
 ====== 7 ====== ====== 7 ======
Ligne 94: Ligne 94:
 c1 = cursor.execute(upquery)** c1 = cursor.execute(upquery)**
  
-Il n'y a qu'un seul enregistrement retourné, mais nous faisons quand même une boucle for. Rappelez-vous de ce qui précède que le champ « NombreDeJoursDeSemaine » contient le nombre de jours au cours de l'étude où un nombre déterminé de paquets est arrivé. Cela nous donne une valeur qui contient la somme de toutes les entrées de « NombreDeJoursDeSemaine ». Juste pour que vous ayez une référence pendant que nous progressons le nombre que j'ai obtenu avec mes données factices est 44. +Il n'y a qu'un seul enregistrement retourné, mais nous faisons quand même une boucle for. Rappelez-vous de ce qui précède que le champ « NombreDeJoursDeSemaine » contient le nombre de jours au cours de l'étude où un nombre déterminé de paquets est arrivé. Cela nous donne une valeur qui contient la somme de toutes les entrées de « NombreDeJoursDeSemaine ». Juste pour que vous ayez une référence pendant que nous progressons le nombre que j'ai obtenu avec mes données factices est 44. 
  
 upquery = "SELECT * FROM JoursDeSemaine" upquery = "SELECT * FROM JoursDeSemaine"
Ligne 127: Ligne 127:
 Enfin, nous utilisons l'instruction SQL « UPDATE » pour mettre les nouvelles valeurs calculées dans la base de données. Enfin, nous utilisons l'instruction SQL « UPDATE » pour mettre les nouvelles valeurs calculées dans la base de données.
  
-Nous nous retrouvons avec un nombre de paquet (pkgs), le décompte du nombre de jours auxquels ce nombre de paquets est arrivé, une probabilité que cela se produise dans l'ensemble de l'étude (31 colis sur une journée sur un total de 44 (semaine dans cette étude de plus de 60 jours), auront une probabilité de 0,02). +Nous nous retrouvons avec un nombre de paquet (pkgs), le décompte du nombre de jours où ce nombre de paquets est arrivé, une probabilité que cela se produise dans l'ensemble de l'étude (31 colis sur une journée sur un total de 44 (jours de semaine dans cette étude de plus de 60 jours), auront une probabilité de 0,02). 
  
 Si l'on additionne toutes les valeurs de probabilité de la table, on devrait trouver 1. Si l'on additionne toutes les valeurs de probabilité de la table, on devrait trouver 1.
Ligne 138: Ligne 138:
 Until next time.** Until next time.**
  
-Les valeurs supérieures et inférieures reflètent alors un nombre compris entre 0 et 1 qui mime la possibilité qu'un nombre aléatoire soit dans cette plage et qui va nous donner un nombre aléatoire de paquets. Ce nombre peut alors être utilisé pour une analyse statistique de ces données. Un exemple du « monde réel normal » serait de prévoir le nombre de voitures qui arrivent à un centre de lavage auto sur la base d'observations effectuées sur le terrain. Si vous voulez comprendre mieux, vous pouvez consulter http://www.algebra.com/algebra/homework/Probability-and-statistics/Probability-and-statistics.faq.question.309110.html pour voir un exemple de cela. Tout ce que nous avons fait est de générer (le plus dur) facilement avec Python.+Les valeurs supérieures et inférieures reflètent alors un nombre compris entre 0 et 1 qui mime la possibilité qu'un nombre aléatoire soit dans cette plage et qui va nous donner un nombre aléatoire de paquets. Ce nombre peut alors être utilisé pour une analyse statistique de ces données. Un exemple du « monde réel normal » serait de prévoir le nombre de voitures qui arrivent à un centre de lavage auto sur la base d'observations effectuées sur le terrain. Si vous voulez comprendre mieux, vous pouvez consulter http://www.algebra.com/algebra/homework/Probability-and-statistics/Probability-and-statistics.faq.question.309110.html pour voir un exemple de cela. Tout ce que nous avons fait est de le générer (le plus dur) facilement avec Python.
  
-Le code pour les deux routines que nous avons présentées cette fois-ci est ici : http://pastebin.com/kMc9EXes +Le code pour les deux routines que nous avons présentées cette fois-ci est ici : http://pastebin.com/7EF7epVG
  
 À la prochaine fois. À la prochaine fois.
 +
 +====== Encadrés sur fond orangés ======
 +===== page 11 en haut =====
 +SELECT pkgs, Count(DOW) as NombreDeJoursDeSemaine FROM etude
 +   WHERE (Holiday <> 1)
 +      AND DayName in ("lundi","mardi","mercredi","jeudi","vendredi")
 +   GROUP BY pkgs
 +
 +===== page 11 en bas =====
 +pkID - Integer, Primary Key, AutoIncrement
 +DOM - Integer - Jour du mois (1-31)
 +DOW - Integer - Jour de la semaine (1-7 (dimanche = 1, lundi = 2, etc.))
 +pkgs - Integer - Nombre de colis reçus ce jour
 +DayName - TEXT - "dimanche","lundi", etc
 +Holiday - Integer 0 ou 1 (Est-ce que ce jour est considéré comme congé ou pas) 1 pour oui
 +
 +===== page 12 en haut =====
 +CREATE TABLE IF NOT EXISTS JoursDeSemaine AS
 +   SELECT pkgs, Count(DOW) as NbDeJoursDeSemaine FROM etude
 +   WHERE (Holiday <> 1)
 +      AND DayName in ("lundi","mardi","mercredi","jeudi","vendredi")
 +   GROUP BY pkgs
 +
 +===== page 12 au milieu haut =====
 +def OpenDB():
 +    global connection
 +    global curseur
 +    connection = apsw.Connection("labpackagestudy.db3")
 +    curseur = connection.cursor()
 +
 +===== page 12 au milieu bas =====
 +addcolquery = 'ALTER TABLE JoursDeSemaine ADD COLUMN probability REAL'
 +cursor.execute(addcolquery)
 +addcolquery = 'ALTER TABLE JoursDeSemaine ADD COLUMN lower REAL'
 +cursor.execute(addcolquery)
 +addcolquery = 'ALTER TABLE JoursDeSemaine ADD COLUMN upper REAL'
 +cursor.execute(addcolquery)
 +
 +===== page 12 en bas =====
 +def TraiterJoursDeSemaine():
 +    # on cree un second curseur pour mettre a jour la nouvelle table
 +     curseur2 = connection.cursor()
 +     q1 = "DROP TABLE IF EXISTS JoursDeSemaine"
 +     curseur.execute(q1)
 +     query = '''CREATE TABLE IF NOT EXISTS JoursDeSemaine AS SELECT pkgs, 
 +                Count(DOW) as NombreDeJoursDeSemaine FROM etude WHERE (Holiday <> 1) 
 +                AND DayName in 
 +                ("lundi","mardi","mercredi","jeudi","vendredi"
 +                GROUP BY pkgs'''
 +     curseur.execute(query)
 +
 +===== page 13 =====
 +sumquery = "SELECT Sum(NombreDeJoursDeSemaine) as Sm FROM JoursDeSemaine"
 +tmp = curseur.execute(sumquery)
 +for t in tmp:
 +   DaySum = t[0]
 +
 +prob = cod / float(DaySum)
 +if LastUpper != .0:
 +   lower = LastUpper
 +   LastUpper = (lower + prob)
 +else:
 +   lower = .0
 +   LastUpper = prob
 +
 +nquery = 'UPDATE weekdays SET probability = %f, \
 +        lower = %f, upper = %f WHERE pkgs = %d' \
 +        % (prob,lower,LastUpper,pkg)
 +u = cursor2.execute(nquery)
 +#====================================
 +#
 +End of TraiterJoursDeSemaine
 +#====================================
  
issue82/programmer_en_python.1404900313.txt.gz · Dernière modification : 2014/07/09 12:05 de andre_domenech