포트폴리오

python - 파이차트(singer.csv이용)

leegunho 2022. 6. 28. 12:23
import pandas as pd  # pandas 모듈을 pd라는 이름으로 가져와서 사용
import matplotlib.pyplot as plt  # matplotlib.pyplot 모듈을 plt라는 이름으로 가져와서 사용
 
'''
singer.csv 이용
voice.part별로 그룹화 한 후 각각의 그룹마다 가수의 Height 분포를 원형차트로 나타냄 (가수의 키와 음역대의 상관관계 확인)
그래프는 voice.part 그룹의 개수만큼 그려짐 (총 8개)
'''
 
dataframe = pd.read_csv('dataset/singer.csv')  # pandas의 csv파일을 읽어서 dataframe 형태로 만들어주는 read_csv함수를 이용해서 csv 파일을 읽음
voice_types = dataframe['voice.part'].unique()  # dataframe['voice.part']를 이용해서 dataframe에서 'voice.part' 열데이터를 읽어옴
                                                # 읽어온 'voice.part' 열데이터를 unique() 함수를 이용해서 중복 데이터를 없애고 list형태의 unique한 데이터를 가져옴
 
wedgeprops = {'width': 0.7, 'edgecolor': 'w', 'linewidth': 5}  # 원형창트의 부채꼴 영역의 스타일을 지정하는 dictionary
                                                               # width는 부채꼴 영역의 너비(반지름에 대한 비율로 지정), edgecolor는 테두리의 색상, linewidth는 테두리 선의 너비
pie_colors = ['#FF9998', '#ffc000', '#86E57F', '#8FD9B7', '#D395D1']  # 원형차트의 색상을 색상코드 리스트로 지정 (데이터 개수가 리스트길이보다 길 경우 해당 색들이 반복해서 나타남)
 
plt.figure(figsize=(10, 14))  # 그래프의 개수가 많아 그래프 그리는 공간이 많이 필요하므로 그래프를 그리는 공간의 size를 변경 (가로 10, 세로 14)
 
for i in range(len(voice_types)):  # voice_types list의 길이만큼 반복하는 반복문
    plt.subplot(4, 2, i+1)  # 여러 그래프를 그리기 위한 subplot 설정
                              # subplot()은 여러개의 그래프를 하나의 그림에 그릴때 사용
                              # 인자는 순서대로 (행, 열, index) / plt의 구역을 몇행, 몇열로 나눌지를 지정해주고 index로 어디에 그릴지를 지정해주는것 (index는 1부터 시작, 왼쪽위부터 오른쪽 아래로 셈)
                              #  plt.subplot(4, 2, i+1)는 plt을 4행 2열로 나누고 i+1번째의 공간에 그래프를 그린다는것을 의미
    height_df = dataframe[dataframe['voice.part'] == voice_types[i]].groupby('height')['voice.part'].count()  # dataframe[dataframe['voice.part'] == voice_types[i]] 으로 dataframe에서 voice_type[i]와 일치하는 voice.part를 가지는 데이터를 추출한후,
                                                                                                              # groupby 함수로 'height'으로 그룹화를 하며,
                                                                                                              # 그룹화된 데이터에서 height별 count를 구해서 height_df에 저장
    labels = height_df.index.to_list()  # height_df index를 list로 만들어서 x에 저장 ('height'로 group 을 만들었으므로 index는 'height'의 unique 값의 리스트가 됨)
    for j in range(len(labels)):  # label을 출력할때 단위인 inch를 붙여주기 위해 labels 리스트를 순회
        labels[j] = str(labels[j]) + 'inch'  # 뒤에 inch를 붙인 문자열로 덮어씌움
 
    plt.title(voice_types[i] + ' Vocal\'s Height', fontsize=12)  # 그래프의 제목을 지정 (글자크기는 12)
    plt.pie(height_df.values, labels=labels, startangle=10,
            colors=pie_colors, autopct='%.2f%%', wedgeprops=wedgeprops, textprops={'fontsize': 6})  # pie 함수로 원형차트를 그림
                                                                                                    # 인자로 원형차트로 표시할 데이터를 전달해주는데 height_df.values를 전달했음. (height_df.values는 특정 'voice,part'의 'height'별로 몇명인지가 들어있음)
 
plt.savefig('ex4.png')  # 그래프를 그려서 ex4.png 라는 이름의 파일에 저장하도록 함
Colored by Color Scripter
cs

사용 데이터 

singer.csv
0.00MB

 

 

py01.py
0.00MB

python파일 공유