Я делаю программу, которая просматривает файл с данными для града в США. Я успешно создал класс с объектами (все состояния) и имею сокращенное состояние штата, количество общих отчетов града и список града для каждого состояния/объекта.Как рассчитать проценты элементов в списке, отвечающем определенным критериям?
Мне нужно составить таблицу, показывающую статистику размеров града для каждого состояния. Я создал метод, который усредняет размеры града для каждого состояния, но я не могу понять, как сделать метод, который вычисляет проценты размеров града, которые попадают в определенный диапазон размеров.
Таблица имеет 5 категорий, для размеров града: < 1.25, 1.25-1.99, 2.0-2.49, 2.5-2.99,> 3.0.
Я уверен, что мне нужно сделать скользящую сумму для каждой категории, но я просто не могу понять, как это сделать с таким количеством категорий. Если бы я мог сделать скользящую сумму, это была бы просто сумма/общее количество отчетов для этого состояния.
Вот код, который я до сих пор:
class stateHail:
def __init__(self, state):
self.stateAbbr = state
self.hailReports = 0
self.hailSize = []
def avgSize(self):
self.avg = (sum(self.hailSize))/self.hailReports
#def percents(self):
#???
#Creates objects needed for class
states = []
for x in ["AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", "SD", "TN", "TX", "UT", "VA", "WA", "WV", "WI", "WY", "PR", "VA", "VI"]:
stateObject = stateHail(x)
states.append(stateObject)
#Opens file and assigns state abbreviation, hail report number, and list of hail sizes to each object/state
fileHail = open("90-99_hail.csv", "r")
try:
for line in fileHail:
splitLine=line.split(",")
abbrFile=splitLine[7]
for x in states:
if (abbrFile==x.stateAbbr):
x.hailSize.append(float(splitLine[10]))
x.hailReports = x.hailReports + 1
except:
fileHail.close()
#Calculates average for each state
for x in states:
if (x.hailReports>100):
x.avgSize()
print x.avg
Это получает первые пять размеров града, делит их на общее количество отчетов града и умножает эти цифры на 100. Для размеров града '[1,2,2,3,1,4,2,3, 1] ', что приведет к списку' [20, 40, 40, 60, 20] ', который не соответствует чему-либо значимому. – TigerhawkT3
@ TigerhawkT3, danielle может быть в состоянии прояснить, но я предположил self.hailSize [i], чтобы содержать общее количество сообщенных град определенного размера. i.e self.hailSize [0] может содержать общий hailReports с размером '<1,25'. – sandy
Я думаю, что 'self.hailSize' содержит список каждого записанного града. Если он трижды приветствуется, причем первый размер равен 0,7, следующий размер 1.2 и последний 1,1, 'self.hailSize' будет' [0,7,1,2,1,1] '. 'self.avgSize()' полагается на эту настройку, так или иначе. – TigerhawkT3