기초 그래프 그리기
seaborn 라이브러리에는 tips라는 데이터 집합이 있다.
tips 데이터 집합은 어떤 식당에서 팁을 지불한 손님의 정보를 모아둔 것이다.
데이터 불러오기
tips = sns.load_dataset("tips")
print(tips.head())
print(type(tips))
위의 데이터로 히스토그램을 그려보자.
히스토그램은 데이터프레임의 열 데이터 분포와 빈도를 살펴보는 용도로 자주 사용하는 그래프이다.
이때 데이터프레임의 total_bill, tip 등의 열을 변수라고 부르기도 한다.
그리고 변수를 하나만 사용해서 그린 그래프를 '일변량 그래프'라고 부른다.
fig = plt.figure()
axes1 = fig.add_subplot(1, 1, 1)
기본 틀을 만든다.
axes1.hist(tips['total_bill'], bins=10)
axes1.set_title('Histogram of Total Bill')
axes1.set_xlabel('Frequency')
axes1.set_ylabel('Total Bill')
fig
total_bill에 대한 히스토그램이다. 이때 x축의 간격은 bins 인잣값으로 저장할 수 있다.
이번에는 산점도 그래프를 그려보자. 산점도 그래프는 변수 2개를 사용해서 만드는 그래프이며 변수 2개를 사용하기 때문에 통계 용어로 '이변량 그래프'라고 부른다.
scatter_plot = plt.figure()
axes1 = scatter_plot.add_subplot(1, 1, 1)
axes1.scatter(tips['total_bill'], tips['tip'])
axes1.set_title('Scatterplot of Total Bill vs Tip')
axes1.set_xlabel('Total Bill')
axes1.set_ylabel('Tip')
박스 그래프를 그려보자. 박스 그래프는 이산형 변수와 연속형 변수를 함께 사용하는 그래프이다.
이산형 변수랑 Female, Male과 같이 명확하게 구분되는 값을 의미하고, 연속형 변수란 Tip과 같이 명확하게 셀 수 없는 범위의 값을 의미한다.
boxplot = plt.figure()
axes1 = boxplot.add_subplot(1, 1, 1)
axes1.boxplot([tips[tips['sex'] == 'Female']['tip'],
tips[tips['sex'] == 'Male']['tip']],
labels=['Female', 'Male'])
axes1.set_title('Boxplot of Tips by Sex')
axes1.set_xlabel('Sex')
axes1.set_ylabel('Tip')
tips 데이터프레임에서 성별이 Female인 데이터와 Male인 데이터에서 tip 열 데이터만 추출하여 리스트에 담아 전달한 것이다.
다변량 그래프 그리기 - 산점도 그래프
3개 이상의 변수를 사용한 그래프를 '다변량 그래프'라고 한다.
만약 지불 금액과 팁만을 사용하여 그린 산점도 그래프에 성별을 추가하면 점의 색상을 다르게 표현하여 그릴 수 있다.
def recode_sex(sex):
if sex == 'Female':
return 0
else:
return 1
성이 female인 데이터는 0으로 return 하는 함수이다. 이를 데이터 프레임에 추가하여 새로운 열을 만들어 color를 다르게 그래프를 그릴 수 있다.
함수로 반환된 값을 브로드캐스팅하기 위해 apply메서드를 사용하여 색을 지정하자.
def recode_sex(sex):
if sex == 'Female':
return 0
else:
return 1
tips['sex_color'] = tips['sex'].apply(recode_sex)
그리고 이제 그래프를 그려 보자.
scatter_plot = plt.figure()
axes1 = scatter_plot.add_subplot(1, 1, 1)
axes1.scatter(
x=tips['total_bill'],
y=tips['tip'],
s=tips['size'] * 10,
c=tips['sex_color'],
alpha=0.5)
axes1.set_title('Total Bill vs Tip Colored by Sex and Sized by Size')
axes1.set_xlabel('Total Bill')
axes1.set_ylabel('Tip')
s는 점의 크기를 c는 점의 색상을 의미한다. alpha는 투명도를 지정하는 인자이다.