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
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)
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)