Example #1
0
def vents(vv, dv, origine, sites):
    """
    Calcule les statistiques relatives aux pourcentages d'influence du site émetteur
    d'origine sur les sites récepteurs au travers du calcul de la rose des vents.
    Seuls les vents > 1 m/s seront pris en compte dans les calculs, pour une rose
    des vents de 16 secteurs.

    Paramètres:
    vv: vitesses de vent
    dv: directions du vent
    origine: Site origine des vents à étudier
    sites: liste de sites récepteurs à calculer

    """

    nsector = 16
    classes = np.arange(1, 30, 1)  # classes de vitesses de vent

    vv = vv.astype(float)
    dv = dv.astype(float)
    # suppression des données nulles
    vv, dv = utils.dissolveMask(vv, dv)
    vv = vv.dropna()
    dv = dv.dropna()

    # Calcul des pourcentages de vents par secteur
    dirs, bins, table = histogram(dir=dv, var=vv, bins=classes, nsector=nsector,
                                  normed=False, blowto=True)
    freq = table.sum(axis=0) / table.sum() * 100

    # Création du dataframe des résultats de pourcentages sous les vents
    freq = pd.DataFrame(zip(dirs, freq), columns=('dir_debut', 'pourcentage'))
    # Décalage des directions pour supprimer le problème du secteur nord [350°-10°]
    delta = 360. / nsector / 2
    freq['dir_debut'] = freq['dir_debut'] + delta
    # on ajoute une colonne où sont stockées les directions de fin
    freq['dir_fin'] = freq['dir_debut'].shift(-1)
    freq.at[freq.index[0], 'dir_debut'] = 0.
    freq.at[freq.index[-1], 'dir_fin'] = 360.

    # Calcule des angles et distances des sites par rapport à l'origine
    angles = angles_avec(sites, origine)
    distances = distances_avec(sites, origine)
    # On regroupe angles et distances dans un unique dataframe
    df = angles.join(distances)

    # Pour chaque site, on cherche le pourcentage sous les vents de l'origine
    df['pourcentage'] = 0.
    for idx in df.index:
        ang = df.at[idx, 'angle']
        cond = (ang >= freq['dir_debut']) & (ang < freq['dir_fin'])
        p = freq.get(cond)['pourcentage']
        try:
            df.at[idx, 'pourcentage'] = p
        except:
            pass

    df = df.applymap(np.round)
    return df
Example #2
0
def vents(vv, dv, speed_classes=[0, 1, 2, 3, 4, 5], histo=True, savein=None,
          suffix='', format='jpg', **kwargs):
    """Trace les graphiques suivants (16 secteurs fixés):
        - rose des vents
        - histogramme des vitesses de vent
        - histogramme des directions de vent

    Paramètres:
    vv: vitesses de vent
    dv: directions du vent
    speed_classes: classes de vent
    histo: si oui ou non il faut tracer les histogrammes de direction et vitesse
    savein: 'repertoire' oé enregistrer les graphiques
    suffix: suffixe à ajouter au nom du fichier image sauvegardé
    format: format du fichier image é sauvegarder. Si aucun, 'jpg' est choisi.
    """
    axes_list = list()

    if not format:
        format = 'jpg'
    if suffix:
        suffix = '_%s' % suffix
    else:
        suffix = ''

    vv = vv.astype(float)
    dv = dv.astype(float)
    vv, dv = utils.dissolveMask(vv, dv)
    # vv = vv.dropna()
    # dv = dv.dropna()
    # Rose des vents
    try:
        ax = new_wraxe()
        ax.bar(dir=dv, var=vv, bins=speed_classes, opening=0.8, normed=True, **kwargs)
        ax.legend()
        plt.draw()
        freq = ax._info['table']
        if savein:
            plt.savefig("%s/RDV%s.%s" % (savein, suffix, format))
        axes_list.append(ax)
    except Exception, error:
        print error