pyecharts ver1.9.1 사용 예제

김지용·2022년 8월 25일

파이썬 데이터 도식화, 파이썬 그래프, 파이차트 사용 예제, (Pie X, Pye O)

파이차트 공식문서 에러

데이터를 더 보기 좋게 그래프 상으로 보여주기위해 고민하던 중 pyecharts가 강력하고, 기능도 좋고, 보기가 좋아보여서 pyecharts를 써보기로 했다.

https://pyecharts.org/#/en-us/prepare (파이차트 공식문서)

from pyecharts import Bar
from pyecharts import options as opts

(Bar()
    .add_xaxis(["Microsoft", "Amazon", "IBM", "Oracl", "Google", "Alibaba"])
    .add_yaxis('2017-2018 Revenue in (billion $)', [21.2, 20.4, 10.3, 6.08, 4, 2.2])
    .set_global_opts(title_opts=opts.TitleOpts(title="Top cloud providers 2018", subtitle="2017-2018 Revenue"))
    .render() # generate a local HTML file
)

파이차트 공식문서를 따라했는데 계속 Bar를 import 해오지 못한다는 거다.
공식문서 초반부인데??
그래서 찾아봤더니 공식문서대로 하는거는 0.5.xxx 버전대에서 먹힌다는 것이다.
그래서 파이차트 github을 clone 해와서 모듈을 따라가보니

from pyecharts import Bar  -->> from pyecharts.charts import Bar
# 내가 했던 버전인 1.9.1에서는 위처럼 .charts 해서 모듈을 하나 더 타면 잘 작동한다.

파이차트 코드

아래 그래프 코드에 쓰인 변수명에 해당하는 값

(국제지침에 따라 규정된 AIS 데이터 명칭들과 오차범위 밖의 에러 수에 대한 값이다.)
파싱해서 에러 뽑아내는 코드는 생략

targets = ['timestamp', 'mmsi', 'status', 'heading', 'course', 'accuracy', 'maneuver', 'second',
 'speed', 'turn', 'type', 'repeat', 'raim', 'radio', 'lat', 'lon']

num_error_cnt = [0, 0, 7199, 48178, 920, 0, 6830, 0, 0, 0, 0, 0, 0, 0, 0, 0]

num_error_per = ['0.000', '0.000', '11.404', '76.319', '1.457', '0.000', '10.819', '0.000', '0.000', '0.000', '0.000', '0.000', '0.000', '0.000', '0.000', '0.000']

파이차트 막대 그래프 코드

#-------------------------------------------------------------- 막대 그래프 생성 ------------------------------------------------------------
# pip install pyecharts

from pyecharts.charts import Bar
# 처음 튜토리얼 보면 from pyecharts import Bar 로 되어있어서 Bar를 import 해오지 못하는데 pyecharts 뒤에 .charts 모듈 추가하면 해결 완료 / 0.5.xxx 버전과 1.xxx버전의 차이
from pyecharts import options as opts

a = [list(z) for z in zip(targets,num_error_per)]

(Bar(init_opts=opts.InitOpts(width="1600px", height="900px")) # 그래프가 보여질 너비 높이 설정
    .add_xaxis(a)
    .add_yaxis('amount of errors', num_error_cnt, label_opts=opts.LabelOpts(is_show=True, formatter="{c}개\n{b}%"))
    .set_global_opts(title_opts=opts.TitleOpts(title="AIS 항만 데이터 에러빈도 수", subtitle=f"파일이름 : {file_name}"))
    .set_series_opts(tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{c}개\n{b}%")) # 커서 올릴 때 백분율 표시값 설정
    .render(file_name+".html") # 해당 폴더 최상위 경로에 막대그래프를 볼 수 있는 html 파일이 생성됩니다.
)

# 파일이름.html 이 생성되고 실행시 해당 데이터의 오류율 막대그래프가 나옵니다.

파이차트 원형 그래프 코드

#-------------------------------------------------------------- 원형 그래프 생성 ------------------------------------------------------------

from pyecharts.charts import Pie

attr = targets
v1 = num_error_cnt
a = [list(z) for z in zip(attr,v1)]


pie = Pie(init_opts=opts.InitOpts(width="1600px", height="1000px")) # 그래프가 보여질 너비 높이 설정
pie.add("", a, radius='60%', center=['50%', '40%'], label_opts=opts.LabelOpts(is_show=True, formatter="{b}: {c} ({d}%)"))
# radius : 내부 및 외부 링의 크기
# center : 왼쪽 여백과 위쪽 여백
# label_opts : 데이터 및 백분율 표시

pie.set_global_opts(title_opts=opts.TitleOpts(title="AIS 에러빈도 수", subtitle=f"파일이름 : {file_name}"))
pie.set_series_opts(tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{b}: {c} ({d}%)")) # 커서 올릴 때 백분율 표시값 설정

pie.render(file_name+"_pie"+".html")


# 파일이름_pie.html 이 생성되고 실행시 해당 데이터의 오류율 원형그래프가 나옵니다.

해당 코드를 통해 만들어진 막대그래프를 보면 원래는 데이터 이름과 에러 갯수만 나온다. 원형차트는 tooltip옵션에서 포매터를 적용해보면 {d}에 백분율 값이 들어가있는데 막대그래프는 해당값이 없고, 구글에서 파이차트 막대그래프만 검색해봐도 % 적용되어있는 친구가 없는 것이었다.
그래서 위와 같이 a = [list(z) for z in zip(targets,num_error_per)]
x 축에 (데이터이름,에러율)이 들어가게 설정해서 포매터를 통해 %를 붙여서 백분율을 표시해줬다.

								기존 막대그래프(before)

								zip으로 에러율 수치화한 리스트 포함시킨 막대그래프(after)

										원형그래프

pyecharts를 쓰는 도중에 matplotlib에서 제공하는 pyplot 등 몇개를 써봤는데 pyecharts가 제일 깔끔하고 보기 좋은 거 같다. 자동적으로 이쁘게 처리하는 다른 기능들도 많기 때문이다.

특히 차트는 원형차트가 좋은 게 위의 해당 데이터 색을 누르면 해당 데이터는 빼고 %를 계산해줘서 보기가 좋다.(예시 사진을 또 올리자니 너무 커서... 생략)
근데 공식문서 따라해서 초반부부터 에러나는 건 좀....
그리고 중국인들 코드예제가 많아 보인다.
혹시 코드가 필요할 한국인들을 위해 예제코드를 올려본다. 화이팅!
벨로그 알림이 없어서 답변은 늦을 수 있으나 혹시 물어보시면 최대한 답변해드릴게요!

profile
김죵입니당 ^^

0개의 댓글