ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 데이터 시각화 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('수학 점수')

    # 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) 아래 스타일 적용

    1. 제목 : 국내 Top 8 영화 평점 정보
    2. x축 label : 영화(90도 회전)
    3. 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) 스타일 적용

    1. 마커 'o' 추가
    2. x축 2005년부터 5년 단위로 끊기
    3. 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점 이상인 영화의 비율을 나타낸 원 그래프 및 세부 사항 적용

    1. 라벨 - 9점 이상, 9점 미만
    2. 퍼센트 - 소수점 첫째자리까지만 표시
    3. 범례 - 그래프 우측에 표시
    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))

     

Designed by Tistory.