[PYTHON] À propos du traitement du traitement d'agrégation de données de séries chronologiques IoT dans Azure Time Series Insights

Aperçu

Azure Time Series Insights agit comme un magasin temporaire pour les données de séries chronologiques. Dans l'IoT, les données sont souvent des séries chronologiques, et comme il s'agit de données provenant de capteurs, il est nécessaire de traiter les données avant la visualisation ou l'analyse. En particulier, les données de séries chronologiques doivent souvent être traitées pour la perte de données, la non-uniformité des intervalles de temps, le bruit, etc. Si les données traitées peuvent être sorties à intervalles de temps réguliers, elles seront très utiles comme stockage temporaire.

ts1.png

Azure Time Series Insights vous permet d'effectuer divers processus d'agrégation avec une API et un langage de requête basé sur JSON. Je voudrais faire un appel API depuis Python. Utilisez l'environnement créé dans l'article précédent.

ts2.png

L'API Azure utilise Oauth 2.0 comme authentification pour l'authentification. Le traitement est effectué dans l'ordre suivant.

Inscrivez-vous dans l'annuaire et émettez la clé

Enregistrez l'application et notez les trois éléments suivants.

A: ID de répertoire

B: ID de l'application

C: clé

Définissez les droits d'accès pour les applications enregistrées dans les ressources (services). Accédez à la page du portail Time Series Insights et configurez les paramètres.

keypub.jpg

Émission de jetons d'accès par API

URL ENCODE le contenu que vous avez noté à l'étape précédente dans le corps du message et POSTEZ-le dans l'URL de l'API avec https.

AUTH_API_URL = "https://login.windows.net/ID de répertoire de A/oauth2/token?api-version=1.0"
 token_query = {
      'grant_type': 'client_credentials',
      'resource': 'https://api.timeseries.azure.com/',
      'client_id':ID de l'application ’B', 
      'client_secret':'Touche C'
 }
 token_request = urllib2.Request(AUTH_API_URL,urllib.urlencode(token_query))
 token_request.add_header('Content-Type','application/x-www-form-urlencoded')
 response = urllib2.urlopen(token_request)

Créer des informations sur les séries chronologiques et enregistrer le nom de domaine complet

Veuillez consulter ici pour la méthode de création. Notez le nom de domaine complet de D.

fqdn.jpg

Utiliser le service à l'aide du jeton d'accès

Si ce qui précède réussit, un jeton d'accès sera retourné. Utilisez ce jeton pour accéder à la fonctionnalité d'agrégation de Time Series Insights.

L'agrégation est effectuée en définissant une requête au format JSON et en l'envoyant à l'API Websocket. La référence API est ici.

Écrivez la requête en JSON. La référence est ici.

Voici un exemple de requête qui agrège la température et l'humidité. Il est totalisé en unités de 1 minute. Par ce processus, l'intervalle de temps est maintenu constant (moyenné).

{
  "content": {
    "searchSpan": {
      "from": "2017-08-08T00:00:00.000Z",
      "to": "2017-08-08T02:00:00.000Z"
    },
    "aggregates": [
      {
        "dimension": {
          "dateHistogram": {
            "input": {
              "builtInProperty": "$ts"
            },
            "breaks": { "size": "1m" }
          }
        },
        "measures": [
          {
            "avg": {
              "input": {
                "property": "temperature",
                "type": "Double"
              }
            }
          },
          {
            "avg": {
              "input": {
                "property": "humidity",
                "type": "Double"
              }
            }
          },
          {
            "count": { }
          }
        ]
      }
    ]
  },
  "headers": {
    "Authorization": "Définir le jeton d'accès"
  }
}

Il s'agit du code Python qui envoie une requête et affiche le résultat au format CSV.

AUTH_API_URL = "https://login.windows.net/ID de répertoire de A/oauth2/token?api-version=1.0"
REST_API_URL = "wss://D FQDN.env.timeseries.azure.com/aggregates?api-version=2016-12-12"
import urllib2
import urllib
import json
import websocket
import ssl
try:
        token_query = {
                'grant_type': 'client_credentials',
                'resource': 'https://api.timeseries.azure.com/',
      'client_id':'ID d'application de B', 
      'client_secret':'Touche C'
        }
         token_request = urllib2.Request(AUTH_API_URL,urllib.urlencode(token_query))
         token_request.add_header('Content-Type','application/x-www-form-urlencoded')
         response = urllib2.urlopen(token_request)
         result_token=response.read()
         token=json.loads(result_token)
         query_file = open('c:\\local\query4.json') --Lire une requête JSON à partir d'un fichier
          request_query=json.load(query_file)
          request_query['headers']['Authorization']="Bearer "+token['access_token']--Définir le jeton d'accès dans la requête

          wSocket = websocket.create_connection(REST_API_URL,sslopt={"cert_reqs": ssl.CERT_NONE})
          wSocket.send(json.dumps(request_query))
          result_wSocket =  wSocket.recv()
         dataset=json.loads(result_wSocket)--Convertir le JSON reçu en objet Python
          index=0
          print "timestamp,","temperature,","humidity"
          for dimension in dataset['content'][0]['dimension']:
                         print dimension,",",dataset['content'][0]['measures'][index][0],",",dataset['content'][0]['measures'][index][1]
                         index=index+1
        wSocket.close()
except urllib2.HTTPError as e:
        print("HTTP Error: {0} - {1}".format(e.code, e.reason))
except urllib2.URLError as e:
        print("URL Error: {0}".format(e.reason))
except Exception as e:
        print("General Exception: {0}".format(e))

Recommended Posts

À propos du traitement du traitement d'agrégation de données de séries chronologiques IoT dans Azure Time Series Insights
À propos du traitement des paramètres dans le fichier request.args de Flask
À propos des données de séries chronologiques et du surentraînement
Agrégation pratique de séries chronologiques avec TimeGrouper de pandas
J'ai étudié en détail le traitement des variables en python
Une manière intelligente de chronométrer le traitement avec Python
Comment lire les données de séries chronologiques dans PyTorch