-
데이터 시각화 07 - Matplotlib (산점도/여러그래프/퀴즈)빅데이터/Data Visualization 2022. 1. 24. 20:14
유투버 '나도코딩'님 강의 참조
01 산점도
- 두 변수의 상관관계를 보여줄때 사용
plt.scatter(df['영어'], df['수학']) plt.xlabel('영어 점수') plt.ylabel('수학 점수')
수학을 잘하면 영어도 잘할 확률이 높다는것을 볼 수 있다 # size = 마커의 사이즈 크기 sizes = df['학년'] * 500 # 학년별 사이즈 plt.scatter(df['영어'], df['수학'], s=sizes) plt.xlabel('영어 점수') plt.ylabel('수학 점수')
# 스타일 적용 # c = '' 색상을 적용할 대상, cmap='' cmap에서 가진 색상으로 c 대상을 적용 plt.scatter(df['영어'], df['수학'], s=sizes, c=df['학년'], cmap='viridis') plt.xlabel('영어 점수') plt.ylabel('수학 점수')
- cmap 관련 링크 (https://matplotlib.org/stable/tutorials/colors/colormaps.html)
- 'alpha' 값을 주면 겹치는 부분도 서로 투명하게 볼 수 있음
# colorbar = 현재 좌표축이나 차트의 오른쪽에 세로 컬러바를 표시 # 테이터 값의 컬러맵 매핑 위치를 나타냄 plt.figure(figsize=(7, 7)) plt.scatter(df['영어'], df['수학'], s=sizes, c=df['학년'], cmap='viridis') plt.xlabel('영어 점수') plt.ylabel('수학 점수') #colorbar() = ticks - 컬러바 범위, shrink - 컬러바 사이즈, orientation - 방향 plt.colorbar(ticks=[1,2,3], label='학년', shrink=0.5, orientation='horizontal');
02 여러 그래프
- 한번에 여러 그래프를 찍어 보자
fig, axs = plt.subplots(2, 2, figsize=(15,10)) #subplots('가로 세로 개수') fig.suptitle('여러 그래프 넣기')
- 먼저 몇개의 그래프를 그릴것인지 .subplots()를 통해 선언 한다
fig, axs = plt.subplots(2, 2, figsize=(15,10)) #subplots('가로 세로 개수') fig.suptitle('여러 그래프 넣기') axs[0, 0].bar(df['이름'], df['국어'], label='국어 점수') axs[0, 0].set_title('첫 번째 그래프') axs[0, 0].legend() axs[0, 0].set(xlabel='이름', ylabel='점수') axs[0, 0].set_facecolor('lightyellow') axs[0, 0].grid(linestyle='--', linewidth=0.5)
- 그래프 개수를 정한 후, axs가 가진 각각의 그래프 위치를 가져와 원하는 스타일을 하면 된다.
fig, axs = plt.subplots(2, 2, figsize=(15,10)) #subplots('가로 세로 개수') fig.suptitle('여러 그래프 넣기') #첫번째 막대 axs[0, 0].bar(df['이름'], df['국어'], label='국어 점수') axs[0, 0].set_title('첫 번째 그래프') axs[0, 0].legend() axs[0, 0].set(xlabel='이름', ylabel='점수') axs[0, 0].set_facecolor('lightyellow') axs[0, 0].grid(linestyle='--', linewidth=0.5) #두번째 꺾은선 axs[0, 1].plot(df['이름'], df['수학'], label='수학') axs[0, 1].plot(df['이름'], df['영어'], label='영어') axs[0, 1].legend() #세번째 여러막대 axs[1, 0].barh(df['이름'], df['키']) #네번째 axs[1, 1].plot(df['이름'], df['사회'], color='green', alpha=0.5);
03 퀴즈
data = { '영화' : ['명량', '극한직업', '신과함께-죄와 벌', '국제시장', '괴물', '도둑들', '7번방의 선물', '암살'], '개봉 연도' : [2014, 2019, 2017, 2014, 2006, 2012, 2013, 2015], '관객 수' : [1761, 1626, 1441, 1426, 1301, 1298, 1281, 1270], # (단위 : 만 명) '평점' : [8.88, 9.20, 8.73, 9.16, 8.62, 7.64, 8.83, 9.10] } df = pd.DataFrame(data) df
1) 영화 데이터를 활용하여 x축은 영화, y축은 평점인 막대 그래프를 만드시오
labels = df['영화'] values = df['평점'] plt.bar(labels, values)
2) 아래 스타일 적용
- 제목 : 국내 Top 8 영화 평점 정보
- x축 label : 영화(90도 회전)
- y축 label : 평점
labels = df['영화'] values = df['평점'] plt.bar(labels, values) plt.title('국내 Top 8 영화 평점 정보') plt.xlabel('영화') plt.xticks(rotation=90) plt.ylabel('평점')
3) 개봉 연도별 평점 변화 추이를 꺾은선 그래프로 그리시오
# 개봉 연도별 평점 구하기 df_group = df.groupby('개봉 연도').mean() # 평균을 구한 후 df_group.reset_index(inplace = True) # 개봉연도의 모든 행을 일치 시킴 df_group
plt.plot(df_group['개봉 연도'], df_group['평점']); # '개봉 연도' 대신 df_group.index로도 처리 가능
4) 스타일 적용
- 마커 'o' 추가
- x축 2005년부터 5년 단위로 끊기
- y축 7~10 으로 바꾸기
plt.plot(df_group['개봉 연도'], df_group['평점'], marker='o'); plt.yticks([7.0,7.5,8.0,8.5,9.0,9.5,10]) plt.ylim(7, 10)
5) 9점 이상인 영화의 비율을 나타낸 원 그래프 및 세부 사항 적용
- 라벨 - 9점 이상, 9점 미만
- 퍼센트 - 소수점 첫째자리까지만 표시
- 범례 - 그래프 우측에 표시
filter = df['평점'] >= 9.0 # 일단 두개로 나눔 values = [len(df[filter]), len(df[~filter])] #두개로 나뉜 데이터의 길이를 추출 labels = ['9점 이상', '9점 미만'] plt.pie(values, labels=labels, autopct='%.1f%%') plt.legend(loc=(1,0.3))
'빅데이터 > Data Visualization' 카테고리의 다른 글
데이터 시각화 09 - Matplotlib (출생아 수 및 합계 출산율) (0) 2022.01.24 데이터 시각화 08 - Matplotlib (인구 피라미드) (0) 2022.01.24 데이터 시각화 06 - Matplotlib (DF활용/누적 막대/다중 막대/원그래프) (0) 2022.01.22 데이터 시각화 05 - Matplotlib (저장/텍스트/여러 데이터/막대그래프) (0) 2022.01.21 데이터 시각화 04 - Matplotlib (기본/스타일) (0) 2022.01.21