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/11 14:17] – [4] auntieeissue82:programmer_en_python [2014/07/25 20:46] (Version actuelle) – [10] fredphil91
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.1405081048.txt.gz · Dernière modification : 2014/07/11 14:17 de auntiee