판다와의 기본적인 랭글링

토마스 보젠, 2020년 9월

이 연습은 8장을 보완합니다.

연습

1.

이 연습 세트에서는 Kasia Kulma가 편집하고 R의 Tidy Tuesday 프로젝트에 기여한 마지막 연습 세트에서 살펴본 다양한 음식의 소비 및 탄소 발자국 데이터 세트를 다시 살펴보겠습니다.

’pd’라는 별칭을 사용하여 팬더를 가져오는 것부터 시작해 보겠습니다.

# Your answer here.

2.

참고로 데이터세트에는 다음과 같은 열이 있습니다.

설명
국가 국가명
음식_카테고리 식품 카테고리
소비 소비량(kg/인/년)
co2_emission CO2 배출량(Kg CO2/인/년)

다음 URL에서 ’df’라는 데이터프레임으로 데이터세트를 가져옵니다: https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-02-18/food_consumption.csv

# Your answer here.

3.

모든 식품 카테고리를 통틀어 연간 1인당 식품을 가장 많이 소비하는 국가는 어디입니까?

# Your answer here.

4.

위 국가의 총 소비량에 가장 큰 기여를 하는 식품 카테고리는 무엇입니까?

# Your answer here.

5.

1인당 연간 kg C02를 가장 많이 생산하는 국가는 어디입니까?

# Your answer here.

6.

위 국가의 C02 배출량에 가장 큰 영향을 미치는 식품 카테고리는 무엇입니까?

# Your answer here.

7.

모든 국가에서 연간 1인당 C02를 가장 많이 생산하는 식품 카테고리는 무엇입니까?

# Your answer here.

8.

모든 국가에서 1인당 연간 가장 많이 소비되는 식품 카테고리는 무엇입니까? 모든 국가에서 가장 적게 소비되는 식품 카테고리는 무엇입니까?

# Your answer here.

9.

‘food_category’ 열을 기준으로 피벗하여 데이터세트를 넓게 만듭니다. 여러 수준의 열이 있는 “다중 인덱스” 데이터 프레임이 생성됩니다.

# Your answer here.

10.

이제 데이터 세트가 광범위해졌으므로 위의 질문 5와 동일한 질문인 “연간 1인당 kg C02를 가장 많이 생산하는 국가는 어디입니까?”에 답해 보시기 바랍니다. 특히, 동일한 데이터 분석 질문에 답하는 방식은 데이터 형식(가로 vs 세로)에 따라 달라진다는 점을 알아두셨으면 합니다. 어떤 옵션을 선호하는지에 대한 자신만의 의견을 형성할 수 있습니다. 저는 긴 데이터를 선호합니다(많은 시각화 라이브러리가 긴 데이터에서도 가장 잘 작동한다는 점을 기억하세요. 이에 대한 자세한 내용은 DSCI 531에서 확인하세요). 힌트: 이전에 본 것과 동일한 구문 df['co2_emmission']을 사용하여 다중 인덱스 열의 외부 레이어를 인덱싱할 수 있습니다. 내부 인덱스에 액세스하려면 튜플 df[("consumption", "Beef")]를 사용해야 합니다. 9장에서 다중 인덱스(“계층적 인덱스”라고도 함)에 대해 자세히 알아보세요.

# Your answer here.



솔루션

1.

이 연습 세트에서는 Kasia Kulma가 편집하고 R의 Tidy Tuesday 프로젝트에 기여한 마지막 연습 세트에서 살펴본 다양한 음식의 소비 및 탄소 발자국 데이터 세트를 다시 살펴보겠습니다.

’pd’라는 별칭을 사용하여 팬더를 가져오는 것부터 시작해 보겠습니다.

import pandas as pd

2.

참고로 데이터세트에는 다음과 같은 열이 있습니다.

설명
국가 국가명
음식_카테고리 식품 카테고리
소비 소비량(kg/인/년)
co2_emission CO2 배출량(Kg CO2/인/년)

다음 URL에서 ’df’라는 데이터프레임으로 데이터세트를 가져옵니다: https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-02-18/food_consumption.csv

url = "https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-02-18/food_consumption.csv"
df = pd.read_csv(url)
df
country food_category consumption co2_emmission
0 Argentina Pork 10.51 37.20
1 Argentina Poultry 38.66 41.53
2 Argentina Beef 55.48 1712.00
3 Argentina Lamb & Goat 1.56 54.63
4 Argentina Fish 4.36 6.96
... ... ... ... ...
1425 Bangladesh Milk - inc. cheese 21.91 31.21
1426 Bangladesh Wheat and Wheat Products 17.47 3.33
1427 Bangladesh Rice 171.73 219.76
1428 Bangladesh Soybeans 0.61 0.27
1429 Bangladesh Nuts inc. Peanut Butter 0.72 1.27

1430 rows × 4 columns

3.

모든 식품 카테고리를 통틀어 연간 1인당 식품을 가장 많이 소비하는 국가는 어디입니까?

df.groupby("country").sum().sort_values(by="consumption").tail(1)
consumption co2_emmission
country
Finland 639.79 1464.63

4.

위 국가의 총 소비량에 가장 큰 기여를 하는 식품 카테고리는 무엇입니까?

df.query("country == 'Finland'").sort_values(by="consumption").tail(1)
country food_category consumption co2_emmission
149 Finland Milk - inc. cheese 430.76 613.57

5.

1인당 연간 kg C02를 가장 많이 생산하는 국가는 어디입니까?

df.groupby("country").sum().sort_values(by="co2_emmission").tail(1)
consumption co2_emmission
country
Argentina 429.41 2172.4

6.

위 국가의 C02 배출량에 가장 큰 영향을 미치는 식품 카테고리는 무엇입니까?

df.query("country == 'Argentina'").sort_values(by="co2_emmission").tail(1)
country food_category consumption co2_emmission
2 Argentina Beef 55.48 1712.0

7.

모든 국가에서 연간 1인당 C02를 가장 많이 생산하는 식품 카테고리는 무엇입니까?

df.groupby("food_category").sum().sort_values(by="co2_emmission", ascending=False)
consumption co2_emmission
food_category
Beef 1576.04 48633.26
Milk - inc. cheese 16350.71 23290.00
Lamb & Goat 338.02 11837.38
Pork 2096.08 7419.11
Rice 3818.77 4886.91
Fish 2247.32 3588.22
Poultry 2758.50 2963.16
Wheat and Wheat Products 9301.44 1773.78
Eggs 1061.29 974.95
Nuts inc. Peanut Butter 537.84 951.99
Soybeans 111.87 50.35

8.

모든 국가에서 1인당 연간 가장 많이 소비되는 식품 카테고리는 무엇입니까? 모든 국가에서 가장 적게 소비되는 식품 카테고리는 무엇입니까?

print("Most consumption:")
print(
    df.groupby("food_category")
    .sum()
    .sort_values(by="consumption", ascending=False)
    .head(1)
)
print("")
print("Least consumption:")
print(
    df.groupby("food_category")
    .sum()
    .sort_values(by="consumption", ascending=False)
    .tail(1)
)
Most consumption:
                    consumption  co2_emmission
food_category                                 
Milk - inc. cheese     16350.71        23290.0

Least consumption:
               consumption  co2_emmission
food_category                            
Soybeans            111.87          50.35

9.

‘food_category’ 열을 기준으로 피벗하여 데이터세트를 넓게 만듭니다. 여러 수준의 열이 있는 “다중 인덱스” 데이터 프레임이 생성됩니다.

df = df.pivot(index="country", columns="food_category")
df
consumption ... co2_emmission
food_category Beef Eggs Fish Lamb & Goat Milk - inc. cheese Nuts inc. Peanut Butter Pork Poultry Rice Soybeans ... Eggs Fish Lamb & Goat Milk - inc. cheese Nuts inc. Peanut Butter Pork Poultry Rice Soybeans Wheat and Wheat Products
country
Albania 22.50 12.45 3.85 15.32 303.72 4.36 10.88 13.23 7.78 0.00 ... 11.44 6.15 536.50 432.62 7.72 38.51 14.21 9.96 0.00 26.44
Algeria 5.60 8.06 3.74 7.69 141.53 2.08 0.00 7.42 2.97 0.00 ... 7.40 5.97 269.30 201.60 3.68 0.00 7.97 3.80 0.00 35.36
Angola 8.42 1.11 15.24 1.08 12.30 2.26 8.89 17.33 8.12 0.52 ... 1.02 24.33 37.82 17.52 4.00 31.47 18.62 10.39 0.23 7.77
Argentina 55.48 11.39 4.36 1.56 195.08 0.49 10.51 38.66 8.77 0.00 ... 10.46 6.96 54.63 277.87 0.87 37.20 41.53 11.22 0.00 19.66
Armenia 19.66 11.69 4.36 3.02 209.03 2.55 9.67 13.35 3.18 0.00 ... 10.74 6.96 105.76 297.74 4.51 34.23 14.34 4.07 0.00 24.91
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
Uruguay 29.10 13.14 6.53 8.23 210.54 0.95 16.84 27.45 11.50 0.01 ... 12.07 10.43 288.21 299.89 1.68 59.61 29.49 14.72 0.00 20.85
Venezuela 25.89 5.63 8.34 0.32 117.79 0.35 7.23 39.28 23.39 0.00 ... 5.17 13.32 11.21 167.78 0.62 25.59 42.19 29.93 0.00 9.38
Vietnam 7.44 3.84 26.52 0.14 16.36 6.28 35.00 12.36 144.56 5.75 ... 3.53 42.34 4.90 23.30 11.12 123.88 13.28 184.99 2.59 2.00
Zambia 4.76 3.32 6.20 0.68 9.71 5.04 1.66 3.29 3.05 7.30 ... 3.05 9.90 23.81 13.83 8.92 5.88 3.53 3.90 3.29 2.31
Zimbabwe 7.37 1.75 2.80 0.96 31.90 2.22 2.65 4.97 10.09 0.54 ... 1.61 4.47 33.62 45.44 3.93 9.38 5.34 12.91 0.24 5.97

130 rows × 22 columns

10.

이제 데이터 세트가 광범위해졌으므로 위의 질문 5와 동일한 질문인 “연간 1인당 kg C02를 가장 많이 생산하는 국가는 어디입니까?”에 답해 보시기 바랍니다. 특히, 동일한 데이터 분석 질문에 답하는 방식은 데이터 형식(가로 vs 세로)에 따라 달라진다는 점을 알아두셨으면 합니다. 어떤 옵션을 선호하는지에 대한 자신만의 의견을 형성할 수 있습니다. 저는 긴 데이터를 선호합니다(많은 시각화 라이브러리가 긴 데이터에서도 가장 잘 작동한다는 점을 기억하세요. 이에 대한 자세한 내용은 DSCI 531에서 확인하세요). 힌트: 이전에 본 것과 동일한 구문 df['co2_emmission']을 사용하여 다중 인덱스 열의 외부 레이어를 인덱싱할 수 있습니다. 내부 인덱스에 액세스하려면 튜플 df[("consumption", "Beef")]를 사용해야 합니다. 9장에서 다중 인덱스(“계층적 인덱스”라고도 함)에 대해 자세히 알아보세요.

df["consumption"].sum(axis=1).sort_values().tail(1)
country
Finland    639.79
dtype: float64