def get_mesures(self, mes, debut=None, fin=None, freq='<STR_LIT:H>', format=None,<EOL>dayfirst=False, brut=False):
def create_index(index, freq):<EOL><INDENT>"""<STR_LIT>"""<EOL>decalage = <NUM_LIT:1>  <EOL>if freq == '<STR_LIT:T>' or freq == '<STR_LIT>':<EOL><INDENT>f = pd.tseries.offsets.Minute<EOL>decalage = <NUM_LIT:15><EOL><DEDENT>if freq == '<STR_LIT:H>':<EOL><INDENT>f = pd.tseries.offsets.Hour<EOL><DEDENT>if freq == '<STR_LIT:D>':<EOL><INDENT>f = pd.tseries.offsets.Day<EOL><DEDENT>if freq == '<STR_LIT:M>':<EOL><INDENT>f = pd.tseries.offsets.MonthBegin<EOL><DEDENT>if freq == '<STR_LIT:A>':<EOL><INDENT>f = pd.tseries.offsets.YearBegin<EOL><DEDENT>else:<EOL><INDENT>f = pd.tseries.offsets.Hour<EOL><DEDENT>new_index = [date + f(int(delta) - decalage) for date, delta in index]<EOL>return new_index<EOL><DEDENT>mes = _format(mes)<EOL>debut = to_date(debut, dayfirst, format)<EOL>if not fin:<EOL><INDENT>fin = debut<EOL><DEDENT>else:<EOL><INDENT>fin = to_date(fin, dayfirst, format)<EOL><DEDENT>if freq in ('<STR_LIT>', '<STR_LIT:T>'):<EOL><INDENT>freq = '<STR_LIT>'<EOL><DEDENT>if freq == '<STR_LIT>':<EOL><INDENT>diviseur = <NUM_LIT><EOL>champ_val = '<STR_LIT:U+002C>'.join(['<STR_LIT>' % (x, x * <NUM_LIT:15>) for x in range(<NUM_LIT:1>, diviseur + <NUM_LIT:1>)])<EOL>champ_code = '<STR_LIT>'<EOL>table = '<STR_LIT>'<EOL><DEDENT>elif freq == '<STR_LIT:H>':<EOL><INDENT>diviseur = <NUM_LIT><EOL>champ_val = '<STR_LIT:U+002C>'.join(['<STR_LIT>' % (x, x) for x in range(<NUM_LIT:1>, diviseur + <NUM_LIT:1>)])<EOL>champ_code = '<STR_LIT>'<EOL>table = '<STR_LIT>'<EOL><DEDENT>elif freq == '<STR_LIT:D>':<EOL><INDENT>diviseur = <NUM_LIT:1><EOL>champ_val = '<STR_LIT>'<EOL>champ_code = '<STR_LIT>'<EOL>table = '<STR_LIT>'<EOL><DEDENT>elif freq == '<STR_LIT:M>':<EOL><INDENT>diviseur = <NUM_LIT:12><EOL>champ_val = '<STR_LIT:U+002C>'.join(['<STR_LIT>' % (x, x) for x in range(<NUM_LIT:1>, diviseur + <NUM_LIT:1>)])<EOL>champ_code = '<STR_LIT>'<EOL>table = '<STR_LIT>'<EOL><DEDENT>elif freq == '<STR_LIT:A>':<EOL><INDENT>diviseur = <NUM_LIT:1><EOL>champ_val = '<STR_LIT>'<EOL>champ_code = '<STR_LIT>'<EOL>table = '<STR_LIT>'<EOL><DEDENT>else:<EOL><INDENT>raise ValueError("<STR_LIT>")<EOL><DEDENT>if table == '<STR_LIT>':<EOL><INDENT>champ_date = '<STR_LIT>'<EOL>debut_db = debut<EOL>fin_db = fin<EOL><DEDENT>else:<EOL><INDENT>champ_date = '<STR_LIT>'<EOL>debut_db = debut.replace(month=<NUM_LIT:1>, day=<NUM_LIT:1>, hour=<NUM_LIT:0>, minute=<NUM_LIT:0>)<EOL>fin_db = fin.replace(month=<NUM_LIT:12>, day=<NUM_LIT>, hour=<NUM_LIT>, minute=<NUM_LIT:0>)<EOL><DEDENT>debut_db = debut_db.strftime("<STR_LIT>")<EOL>fin_db = fin_db.strftime("<STR_LIT>")<EOL>_sql = """<STR_LIT>""".format(champ_date=champ_date,<EOL>table=table,<EOL>champ_code=champ_code,<EOL>mes=mes,<EOL>champ_val=champ_val,<EOL>debut=debut_db,<EOL>fin=fin_db)<EOL>rep = psql.read_sql(_sql, self.conn)<EOL>df = rep.set_index(['<STR_LIT:id>', '<STR_LIT:date>'])<EOL>etats = df['<STR_LIT>']<EOL>df = df.drop('<STR_LIT>', axis=<NUM_LIT:1>)<EOL>df_stack = df.stack(dropna=False)<EOL>df = df_stack.unstack('<STR_LIT:id>')<EOL>index = create_index(df.index, freq)<EOL>df.reset_index(inplace=True, drop=True)<EOL>df['<STR_LIT:date>'] = index<EOL>df = df.set_index(['<STR_LIT:date>'])<EOL>etats = etats.unstack('<STR_LIT:id>')<EOL>etats.fillna(value=MISSING_CODE * diviseur, inplace=True)<EOL>etats = etats.sum(axis=<NUM_LIT:0>)<EOL>etats = pd.DataFrame(list(zip(*etats.apply(list))))<EOL>etats.index = df.index<EOL>etats.columns = df.columns<EOL>dates_completes = date_range(debut, fin, freq)<EOL>df = df.reindex(dates_completes)<EOL>etats = etats.reindex(dates_completes)<EOL>invalid = etats_to_invalid(etats)<EOL>if not brut:<EOL><INDENT>dfn = df.mask(invalid)  <EOL>return dfn<EOL><DEDENT>else:<EOL><INDENT>return df, etats<EOL><DEDENT>
Récupération des données de mesure.

Paramètres:
mes: Un nom de mesure ou plusieurs séparées par des virgules, une liste
    (list, tuple, pandas.Series) de noms
debut: Chaine de caractère ou objet datetime décrivant la date de début.
    Défaut=date du jour
fin: Chaine de caractère ou objet datetime décrivant la date de fin.
    Défaut=date de début
freq: fréquence de temps. '15T' | 'H' | 'D' | 'M' | 'A' (15T pour quart-horaire)
format: chaine de caractère décrivant le format des dates (ex:"%Y-%m-%d"
    pour debut/fin="2013-01-28"). Appeler pyair.date.strtime_help() pour
    obtenir la liste des codes possibles.
    Defaut="%Y-%m-%d"
dayfirst: Si aucun format n'est fourni et que les dates sont des chaines
    de caractères, aide le décrypteur à transformer la date en objet datetime
    en spécifiant que les dates commencent par le jour (ex:11/09/2012
    pourrait être interpreté comme le 09 novembre si dayfirst=False)
brut: si oui ou non renvoyer le dataframe brut, non invalidé, et les
    codes d'état des mesures
    Defaut=False

Retourne:
Un dataframe contenant toutes les mesures demandées.
Si brut=True, renvoie le  dataframe des mesures brutes non invalidées et
le dataframe des codes d'états.
Le dataframe valide (net) peut être alors recalculé en faisant:
brut, etats = xr.get_mesure(..., brut=True)
invalides = etats_to_invalid(etats)
net = brut.mask(invalides)