Module dromosense.importation

Expand source code
import numpy as np
import matplotlib.pyplot as plt
import os

verbose=False


def getCsvDatas(name, dir="../datas", preview=False):
    """
    IMPORTATION de données depuis un fichier CSV

    The timeserie must be a fixed interval timeserie

    première colonne : le temps en seconde

    colonnes 1 à x : données

    name: file name

    dir: relative folder's path of the file

    preview: boolean - do yu want to preview the datas as plot charts ?

    return :

    step : interval in seconds

    float_data : the matrix containing the datas
    """
    fpath = "{}/{}".format(dir,name)
    f = open (fpath)
    data = f.read()
    f.close()
    """
    1) remove blank lines which could pollute the end of the file
    2) split into a list of lines
    3) extract the header and remove it from the object lines
    """
    data = data.rstrip('\n\r')
    lines = data.split('\n')
    header = lines[0].split(',')
    lines = lines[1:]
    # evaluates the timestep in s
    step = float(lines[1].split(',')[0])-float(lines[0].split(',')[0])
    step=int(step)
    if verbose:
        print(header)
        print(len(lines))
        input("press any key")

    """
    float_data shape is (time,features)
    on crée un tenseur rempli de zéros:
    - la dimension 0 (ou premier axe du tenseur) va être le nombre de données
    - la dimension 1 (ou second axe du tenseur) va être len(header)-1
    En effet, on met de côté la colonne liée au temps, qui ne sert a rien vu qu'on travaille à intervalle de temps fixe
    Généralement, dans un tenseur, on dit que le premier axe (axis 0) est le "samples axis"
    Ensuite on parcourt l'objet lines, on splite au niveau des , et on ne conserve que la partie [1:], c'est à dire tous les éléments sauf la premier valeur qui est le temps
    la numérotation commence à 0, donc :
    - line.split(',')[0] est le temps
    - line.split(',')[1] est la température de l'air
    - line.split(',')[2] est la température du point de rosée
    etc, etc
    """
    float_data=np.zeros((len(lines),len(header)-1))
    for i,line in enumerate(lines):
        values = [float(x) for x in line.split(',')[1:]]
        float_data[i,:]=values

    print("data shape is {}".format(float_data.shape))
    print("interval is {}".format(step))

    """
    float_data est donc l'objet contenant toutes tes données sauf le temps....
    c'est la méthode idéale dans ton cas car toutes tes données sont dans un seul fichier
    effectivement on aurait pu faire différemment s'il y avait eu un seul fichier par type de données, ie un fichier pour la température de l'air, un pour la radiation....
    """
    if preview:
        xrange=np.arange(float_data.shape[0])
        ax1=plt.subplot(111)
        plt.title("test d'importation")
        plt.xlabel('Temps (en heure)')
        ax1.set_ylabel("°C")
        plt.plot(float_data[:,0], label="Text", color="blue")
        plt.legend(loc='upper left')
        ax2=ax1.twinx()
        ax2.set_ylabel("W/m2")
        plt.fill_between(xrange,float_data[:,5], label="ray. atm. (W/m2)", color="orange", alpha=0.4)
        plt.fill_between(xrange,float_data[:,4], label="glob. rad. (W/m2)", color="yellow", alpha=0.4)
        plt.legend(loc='upper right')
        plt.show()

    return step, float_data

def getTxtModelicaDatas(name, dir="../datas", preview=False):
    """
    IMPORTATION de données txt comme attendu par Modelica

    Attention, modelica permet souvent de travailler avec des fichiers à pas de temps variable

    la colonne temps est donc à conserver
    """
    fpath = "{}/{}".format(dir,name)
    f = open (fpath)
    data = f.read()
    f.close()
    data = data.rstrip('\n\r')
    lines = data.split('\n')
    header = lines[1].split('#Columns:')[1].rstrip('\t').split(';')
    lines = lines[2:]
    if verbose:
        print(header)
    line1=[float(x) for x in lines[0].split('\t')]

    float_data=np.zeros((len(lines),len(line1)))
    for i,line in enumerate(lines):
        values = [float(x) for x in line.split('\t')]
        float_data[i,:]=values

    print("data shape is {}".format(float_data.shape))

    if preview:
        ax1=plt.subplot(111)
        plt.title("test d'importation")
        plt.xlabel('secondes')
        ax1.set_ylabel("W/m2")
        for i in range(1,3):
            plt.plot(float_data[:,0],float_data[:,i], label=header[i].strip())
        plt.legend(loc='upper left')
        plt.show()

    return float_data

Functions

def getCsvDatas(name, dir='../datas', preview=False)

IMPORTATION de données depuis un fichier CSV

The timeserie must be a fixed interval timeserie

première colonne : le temps en seconde

colonnes 1 à x : données

name: file name

dir: relative folder's path of the file

preview: boolean - do yu want to preview the datas as plot charts ?

return :

step : interval in seconds

float_data : the matrix containing the datas

Expand source code
def getCsvDatas(name, dir="../datas", preview=False):
    """
    IMPORTATION de données depuis un fichier CSV

    The timeserie must be a fixed interval timeserie

    première colonne : le temps en seconde

    colonnes 1 à x : données

    name: file name

    dir: relative folder's path of the file

    preview: boolean - do yu want to preview the datas as plot charts ?

    return :

    step : interval in seconds

    float_data : the matrix containing the datas
    """
    fpath = "{}/{}".format(dir,name)
    f = open (fpath)
    data = f.read()
    f.close()
    """
    1) remove blank lines which could pollute the end of the file
    2) split into a list of lines
    3) extract the header and remove it from the object lines
    """
    data = data.rstrip('\n\r')
    lines = data.split('\n')
    header = lines[0].split(',')
    lines = lines[1:]
    # evaluates the timestep in s
    step = float(lines[1].split(',')[0])-float(lines[0].split(',')[0])
    step=int(step)
    if verbose:
        print(header)
        print(len(lines))
        input("press any key")

    """
    float_data shape is (time,features)
    on crée un tenseur rempli de zéros:
    - la dimension 0 (ou premier axe du tenseur) va être le nombre de données
    - la dimension 1 (ou second axe du tenseur) va être len(header)-1
    En effet, on met de côté la colonne liée au temps, qui ne sert a rien vu qu'on travaille à intervalle de temps fixe
    Généralement, dans un tenseur, on dit que le premier axe (axis 0) est le "samples axis"
    Ensuite on parcourt l'objet lines, on splite au niveau des , et on ne conserve que la partie [1:], c'est à dire tous les éléments sauf la premier valeur qui est le temps
    la numérotation commence à 0, donc :
    - line.split(',')[0] est le temps
    - line.split(',')[1] est la température de l'air
    - line.split(',')[2] est la température du point de rosée
    etc, etc
    """
    float_data=np.zeros((len(lines),len(header)-1))
    for i,line in enumerate(lines):
        values = [float(x) for x in line.split(',')[1:]]
        float_data[i,:]=values

    print("data shape is {}".format(float_data.shape))
    print("interval is {}".format(step))

    """
    float_data est donc l'objet contenant toutes tes données sauf le temps....
    c'est la méthode idéale dans ton cas car toutes tes données sont dans un seul fichier
    effectivement on aurait pu faire différemment s'il y avait eu un seul fichier par type de données, ie un fichier pour la température de l'air, un pour la radiation....
    """
    if preview:
        xrange=np.arange(float_data.shape[0])
        ax1=plt.subplot(111)
        plt.title("test d'importation")
        plt.xlabel('Temps (en heure)')
        ax1.set_ylabel("°C")
        plt.plot(float_data[:,0], label="Text", color="blue")
        plt.legend(loc='upper left')
        ax2=ax1.twinx()
        ax2.set_ylabel("W/m2")
        plt.fill_between(xrange,float_data[:,5], label="ray. atm. (W/m2)", color="orange", alpha=0.4)
        plt.fill_between(xrange,float_data[:,4], label="glob. rad. (W/m2)", color="yellow", alpha=0.4)
        plt.legend(loc='upper right')
        plt.show()

    return step, float_data
def getTxtModelicaDatas(name, dir='../datas', preview=False)

IMPORTATION de données txt comme attendu par Modelica

Attention, modelica permet souvent de travailler avec des fichiers à pas de temps variable

la colonne temps est donc à conserver

Expand source code
def getTxtModelicaDatas(name, dir="../datas", preview=False):
    """
    IMPORTATION de données txt comme attendu par Modelica

    Attention, modelica permet souvent de travailler avec des fichiers à pas de temps variable

    la colonne temps est donc à conserver
    """
    fpath = "{}/{}".format(dir,name)
    f = open (fpath)
    data = f.read()
    f.close()
    data = data.rstrip('\n\r')
    lines = data.split('\n')
    header = lines[1].split('#Columns:')[1].rstrip('\t').split(';')
    lines = lines[2:]
    if verbose:
        print(header)
    line1=[float(x) for x in lines[0].split('\t')]

    float_data=np.zeros((len(lines),len(line1)))
    for i,line in enumerate(lines):
        values = [float(x) for x in line.split('\t')]
        float_data[i,:]=values

    print("data shape is {}".format(float_data.shape))

    if preview:
        ax1=plt.subplot(111)
        plt.title("test d'importation")
        plt.xlabel('secondes')
        ax1.set_ylabel("W/m2")
        for i in range(1,3):
            plt.plot(float_data[:,0],float_data[:,i], label=header[i].strip())
        plt.legend(loc='upper left')
        plt.show()

    return float_data