Comparer des vents prévus avec l'observation

Bonjour forum,

dans un fichier excel, j'ai deux feuillets dont le premier rassemble des prévisions horaires de vent (sur un horizon jusqu'à 63 heures de préavis) tandis que le second, comporte les observations horaires de vent. Compte tenu que le système fait un ensemble de prévisions à toutes les 6 heures (minuit, 6h00, midi, 18h00), il faut comprendre que pour une observation horaire, il existe plusieurs prévisions correspondantes (dont le nombre dépend de l'heure de la journée).

Mon but est de comparer les prévisions avec les observations et ce, à chaque heure afin de calculer différents indices de performance (du système de prévision). À mon niveau de connaissance, le plus simple pour moi serait de copier-coller les observations à côté de chacune des prévisions pour une date et heure donnée mais l'opération m'apparait fastidieuse compte tenu que ma base de données compte plusieurs centaines de milliers de prévisions horaires.

Néanmoins, je me doute, qu'il existe un moyen( fonctions ou macro?) capable de simplifier l'opération de comparaison des prévisions avec l'observation horaire. J'ai joint un fichier simplifié des 5 premiersjours de mai 2015.

Je vous remercie

Emil

bonjour

première réflexion : tu te retrouves avec 3 colonnes d'heures (tous fichiers confondus). Comment mettre ces heures les unes en face des autres ? comment dire H1 en colonne 1 fdu ichier F correspond à H2 en colonne C du fichier Y ?

edit :

1/ il faut obtenir un fichier "normalisé", c'est à dire un fichier avec les 3 colonnes HN, vent estimé, vent mesuré, où

HN est l'heure normalisée, sans doute l'heure de la prévision (car progression régulière)

et vent mesuré = moyenne des vents mesurés "autour de l'HN"

2/ moyenne des vents mesurés "autour de l'HN" doit se calculer en fonction des besoins de tes lecteurs (des chalutiers, la NASA, l'aéroport de Roissy...) par une simple moyenne des mesures autour de HN, ou une "moyenne" pondérée (plus on est proche de HN pus on pèse)

Bonjour JMD,

Tout d'abord, merci pour la réplique rapide...

Dans le feuillet: "Prévision", la première colonne A indique la date et l'heure que la prévision a été émise. Par exemple, à la ligne 2:

on a émis une prévision à 00H00 qui indique que les vents prévus à 19H00 seront de 5 noeuds (catég. 0).

À la ligne 3, une seconde prévision a été émise mais cette fois, on prévoit que les vents à 19H00 seront de 10 noeuds (catég 1).

En consultant, le feuillet: "observations", on y constate que les vents observés étaient de 9 noeuds (catég 0).

Ainsi, pour cette heure de prévision, on obtient 2 couplets: le premier sous-prévu et le deuxième: légèrement sous prévu.

Mon but, est de calculer la moyenne des écarts entre les prévisions et l'observation, le biais mais aussi de construire le tableau de contingence selon les catégories de vent définies dans le fichier Excel afin de calculer plusieurs autres indice de performance.

J'espère avoir répondu à vos questions

Emil

re

lire mon message précédent que j'ai modifié

bonne journée

Bonjour JMD,

En fait, je ne désire pas faire de moyenne sur les vents observés autour d'une heure normalisée mais plutôt de simplement calculer l'exactitude des prévisions. Par exemple, pour l'écart moyen entre les prévisions et les observations, j'appliquerai la moyenne de tous les écarts en faisant correspondre l'heure d'observation (arrondi à l'heure inférieure) avec le vent prévu à une certaine heure déterminée (à la col. B du feuillet: Prevision).

Emil

Bonjour

S'il s'agit de mettre en vis à vis, sur chaque ligne d'heure les observations et les différentes prévisions qui ont été faites pour cette heure, le fichier ci-joint devrait te satisfaire et te permettre les calculs que tu souhaites.

A tester.

Bye !

Bonjour,

à moins que quelque chose m'échappe, mais le fichier: "Forum_17juin2015 V1" me semble identique au fichier que j'avais initialement fourni.

Emil

Oh ! Pardon ! Encore une étourderie de ma part !

Voilà le bon :

Bonsoir Emil, jmd, gmb, le forum

Insère une feuille en 3ème position.

La même approche que gmb, la disposition différe.

A tester :

Option Explicit

Sub Rapprochement()
Dim a, i As Long, e
    Application.ScreenUpdating = False
    a = Sheets("Observations").Range("a1").CurrentRegion.Value
    With CreateObject("Scripting.Dictionary")
        .CompareMode = 1
        For i = 2 To UBound(a, 1)
            .Item(a(i, 1)) = VBA.Array(a(i, 2), a(i, 3))
        Next
        a = Sheets("Prevision").Range("a1").CurrentRegion.Resize(, 7).Value
        a(1, 6) = "Vent(Noeuds)Obs.": a(1, 7) = "Catég. Obs."
        For i = 2 To UBound(a, 1)
            For Each e In .keys
                If a(i, 2) = e Then
                    a(i, 6) = .Item(e)(0)
                    a(i, 7) = .Item(e)(1)
                    Exit For
                End If
            Next
        Next
    End With
    With Sheets(3).Range("a1").Resize(UBound(a, 1), UBound(a, 2))
        .CurrentRegion.Clear
        .Value = a
        With .CurrentRegion
            .Font.Name = "calibri"
            .Font.Size = 10
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
            .Borders(xlInsideVertical).Weight = xlThin
            .BorderAround Weight:=xlThin
            With .Rows(1)
                .Font.Size = 11
                .Interior.ColorIndex = 44
                .BorderAround Weight:=xlThin
            End With
            .Columns(1).Resize(, 2).NumberFormat = "dd/mm/yyyy hh:mm"
            .Columns.AutoFit
        End With
        .Parent.Activate
    End With
    Application.ScreenUpdating = True
End Sub

Concernant le tableau de contingence et tous les calculs en découlant, je n'ai rien compris

klin89

Bonjour à vous tous,

j'ai analysé et testé les deux dernières solutions proposées. À la fin, je dois dire que je préfère celle de Klin89 dont les résultats conviennent mieux aux opérations que je devrai faire par la suite. Néanmoins, il y a une petite lacune dans celle de Klin89 qu'il faudrait corriger:

À chaque fois que l'observation n'est pas exactement sur l'heure, exemple: le 2 mai à 22:34, la macro est incapable de trouver une prévision correspondante. Pour ce faire, il faudrait que l'heure d'observation soit arrondie à l'heure (on ignore les minutes).

En ce qui concerne le tableau de contingence et les calculs subséquents, pas de problème, je saurai me débrouiller.

Enfin, je vous remercie, c'est fort apprécié

Emil

Re Emil,

J'ai pigé, on relève la force du vent 1 fois toutes les heures, mais sans horaire bien précis,

relevés que l'on fait correspondre aux prévisions qui, par contre, ont des horaires bien définis.

En résumé, pour une même date, on ne peut pas avoir un relevé à 10:12 puis un autre à 10:44

Option Explicit

Sub Rapprochement()
Dim a, i As Long, e, v As Double
    Application.ScreenUpdating = False
    a = Sheets("Observations").Range("a1").CurrentRegion.Value
    With CreateObject("Scripting.Dictionary")
        .CompareMode = 1
        For i = 2 To UBound(a, 1)
            v = Int(a(i, 1) * 24) / 24
            .Item(v) = VBA.Array(a(i, 2), a(i, 3))
        Next
        a = Sheets("Prevision").Range("a1").CurrentRegion.Resize(, 7).Value
        a(1, 6) = "Vent(Noeuds)Obs.": a(1, 7) = "Catég. Obs."
        For i = 2 To UBound(a, 1)
            For Each e In .keys
                If CDbl(a(i, 2)) = e Then
                    a(i, 6) = .Item(e)(0)
                    a(i, 7) = .Item(e)(1)
                    Exit For
                End If
            Next
        Next
    End With
    With Sheets(3).Range("a1").Resize(UBound(a, 1), UBound(a, 2))
        .CurrentRegion.Clear
        .Value = a
        With .CurrentRegion
            .Font.Name = "calibri"
            .Font.Size = 10
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
            .Borders(xlInsideVertical).Weight = xlThin
            .BorderAround Weight:=xlThin
            With .Rows(1)
                .Font.Size = 11
                .Interior.ColorIndex = 44
                .BorderAround Weight:=xlThin
            End With
            .Columns(1).Resize(, 2).NumberFormat = "dd/mm/yyyy hh:mm"
            .Columns.AutoFit
        End With
        .Parent.Activate
    End With
    Application.ScreenUpdating = True
End Sub

klin89

Bravo!

Ça fonctionne super bien.

Un gros merci

Emil

Rechercher des sujets similaires à "comparer vents prevus observation"