Py) 기초 - Pandas(그래프)

Py) 기초 - Pandas(그래프)

파이썬 기반 데이터분석을 위하여 Pandas 객체를 기반으로 그래프를 그리는 방법을 알아보자.


개요

Python에는 그래프를 그리는 대표적인 라이브러리인 matplotlib이 있다. 하지만 해당 라이브러리의 문법을 익히고 자유자재로 사용하기에는 초심자에게는 조금 어렵다. 그래서 해당 라이브러리를 다루기 보다는 Pandas를 활용한 간단한 시각화를 다루고자 한다.

실습

그래프 구현을 위해 다음과 같이 데이터프레임을 준비하자.

1
2
3
4
5
6
7
df = pd.DataFrame({"지점": ["A", "A", "B", "B"],
"상품": ["P1", "P2", "P1", "P2"],
"Q1": [112, 134, 156, 178],
"Q2": [212, 234, 256, 278],
"Q3": [312, 334, 356, 378],
"Q4": [412, 434, 456, 478]})
df
지점 상품 Q1 Q2 Q3 Q4
0 A P1 112 212 312 412
1 A P2 134 234 334 434
2 B P1 156 256 356 456
3 B P2 178 278 378 478

선 그래프

가장 기본적인 선 그래프(line chart)를 그려보도록 하자. plot() 메서드를 사용하고 별도의 인자를 설정하지 않을 경우 선 그래프를 구현해주며 그 결과는 다음과 같다.

1
df["Q1"].plot()

선 그래프1

그리고 기본적으로 x축은 인덱스, y축은 값(values)으로 자동 지정된다. 선분으로 표기되어 이해가 어려울 수 있기 때문에 다음의 예제를 하나 더 확인하도록 하자.

1
2
ser1 = pd.Series([300, 100, 200, 500])
ser1.plot()

선 그래프2

그리고 인덱스가 0부터 시작하지 않는 경우 다음과 같이 그려질 수 있다.

1
2
3
ser2 = pd.Series([300, 100, 200, 500],
index = [2, 1, 0, 4])
ser2.plot()

선 그래프3

상기와 같은 경우는 정렬이 필요할 수 있는데 다음과 같이 “ser2” 객체의 인덱스를 정렬하여 시각화한 결과는 다음과 같다.

1
ser2.sort_index().plot()

선 그래프4

보다 명확한 코드 작성을 한다면 .plot() 메서드 대신 .plot 접근자(accessor)와 .line() 메서드를 사용할 수 있으며 다음과 같다.

1
ser.plot.line()

선 그래프2

선색상, 선두께 등 여러 설정을 위해서 다음과 같이 관련 인자를 추가할 수 있다.

1
2
ser.plot.line(color = "#FF0000", lw = 5,
title = "title", xlabel = "x-axis", ylabel = "y-axis")

선 그래프5

막대 그래프

이번에는 막대그래프를 그려보자. .plot() 메서드의 “kind” 인자에 “bar”를 할당하면 다음과 같이 막대그래프를 그릴 수 있다.

1
df["Q1"].plot(kind = "bar")

막대 그래프1

그리고 .plot() 메서드가 아닌 .plot 접근자와 .bar() 메서드를 사용해서도 막대그래프를 그릴 수 있다.

1
df["Q1"].plot.bar()

막대 그래프2

.bar() 메서드 사용시 “color” 인자에 색상명 또는 색상코드를 지정하면 막대의 면색상을 변경할 수 있다.

1
df["Q1"].plot.bar(color = "#FF0000")

막대 그래프3

그 밖에 여러 인자를 추가하면 막대그래프를 꾸밀 수 있는데 “edgecolor”는 막대 테두리 선색상, “linewidth”는 막대 테두리 선두께이며 다음과 같다.

1
2
3
4
5
6
df["Q1"].plot.bar(color = "#FF0000", 
edgecolor = "#000000",
linewidth = 3,
title = "title",
xlabel = "x-axis",
ylabel = "y-axis")

막대 그래프4

원 그래프

원 그래프(pie chart)는 각 인덱스와 해당 인덱스에 매칭되는 값을 기준으로 그려진다. .plot() 메서드의 “kind” 인자에 “pie”를 할당하면 다음과 같이 그릴 수 있다.

1
df["Q1"].plot(kind = "pie")

원 그래프1

그리고 원 그래프 역시 다른 그래프와 마찬가지로 .plot()메서드가 아닌 .plot 접근자와 .pie() 메서드를 사용해서도 그릴 수 있다.

1
df["Q1"].plot.pie()

원 그래프2

원 그래프는 각 부채꼴에 해당하는 범주의 구성비가 어떻게 되는지 표기하려면 다음과 같이 “autopct” 인자에 값을 할당하면 된다.

1
df["Q1"].plot.pie(autopct = "%1.1f%%")

원 그래프3

소수점 둘째 자리까지 표기하고자 한다면 다음과 같이 “autopct” 인자에 “%1.2f%%” 를 입력하면 된다.

1
df["Q1"].plot.pie(autopct = "%1.2f%%")

원 그래프4

그리고 원 그래프를 그릴때는 부채꼴을 시작 위치가 12시 방향인데 이를 위해서 “startangle” 인자를 다음과 같이 사용할 수 있다.

1
df["Q1"].plot(kind = "pie", autopct = "%1.1f%%", startangle = 90)

원 그래프5

산점도

산점도는 기본적으로 2개의 변수를 사용하기 때문에 .scatter() 메서드의 “x”와 “y”인자에 각 변수를 할당하면 산점도를 그릴 수 있다.

1
df.plot.scatter(x = "Q1", y = "Q2")

산점도1

점 색상을 지정하고자 한다면 다음과 같이 “c” 인자에 색상명 또는 색상코드를 입력하면 된다.

1
df.plot.scatter(x = "Q1", y = "Q2", c = "#FF0000")

산점도2

일괄 색상부여가 아닌 별도의 색상을 부여하고자 한다면 다음과 같이 코드를 작성할 수도 있다.

1
2
df.plot.scatter(x = "Q1", y = "Q2", 
c = ["#FF0000", "#00FF00", "#0000FF", "#000000"])

산점도3

색상 파레트를 이용하고자 한다면 다음과 같이 새로운 변수를 생성하고 “cmap” 인자에 색상 파레트명을 지정할 수 있다. 해당 파레트명은 matplotlib 라이브러리에서 사용하는 것과 같으며 보다 자세한 내용은 matplotlib color map 페이지를 참고하면 된다.

1
2
3
4
df["color_num"] = [1, 1, 2, 3]
df.plot.scatter(x = "Q1", y = "Q2",
c = "color_num",
cmap = "viridis")

산점도4

그룹

데이터프레임 객체의 두 개 이상의 변수를 대상으로 선 그래프를 그리는 경우 각 변수의 값은 별도로 묶어서 그려주며 각 선의 정보는 범례에 표기된다.

1
df[["Q1", "Q2"]].plot.line()

그룹 그래프1

막대그래프는 다음과 같이 그려진다.

1
df[["Q1", "Q2"]].plot.bar()

그룹 그래프2

x축의 눈금 표시는 인덱스에 영향을 받는데 상기 두 그래프는 인덱스가 0~3으로 지정되어있었고 이를 직접 지정하려면 다음과 같이 코드를 작성할 수 있다.

1
2
df["xlab"] = df["지점"] + "_" + df["상품"]
df.set_index(["xlab"])[["Q1", "Q2"]].plot.bar()

그룹 그래프3

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×