Python est un langage adapté pour l’analyse de donnée, le package Pandas est central dans la gestion et l’analyse de donnée ainsi que leur importation. Dans cet article voyons comment charger un fichier de donnée csv excel par exemple avec pandas.
Introduction
La librairie pandas est caractérisée par l’objet DataFrame qui permet de manipuler des données facilement et efficacement.
Pour installer pandas si ce n’est pas encore le cas sur votre poste :
def bellmanFord(graph, sommetDepart):
distances = {}
predecesseurs = {}
for sommet in graph:
distances[sommet] = np.inf
predecesseurs[sommet] = None
distances[sommetDepart] = 0
for i in range(len(graph)-1):
for j in graph:
for k in graph[j]:
if distances[k] > distances[j] + graph[j][k]:
distances[k] = distances[j] + graph[j][k]
predecesseurs[k] = j
for i in graph:
for j in graph[i]:
assert distances[j] <= distances[i] + graph[i][j]
return distances, predecesseurs
#Liste d'ajacence du graphe
graph = {'A':{'B':15,'C':4},'B':{'E':5},'C':{'E':11,'D':2},'D':{'E':3},'E':{}}
distances, predecesseurs = bellmanFord(graph,'A')
print("Plus courte distance pour chaque sommet de départ :")
for v in distances: print(str(v) + '-' + str(distances[v]))
Cet article décrit une implémentation en python du minage du bitcoin qui s’appuie sur un algorithme basé sur un double hash SHA-256.
Introduction – Principe de l’agorithme de minage du bitcoin
Les mineurs du réseau bitcoin doivent rechercher le nonce qui est un un nombre de 32 bits. Le mineur va tester successivement plusieurs NONCE (1,2,3 ….10^32-1), pour chacun des nonce il crée l’entête suivante et le hasher 2 fois avec une fonction de hachage SHA-256 bits.
Field
Description
Size
version
Version
4
Hash du bloc précédent
256-bit hash du block précédent
32
Merkle root
Il s’agit d’un hash sur les données du bloc. Il est fournit au mineur et il contient un résumé des transactions qui sont contenues dans le bloc.
32
time
Un timestamp numérique qui représente le nombre de seconde depuis 1970-01-01T00:00 UTC
4
bits
La cible actuelle (Current target) en format compacté
4
nonce
32-bit number (starts at 0)
4
Une fois le hash obtenu le mineur doit ensuite vérifier que le hash obtenu est inférieur au facteur de difficulté cible du bloc. Si le hash obtenu est supérieur alors le nonce n’est pas le bon il faut en tester un autre.
Exemple sur le bloc 671712
Si vous utilisez un explotateur de blochain bitoin (par exemple blocstream info), si on prends par exemple le bloc 671712 :
Dans ce cas voici un algorithme en python qui permet de miner ce bloc :
Dans cette simulation j’affiche le header et le hash calculé ainsi que le hash rate.
Le nonce a trouver pour le bloc 671712 était 4107802144
Soit en hexa : 0xf4d81620
Cette algorithme démarre avec un nonce = 4107802144 – 400 nous allons faire comme si on était à très proche de trouver le bloc (il manque 400 double hash à effectuer pour trouver le bloc) :
Kubernetes mac os x, voici des explications pour installer facilement kubernetes sur son mac.
Kubernetes, ou k8s, est une plate-forme open source, lancée par Google, qui a commencé comme un simple outil d’orchestration de conteneurs mais est devenue une plate-forme native pour le cloud.
Introduction – installer kubernetes mac
Sur mac os x une des méthodes les plus rapide pour installer Kubernetes est d’utiliser HoweBrew (voir le lien : Homebrew). Homebrew est un système de gestion de progiciels gratuit et open source qui simplifie l’installation de logiciels sur le système d’exploitation mac OS x Apple.
J’ai démarrer une console et executé la commande :
brew install kubectl
Vous devriez obtenir une sortie du type :
==> Pouring kubernetes-cli-1.20.2.catalina.bottle.tar.gz
==> Caveats
zsh completions have been installed to:
/usr/local/share/zsh/site-functions
==> Summary
🍺 /usr/local/Cellar/kubernetes-cli/1.20.2: 246 files, 46.1MB
A la fin de l’installation vous pouvez vérifier que kubernetees est bien installer :
Le prix d’un ordinateur quantique évolue entre 10 millions de dollars $ et 25 millions de dollars $. Voici quelques repère pour comprendre le prix d’un ordinateur quantique. L’article vous permettra de comprendre comment la course au quantique s’articule entre les différentes technologies et acteurs.
Introduction
Récemment Google a annoncé que sa puce Sycamore était la première à démontrer la «suprématie quantique» (article ici). Cela consiste à prouver que la résolution d’un problème à l’aide d’un algorithme quantique est plus efficace qu’à l’aide d’un algorithme classique. Aussi IBM construit actuellement un ordinateur quantique de 1 121 qubits, Condor (lien). Aussi il sera stocké à l’intérieur d’un « réfrigérateur » à dilution (voir ici). Et le but est de créer un ordinateur quantique et de le rendre disponible en ligne d’ici 2023.
Pour expliquer le prix d’un ordinateur quantique il faut dans un premier temps situer les différents acteurs de cette course au quantique et situer les dates importantes.
Les acteurs et l’écosystème de l’informatique quantique
PRINCIPAUX Acteurs dans le Hardware (CONSTRUCTEURS d’ordinateur quantique ET DE CIRCUITS) :
IBM : IBM construit un ordinateur quantique avec 1121 qubits d’ici 2023. Vous pouvez déjà programmer sur des systèmes Quantiques IBM via le cloud IBM sur des simulateurs ou des ordinateurs quantique réel via IBM Quantum Experience (voir mon article sur la programmation quantique avec IBM qiskit)
GOOGLE : Sycamore est un processeur quantique de 53 qubits créé par Google (en savoir plus)
INTEL : Intel crée un processeur « Tangle Lake ». Comme ses concurrents IBM, Google, Rigetti, IMEC et BBN Technologies Intel se base sur une architecture de qubits supraconducteurs.
ALICE AND BOB : développe une solution qui permet de résoudre le problème des erreurs quantiques.
D-WAVE : La société D-WAVE crée et commercialise des ordinateurs quantiques.
IONQ : crée un ordinateur quantique à ions piégés.
RIGETTI : Rigetti crée un ordinateur full-stack pour l’informatique hybride classique et quantique.
PSIQuantum : L’objectif de PsiQuantum est de construire le premier ordinateur quantique à usage général utile au monde avec au moins 1 millions de Qubits. La société travaille par exemple sur des qubits photoniques.
TURING :XGR-1 est une mémoire quantique révolutionnaire de la première génération de Turing.
QILIMANJARO :Enfin, Qilimanjaro se concentre sur des architectures de qubit de haute qualité de recuit quantique cohérent.
PRINCIPAUX Acteurs dans le SOFTWARE (KIT DE développement, Logiciels, Solutions cryptographiques)
IBM Qiskit :IBM Qiskit permet aux développeurs de créer des algorithmes quantiques à l’aide d’une interface en Python.
MICROSOFT : Q# est un langage de microsoft de programmation qui permet la programmation quantique.
1QBIT : 1QUBIT est une société de service en informatique quantique.
QCWARE : Egalement QCWARE une entreprises qui se concentre sur la création d’algorithmes quantiques.
QUSOFT QuSoft est le centre de recherche néerlandais sur les logiciels quantiques. Sa mission est de développer de nouveaux protocoles, algorithmes et applications pouvant être exécutés sur des prototypes de petite et moyenne taille d’un ordinateur quantique.
STRANGE WORKS : Commercialise des logiciels d’informatique quantiques.
Ordinateur quantique prix – Indication du prix d’un ordinateur quantique
Le prix d’un ordinateur quantique D-WAVE 200Q est par exemple d’environ 15 millions de dollars (15 m$). De plus, cette même entreprise commercialisait un ordinateur quantique 1000Q quelques années auparavant. Et en 2011, D-Wave lance son premier modèle d’ordinateur quantique qui sera disponible dans le commerce. Aussi il coûte 10 millions de dollars. Cela donne une bonne estimation de combien coûte un ordinateur quantique.
C’est une combinaison de BCELOSS + une couche Sigmoid. C’est plus stable numériquement que l’utilisation d’un Sigmoid suivie d’un BCELoss comme, ici on tire parti de l’astuce log-sum-exp pour la stabilité numérique voir: https://en.wikipedia.org/wiki/LogSumExp
Apprendre COBOL est un ensemble de connaissances très intéressants. COBOL (COmmon Business Oriented Language) est un langage orienté métier il est très adapté pour le traitement de données avec des hautes performances et précisions, il est proposé par IBM.
Introduction – Apprendre le COBOL
Vous pouvez être sur que tous les achats ou retraits que vous faites avec votre carte bancaire démarre un programme en COBOL. Chaque jours COBOL traite des millions de transactions. De mon point de vue apprendre COBOL est un ensemble de connaissances très intéressants.
J’ai travaillé plus de 10 ans avec ce langage et je partage ici quelques notes qui vous permettrons sans doute de vous faire la main avec.
Le mainframe se modernise avec la possibilité de programmer avec les derniers outils tels que l’éditeur de code libre VsCode etson extension Zowe ainsi que Z Open editor, de s’exécuter dans le cloud dans des environnement tels que Open Shift et d’intégrer les principes devops avec des outils tels que Github, jenkins, Wazi.
Syntaxe COBOL
La syntaxe de COBOL est assez simple et se rapproche du langage naturel en anglais.
Le code est standardisé selon des colonnes qui permettent de décrire 5 zones clés.
Séquence Area : specifie un numéro de sequence de la ligne de code parfois, parfois à blanc
Indicator Area : peut contenir un indicateur par exemple * pour indiquer que la ligne est un commentaire, D pour indiquer que la ligne s’exécute uniquement en debugging mode.
A AREA : Contient les divisions, sections, paragraphes et Levée
B AREA : Sentences et statements du programme cobol for exemple COMPUTE quelques chose…
Identification Area: espace à ignorer et laisser à blanc.
Le code est structuré par des divisions qui contiennent des Sections composées de Paragraphe eux même constitués par des Sentences et Statements.
Exemple de sentences :
ADD 45 TO PRICE.
A noter que le point corresponds à un terminateur implicite de portée.
Il y a 4 Divisions dans un programmes en COBOL :
– DATA DIVISION : permets de mettre en place la gestion des donnee qui vont être traitees par le programme.
– IDENTIFICATION DIVISION : Nom programme et du du programmeur, date du programme, but du programme.
– ENVIRONEMENT DIVISION : Type d’ordinateur utilise et mapping entre les fichiers utilisé dans le programmes et les dataset sur le système (lien entre le programme et le système)
– PROCEDURE DIVISION : C’est ici qu’est contenu le code métier composé des différents paragraphes à exécuter.
Les variables en Cobol :
Comme dans les autres langages des lettres permettent de représenter des valeurs stockées en mémoire.
Le nom d’une variable est de maximum 30 caractères.
Une clause Picture permet de fixer le type de la variable.
PIC 9 : Numérique la longueur est entre parenthèse.
PIC 9(5) : variable numérique de 5 digits la longueur maximale pour un numérique est 18.
PIC A pour un caractère
PIC X(11) : un alphanumérique avec une longueur maximum de 255
Il est possible d’avoir des types édité au moyen de symboles :
PIC 9(6)V99 pour un numerique de 6 digits et 2 décimales séparés par virgule.
PIC $9,999V99 pour représenter un montant
A noter que COBOL mets à dispositions des literaux constant tels que ZEROES, SPACE, SPACES, LOW-VALUE …
Le problème du sac à dos en algorithmique (et son implémentation python) est intéressant et fait parti du programme de Sciences numériques et informatique de première.
Ce problème illustre les algorithmes gloutons qui énumèrent toutes les possibilités de résolution d’un problème pour trouver la meilleure solution.
Le problème du sac à dos algorithme python est un problème d’optimisation, c’est à dire une fonction que l’on doit maximiser ou minimiser et des contraintes qu’il faut satisfaire.
Le problème du sac à dos – algorithme Python
Pour un sac à dos de capacité maximale de P et N articles chacun avec son propre poids et une valeur définie, jetez les articles à l’intérieur du sac à dos de telle sorte que le contenu final ait la valeur maximale.
Exemple d’énoncé :
Capacité maximum du sac à dos : 11 unités
Nombre d’objet : 5
Valeurs des objets : {10,50,20,30,60}
Poids des objets : {1,5,3,2,4}
Quelles est la valeur maximum qu’il est possible de mettre dans le sac à dos en considérant la contrainte de capacité maximum du sac qui est de 11 ?
Algorithme glouton python
Une solution efficace consiste à utiliser un algorithme glouton. L’idée est de calculer le rapport valeur / poids pour chaque objet et de trier l’objet sur la base de ce rapport calculé .
On prends l’objet avec le ratio le plus élevé et on ajoute jusqu’à ce qu’on ne puisse plus en ajouter.
En version fractionnaire il est possible d’ajouter des fractions d’article au sac à dos.
Implémentation du problème du sac à dos Python – version non fractionnaire
Voici une implémentation du problème du sac à dos python en version non fractionnaire, c’est à dire qu’on ne peut pas ajouter de fraction d’un objet dans le sac. Seul des objets entiers peuvent être ajoutés.
class ObjetSac:
def __init__(self, poids, valeur, indice):
self.indice = indice
self.poids = poids
self.valeur = valeur
self.rapport = valeur // poids
#Fonction pour la comparaison entre deux ObjetSac
#On compare le rapport calculé pour les trier
def __lt__(self, other):
return self.rapport < other.rapport
def getValeurMax(poids, valeurs, capacite):
tableauTrie = []
for i in range(len(poids)):
tableauTrie.append(ObjetSac(poids[i], valeurs[i], i))
#Trier les éléments du sac par leur rapport
tableauTrie.sort(reverse = True)
compteurValeur = 0
for objet in tableauTrie:
poidsCourant = int(objet.poids)
valeurCourante = int(objet.valeur)
if capacite - poidsCourant >= 0:
#on ajoute l'objet dans le sac
#On soustrait la capacité
capacite -= poidsCourant
compteurValeur += valeurCourante
#On ajoute la valeur dans le sac
return compteurValeur
poids = [1,5,3,2,4]
valeurs = [10,50,20,30,60]
capacite = 11
valeurMax = getValeurMax(poids, valeurs, capacite)
print("Valeur maxi dans le sac à dos =", valeurMax)
Le résultat obtenu est le suivant :
py sacados.py
Valeur maxi dans le sac à dos = 120
Implémentation du problème du sac à dos python – version fractionnaire
En version fractionnaire de l’agorithme du sac à dos python on peut ajouter des fractions d’objet au sac à dos.
class ObjetSac:
def __init__(self, poids, valeur, indice):
self.indice = indice
self.poids = poids
self.valeur = valeur
self.rapport = valeur // poids
#Fonction pour la comparaison entre deux ObjetSac
#On compare le rapport calculé pour les trier
def __lt__(self, other):
return self.rapport < other.rapport
def getValeurMax(poids, valeurs, capacite):
tableauTrie = []
for i in range(len(poids)):
tableauTrie.append(ObjetSac(poids[i], valeurs[i], i))
#Trier les éléments du sac par leur rapport
tableauTrie.sort(reverse = True)
compteurValeur = 0
for objet in tableauTrie:
poidsCourant = int(objet.poids)
valeurCourante = int(objet.valeur)
if capacite - poidsCourant >= 0:
#on ajoute l'objet dans le sac
#On soustrait la capacité
capacite -= poidsCourant
compteurValeur += valeurCourante
#On ajoute la valeur dans le sac
else:
fraction = capacite / poidsCourant
compteurValeur += valeurCourante * fraction
capacite = int(capacite - (poidsCourant * fraction))
break
return compteurValeur
poids = [1,5,3,2,4]
valeurs = [10,50,20,30,60]
capacite = 11
valeurMax = getValeurMax(poids, valeurs, capacite)
print("Valeur maxi dans le sac à dos =", valeurMax)
Le résultat obtenu est le suivant :
py sacados.py
Valeur maxi dans le sac à dos = 140.0
Cette truffle box comprend la structure de base du projet ainsi que le code de l’interface utilisateur.
Utilisez la commande truffle unbox :
truffle unbox pet-shop
Pour rappel l’installation de truffle est possible via la commande :
npm install -g truffle
Si vous ouvrez le dossier vote-chason-dapp avec vscode vous obtenez alors l’arborescence suivante :
Arborescence du projet de l’application Dapp exemple (basée sur pet-shop de truffle)
contract : stockage du smart contract de l’application
migration : Les migrations permettent de transférer les smarts contracts vers la blockchain Ethereum (en local test ou mainnet). Les migrations permettent également de relier des smart contrats avec d’autres smarts contracts et de les initialiser.
node_modules : Le dossier node_modules contient les bibliothèques téléchargées depuis npm.
src : Répertoire de l’application front-end (client)
test : Stockage des tests pour l’application
truffle-config.js : fichier Javascript qui peut exécuter tout code nécessaire pour créer votre configuration.
Création du smart contract
Pour rappel nous développons une application qui permet d’élire la chanson préférée des électeurs.
Nous allons créer dans un premier temps la partie qui permet de créer un vote pour la meilleure chanson basée sur 3 chansons éligibles.
Le contrat écrit en solidity est le suivant :
contract TopChanson {
struct Chanson {
uint identifiant;
string titre;
uint compteur;
}
uint public compteurDeChansons;
mapping(uint => Chanson) public chansons;
function ajouterChansonElligible (string memory nomChanson) private {
compteurDeChansons ++;
chansons[compteurDeChansons] = Chanson(compteurDeChansons, nomChanson, 0);
}
function TopChansons() public {
ajouterChansonElligible("Au clair de la lune");
ajouterChansonElligible("Maman les p'tits bateaux");
ajouterChansonElligible("Ah ! Les crocodiles");
}
}
A noter l’utilisation de « mapping(uint => Chanson) public chansons; »
Cette structure de donnée va nous permettre de stocker les titres des chansons éligibles à la façon d’une table de hachage. C’est à dire un tableau qui prend pour clé d’accès dans notre cas un uint qui est l’identifiant de la chanson et permet de récupérer la valeur qui est un type Chanson structuré.
Ici il y a un cas particulier sur la fonction ajouterChansonElligible, elle prends en argument le nom de la chanson qui est une chaine de caractère STRING. Si on ajoute pas le mot clé « memory » on obtient l’erreur suivante:
TypeError: Data location must be « storage » or « memory » for parameter in function, but none was given.
Pour les paramètres de fonction et les variables de retour, l’emplacement des données doit être explicité pour toutes les variables de type (struct, mapping, string).
La migration du contrat s’effectue via la commande :
truffle migrate --reset
On obtient alors :
Compiling your contracts...
===========================
> Compiling ./contracts/Migrations.sol
> Compiling ./contracts/TopChanson.sol