작업 1유형 : 은행의 전화 마케팅에 대해 고객의 반응 여부

SOOYEON·2022년 6월 23일
0

빅데이터분석기사

목록 보기
31/36

은행의 전화 마케팅에 대해 고객의 반응 여부

Q1.

마케팅 응답 고객들의 나이를 10살 단위로 변환 했을 때,
가장 많은 인원을 가진 나이대는? (0~9 : 0 , 10~19 : 10)

# s
df['clf'] = df['age'] //10 * 10
df['clf'].value_counts(ascending=False).index[0]

#
result = (df.age//10 *10).value_counts().index[0]
print(result)

Q2.

마케팅 응답 고객들의 나이를 10살 단위로 변환 했을 때, 가장 많은 나이대 구간의 인원은 몇명인가?

df['clf'].value_counts(ascending=False).values[0]

Q3.

나이가 25살 이상 29살 미만인 응답 고객들중
housing컬럼의 값이 yes인 고객의 수는?

df[(df['age'] >= 25) & (df['age'] < 29) & (df['housing']=='yes')].shape[0]

Q4.

numeric한 값을 가지지 않은 컬럼들중 unique한 값을 가장 많이 가지는 컬럼은?

# s
df.describe(include=['object']).loc['unique'].sort_values(ascending=False).index[0]
# or describe(exclude=['number'])

select_dtypes()

lst= [] 
for col in df.select_dtypes(exclude='int64'):
    target = df[col]
    lst.append([col,target.nunique()])

result = pd.DataFrame(lst).sort_values(1,ascending=False).values[0][0]
print(result)

Q5.

balance 컬럼값들의 평균값 이상을 가지는 데이터를 ID값을 기준으로 내림차순 정렬했을때 상위 100개 데이터의 balance값의 평균은?

df[df['balance'] >= df['balance'].mean()].sort_values(by='ID',ascending=False).head(100)['balance'].mean()

Q6.

가장 많은 광고를 집행했던 날짜는 언제인가? (데이터 그대로 일(숫자),달(영문)으로 표기)

df.value_counts(['day','month'], ascending=False).index[0]

# or
df[['day','month']].value_counts().index[0]

Q7.🌟

데이터의 job이 unknown 상태인 고객들의 age 컬럼 값의 정규성을 검정하고자 한다. 샤피로 검정의 p-value값을 구하여라

Shapiro-Wilks Normality test

데이터 수가 (30보다) 적은 정규성 검정

from scipy.stats import shapiro
result = shapiro(df[df.job =='unknown'].age)[1] # [1]
print(result)
ShapiroResult(statistic=0.9784717559814453, pvalue=0.1961131989955902)
  • 첫번째 값: 검정통계치 w
  • 두번째 값 : p-value

Q8. ✅

age와 balance의 상관계수를 구하여라

# s
df['age'].corr(df['balance'])

#
result = df[['age','balance']].corr().iloc[0,1]
print(result)

Q9.🌟

y 변수와 education 변수는 독립인지 카이제곱검정을 통해 확인하려한다. p-value값을 출력하라

v = pd.crosstab(df.y,df.education)
from scipy.stats import chi2_contingency
chi2 , p ,dof, expected = chi2_contingency(v)
display(v)
print(p)
educationprimarysecondarytertiaryunknown
y
no142445552559365
yes45618131516182

chi2 : 통계량

p : p-value

dof (Degree of Freedom) : 자유도


msg = 'Test Statistic: {}\np-value: {}\nDegree of Freedom: {}'
print(msg.format(chi2, p, dof))
print(expected)
# result
Test Statistic: 133.87601246919445
p-value: 7.901201277473551e-29
Degree of Freedom: 3
[[1300.51592852 4405.15182595 2818.93745144  378.39479409]
 [ 579.48407148 1962.84817405 1256.06254856  168.60520591]]

Q10. ✅

각 job에 따라 divorced/married 인원의 비율을 확인 했을 때 그 값이 가장 높은 값은?

# s
(
df[df['marital'] == 'divorced'].groupby('job')['marital'].count() / 
df[df['marital'] == 'married'].groupby('job')['marital'].count()
).sort_values(ascending=False).values[0]


# 
g = df.groupby(['job','marital']).size().reset_index()
pivotdf = g.pivot_table(index='job',columns='marital')[0]
pivotdf = pivotdf.fillna(0)
pivotdf['ratio'] = pivotdf['divorced'] / pivotdf['married']

result = pivotdf.sort_values('ratio').ratio.values[-1]
print(result)

0개의 댓글