2 votes

Trouver le pourcentage de changement diminué au cours des années en numpy

J'ai une question qui a 2 tableaux numpy séparés respectivement.

Year: np.array([2010,  2011,  2012,  2013,  2014, 2015,  2016, 2017, 2018, 2019])
Data: np.array([29057, 30979, 31746, 32964, 31738, 31010,31158,28736,26821,28260])

Existe-t-il un moyen d'afficher les années où les données ont diminué d'au moins 5 % par rapport à l'année précédente ?

Sortie Eg : Année où les données ont diminué d'au moins 5 % : (2017, 7.77%)

1voto

Cela fonctionnera et montrera le pourcentage de changement sans le % signe.

import numpy as np

Year = np.array([2010,  2011,  2012,  2013,  2014, 2015,  2016, 2017, 2018, 2019])
Data = np.array([29057, 30979, 31746, 32964, 31738, 31010,31158,28736,26821,28260])

percent_diff = np.diff(Data) / Data[1:]
mask = percent_diff <= -.05

print(tuple(zip(Years[1:][mask], np.multiply(percent_diff[mask], 100).round(2))))

Sortie :

((2017, -8.43), (2018, -7.14))

0voto

Ach113 Points 583

Vous pouvez le faire :

# filter the data elements, this returns an array where some elements are None
l = [year[i] if (data[i]-data[i-1])/data[i-1] < 0.05 else None for i in range(1, len(data))]
# filter out None from the list
l = list(filter(lambda x: x is not None, l))

0voto

OualidSai Points 97

Vous pouvez utiliser ce code :

import numpy as np

Year = np.array([2010,  2011,  2012,  2013,  2014, 2015,  2016, 2017, 2018, 2019])
Data = np.array([29057, 30979, 31746, 32964, 31738, 31010,31158,28736,26821,28260])

d_years = []
for d1, d2 in enumerate(Data):
    if d1 == 0:
        prev = d2
    else:
        percentage = 100 - ((d2 / prev) * 100)
        prev = d2
        if percentage > 5:
            d_years.append(Year[d1])
            print('decresed by {p:0.2f}% in {y}'.format(p=percentage, y = Year[d1]))

print(d_years)

0voto

mozway Points 233

Pour une solution purement numpy, vous pouvez utiliser :

pct_change = np.diff(Data)/Data[:-1]
# array([ 0.06614585,  0.02475871,  0.03836704, -0.03719209, -0.0229378 ,
#         0.00477265, -0.07773285, -0.06664115,  0.05365199])

mask = pct_change<-0.05
# array([False, False, False, False, False, False,  True,  True, False])

np.vstack([Year[1:], Data[1:]])[:, mask]
# array([[ 2017,  2018],
#        [28736, 26821]])

pct_change[mask]
# array([-0.07773285, -0.06664115])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X