Esempio n. 1
0
def createTable(nomenclature,
                dicIndicator,
                fileLog,
                minStartYear,
                dicNace,
                indicatorSpi,
                compteEurostat,
                tableName,
                fileExt=''):
    lstTotal = spiLibTotal.defSelectLstTotal(nomenclature, compteEurostat,
                                             fileExt)
    #dicIndicator 			=	spiLib.addValueMissing(dicIndicator, dicNace, minStartYear)
    dicIndicator = spiLib.addValueMissing(dicIndicator, lstTotal, minStartYear)
    startYear = minStartYear
    dicTotalNace = {}
    countrySort = dicIndicator.keys()
    countrySort.sort()
    for country in countrySort:
        dicTotalNace[country] = {}
        naceSort = dicIndicator[country].keys()
        naceSort.sort()
        for nace in naceSort:
            vector = dicIndicator[country][nace]
            nbrVector = len(vector)
            #on renvoi le vector avec des vides rempli et l'indice de depart pour le total
            #qui correspond au nombre de vides rempli
            vectorElement = ''
            vectorTotal = [':'] * nbrVector
            for i in range(0, nbrVector):
                valeurVector = vector[i].split(';')
                try:
                    elementVector = float(valeurVector[0])
                except:
                    elementVector = ':'
                try:
                    flag = ';' + valeurVector[1]
                except:
                    flag = ''
                vectorElement = vectorElement + str(elementVector) + flag + ','
                vectorTotal[i] = elementVector
            #calcul des totaux pour l'indicateur
            if lstTotal.count(nace):
                dicTotalNace = spiLibTotal.defTotalNace(
                    dicTotalNace, indicatorSpi, nace, nomenclature, country,
                    compteEurostat, vectorTotal, lstTotal, '', fileExt)
            #selection des code nace pour l'indicateur avant ecriture dans la base
            if dicNace.has_key(nace):
                DBAccess.majDBtable(tableName, indicatorSpi, country,
                                    str(startYear), nace, nomenclature,
                                    vectorElement[:-1])
                #if	indicatorSpi == 'emp': #on cree aussi l'indicateur pour la table growth
                #DBAccess.majDBtable('growth','emp',country,str(startYear),nace,nomenclature,vectorElement[:-1])
    #write total nace, il n'est pas necessaire de selection les codes naces, ce sont uniquement les totaux
    defDicTotalNace(dicTotalNace, indicatorSpi, startYear, nomenclature,
                    tableName)
    #on renvoie le dictionnaire des TOTAUX pour traiter les cas quand un indicateur
    #total derive d'un autre indicateur comme vabussh qui vient de vabus
    return dicTotalNace
Esempio n. 2
0
def createTableSize(nomenclature,
                    dicIndicator,
                    fileLog,
                    minStartYear,
                    dicNace,
                    indicatorSpi,
                    compteEurostat,
                    tableName,
                    fileExt=''):
    #liste avec les codes naces a selectionner pour les totaux a calculer
    #en fonction du nace(1 ou 2) et du code national nama ou sbs
    lstTotal = spiLibTotal.defSelectLstTotal(nomenclature, compteEurostat,
                                             fileExt)
    dicIndicator = spiLib.addValueMissingSize(dicIndicator, lstTotal,
                                              minStartYear)
    startYear = minStartYear
    dicAgregatNace = {}
    countrySort = dicIndicator.keys()
    countrySort.sort()
    keyTotal = indicatorSpi + '_TOTAL'
    for country in countrySort:
        dicAgregatNace[country] = {}
        #totalCountryExist		=	1
        naceSort = dicIndicator[country].keys()
        naceSort.sort()
        for nace in naceSort:
            sizeSort = dicIndicator[country][nace].keys()
            sizeSort.sort()
            try:
                vectorTotalNace = dicIndicator[country][nace][
                    keyTotal]  #cle du total par pays
            except:
                fileLog.write('no total for country : ' + country + ' nace ' +
                              nace + ' indicator ' + indicatorSpi + '\n')
                continue
            for size in sizeSort:  #indicateur + size
                vector = dicIndicator[country][nace][size]
                vectorOutput, vectorAgregat = defCalculAllVectors(
                    vector, vectorTotalNace)
                #selection des code nace pour l'indicateur avant ecriture dans la base
                if dicNace.has_key(
                        nace):  #on ne traite pas les totaux calculer
                    DBAccess.majDBtable(tableName, size, country,
                                        str(startYear), nace, nomenclature,
                                        vectorOutput)
                #traitement des agregats on cree le dic par country et keyTotal(key des agregat)
                if lstTotal.count(nace):
                    sizeTotal = ':' + size  #la notion de size doit se trouver dans le champ
                    dicAgregatNace = spiLibTotal.defTotalNace(
                        dicAgregatNace, indicatorSpi, nace, nomenclature,
                        country, compteEurostat, vectorAgregat, lstTotal,
                        sizeTotal, fileExt)
    defTableTotalSize(dicAgregatNace, indicatorSpi, startYear, nomenclature,
                      tableName)
Esempio n. 3
0
def createTableGrowth(nomenclature,
                      dicIndicator,
                      fileLog,
                      minStartYear,
                      dicNace,
                      indicatorSpi,
                      compteEurostat,
                      tableName,
                      G_Growth,
                      fileExt=''):
    #24/02/2015 on exclu du total tous les indicateurs vak * de GROWTH
    lstTotal = ()
    if indicatorSpi[0:2] != 'va':
        lstTotal = spiLibTotal.defSelectLstTotal(nomenclature, compteEurostat,
                                                 fileExt)
    #on complete les naces manquants avec les valeurs ':'
    dicIndicator = spiLib.addValueMissing(dicIndicator, lstTotal, minStartYear)
    startYear = minStartYear
    growthTime = G_Growth
    dicTotalNace = {}
    vectorInit = ''
    for i in range(0, growthTime):
        vectorInit = ';,' + vectorInit
    countrySort = dicIndicator.keys()
    countrySort.sort()
    for country in countrySort:
        dicTotalNace[country] = {}
        naceSort = dicIndicator[country].keys()
        naceSort.sort()
        for nace in naceSort:
            vector = dicIndicator[country][nace]
            nbrVector = len(vector)
            #on renvoi le vector avec des vides rempli et l'indice de depart pour le total
            #qui correspond au nombre de vides rempli
            vectorTotal = [0.0] * nbrVector  #pour le calcul des agregats
            vectorElement = vectorInit
            for i in range(growthTime, nbrVector):
                valeurVectorLst = vector[i].split(';')
                try:
                    valeurVector = float(valeurVectorLst[0])
                except:
                    valeurVector = ':'
                valeurAgregat = valeurVector  #on conserve la valeur pour le calcul de l'agregat
                if growthTime != 0:
                    valeurVectorOldLst = vector[i - growthTime].split(';')
                    try:
                        valeurVectorOld = float(valeurVectorOldLst[0])
                        valeurVector = defGrowthTime(growthTime, valeurVector,
                                                     valeurVectorOld)
                    except:
                        valeurVector = ':'
                #element pour le calcul des agregats
                #on transmet aussi celui pour le temps (-1 ou -5) dans elementTotalTime
                try:
                    flag = ';' + valeurVectorLst[1]
                except:
                    flag = ''
                vectorElement = vectorElement + str(valeurVector) + flag + ','
                vectorTotal[
                    i] = valeurAgregat  #pour calcul agregat venant du vecteur

            #calcul des totaux pour l'indicateur
            if lstTotal.count(nace):
                dicTotalNace = spiLibTotal.defTotalNace(
                    dicTotalNace, indicatorSpi, nace, nomenclature, country,
                    compteEurostat, vectorTotal, lstTotal, '', fileExt)
            #selection des code nace pour l'indicateur avant ecriture dans la base
            if dicNace.has_key(nace):
                DBAccess.majDBtable(tableName, indicatorSpi, country,
                                    str(startYear), nace, nomenclature,
                                    vectorElement[:-1])
    #write total nace, il n'est pas necessaire de selection les codes naces, ce sont uniquement les totaux
    #27/02/015 PAS de calcul d'agregat pour les volumes va*
    if indicatorSpi[0:2] != 'va':
        defDicTotalNaceGrowth(dicTotalNace, indicatorSpi, startYear,
                              nomenclature, tableName, growthTime)