Study/Python

[Python]pandas를 이용한 2022 kaggle survey 분석 및 시각화 - 4

truthyun 2023. 4. 14. 00:27
728x90
반응형

분석 시작 글

 

[Python]pandas를 이용한 2022 kaggle survey 분석 및 시각화 - 1

이 글은 다음의 무료 강의를 바탕으로 작성되었습니다 [무료] 캐글 설문조사로 데이터 분석 입문하기 - 인프런 | 강의 캐글은 어떤 플랫폼일까요? 해마다 캐글에서는 전세계 사용자를 대상으로

seoyuun22.tistory.com

 


5. 복수 응답의 두 변수를 이용한 Cross Table

1 ) Cross Table

Q3는 사용자의 성별을, Q12는 사용자가 정기적으로 사용하는 프로그래밍언어를 묻는 질문이었다. Q12의 경우 Q2와 달리 해당되는 것을 모두 선택하는 multiple choice question이 었기 때문에 groupby를 이용하여 이 전의 방법과 다른 방법으로 Cross Table을 만들고 이를 바탕으로 plot을 그린다.

# Q12
question.filter(regex = "Q12")[0]

'What programming languages do you use on a regular basis? (Select all that apply) - Selected Choice - Python'

# A12
answer.filter(regex = "Q12")

 

“|” 기호와 텍스트의 끝맺음을 의미하는 “&”기호를 사용해 Q12와 Q2에 대한 응답을 함께 출력한다. 만약 regex = “Q12|Q3로 필터링 할 경우 Q3이 포함된 Q13, Q23 과 같은 결과들이 함께 출력 될 것이다. 따라서 “&” 기호를 사용해야한다.

q3q12 = answer.filter(regex = "Q12|Q3&")
q3q12

이제 이 테이블을 합치기 위해 groupby함수를 사용한다. Q3을 기준으로 groupby 하고, counting하면 다음과 같이 나타낸다.

q3q12.groupby("Q3").count()

테이블은 완성되었지만 컬럼명을 보면 Q12_1, Q12_2와 같이 질문에 대한 숫자만 있을 뿐, 어떤 프로그래밍 언어인지 알 수 없다. 이러한 점을 수정하기 위해 Q12_1 부터 Q12_15까지의 고유한 값을 가져와 그것을 컬럼명으로 설정해야한다.

컬럼명 가져오기

answer.filter(regex = "Q12").describe()

이 전에 단일 응답에 대한 cross table을 만들 때 사용했던 describe() 결과를 보면 top값이 각 컬럼에서 가장 많이 갖고 있는 값으로, 각각의 고유값이라고 할 수 있다. 이를 리스트화 해 위의 count table의 컬럼명으로 지정한다.

# top값 리스트 화
answer.filter(resgex = "Q12").describe().loc["top"].tolist()

['Python', 'R', 'SQL', 'C', 'C#', 'C++', 'Java', 'Javascript', 'Bash', 'PHP', 'MATLAB', 'Julia', 'Go', 'None', 'Other']

q12_cols = answer.filter(regex = "Q12").describe().loc["top"].tolist()

# Cross Table을 q3q12_count라는 변수에 저장
q3q12_count = q3q12.groupby("Q3").count()

# q3q12_count의 컬럼명에 q12_cols를 지정 
q3q12_count.columns = q12_cols
q3q12_count

 

2 ) 기본 plot 그리기

가장 기본적으로 python에 내장된 plot 함수를 사용해 막대 그래프를 그릴 수 있다.

q3q12_count.plot.bar()

여기서 Man과 Woman에 대한 결과만을 확인한다. 또한 색깔의 구분을 프로그래밍 언어가 아닌 성별로 하기 위해선 전치해야한다.

q3q12_count.loc[["Man", "Woman"]].T

q3q12_count.loc[["Man", "Woman"]].T.plot.bar()

위 그래프를 가로로 나타낼 경우 bar() 대신 barh()를 사용한다. 또한 plot의 막대를 값이 큰 것부터 정렬하려면 sort_values()를 추가한다.

# 가로 막대를 정렬
q3q12_count.loc[["Man", "Woman"]].T.sort_values("Woman").plot.barh()

728x90
반응형