Я хотел бы научиться анализировать данные, но у меня возникают проблемы с условными операторами и извлечением данных для построения графика с помощью matplotlib. - PullRequest
0 голосов
/ 16 июня 2020

По сути, я новичок в анализе данных, и у меня есть набор данных, который я хотел бы проанализировать и получить несколько графиков, чтобы проверить гипотезы и узнать больше о данных, которые я получил об Олимпийских играх.

Теперь, Я хотел бы узнать, в каком возрасте больше всего золотых, серебряных и бронзовых медалей, и то же самое касается роста.

Это код, который я создал, я думаю, что он работает (я не уверен), но На обработку уходит около 20 минут, а формат странный, из-за чего мне сложно построить график. Я хотел бы знать, как я могу значительно сократить время обработки и как я смогу его изобразить ->

#calculating number of medals each person has
j=0
i=0
height_gold=[0]*230
height_silver=[0]*230
height_bronze=[0]*230

while(i<271116):
    while(j<230):
        if df.iloc[i,4]==j:
            if df.iloc[i,14]=='Gold':
                height_gold[j]=height_gold[j]+1
            if df.iloc[i,14]=='Silver':
                height_silver[j]=height_silver[j]+1
            if df.iloc[i,14]=='Bronze':
                height_bronze[j]=height_bronze[j]+1
        j=j+1
        #print('new_age')
    i=i+1
    j=0
    #print('new_row')

print(height_gold)
print(height_silver)
print(height_bronze)

Кроме того, я очень хотел бы знать, как я смогу найти какой вид спорта получает больше всего медалей, какой Олимпийский c год дал больше всего медалей, и какая страна получает больше всего медалей.

Теперь, когда я здесь, я также хотел бы спросить, что еще я мог бы узнайте из этого csv.file здесь ->

файл / данные CSV, которые я использую для получения данных для построения графика

Ответы [ 2 ]

2 голосов
/ 16 июня 2020

Проблема в том, что вы находите j неэффективным способом (проверяя все 230 возможных вариантов). Вы можете просто установить j на df.iloc[i, 4]. Вы также построили свой собственный for l oop, который я здесь также исправил.

height_gold = [0] * 230
height_silver = [0] * 230
height_bronze = [0] * 230

for i in range(271116):
    j = df.iloc[i, 4]
    if df.iloc[i, 14] == 'Gold':
        height_gold[j] += 1
    elif df.iloc[i, 14] == 'Silver':
        height_silver[j] += 1
    elif df.iloc[i, 14] == 'Bronze':
        height_bronze[j] += 1

print(height_gold)
print(height_silver)
print(height_bronze)

Если у вас нецелые числа, это должно решить эту проблему: 1009 *

1 голос
/ 16 июня 2020

У меня есть некоторые улучшения, которые могут значительно ускорить процесс:

  • Ваш внутренний l oop (тот, который считается до 230) не нужен. Вы можете использовать значение из df.iloc[i,4] в качестве индекса в массивах.
  • Вы также можете использовать цвет медали в качестве индекса в списке количества медалей.

Таким образом вы получите следующий код:

medals={'Gold': [0]*230,
        'Silver': [0]*230,
        'Bronze': [0]*230}

for i in range(271116):
    country = int(df.iloc[i,4])
    medals[df.iloc[i,14]][country] += 1

print(medals['Gold'])
print(medals['Silver'])
print(medals['Bronze'])
...