Beispiel #1
0
def getInsee(codeStation):
    mysql = getMysqlConnection()
    requete = mysql.cursor()
    requete.execute('SELECT insee FROM tranche WHERE debut <= ' +
                    str(codeStation) + ' AND fin >= ' + str(codeStation))
    tranche = requete.fetchone()
    return tranche[0]
def recalculNbStationsResumeOfResume(periodeOrigine, periodeFinale, dateCourante):
    dateConso = dateCourante.strftime("%Y-%m-%d %H:%M:%S")
    finConso = dateCourante + datetime.timedelta(minutes=periodeFinale)
    dateConsoFin = finConso.strftime("%Y-%m-%d %H:%M:%S")

    #On récupère les conso
    proprietes = ['nbStation', 'nbStationDetecte']
    
    mysql = getMysqlConnection()
    requete = mysql.cursor()
    requete.execute("SELECT "+', '.join(proprietes)+" FROM `resumeConso` WHERE duree = "+str(periodeOrigine)+" and date >= '"+dateConso+"' and date < '"+dateConsoFin+"' order by date")
    consos = requete.fetchall()
    infosCourantes = {}
    for row in consos:
        for i, cle in enumerate(proprietes):
            if not row[i] is None:
                valeurProp = int(row[i])
                
                if cle in infosCourantes:
                    infosCourantes[cle] = max(infosCourantes[cle], valeurProp)
                else:
                    infosCourantes[cle] = valeurProp

    #Et on met à jour
    if infosCourantes != {} and 'nbStation' in infosCourantes and 'nbStationDetecte' in infosCourantes:
        nbStations = infosCourantes['nbStation']
        nbStationsDetecte = infosCourantes['nbStationDetecte']
        requete = mysql.cursor()
        requete.execute('UPDATE `resumeConso` SET nbStation = '+str(nbStations) + ', nbStationDetecte = '+str(nbStationsDetecte) + ' WHERE \
        date = "'+dateConso+'" and duree = '+str(periodeFinale))
Beispiel #3
0
def calculerResumeOfResume(dateConsoDT, dureeConsoOrigine, dureeConsoFinale):
    dateConso = dateConsoDT.strftime("%Y-%m-%d %H:%M:%S")
    finConso = dateConsoDT + datetime.timedelta(minutes=dureeConsoFinale)
    dateConsoFin = finConso.strftime("%Y-%m-%d %H:%M:%S")

    #On récupère les conso
    proprietes = [
        'nbBikeMin', 'nbBikeMax', 'nbBikeMoyenne', 'nbBikePris', 'nbBikeRendu',
        'nbEBikeMin', 'nbEBikeMax', 'nbEBikeMoyenne', 'nbEBikePris',
        'nbEBikeRendu', 'nbFreeEDockMin', 'nbFreeEDockMax',
        'nbFreeEDockMoyenne', 'nbEDock', 'nbBikeOverflowMin',
        'nbBikeOverflowMax', 'nbBikeOverflowMoyenne', 'nbEBikeOverflowMin',
        'nbEBikeOverflowMax', 'nbEBikeOverflowMoyenne', 'maxBikeOverflow'
    ]

    mysql = getMysqlConnection()
    requete = mysql.cursor()
    requete.execute("SELECT code, " + ', '.join(proprietes) +
                    " FROM `resumeStatus` WHERE duree = " +
                    str(dureeConsoOrigine) + " and date >= '" + dateConso +
                    "' and date < '" + dateConsoFin + "' order by code")
    consos = requete.fetchall()
    precedentCode = None
    infosCourantes = {}
    for row in consos:
        codeStation = int(row[0])

        if precedentCode != None and precedentCode != codeStation:  #On change de station
            #On enregistre la conso
            enregistrerConso(mysql, proprietes, infosCourantes, precedentCode,
                             dateConso, dureeConsoFinale)
            infosCourantes = {}

        for i, cle in enumerate(proprietes):
            if cle[-7:] == 'Moyenne':
                valeurProp = float(row[i + 1])
            else:
                valeurProp = int(row[i + 1])

            if cle in infosCourantes:
                if cle[-7:] == 'Moyenne':
                    infosCourantes[cle].append(valeurProp)
                elif cle[-3:] == 'Min':
                    infosCourantes[cle] = min(infosCourantes[cle], valeurProp)
                elif cle[
                        -3:] == 'Max' or cle == 'maxBikeOverflow' or cle == 'nbEDock':
                    infosCourantes[cle] = max(infosCourantes[cle], valeurProp)
                else:
                    infosCourantes[cle] += valeurProp
            else:
                if cle[-7:] == 'Moyenne':
                    infosCourantes[cle] = [valeurProp]
                else:
                    infosCourantes[cle] = valeurProp

        precedentCode = codeStation
    #Et on oublie pas le dernier !
    enregistrerConso(mysql, proprietes, infosCourantes, precedentCode,
                     dateConso, dureeConsoFinale)
Beispiel #4
0
def calculerResumeOfResumeConso(dateConsoDT, dureeConsoOrigine,
                                dureeConsoFinale):
    dateConso = dateConsoDT.strftime("%Y-%m-%d %H:%M:%S")
    finConso = dateConsoDT + datetime.timedelta(minutes=dureeConsoFinale)
    dateConsoFin = finConso.strftime("%Y-%m-%d %H:%M:%S")

    #On récupère les conso
    proprietes = [
        'nbStation', 'nbStationDetecte', 'nbBikeMin', 'nbBikeMax',
        'nbBikeMoyenne', 'nbEBikeMin', 'nbEBikeMax', 'nbEBikeMoyenne',
        'nbFreeEDockMin', 'nbFreeEDockMax', 'nbFreeEDockMoyenne', 'nbEDock'
    ]

    mysql = getMysqlConnection()
    requete = mysql.cursor()
    requete.execute("SELECT " + ', '.join(proprietes) +
                    " FROM `resumeConso` WHERE duree = " +
                    str(dureeConsoOrigine) + " and date >= '" + dateConso +
                    "' and date < '" + dateConsoFin + "' order by date")
    consos = requete.fetchall()
    precedentCode = None
    infosCourantes = {}
    for row in consos:
        for i, cle in enumerate(proprietes):
            if cle[-7:] == 'Moyenne':
                valeurProp = float(row[i])
            else:
                valeurProp = int(row[i])

            if cle in infosCourantes:
                if cle[-7:] == 'Moyenne':
                    infosCourantes[cle].append(valeurProp)
                elif cle[-3:] == 'Min':
                    infosCourantes[cle] = min(infosCourantes[cle], valeurProp)
                else:
                    infosCourantes[cle] = max(infosCourantes[cle], valeurProp)
            else:
                if cle[-7:] == 'Moyenne':
                    infosCourantes[cle] = [valeurProp]
                else:
                    infosCourantes[cle] = valeurProp

    #Et on enregistre
    if infosCourantes != {}:
        strValeurs = ""
        for i, cle in enumerate(proprietes):
            if cle[-7:] == 'Moyenne':
                data = infosCourantes[cle]
                moyenne = sum(data) / max(len(data), 1)
                infosCourantes[cle] = moyenne
            if i != 0:
                strValeurs += ', '
            strValeurs += str(infosCourantes[cle])

        requete = mysql.cursor()
        requete.execute('INSERT INTO `resumeConso` (`id`, `date`, `duree`, ' +
                        ', '.join(proprietes) + ') VALUES \
        (NULL, "' + dateConso + '", ' + str(dureeConsoFinale) + ', ' +
                        strValeurs + ')')
Beispiel #5
0
def nettoyerInstantanne(date):
    dateStr = date.strftime("%Y-%m-%d %H:%M:%S")
    mysql = getMysqlConnection()
    requete = mysql.cursor()
    requete.execute('DELETE FROM status WHERE idConso IN ( \
    SELECT id FROM statusConso \
    WHERE date < "' + dateStr + '")')
    requete = mysql.cursor()
    requete.execute('DELETE FROM statusConso WHERE date < "' + dateStr + '"')
Beispiel #6
0
def nettoyerConso(date, filtre):
    dateStr = date.strftime("%Y-%m-%d %H:%M:%S")
    mysql = getMysqlConnection()
    requete = mysql.cursor()
    requete.execute('DELETE FROM resumeStatus WHERE date < "' + dateStr +
                    '" AND (' + filtre + ')')
    requete = mysql.cursor()
    requete.execute('DELETE FROM resumeConso WHERE date < "' + dateStr +
                    '" AND (' + filtre + ')')
def recalculNbStationsResume(periode, dateCourante):
    dateConso = dateCourante.strftime("%Y-%m-%d %H:%M:%S")
    finConso = dateCourante + datetime.timedelta(minutes=periode)
    dateConsoFin = finConso.strftime("%Y-%m-%d %H:%M:%S")

    proprietes = ['state', 'nbEDock', 'nbBike', 'nbEBike', 'nbFreeEDock']
    mysql = getMysqlConnection()

    requete = mysql.cursor()
    requete.execute("SELECT s."+', s.'.join(proprietes)+", c.date, c.id \
    FROM status s \
    INNER JOIN `statusConso` c ON c.id = s.idConso \
    WHERE (c.`date` >= '"+dateConso+"' AND c.`date` < '"+dateConsoFin+"') \
    ORDER BY c.id ASC")
    statusConso = requete.fetchall()
    nbStations = 0
    nbStationsDetecte = 0
    nbStationsMax = 0
    nbStationsDetecteMax = 0
    precedenteDate = None
    precedenteConso = None
    for row in statusConso:
        if precedenteDate != None and precedenteDate != row[5]:
            #On met à jour la conso
            requete = mysql.cursor()
            requete.execute('UPDATE statusConso SET nbStation = '+str(nbStations) + ', nbStationDetecte = '+str(nbStationsDetecte) + ' WHERE id = '+str(precedenteConso))
            
            #On calcule le resume
            nbStationsMax = max(nbStationsMax, nbStations)
            nbStationsDetecteMax = max(nbStationsDetecteMax, nbStationsDetecte)
            
            #Et on prépare la suivante
            nbStations = 0
            nbStationsDetecte = 0
        
        if row[0] is None or row[0] == 'Operative':
            nbStations += 1
        if row[1] > 0 and (row[2] + row[3] + row[4]) > 0:
            nbStationsDetecte += 1

        precedenteDate = row[5]
        precedenteConso = row[6]

    if precedenteDate != None:
        #on oublie pas la dernière
        requete = mysql.cursor()
        requete.execute('UPDATE statusConso SET nbStation = '+str(nbStations) + ', nbStationDetecte = '+str(nbStationsDetecte) + ' WHERE id = '+str(precedenteConso))

        #On calcule le resume
        nbStationsMax = max(nbStationsMax, nbStations)
        nbStationsDetecteMax = max(nbStationsDetecteMax, nbStationsDetecte)

    requete = mysql.cursor()
    requete.execute('UPDATE resumeConso SET nbStation = '+str(nbStations) + ', nbStationDetecte = '+str(nbStationsDetecte) + ' WHERE date = "'+str(dateConso)+'" AND duree = '+str(periode))
                
                if cle in infosCourantes:
                    infosCourantes[cle] = max(infosCourantes[cle], valeurProp)
                else:
                    infosCourantes[cle] = valeurProp

    #Et on met à jour
    if infosCourantes != {} and 'nbStation' in infosCourantes and 'nbStationDetecte' in infosCourantes:
        nbStations = infosCourantes['nbStation']
        nbStationsDetecte = infosCourantes['nbStationDetecte']
        requete = mysql.cursor()
        requete.execute('UPDATE `resumeConso` SET nbStation = '+str(nbStations) + ', nbStationDetecte = '+str(nbStationsDetecte) + ' WHERE \
        date = "'+dateConso+'" and duree = '+str(periodeFinale))

#On commence par avoir la date min et max
mysql = getMysqlConnection()
requete = mysql.cursor()
requete.execute("SELECT MIN(date), MAX(date) FROM `statusConso`")
bornesDate = requete.fetchone()
dateMin = bornesDate[0].replace(microsecond = 0, second = 0)
dateMax = bornesDate[1].replace(microsecond = 0, second = 0)

print("******* Bornes *******")
print("Début = "+str(dateMin))
print("Fin = "+str(dateMax))
print("******* Bornes *******")

#Périodes à calculer
periodes = [5, 15, 60, 360]
periodePrecedente = 0
for periode in periodes:
Beispiel #9
0
                 universal_newlines=True,
                 shell=True)
    return ast.literal_eval(result.stdout)


def filetime_to_dt(s):
    return datetime.datetime.fromtimestamp(
        (s - 116444736000000000) // 10000000)


def version_dict_to_str(dict):
    return str(dict["m_build"]) + "." + str(dict["m_major"]) + "." + str(
        dict["m_minor"]) + "." + str(dict["m_revision"])


mydb = getMysqlConnection()

os.chdir("./Replays/")
for file in glob.glob("*.StormReplay"):
    try:
        header = out("python3 -m heroprotocol --header \"" + str(file) + "\"")
        details = out("python3 -m heroprotocol --details \"" + str(file) +
                      "\"")
        version = version_dict_to_str(header["m_version"])

        #lets check if the map name exist yet
        mycursor = mydb.cursor()
        mycursor.execute("SELECT * FROM maps WHERE map_name =\"" +
                         details["m_title"].decode("utf-8") + "\"")
        myresult = mycursor.fetchall()
        if (mycursor.rowcount == 0):
Beispiel #10
0
def creerDumpData(dateDebut):
    dateDebut = dateDebut.replace(microsecond=0, second=0, minute=0, hour=0)
    dateDebutStr = dateDebut.strftime("%Y-%m-%d %H:%M:%S")
    dateDebutNomFichier = dateDebut.strftime("%Y-%m-%d")
    dateFin = dateDebut + datetime.timedelta(days=1)
    dateFinStr = dateFin.strftime("%Y-%m-%d %H:%M:%S")

    nomFichier = '../dump/' + dateDebutNomFichier + '-data.db'
    conn = sqlite3.connect(nomFichier)

    mysql = getMysqlConnection()

    #Creation des tables
    c = conn.cursor()
    creerStationTable(c)
    c.execute('''
    CREATE TABLE `status` (
    `id` int(11) NOT NULL,
    `code` int(11) NOT NULL,
    `idConso` int(11) NOT NULL,
    `state` varchar(32) NOT NULL,
    `nbBike` int(3) NOT NULL,
    `nbEBike` int(3) NOT NULL,
    `nbFreeEDock` int(3) NOT NULL,
    `nbEDock` int(3) NOT NULL,
    `nbBikeOverflow` int(3) NOT NULL,
    `nbEBikeOverflow` int(3) NOT NULL,
    `maxBikeOverflow` int(3) NOT NULL
    );
    ''')
    c.execute('''
    CREATE TABLE `statusConso` (
    `id` int(11) NOT NULL,
    `date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `nbStation` int(11) DEFAULT NULL,
    `nbStationDetecte` int(11) DEFAULT NULL,
    `nbBike` int(11) DEFAULT NULL,
    `nbEbike` int(11) DEFAULT NULL,
    `nbFreeEDock` int(11) DEFAULT NULL,
    `nbEDock` int(11) DEFAULT NULL
    );
    ''')
    conn.commit()

    #On va récupérer chaque donnée de chaque table
    creerStationData(conn, mysql)

    c = conn.cursor()
    requete = mysql.cursor()
    requete.execute(
        'SELECT id, date, nbStation, nbStationDetecte, nbBike, nbEbike, nbFreeEDock, nbEDock \
    FROM statusConso \
    WHERE date >= "' + dateDebutStr + '" AND date < "' + dateFinStr + '"')
    stations = requete.fetchall()
    for station in stations:
        values = []
        for cell in station:
            values.append(val(cell))
        c.execute(
            'INSERT INTO statusConso (id, date, nbStation, nbStationDetecte, nbBike, nbEbike, nbFreeEDock, nbEDock) VALUES \
        (' + values[0] + ', ' + values[1] + ', ' + values[2] + ', ' +
            values[3] + ', ' + values[4] + ', ' + values[5] + ', ' +
            values[6] + ', ' + values[7] + ')')
    conn.commit()

    c = conn.cursor()
    requete = mysql.cursor()
    requete.execute(
        'SELECT s.id, s.code, s.idConso, s.state, s.nbBike, s.nbEBike, s.nbFreeEDock, s.nbEDock, s.nbBikeOverflow, s.nbEBikeOverflow, s.maxBikeOverflow \
    FROM status s \
    INNER JOIN `statusConso` c ON c.id = s.idConso \
    WHERE (c.`date` >= "' + dateDebutStr + '" AND c.`date` < "' + dateFinStr +
        '")')
    statuts = requete.fetchall()
    for statut in statuts:
        values = []
        for cell in statut:
            values.append(val(cell))
        c.execute(
            'INSERT INTO status (id, code, idConso, state, nbBike, nbEBike, nbFreeEDock, nbEDock, nbBikeOverflow, nbEBikeOverflow, maxBikeOverflow) VALUES \
        (' + ', '.join(values) + ')')
    conn.commit()

    #Et on ferme le fichier
    c.close()
Beispiel #11
0
def creerDumpConso(dateDebut):
    dateDebut = dateDebut.replace(microsecond=0, second=0, minute=0, hour=0)
    dateDebutStr = dateDebut.strftime("%Y-%m-%d %H:%M:%S")
    dateDebutNomFichier = dateDebut.strftime("%Y-%m-%d")
    dateFin = dateDebut + datetime.timedelta(days=1)
    dateFinStr = dateFin.strftime("%Y-%m-%d %H:%M:%S")

    nomFichier = '../dump/' + dateDebutNomFichier + '-conso.db'
    conn = sqlite3.connect(nomFichier)

    mysql = getMysqlConnection()

    #Creation des tables
    c = conn.cursor()
    creerStationTable(c)
    c.execute('''
    CREATE TABLE `resumeConso` (
  `id` int(11) NOT NULL,
  `date` datetime NOT NULL,
  `duree` int(4) NOT NULL,
  `nbStation` int(11) NOT NULL,
  `nbStationDetecte` int(11) DEFAULT NULL,
  `nbBikeMin` int(11) NOT NULL,
  `nbBikeMax` int(11) NOT NULL,
  `nbBikeMoyenne` int(11) NOT NULL,
  `nbEBikeMin` int(11) NOT NULL,
  `nbEBikeMax` int(11) NOT NULL,
  `nbEBikeMoyenne` int(11) NOT NULL,
  `nbFreeEDockMin` int(11) NOT NULL,
  `nbFreeEDockMax` int(11) NOT NULL,
  `nbFreeEDockMoyenne` int(11) NOT NULL,
  `nbEDock` int(11) NOT NULL
);
    ''')
    c.execute('''
    CREATE TABLE `resumeStatus` (
  `id` int(11) NOT NULL,
  `code` int(11) NOT NULL,
  `date` datetime NOT NULL,
  `duree` int(4) NOT NULL,
  `nbBikeMin` int(3) NOT NULL,
  `nbBikeMax` int(3) NOT NULL,
  `nbBikeMoyenne` decimal(5,2) NOT NULL,
  `nbBikePris` int(3) NOT NULL,
  `nbBikeRendu` int(3) NOT NULL,
  `nbEBikeMin` int(3) NOT NULL,
  `nbEBikeMax` int(3) NOT NULL,
  `nbEBikeMoyenne` decimal(5,2) NOT NULL,
  `nbEBikePris` int(3) NOT NULL,
  `nbEBikeRendu` int(3) NOT NULL,
  `nbFreeEDockMin` int(3) NOT NULL,
  `nbFreeEDockMax` int(3) NOT NULL,
  `nbFreeEDockMoyenne` decimal(5,2) NOT NULL,
  `nbEDock` int(3) NOT NULL,
  `nbBikeOverflowMin` int(3) NOT NULL,
  `nbBikeOverflowMax` int(3) NOT NULL,
  `nbBikeOverflowMoyenne` decimal(5,2) NOT NULL,
  `nbEBikeOverflowMin` int(3) NOT NULL,
  `nbEBikeOverflowMax` int(3) NOT NULL,
  `nbEBikeOverflowMoyenne` decimal(5,2) NOT NULL,
  `maxBikeOverflow` int(3) NOT NULL
);
    ''')
    conn.commit()

    #On va récupérer chaque donnée de chaque table
    creerStationData(conn, mysql)
    c = conn.cursor()
    requete = mysql.cursor()
    requete.execute(
        'SELECT id, date, duree, nbStation, nbStationDetecte, nbBikeMin, nbBikeMax, nbBikeMoyenne, nbEBikeMin, nbEBikeMax, nbEBikeMoyenne, nbFreeEDockMin, nbFreeEDockMax, nbFreeEDockMoyenne, nbEDock \
    FROM resumeConso \
    WHERE date >= "' + dateDebutStr + '" AND date < "' + dateFinStr + '"')
    stations = requete.fetchall()
    for station in stations:
        values = []
        for cell in station:
            values.append(val(cell))
        c.execute(
            'INSERT INTO resumeConso (id, date, duree, nbStation, nbStationDetecte, nbBikeMin, nbBikeMax, nbBikeMoyenne, nbEBikeMin, nbEBikeMax, nbEBikeMoyenne, nbFreeEDockMin, nbFreeEDockMax, nbFreeEDockMoyenne, nbEDock) VALUES \
        (' + ', '.join(values) + ')')
    conn.commit()

    c = conn.cursor()
    requete = mysql.cursor()
    requete.execute(
        'SELECT	id, code, date, duree, nbBikeMin, nbBikeMax, nbBikeMoyenne, nbBikePris, nbBikeRendu, nbEBikeMin, nbEBikeMax, nbEBikeMoyenne, nbEBikePris, nbEBikeRendu, nbFreeEDockMin, nbFreeEDockMax, nbFreeEDockMoyenne, nbEDock, nbBikeOverflowMin, nbBikeOverflowMax, nbBikeOverflowMoyenne, nbEBikeOverflowMin, nbEBikeOverflowMax, nbEBikeOverflowMoyenne, maxBikeOverflow \
    FROM resumeStatus \
    WHERE date >= "' + dateDebutStr + '" AND date < "' + dateFinStr + '"')
    stations = requete.fetchall()
    for station in stations:
        values = []
        for cell in station:
            values.append(val(cell))
        c.execute(
            'INSERT INTO resumeStatus (id, code, date, duree, nbBikeMin, nbBikeMax, nbBikeMoyenne, nbBikePris, nbBikeRendu, nbEBikeMin, nbEBikeMax, nbEBikeMoyenne, nbEBikePris, nbEBikeRendu, nbFreeEDockMin, nbFreeEDockMax, nbFreeEDockMoyenne, nbEDock, nbBikeOverflowMin, nbBikeOverflowMax, nbBikeOverflowMoyenne, nbEBikeOverflowMin, nbEBikeOverflowMax, nbEBikeOverflowMoyenne, maxBikeOverflow) VALUES \
        (' + ', '.join(values) + ')')
    conn.commit()

    #Et on ferme le fichier
    c.close()
Beispiel #12
0
def calculerResume(dateConsoDT, dureeConso):
    dateConso = dateConsoDT.strftime("%Y-%m-%d %H:%M:%S")
    minuteAvant = dateConsoDT - datetime.timedelta(minutes=1)
    dateConsoAvant = minuteAvant.strftime("%Y-%m-%d %H:%M:%S")
    finConso = dateConsoDT + datetime.timedelta(minutes=dureeConso)
    dateConsoFin = finConso.strftime("%Y-%m-%d %H:%M:%S")

    proprietes = [
        'nbBike', 'nbEBike', 'nbFreeEDock', 'nbEDock', 'nbBikeOverflow',
        'nbEBikeOverflow', 'maxBikeOverflow'
    ]
    mysql = getMysqlConnection()
    #On récupère la minute d'avant pour les bases de conso
    requete = mysql.cursor()
    requete.execute("SELECT s.code, s." + ', s.'.join(proprietes) + " \
    FROM status s \
    INNER JOIN `statusConso` c ON c.id = s.idConso \
    WHERE (c.`date` >= '" + dateConsoAvant + "' AND c.`date` < '" + dateConso +
                    "') \
    ORDER BY c.id DESC")
    statusConsoPrecedent = requete.fetchall()
    precedents = {}
    for row in statusConsoPrecedent:
        codeStation = int(row[0])
        for i, cle in enumerate(proprietes):
            if cle in ['nbBike', 'nbEBike']:
                valeurProp = int(row[i + 1])
                if not codeStation in precedents:
                    precedents[codeStation] = {}
                precedents[codeStation][cle] = valeurProp

    requete = mysql.cursor()
    requete.execute("SELECT s.code, s." + ', s.'.join(proprietes) + " \
    FROM status s \
    INNER JOIN `statusConso` c ON c.id = s.idConso \
    WHERE (c.`date` >= '" + dateConso + "' AND c.`date` < '" + dateConsoFin +
                    "') \
    ORDER BY c.id ASC")
    statusConso = requete.fetchall()
    bikeList = {}
    for row in statusConso:
        codeStation = int(row[0])
        for i, cle in enumerate(proprietes):
            valeurProp = int(row[i + 1])
            if cle in ['nbEDock', 'maxBikeOverflow']:
                bikeList[codeStation][cle] = valeurProp
            else:
                if codeStation not in bikeList:
                    bikeList[codeStation] = {
                        cle: {
                            'data': [],
                            'min': valeurProp,
                            'max': valeurProp
                        }
                    }
                    if cle in ['nbBike', 'nbEBike']:
                        bikeList[codeStation][cle]['pris'] = 0
                        bikeList[codeStation][cle]['remis'] = 0
                elif cle not in bikeList[codeStation]:
                    bikeList[codeStation][cle] = {
                        'data': [],
                        'min': valeurProp,
                        'max': valeurProp
                    }
                    if cle in ['nbBike', 'nbEBike']:
                        bikeList[codeStation][cle]['pris'] = 0
                        bikeList[codeStation][cle]['remis'] = 0
                else:
                    bikeList[codeStation][cle]['max'] = max(
                        bikeList[codeStation][cle]['max'], valeurProp)
                    bikeList[codeStation][cle]['min'] = min(
                        bikeList[codeStation][cle]['min'], valeurProp)

                if cle in ['nbBike', 'nbEBike']:
                    if codeStation not in precedents:
                        precedents[codeStation] = {}

                    if cle in precedents[codeStation]:
                        delta = valeurProp - precedents[codeStation][cle]
                        if delta > 0:
                            bikeList[codeStation][cle]['remis'] += delta
                        if delta < 0:
                            bikeList[codeStation][cle]['pris'] -= delta
                    precedents[codeStation][cle] = valeurProp

                bikeList[codeStation][cle]['data'].append(valeurProp)

    for codeStation in bikeList:
        for cle in bikeList[codeStation]:
            info = bikeList[codeStation][cle]
            if type(info) is dict:
                data = info['data']
                bikeList[codeStation][cle]['moyenne'] = sum(data) / max(
                    len(data), 1)

    for codeStation in bikeList:
        valeurs = bikeList[codeStation]
        requete = mysql.cursor()
        requete.execute(
            'INSERT INTO `resumeStatus` (`id`, `code`, `date`, `duree`, `nbBikeMin`, `nbBikeMax`, `nbBikeMoyenne`, `nbBikePris`, `nbBikeRendu`, `nbEBikeMin`, `nbEBikeMax`, `nbEBikeMoyenne`, `nbEBikePris`, `nbEBikeRendu`, `nbFreeEDockMin`, `nbFreeEDockMax`, `nbFreeEDockMoyenne`, `nbEDock`, `nbBikeOverflowMin`, `nbBikeOverflowMax`, `nbBikeOverflowMoyenne`, `nbEBikeOverflowMin`, `nbEBikeOverflowMax`, `nbEBikeOverflowMoyenne`, `maxBikeOverflow`) VALUES \
        (NULL, ' + str(codeStation) + ', "' + dateConso + '", ' +
            str(dureeConso) + ', ' + str(valeurs['nbBike']['min']) + ', ' +
            str(valeurs['nbBike']['max']) + ', ' +
            str(valeurs['nbBike']['moyenne']) + ', ' +
            str(valeurs['nbBike']['pris']) + ', ' +
            str(valeurs['nbBike']['remis']) + ', ' +
            str(valeurs['nbEBike']['min']) + ', ' +
            str(valeurs['nbEBike']['max']) + ', ' +
            str(valeurs['nbEBike']['moyenne']) + ', ' +
            str(valeurs['nbEBike']['pris']) + ', ' +
            str(valeurs['nbEBike']['remis']) + ', ' +
            str(valeurs['nbFreeEDock']['min']) + ', ' +
            str(valeurs['nbFreeEDock']['max']) + ', ' +
            str(valeurs['nbFreeEDock']['moyenne']) + ', ' +
            str(valeurs['nbEDock']) + ', ' +
            str(valeurs['nbBikeOverflow']['min']) + ', ' +
            str(valeurs['nbBikeOverflow']['max']) + ', ' +
            str(valeurs['nbBikeOverflow']['moyenne']) + ', ' +
            str(valeurs['nbEBikeOverflow']['min']) + ', ' +
            str(valeurs['nbEBikeOverflow']['max']) + ', ' +
            str(valeurs['nbEBikeOverflow']['moyenne']) + ', ' +
            str(valeurs['maxBikeOverflow']) + ')')
Beispiel #13
0
def calculerResumeConso(dateConsoDT, dureeConso):
    dateConso = dateConsoDT.strftime("%Y-%m-%d %H:%M:%S")
    minuteAvant = dateConsoDT - datetime.timedelta(minutes=1)
    dateConsoAvant = minuteAvant.strftime("%Y-%m-%d %H:%M:%S")
    finConso = dateConsoDT + datetime.timedelta(minutes=dureeConso)
    dateConsoFin = finConso.strftime("%Y-%m-%d %H:%M:%S")

    proprietes = [
        'nbStation', 'nbStationDetecte', 'nbBike', 'nbEBike', 'nbFreeEDock',
        'nbEDock'
    ]
    mysql = getMysqlConnection()

    requete = mysql.cursor()
    requete.execute("SELECT " + ', '.join(proprietes) + " \
    FROM statusConso \
    WHERE (`date` >= '" + dateConso + "' AND `date` < '" + dateConsoFin + "') \
    ORDER BY id ASC")
    statusConso = requete.fetchall()
    bikeList = {}
    for row in statusConso:
        for i, cle in enumerate(proprietes):
            if not row[i] is None:
                valeurProp = int(row[i])
                if cle in ['nbStation', 'nbStationDetecte', 'nbEDock']:
                    if not cle in bikeList:
                        bikeList[cle] = valeurProp
                    else:
                        bikeList[cle] = max(bikeList[cle], valeurProp)
                else:
                    if not cle in bikeList:
                        bikeList[cle] = {
                            'data': [],
                            'min': valeurProp,
                            'max': valeurProp
                        }
                    else:
                        bikeList[cle]['max'] = max(bikeList[cle]['max'],
                                                   valeurProp)
                        bikeList[cle]['min'] = min(bikeList[cle]['min'],
                                                   valeurProp)

                    bikeList[cle]['data'].append(valeurProp)

    for cle in bikeList:
        info = bikeList[cle]
        if type(info) is dict:
            data = info['data']
            bikeList[cle]['moyenne'] = sum(data) / max(len(data), 1)

    if len(bikeList) > 0:
        valeurs = bikeList
        requete = mysql.cursor()
        #nbEDock peut être null
        nbEDock = 0
        if nbEDock in valeurs:
            nbEDock = valeurs['nbEDock']
        requete.execute(
            'INSERT INTO `resumeConso` (`id`, `date`, `duree`, `nbStation`, nbStationDetecte, `nbBikeMin`, `nbBikeMax`, `nbBikeMoyenne`, `nbEBikeMin`, `nbEBikeMax`, `nbEBikeMoyenne`, `nbFreeEDockMin`, `nbFreeEDockMax`, `nbFreeEDockMoyenne`, `nbEDock`) VALUES \
        (NULL, "' + dateConso + '", ' + str(dureeConso) + ', ' +
            str(valeurs['nbStation']) + ', ' +
            str(valeurs['nbStationDetecte']) + ', ' +
            str(valeurs['nbBike']['min']) + ', ' +
            str(valeurs['nbBike']['max']) + ', ' +
            str(valeurs['nbBike']['moyenne']) + ', ' +
            str(valeurs['nbEBike']['min']) + ', ' +
            str(valeurs['nbEBike']['max']) + ', ' +
            str(valeurs['nbEBike']['moyenne']) + ', ' +
            str(valeurs['nbFreeEDock']['min']) + ', ' +
            str(valeurs['nbFreeEDock']['max']) + ', ' +
            str(valeurs['nbFreeEDock']['moyenne']) + ', ' + str(nbEDock) + ')')
Beispiel #14
0
def optimiserBDD():
    mysql = getMysqlConnection()
    requete = mysql.cursor()
    requete.execute(
        'OPTIMIZE TABLE resumeConso, resumeStatus, status, statusConso')
Beispiel #15
0
def getAllStation():
    mysql = getMysqlConnection()

    #On récupère la liste des stations déjà en base
    requete = mysql.cursor()
    requete.execute('SELECT code, dateOuverture FROM stations')
    rep = requete.fetchall()
    aujourdhui = datetime.today().date()
    stations = []
    stationsFutur = []
    for row in rep:
        stations.append(row[0])
        if (row[1] is None or row[1] > aujourdhui):
            stationsFutur.append(row[0])

    nbTotalBike = 0
    nbTotalEBike = 0
    nbTotalFreeEDock = 0
    nbTotalEDock = 0

    #On créer une conso pour avoir son id
    requete = mysql.cursor()
    requete.execute('INSERT INTO statusConso (date) VALUES (NOW())')
    idConso = requete.lastrowid
    strIdConso = str(idConso)
    nbStationsOuvertes = 0
    nbStationsOuvertesDetectees = 0
    now = datetime.now()

    urlVelib = getURLVelib()
    tmpFileName = 'detailsStations.json'
    urllib.request.urlretrieve(urlVelib, tmpFileName)
    data = json.load(open(tmpFileName))
    for etatStation in data:
        infoStation = etatStation['station']
        codeStation = int(infoStation['code'])
        if codeStation > 100:
            if codeStation not in stations:
                longitude = infoStation['gps']['longitude']
                latitude = infoStation['gps']['latitude']
                if infoStation['state'] != 'Operative':
                    strDateOuverture = 'NULL'
                else:
                    strDateOuverture = 'CURDATE()'
                requete = mysql.cursor()
                requete.execute(
                    'INSERT INTO stations (code, name, longitude, latitude, type, dateOuverture, adresse, insee) VALUES \
                (' + str(codeStation) + ', "' + str(infoStation['name']) +
                    '", ' + str(longitude) + ', ' + str(latitude) + ', "' +
                    str(infoStation['type']) + '", ' + strDateOuverture +
                    ', "' + getAdresse(latitude, longitude) + '", ' +
                    str(getInsee(codeStation)) + ')')
                stations.append(codeStation)

            nbBike = int(etatStation['nbBike'])
            nbEbike = int(etatStation['nbEbike'])
            nbFreeEDock = int(etatStation['nbFreeDock']) + int(
                etatStation['nbFreeEDock'])
            nbEDock = int(etatStation['nbDock']) + int(etatStation['nbEDock'])
            requete = mysql.cursor()
            requete.execute(
                'INSERT INTO status (code, idConso, state, nbBike, nbEBike, nbFreeEDock, nbEDock, nbBikeOverflow, nbEBikeOverflow, maxBikeOverflow) VALUES \
            (' + str(codeStation) + ', ' + strIdConso + ', "' +
                str(infoStation['state']) + '", ' + str(nbBike) + ', ' +
                str(nbEbike) + ', ' + str(nbFreeEDock) + ', ' + str(nbEDock) +
                ', ' + str(etatStation['nbBikeOverflow']) + ', ' +
                str(etatStation['nbEBikeOverflow']) + ', ' +
                str(etatStation['maxBikeOverflow']) + ')')

            #On met à jour la station au besoin
            if codeStation in stationsFutur and nbEDock > 0:
                requete = mysql.cursor()
                requete.execute('UPDATE stations \
                SET dateOuverture = CURDATE() WHERE code = ' +
                                str(codeStation))

            #On ajoute a la conso
            nbTotalBike += nbBike
            nbTotalEBike += nbEbike
            nbTotalFreeEDock += nbFreeEDock
            nbTotalEDock += nbEDock
            if infoStation['state'] == "Operative":
                nbStationsOuvertes += 1
            if nbEDock > 0 and nbBike + nbEbike + nbFreeEDock > 0:
                nbStationsOuvertesDetectees += 1
    os.remove(tmpFileName)

    #On insert tout dans le statut
    requete = mysql.cursor()
    requete.execute('UPDATE statusConso SET \
    nbStation = ' + str(nbStationsOuvertes) + ', \
    nbStationDetecte = ' + str(nbStationsOuvertesDetectees) + ' ,\
    nbBike = ' + str(nbTotalBike) + ', \
    nbEbike = ' + str(nbTotalEBike) + ', \
    nbFreeEDock = ' + str(nbTotalFreeEDock) + ', \
    nbEDock = ' + str(nbTotalEDock) + ' \
    WHERE id = ' + strIdConso)

    mysql.close()