mercredi 6 février 2019

TensorFlow for Beginners

In this article we are going to present a simple Logistic Regression model build using Google Machine Learning Frame call TensorFlow.
We will use some Python Libraries like:

  • numpy
    • for numeric data manipulation
  • pandas
    • for data frame manipulation 
  • matplotlib
    • for graph 
Output: 

import tensorflow as tf
import numpy as np
import pandas as pd

import matplotlib.pyplot as plt

# We generate linearly separated data 
xData = np.linspace(0.0, 10.0, 100000)

# We generate some noise to add to our data
noise = np.random.randn(len(xData))

# Visualize data generated
print(xData)
# We checkout ou noise shape
print(noise.shape)

# From our visualisation we can see that this line best feet our
# data 
yTrue = (0.5)*xData + 5 + noise

# Creating DataFrame from our data
xDf = pd.DataFrame(data=xData, columns=['x data'])
yDf = pd.DataFrame(data=yTrue, columns=['y'])

# Visualizing the first 5 values of our frames
print(xDf.head())
print(yDf.head())

# Here we concatanate our data frames 
myData = pd.concat([xDf, yDf], axis=1)
print(myData.head())

# We can visualize 250 randomly choosing sample of our data 
myData.sample(n=250).plot(kind='scatter', x='x data', y='y')
plt.show()

# Have a large dataset we will work in batches. 
# We define our batch size 
batchSize = 1000
# We set randomly our 2 value to learn m = tf.Variable(0.1)
b = tf.Variable(0.14)

# We define placeholder: Values that are going to be feet
# in order to learn m and b 
xph = tf.placeholder(tf.float32, [batchSize])
yph = tf.placeholder(tf.float32, [batchSize])

# This is our our model will look like 
y_model = m*xph + b

# Our cost function that we will minimize
error = tf.reduce_sum(tf.square(yph - y_model))

# We define here our learning rate using gradien descent
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.00001)
train = optimizer.minimize(error)

# This will be use to initialize our variables 
init = tf.global_variables_initializer()

# We create ou tensorFlow session in order to compute our 
# variables 
with tf.Session() as sess:

# We initialize our variables 
    sess.run(init)

# We define the number of batches we are going to use
    batches = 1000    for i in range(batches):
# We choose random 250 values of our data 
        randIndex = np.random.randint(len(xData), size=batchSize)
# We create ou feed dictionary
        feed = {xph:xData[randIndex], yph:yTrue[randIndex]}
        #print(feed)
# run our train        sess.run(train, feed_dict=feed)
        model = sess.run([m, b])
# We view our learned values 
print(model[0], model[1])
# We plot the result 
plt.plot(xData, model[0]*xData + model[1], 'r')
index = np.random.randint(len(xData), size=250)
print(index)
plt.scatter(xData[index], yTrue[index])
plt.show()

mardi 18 décembre 2018

Python Pandas for dummies

Fist step to Python Pandas library

Loading pandas

In [3]:
# this is a comment
import pandas as pd 
In [8]:
# creating a series 
# A one dimentional array 
s = pd.Series([3,5,5,9,6,8])
s
Out[8]:
0    3
1    5
2    5
3    9
4    6
5    8
dtype: int64
In [9]:
# returning the first 5 element of a series
s.head()
Out[9]:
0    3
1    5
2    5
3    9
4    6
dtype: int64

Reading data from URL

In [12]:
ufo = pd.read_table('http://bit.ly/uforeports', sep=',')
In [13]:
ufo.head()
Out[13]:
City Colors Reported Shape Reported State Time
0 Ithaca NaN TRIANGLE NY 6/1/1930 22:00
1 Willingboro NaN OTHER NJ 6/30/1930 20:00
2 Holyoke NaN OVAL CO 2/15/1931 14:00
3 Abilene NaN DISK KS 6/1/1931 13:00
4 New York Worlds Fair NaN LIGHT NY 4/18/1933 19:00
In [16]:
# columns can be access as array or as obje 
# ufo['State'] === ufo.State
 
ufo.State
Out[16]:
0        NY
1        NJ
2        CO
3        KS
4        NY
5        ND
6        CA
7        MI
8        AK
9        OR
10       CA
11       AL
12       SC
13       IA
14       MI
15       CA
16       CA
17       GA
18       TN
19       AK
20       NE
21       LA
22       LA
23       KY
24       WV
25       CA
26       WV
27       NM
28       NM
29       UT
         ..
18211    MA
18212    CA
18213    CA
18214    TX
18215    TX
18216    CA
18217    CO
18218    TX
18219    CA
18220    CA
18221    NH
18222    PA
18223    SC
18224    OK
18225    CA
18226    CA
18227    CA
18228    TX
18229    IL
18230    CA
18231    CA
18232    WI
18233    AK
18234    CA
18235    AZ
18236    IL
18237    IA
18238    WI
18239    WI
18240    FL
Name: State, Length: 18241, dtype: object
In [29]:
# add a new row to the table 
ufo['Address'] = ufo['City'] + ' ' + ufo.State
ufo.head()
Out[29]:
City Colors Reported Shape Reported State Time Address
0 Ithaca NaN TRIANGLE NY 6/1/1930 22:00 Ithaca NY
1 Willingboro NaN OTHER NJ 6/30/1930 20:00 Willingboro NJ
2 Holyoke NaN OVAL CO 2/15/1931 14:00 Holyoke CO
3 Abilene NaN DISK KS 6/1/1931 13:00 Abilene KS
4 New York Worlds Fair NaN LIGHT NY 4/18/1933 19:00 New York Worlds Fair NY
In [30]:
# see the shap of the data ( number of rows and columns)
ufo.shape
Out[30]:
(18241, 6)
In [31]:
# to see data type of each columns 
ufo.dtypes
Out[31]:
City               object
Colors Reported    object
Shape Reported     object
State              object
Time               object
Address            object
dtype: object
In [26]:
# view columns
ufo.columns
Out[26]:
Index(['City', 'Colors Reported', 'Shape Reported', 'State', 'Time',
       'Address'],
      dtype='object')
In [32]:
# drop colums[col1, col2, ..., coln]
ufo.drop(['Address'], axis=1, inplace=True)
ufo.head()
Out[32]:
City Colors Reported Shape Reported State Time
0 Ithaca NaN TRIANGLE NY 6/1/1930 22:00
1 Willingboro NaN OTHER NJ 6/30/1930 20:00
2 Holyoke NaN OVAL CO 2/15/1931 14:00
3 Abilene NaN DISK KS 6/1/1931 13:00
4 New York Worlds Fair NaN LIGHT NY 4/18/1933 19:00
In [36]:
# sort a column of table
ufo.State.sort_values(ascending=True).head()
Out[36]:
10454    AK
14421    AK
3511     AK
103      AK
2929     AK
Name: State, dtype: object
In [37]:
# sort table base on specific column
ufo.sort_values('City').head()
Out[37]:
City Colors Reported Shape Reported State Time
1761 Abbeville NaN DISK SC 12/10/1968 0:30
4553 Aberdeen NaN CYLINDER WA 6/15/1981 22:00
16167 Aberdeen NaN VARIOUS OH 3/29/2000 3:00
14703 Aberdeen NaN TRIANGLE WA 9/30/1999 21:00
389 Aberdeen ORANGE CIRCLE SD 11/15/1956 18:30

jeudi 12 juillet 2018

Commande linux mtr

- no title specified
Reseau

MTR : outi de diagnostique reseau

MTR mis pour MY TRACEROUT est un outil de dignostique et d’isolation réseau des problèmes dans le réseau. Très puissant, mtr regroupe les fonctionalités des outils ping et traceroute et permet de founir un rapport plus détaillé sur l’état du réseau.

Installation

Etant sur une machine Linux/Debian notre installation se fera avec la commande suivante :
apt install mtr

Fonctionnement

mtr tout comme ping et traceroute utilise utilise le protocole ICMP ( Internet  Control Message Protocol) pour tester le connectivité entre deux points sur Internet.
Dans le mode de fonctionnement de l’outil ping, Lorsqu'un utilisateur ping un hôte sur Internet, une série de paquets ICMP sont envoyés à l'hôte, qui répond en envoyant des paquets en retour. Le client de l'utilisateur est alors en mesure de calculer le temps d'aller-retour entre deux points sur Internet.
Par contre avec des outils tels que traceroute et mtr envoient des paquets ICMP avec des TTL augmentant de manière incrémentielle afin d'afficher la route ou la série de sauts que le paquet effectue entre l'origine et sa destination.

Générer un rapport MTR

Notons que mtr est un outil bidirectionnel car, founir la route du trafic entre deux hôtes. La route empruntée entre deux points sur Internet peut varier énormément en fonction de l'emplacement et des routeurs situés en amont. Pour cette raison, il est recommandé de collecter des rapports MTR dans les deux directions pour tous les hôtes rencontrant des problèmes de connectivité.
Connecté depuis la machine suivante :
 wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether cc:b0:da:b3:22:9d brd ff:ff:ff:ff:ff:ff
    inet 192.168.137.10/24 brd 192.168.137.255 scope global dynamic wlp2s0
       valid_lft 604590sec preferred_lft 604590sec
    inet6 fe80::7b06:2cf9:24bb:64e6/64 scope link
       valid_lft forever preferred_lft forever
qui est une adresse de la sale de cours IFI nous testons la route et la connectivité vers l’adresse www.vnpt.com.vn
commande :
mtr www.vnpt.com.vn
 
 
Fig  affichage de la commande mtr
mtr nous montre les différents équipement ( leur adresses IP) entre la destination et notre machine. De plus il fait un rapport en temps réel de l’état de cette route à chaque paquet envoyé.
Par fois, certain équipement ( routeur , machine) vont  vont rejeter l'ICMP , ce qui era montré sur l’affichage pour « ??? ». Sinon, cela peut aussi être une problème avec la route emprunté par les paquets

Description des différents champs

La colonne Loss% affiche le pourcentage de perte de paquets à chaque saut.
La colonne Snt compte le nombre de paquets envoyés.
Les quatres colonnes suivantes Last, Avg, Best et Wrst sont toutes des mesures de latence en millisecondes. La dernière est la latence du dernier paquet envoyé, Avg est la latence moyenne de tous les paquets, tandis que Best et Wrst affichent le meilleur (le plus court) et le pire (le plus long) aller-retour d'un paquet vers cet hôte. Dans la plupart des cas, la colonne moyenne (moyenne) devrait être au centre de notre attention.
La dernière colonne, StDev, fournit l'écart type des latences à chaque hôte. Plus l'écart type est élevé, plus la différence est grande entre les mesures de latence. L'écart type  permet d'évaluer si la moyenne fournie représente le vrai centre de l'ensemble de données, ou a été faussée par une sorte de phénomène ou d'erreur de mesure. Si l'écart type est élevé, les mesures de latence sont incohérentes.

Champs qui varient entre l’envoi des paquets :  

Snt : les paquets envoyés
Last : temps de latence du dernier paquet envoyé
Avg : la moyenne des latences
StDev : l’écart type des latences à chque hôte

lecture de raport MTR

commande :
mtr  --report www.vnpt.com.vn
Start: Fri Jul 13 05:07:39 2018
HOST: debian                      Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- DESKTOP-V2RL6KK.mshome.ne 10.0%    10    3.8   3.4   2.0  10.7   2.8
  2.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
  3.|-- logout.lan                 0.0%    10    8.6   5.6   3.3  13.7   3.1
  4.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
  5.|-- 172.31.99.22               0.0%    10    5.4   9.2   4.2  19.0   4.7
  6.|-- static.vnpt-hanoi.com.vn   0.0%    10    8.8   7.5   5.8  10.6   1.6
  7.|-- static.vnpt.vn             0.0%    10   19.0   9.1   5.6  19.0   3.9
  8.|-- static.vnpt.vn             0.0%    10    6.4   8.4   6.4  13.7   2.3
  9.|-- localhost                  0.0%    10    6.4   7.6   5.6  11.4   1.9
L'option --report enverra 10 paquets sauf si spécifié avec --report-cycles = [nombre-de-paquets], où [nombre-de-paquets] représente le nombre total de paquets que l’on veut envoyer à l'hôte distant.
Chaque ligne numérotée dans le rapport représente un saut. Les sauts sont les nœuds Internet que les paquets traversent pour se rendre à destination. Les noms des hôtes sont déterminés par des recherches DNS reverses.
Si nous voulon omettre les recherches rDNS, vous pouvez utiliser l'option --no-dns, qui produit une sortie similaire à celle ci-dessous :
mtr --report --no-dns www.vnpt.com.vn
Start: Fri Jul 13 05:10:47 2018
HOST: debian                      Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 192.168.137.1              0.0%    10    4.5   3.0   1.9   4.5   0.7
  2.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
  3.|-- 10.224.184.1               0.0%    10  123.7  17.7   3.5 123.7  37.4
  4.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
  5.|-- 172.31.99.22               0.0%    10  132.5  21.2   5.5 132.5  39.2
  6.|-- 123.25.27.177              0.0%    10  126.1  19.1   5.3 126.1  37.6
  7.|-- 123.29.5.41                0.0%    10  116.8  17.9   5.2 116.8  34.7
  8.|-- 113.171.33.42              0.0%    10    9.6   8.6   6.2  12.1   1.6
  9.|-- 123.31.40.181              0.0%    10    7.7   7.3   6.0  11.1   1.5

architecture réseau