이전 분석 글
4. 단일 응답의 두 변수를 이용한 Cross Table 만들기
1 ) Cross Table
Q2는 사용자의 연령을, Q3는 사용자의 성별에 대한 응답으로 두 응답 모두 단일 응답이었다. 이 두 변수를 crosstab()함수를 이용해 하나의 테이블로 나타낸다.
# Q2 : What is your age (# years)?
answer["Q2"]
1 30-34
2 30-34
3 18-21
4 55-59
5 45-49
...
23993 22-24
23994 60-69
23995 25-29
23996 35-39
23997 18-21
Name: Q2, Length: 23997, dtype: object
# Q3. What is your gender?
answer["Q3"]
1 Man
2 Man
3 Man
4 Man
5 Man
...
23993 Man
23994 Man 2
3995 Man
23996 Woman
23997 Man
Name: Q3, Length: 23997, dtype: object
위의 두 질문에 대한 응답을 crosstab() 함수를 이용해 하나의 테이블로 나타낸다
pd.crosstab(answer["Q2"], answer["Q3"])
이 중에서 남성과 여성을 중심으로 보기 위해 테이블을 재구성 한다.
q2q3 = pd.crosstab(answer["Q2"], answer["Q3"])
# 남성의 연령 정보
q2q3["Man"]
Q2
18-21 3310
22-24 3168
25-29 3425
30-34 2248
35-39 1791
40-44 1480
45-49 997
50-54 759
55-59 506
60-69 470
70+ 112
Name: Man, dtype: int64
# 남성과 여성의 연령 정보
q2q3[["Man", "Woman"]]
괄호가 한 개일때는 Series형태로, 괄호가 2개인 리스트 형태일 경우 dataframe 형태로 결과가 출력된다.
2 ) 기본 plot 그리기
cross table에서 그래프를 그리는 방법은 이전에 그래프를 그렸던 방법과 같다. 기본적으로 python에 내장된 그래프를 그리면 다음과 같다.
q2q3[["Man", "Woman"]].plot()
이 예제에서 사용되는 테이블의 경우 연속하는 값이기 때문에 꺾은 선 그래프를 기본으로 출력한다. 만약 연속하는 값이 아닌경우 막대그래프가 그려질 것이다. 연속하는 값을 막대 그래프를 출력하고 싶다면 bar()를 추가하면 된다.
q2q3[["Man", "Woman"]].plot.bar(rot=0)
여기서 기본 막대그래프를 그리면 변수명이 세로로 출력된다. 이를 가로로 나타내기 위해 rot 옵션에 0값을 대입한다.
만약 막대그래프를 가로로 그리고 싶다면 bar() 대신 barh()를 사용한다. 또한 그래프에 제목을 넣기 위해 title 옵션을 지정할 수 있다.
q2q3[["Man", "Woman"]].plot.barh(title = "Age & Gender")
위 막대그래프는 70세 이상인 경우부터 내림차순으로 정렬되어있다. 여기에 sort_index() 의 ascending 옵션을 False로 하여 이를 오름차순으로 정렬할 수 있다.
q2q3[["Man", "Woman"]].sort_index(ascending = False).plot.barh(title = "Age & Gender")
3 ) seaborn의 countplot 그리기
seaborn의 countplot은 예를 들어 연령을 x축으로 두고 성별을 막대의 색깔로 나타낼 수 있다.
sns.countplot(data = answer, x = "Q2", hue = "Q3")
이 경우의 countplot은 Man과 Woman만의 그래프를 그릴 수 없기 때문에 결과가 한눈에 들어오 지 않는다는 단점이 있다. 만약 성별이 아닌 다른 데이터를 사용한다면 한 눈에 비교하기 쉽다는 장점이 더 클 것이다.
일단 x축의 값이 정렬되지 않았기 때문에 이는 데이터를 설정 할 때, 정렬된 데이터를 입력하면 문제를 해결할 수 있다.
sns.countplot(data = answer.sort_values("Q2"), x = "Q2", hue = "Q3")
x축을 성별으로 하는 그래프에서 연령에 따라 다른 색의 막대로 할 경우에는 다음과 같이 나타난다.
plt.figure(figsize = (10,6))
sns.countplot(data = answer.sort_values(["Q2"]), x = "Q3", hue = "Q2")
'Study > Python' 카테고리의 다른 글
[Python]pandas를 이용한 2022 kaggle survey 분석 및 시각화 - 5 (1) | 2023.04.26 |
---|---|
[Python]pandas를 이용한 2022 kaggle survey 분석 및 시각화 - 4 (1) | 2023.04.14 |
[Python]pandas를 이용한 2022 kaggle survey 분석 및 시각화 - 2 (1) | 2023.04.11 |
[Python]pandas를 이용한 2022 kaggle survey 분석 및 시각화 - 1 (0) | 2023.04.04 |
[python] 지역 경계 데이터 전처리를 위한 Geopandas 설치하기 (0) | 2022.06.09 |