IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

lire tous les rasters existe dans un dossier pour calcul du mean ! os.scandir


Sujet :

Python

  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 66
    Par défaut lire tous les rasters existe dans un dossier pour calcul du mean ! os.scandir
    Bonjour ,

    j'utilise un script qui permet de calculer la moyenne des valeurs des pixel pour chaque bands dans un raster et le stocker dans un dataframe et sauvgarder en fichier CSV voilà le script :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    import pandas as pd
     
    raster_filename = "D:/projetp/Doy_2000/output/2014mask.tif"
    raster = gdal.Open(raster_filename)
    bands = raster.RasterCount
     
    row_list = []
     
    for band in range(1, bands+1):
        data = raster.GetRasterBand(band).ReadAsArray().astype('float')
        mean = np.mean(data[data != 0]) #calculate mean without value 0
        row_list.append({
            'raster': os.path.basename(raster_filename),
            'band': band,
            'mean': mean,
            'year': 2014,
            })
        print("Band %s: Mean = %s" % (band, round(mean, 2)))
     
    # create DataFrame with columns from the dict keys
    df = pd.DataFrame(row_list)
    df.to_csv('band_means.csv')

    j'ai 5 autres Raster dans même dossier nommer ( 2014mask,2013mask,2010mask, 2011mask,2009mask) que j'aimera effectuer le même opération sans faire un par un . j'ai essayé avec os.scandir mais j'arrive pas ou j'ai mal utilisé la fonction :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    raster_path = "D:/projetp/Doy_2000/output/" 
     
    with os.scandir(raster_path) as p: 
        for raster in p: 
            if not raster.name.endswith(".tif"): 
                raster_file = os.path.join(raster_path) 
                raster = gdal.Open("D:/projetp/Doy_2000/output/2014mask.tif") 
    row_list = [] 
     
                bands = raster.RasterCount
     
                for band in range(1, bands+1):
                    data = raster.GetRasterBand(band).ReadAsArray().astype('float')
                    mean = np.mean(data[data != 0]) #calculate mean without value 0
                    row_list.append({
                        'raster': os.path.basename(raster_name),
                        'band': band,
                        'mean': mean,
                        'year': 2014,
     
                    })
                    print("Band %s: Mean = %s" % (band, round(mean, 2)))
     
    df = pd.DataFrame(row_list)
    df.to_csv('band_mean.csv')

    mais ça marche plus !!! j'ai besoin d'aide

    merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Ça n'a pas beaucoup de sens, tu utilises le même nom raster pour deux choses différentes, et tu crées une liste de fichier alors que tu utilises toujours le même ../2014mask.tif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        for raster in p: 
            if not raster.name.endswith(".tif"): 
                raster_file = os.path.join(raster_path) 
                raster = gdal.Open("D:/projetp/Doy_2000/output/2014mask.tif")
    En plus tu recrées ta liste vide à chaque image !

    Essaye comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    import glob
    tifs = glob.glob("D:/projetp/Doy_2000/output/*.tif") 
    row_list = []
    for tif in tifs:
        raster = gdal.Open(tif) 
        bands = raster.RasterCount
        for band in range(1, bands+1):
            data = raster.GetRasterBand(band).ReadAsArray().astype('float')
            mean = np.mean(data[data != 0]) #calculate mean without value 0
            row_list.append({
                'raster': os.path.basename(raster_name),
                'band': band,
                'mean': mean,
                'year': 2014,
            })
            print("Band %s: Mean = %s" % (band, round(mean, 2)))
     
    df = pd.DataFrame(row_list)
    df.to_csv('band_mean.csv')

  3. #3
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Pas le temps de regarder mais j'ai quand même une question : il sert à quoi ce programme ?

  4. #4
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 66
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,

    Ça n'a pas beaucoup de sens, tu utilises le même nom raster pour deux choses différentes, et tu crées une liste de fichier alors que tu utilises toujours le même ../2014mask.tif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        for raster in p: 
            if not raster.name.endswith(".tif"): 
                raster_file = os.path.join(raster_path) 
                raster = gdal.Open("D:/projetp/Doy_2000/output/2014mask.tif")
    En plus tu recrées ta liste vide à chaque image !

    Essaye comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    import glob
    tifs = glob.glob("D:/projetp/Doy_2000/output/*.tif") 
    row_list = []
    for tif in tifs:
        raster = gdal.Open(tif) 
        bands = raster.RasterCount
        for band in range(1, bands+1):
            data = raster.GetRasterBand(band).ReadAsArray().astype('float')
            mean = np.mean(data[data != 0]) #calculate mean without value 0
            row_list.append({
                'raster': os.path.basename(raster_name),
                'band': band,
                'mean': mean,
                'year': 2014,
            })
            print("Band %s: Mean = %s" % (band, round(mean, 2)))
     
    df = pd.DataFrame(row_list)
    df.to_csv('band_mean.csv')
    Bonjour,

    merci pour la réponse mais encore il me retourn erreur que le raster name n 'est pas définis !!?

    merci

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Dans mon exemple c'est 'tif' le nom du fichier pas 'raster_name'

  6. #6
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 66
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Dans mon exemple c'est 'tif' le nom du fichier pas 'raster_name'
    c'est dans cette ligne


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                'raster': os.path.basename(raster_name),
    merci

Discussions similaires

  1. [XL-2010] Appliquer un filtre à tous les classeurs contenus dans un dossier
    Par cjpp1 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 02/10/2015, 09h58
  2. Réponses: 2
    Dernier message: 05/03/2014, 10h03
  3. Réponses: 2
    Dernier message: 16/06/2009, 16h04
  4. Réponses: 1
    Dernier message: 01/12/2008, 18h03
  5. Afficher dans Excel tous les fichiers contenu dans un dossier
    Par popsmelove dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/01/2008, 18h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo