본문 바로가기
데이터 어쩌구/전처리 및 시각화

[부스트코스] 캐글 실습 : 설문조사 응답 분석 (5)

by annmunju 2021. 1. 22.

2021/01/22 - [공부/3. 데이터 사이언스] - [부스트코스] 캐글 실습 : 설문조사 응답 분석 (4)

 

[부스트코스] 캐글 실습 : 설문조사 응답 분석 (4)

2021/01/21 - [공부/3. 데이터 사이언스] - [부스트코스] 캐글 실습 : 설문조사 응답 분석 (3) [부스트코스] 캐글 실습 : 설문조사 응답 분석 (3) 2021/01/20 - [공부/3. 데이터 사이언스] - [부스트코스] 캐글

mungdo-log.tistory.com

ㄴ 이전글 이어서...


Q3. 어디에서 데이터 사이언스를 배워야 할까요?

 

 1) 'LearningPlatformSelect' 

- 다중 선택이 가능한 열이었기 때문에 분리해서 s에 저장

mcq['LearningPlatformSelect'] = mcq['LearningPlatformSelect'].astype('str').apply(lambda x: x.split(','))
s = mcq.apply(
    lambda x: pd.Series(x['LearningPlatformSelect']),
    axis=1).stack().reset_index(level=1, drop=True)
s.name = 'platform'

 > 첫번째 줄. 항목들을 ','로 구분해서 분리해야함. 분리해서 원래 있던 'LearningPlatformSelect' 자리에 저장. lambda 함수

첫줄 시행 후 mcq['LearningPlatformSelect'] 출력했을때

> 두번째 줄 (s= ...). pd.Series 함수를 이용해 한 항목씩 분리해서 저장

둘째줄 시행 후 s 출력>이름 바꾸기 하고나서

 - 시각화

plt.figure(figsize=(6,8))
data = s[s != 'nan'].value_counts().head(15)
sns.barplot(y=data.index, x=data)

 

 2) LearningCategory가 들어간 질문들을 찾아봄

qc = question.loc[question[
    'Column'].str.contains('LearningCategory')]
print(qc.shape)
qc

3) LearningPlatformUsefulness : 학습 플랫폼과 유용함의 연관성을 찾아보기

use_features = [x for x in mcq.columns
                if x.find('LearningPlatformUsefulness') != -1 ]
                
#['LearningPlatformUsefulnessArxiv',
# 'LearningPlatformUsefulnessBlogs',
# 'LearningPlatformUsefulnessCollege',
# 'LearningPlatformUsefulnessCompany',
# 'LearningPlatformUsefulnessConferences',
# 'LearningPlatformUsefulnessFriends', ...

* find('   ') != -1 : -1이 아니면 해당 문자열을 포함하고 있는 것.

 - fdf={} 딕셔너리에 각 플랫폼 별로 Very useful / Somewhat useful / Not Useful의 비율을 저장하기 (for 문 이용)

fdf = {}
for feature in use_features:
    a = mcq[feature].value_counts()
    a = a/a.sum()
    fdf[feature[len('LearningPlatformUsefulness'):]] = a

 > 'LearningPlatformUsefulnessArxiv'를 넣어서 for 문 해석하기

df={}
a = mcq['LearningPlatformUsefulnessArxiv'].value_counts()
print(a)

#Very useful        1316
#Somewhat useful    1038
#Not Useful           37
#Name: LearningPlatformUsefulnessArxiv, dtype: int64 

a=a/a.sum()
print(a)

#Very useful        0.550397
#Somewhat useful    0.434128
#Not Useful         0.015475
#Name: LearningPlatformUsefulnessArxiv, dtype: float64 

'LearningPlatformUsefulnessArxiv'[len('LearningPlatformUsefulness'):]
df['LearningPlatformUsefulnessArxiv'[len('LearningPlatformUsefulness'):]]=a
df

#{'Arxiv': Very useful        0.550397
# Somewhat useful    0.434128
# Not Useful         0.015475
# Name: LearningPlatformUsefulnessArxiv, dtype: float64}

 

- '매우 유용함'을 기준으로 내림차순 정렬한 것을 데이터 프레임 fdf에 저장

fdf = pd.DataFrame(fdf).transpose().sort_values(
    'Very useful', ascending=False)

 

 - 시각화 heatmap

# 학습플랫폼들이 얼마나 유용한지에 대한 상관관계를 그려본다.
plt.figure(figsize=(10,10))
sns.heatmap(
    fdf.sort_values(
        "Very useful", ascending=False), annot=True)

- 시각화 plot 

# 유용함의 정도를 각 플랫폼별로 그룹화 해서 본다.
fdf.plot(kind='bar', figsize=(10,4),
         title="Usefullness of Learning Platforms")
plt.xticks(rotation=60, ha='right')

 

4) 학습 플랫폼 별 도움이 되는 정도 보기

cat_features = [x for x in mcq.columns if x.find(
    'LearningCategory') != -1]

cdf = {}
for feature in cat_features:
    cdf[feature[len('LearningCategory'):]] = mcq[feature].mean()

# 파이차트를 그리기 위해 평균 값을 구해와서 담아준다.
cdf = pd.Series(cdf)
cdf

#SelftTaught      33.366771
#OnlineCourses    27.375514
#Work             15.217593
#University       16.988607
#Kaggle            5.531434
#Other             1.795940
#dtype: float64

 

- 시각화

# 학습 플랫폼 별 도움이 되는 정도를 그려본다.
plt.pie(cdf, labels=cdf.index, 
        autopct='%1.1f%%', shadow=True, startangle=140)
plt.axis('equal')
plt.title("Contribution of each Platform to Learning")
plt.show()

 

728x90