我想学习如何进行数据分析,但我在使用matplotlib进行条件语句和提取数据绘图时遇到了困难。

问题描述 投票:0回答:1

基本上,我是数据分析的新手,我得到了一个数据集,我想分析并得到一些图表来测试假设,并了解更多关于奥运会的数据。

现在,我想找出哪个年龄段获得的金牌、银牌和铜牌最多,身高也是如此。

这是我创建的代码,我认为它的工作原理(我不确定),但需要像20分钟处理和格式是奇怪的,这给我的麻烦,把在一个图形。我想知道怎样才能把处理时间大大缩短,怎样才能把它做成图-&gt。

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

另外,我也非常想知道如何能够找出哪项运动获得的奖牌最多,哪个奥运年获得的奖牌最多,哪个国家获得的奖牌最多。

现在我在这里,我还想问一下我还能从这个csv.文件中找到什么-&gt。

的CSV文件数据,我是用它来获取数据绘制图表的。

python csv if-statement data-analysis python-idle
1个回答
2
投票

问题是,你发现 j 以一种低效率的方式(检查所有230种可能性)。您可以直接设置 jdf.iloc[i, 4]. 你还建立了自己的 for 循环,我在这里也修正了这个问题。

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)

如果你有非整数,这个应该可以处理。

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

for i in range(271116):
    j = df.iloc[i, 4]
    try:
        j = int(round(j))
    except ValueError:
        continue
    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)

1
投票

我做了一些改进,可以大大加快进度。

  • 你的内部循环(数到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'])
© www.soinside.com 2019 - 2024. All rights reserved.