파이썬/NIPA 데이터분석 강의

NIPA 데이터분석 첫번째 활용선택 : 04 Matplotlib 2 - with pandas

mcdn 2020. 9. 30. 14:38
반응형

1. 대통령 키 데이터에 대해 그래프를 그려보자 

plot첫번째 인자인 x에 대해서는 order 몇 대대통령인지 y에 대해선 키를 설정. 

label= height도 세번째 인자로 추가. 

set_xlabel set_ylabel

핵심은 시리즈 데이터값을 x, y로 넣을 수 있다는 것 

 

2. 다음은 포켓몬스터 데이터다. 타입, 이름 등등 

3. 불과 물 포켓몬의 공격과 물 의 scatter그래프를 그려 분포를 확인해보고자 한다. 

fire = df[ () | () ] masking연산으로 타입이 맞는 애들을 골라온다. 타입 하나가 불이기만 하면 불로본다 

물도 마찬가지. 

scatter에선 x로 attack를 y로는 defense를 설정한다. fire과 water각각으로 그려야 한다. 

from elice_utils import EliceUtils
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

elice_utils = EliceUtils()

df = pd.read_csv("./data/pokemon.csv")

fire = df[
    (df['Type 1']=='Fire') | ((df['Type 2'])=="Fire")
]

water = df[
    (df['Type 1']=='Water') | ((df['Type 2'])=="Water")
]

fig, ax = plt.subplots()
ax.scatter(fire['Attack'], fire['Defense'],
    color='R', label='Fire', marker="*", s=50)
ax.scatter(water['Attack'], water['Defense'],
    color='B', label="Water", s=25)
ax.set_xlabel("Attack")
ax.set_ylabel("Defense")
ax.legend(loc="upper right")

fig.savefig("plot.png")
elice_utils.send_image("plot.png")

[실습] 토끼와 거북이 경주 결과

“나랑 달리기 시합하지 않을래?”

토끼와 거북이가 달리기 시합을 하기로 했어요.
공정한 경쟁을 위해서 1초마다 토끼와 거북이의 위치를 다른 동물이 기록하기로 하고 경주를 했네요.

목표

   시간   토끼  거북이
0    0    0    0
1    1    9    3
2    2   20    8
3    3   31   12
4    4   42   16
5    5   57   23
6    6   60   30
7    7   60   33
8    8   60   41
9    9   60   46
10  10   60   57
11  11   60   66
12  12   60   71
13  13   60   79
14  14   60   80
15  15   60   89
16  16   63   93
17  17   71   95
18  18   82  100
19  19   94  100
20  20  100  100
from elice_utils import EliceUtils
from matplotlib import pyplot as plt
import pandas as pd

plt.rcParams["font.family"] = 'NanumBarunGothic'

elice_utils = EliceUtils()

def main():
    # 아래 경로에서 csv파일을 읽어서 시각화 해보세요
    # 경로: "./data/the_hare_and_the_tortoise.csv"
    df = pd.read_csv("./data/the_hare_and_the_tortoise.csv")
    fig, ax = plt.subplots()
    ax.plot(df["시간"], df["토끼"], label="토끼")
    ax.plot(df["시간"], df["거북이"], label="거북이")
    ax.legend()
    #print(df)
    
    # 그래프를 확인하려면 아래 두 줄의 주석을 해제한 후 코드를 실행하세요.
    fig.savefig("plot.png")
    elice_utils.send_image("plot.png")


if __name__ == "__main__":
    main()

!성공!

강의에선 인덱스를 애초에 시간으로 잡아버림 

그렇게 되면 x값을 각자 지정해줄 필요가 없게 된다 

 

[실습] 월드컵 우승국가 시각화

“월드컵 우승국들의 현황은 어떻게 될까?”

역대 월드컵 우승국가들에 대한 정보가 담긴 csv파일이 있습니다. 앞서 배운 그래프들을 활용해서 월드컵 우승 빈도가 가장 높은 국가가 어디인지 시각화를 통해서 알아봅시다.

월드컵 우승국 데이터가 csv파일로 저장되어 있어요. 우리는 csv 파일을 읽어서 월드컵 우승국들의 빈도를 그래프로 시각화해보고자합니다!

월드컵 국가 별 우승 횟수를 딕셔너리로 저장하여 해당 데이터를 출력하고, 딕셔너리 데이터를 입력하여 그래프를 출력해야 합니다.

코드의 빈 칸 ??? 부분을 채워 프로그램을 완성해보세요!

출력 예시{'Uruguay': 2, 'Italy': 4, 'Germany FR': 3, 'Brazil': 5, 'England': 1, 'Argentina': 2, 'France': 1, 'Spain': 1, 'Germany': 1}

목표

 Year       Country    ...     MatchesPlayed Attendance
0   1930       Uruguay    ...                18    590.549
1   1934         Italy    ...                17    363.000
2   1938        France    ...                18    375.700
3   1950        Brazil    ...                22  1.045.246
4   1954   Switzerland    ...                26    768.607
5   1958        Sweden    ...                35    819.810
6   1962         Chile    ...                32    893.172
7   1966       England    ...                32  1.563.135
8   1970        Mexico    ...                32  1.603.975
9   1974       Germany    ...                38  1.865.753
10  1978     Argentina    ...                38  1.545.791
11  1982         Spain    ...                52  2.109.723
12  1986        Mexico    ...                52  2.394.031
13  1990         Italy    ...                52  2.516.215
14  1994           USA    ...                52  3.587.538
15  1998        France    ...                64  2.785.100
16  2002   Korea/Japan    ...                64  2.705.197
17  2006       Germany    ...                64  3.359.439
18  2010  South Africa    ...                64  3.178.856
19  2014        Brazil    ...                64  3.386.810

[20 rows x 10 columns]
Year	Country	Winner	Runners-Up	Third	Fourth	GoalsScored	QualifiedTeams	MatchesPlayed	Attendance
1930	Uruguay	Uruguay	Argentina	USA	Yugoslavia	70	13	18	590.549
1934	Italy	Italy	Czechoslovakia	Germany	Austria	70	16	17	363
1938	France	Italy	Hungary	Brazil	Sweden	84	15	18	375.7
1950	Brazil	Uruguay	Brazil	Sweden	Spain	88	13	22	1.045.246
1954	Switzerland	Germany FR	Hungary	Austria	Uruguay	140	16	26	768.607

(가로가 길어서 생략됨) 

from elice_utils import EliceUtils
from matplotlib import pyplot as plt
import pandas as pd
elice_utils = EliceUtils()
plt.rcParams["font.family"] = 'NanumBarunGothic'


# 아래 경로에서 csv파일을 읽어서 시각화 해보세요
# 경로: "./data/WorldCups.csv"
df = pd.read_csv("./data/WorldCups.csv")    # 월드컵 정보를 담는 csv 파일을 읽어옵니다.
                                            # 어떤 자료를 갖는지 직접 확인해보세요!
# print(df)

winners = df["Winner"]               # 읽어온 데이터 프레임 중 "우승국"을 의미하는 칼럼을 가져오세요.

# 국가 별 우승 횟수를 나타내는 딕셔너리 입니다.
winner_dict = {}            


for i in winners :          # 우승국을 반복문으로 읽으며, 해당 국가의 우승 횟수를 1씩 증가시킵니다.
    if i in winner_dict :
        winner_dict[i] += 1
        # i(우승국)이 이미 winner_dict에 있다면, value를 1 증가시킵니다.
    else :
        winner_dict[i] = 1
        # i(우승국)이 winner_dict에 최초로 등장한다면, value를 1로 설정합니다.

print(winner_dict)

X = list(winner_dict.keys())      # X축 변수, 즉 우승국을 나타냅니다.
Y = list(winner_dict.values())    # Y축 변수, 즉 우승 횟수를 나타냅니다.

fig, ax = plt.subplots(figsize=(8, 8))

# ax.plot(X, Y)

ax.bar(X, Y)

ax.set_xlabel("Country")
ax.set_ylabel("Number")

ax.set_xticks(X)

fig.savefig("Winner.png")
elice_utils.send_image("Winner.png")

!성공! 

for 문 채우는게 관건이었음 

 

반응형