Depuis le 26 mars, le site GitHub.com est sous attaque, victime d'une DDoS.
Le moteur de recherche Baidu a été utilisé comme vecteur d'attaque.
Les scripts malveillants semblent être injectés par des serveurs à la frontière de l'infrastrucutre de réseau chinoise.
L'attaque vise GreatFire, et d'autres sites, hébergés par GitHub, qui s'opposent à la surveillance du net pratiquée par le gouvernement chinois.
Sources:
Vous vous trompez :
La décennie des données ?
Problématiques majeures : traîtement de grosses masses de données, sécurité, vie privée.
API : Application Programming Interface
Vieux terme, traditionnellement utilisé pour désigner les fonctions exposées par une bilbiothèque logicielle.
Applications Web (API REST): description des URLs et de leurs paramètres.
Envoyer des paramètres :
GET : par l'URL. Ex.: http://www.google.fr/?
q=parametres+GET
POST : dans le corps de la requête (pour des données de grande taille).
from IPython.display import HTML
import urllib2
goog = urllib2.urlopen("https://www.google.com/?q=parametres+GET")
HTML(goog.read().decode('iso-8859-1'))
L'application web est libre d'accepter toute URL, mais il existe un standard, appelé RFC 3986, qui est universalement respecté :
?
,cle=valeur
,&
.Exemple :
https://www.google.fr/?
q=recherche
&
hl=fr
q=recherche
: quoi chercherhl=fr
: langue de l'interfacehttps://github.com/defeo/in202/raw/gh-pages/assets/bike-dataset.csv
import pandas as pd
bikes = urllib2.urlopen('https://github.com/defeo/in202/raw/gh-pages/assets/bike-dataset.csv')
b = pd.read_csv(bikes)
Format dérivé de JavaScript :
1
, 2.0
,"encodés en utf8"
,["comme", "en", "python"]
,{ "clef" : "valeur", "autre clef": "valeur" }
Attention : les clefs des objets sont limités à des chaînes de caractères.
Bibliothèque json
: conversion de JSON en données Python
Exemple
http://eu.battle.net/api/sc2/ladder/grandmaster?locale=fr_FR'
Note : Quand les données JSON sont plates, on peut directement les lire avec pandas
import json
data = json.load(urllib2.urlopen('http://eu.battle.net/api/sc2/ladder/grandmaster?locale=fr_FR'))
type(data)
data.keys()
type(data['ladderMembers'])
data['ladderMembers'][0]
sc2 = pd.DataFrame(data['ladderMembers'])
sc2
sc2['percent'] = sc2.wins / (sc2.wins + sc2.losses)
sc2.groupby('favoriteRaceP1').mean()
"XML is crap. Really. There are no excuses. XML is nasty to parse for humans, and it's a disaster to parse even for computers. There's just no reason for that horrible crap to exist."
Exemple :
Deux bibliothèques
import datetime
import dateutil
date = datetime.datetime(2015, 3, 2)
date
date.ctime()
dateutil.parser.parse('2015-3-2')
dateutil.parser.parse('2/3/2015')
dateutil.parser.parse('20/3/2015')
delta = datetime.datetime.now() - datetime.datetime(2015, 3, 4)
delta
delta.total_seconds()
Revenons à la météo
b.head()
type(b['dteday'][0])
b.dtypes
b.dteday - b.dteday
Attention : très lent pour des grosses données
bikes = urllib2.urlopen('https://github.com/defeo/in202/raw/gh-pages/assets/bike-dataset.csv')
bb = pd.read_csv(bikes, parse_dates=["dteday"])
bb.dtypes
type(bb['dteday'][0])
bb.dteday - bb.dteday
from geopy.geocoders import Nominatim
coder = Nominatim()
l = coder.geocode("45 avenue des États Unis, Versailles")
l
l2 = coder.reverse((46.0,4.0))
l2.address
l.latitude, l.longitude
from geopy.distance import distance
distance(l.point, l2.point)
distance(l.point, (49.0, 3.4))
Intégration avec IPython :