범주형 feature -> 수치형 target

 

카이제곱 검정, ttest, ANOVA 검정에서의 p_value의 의미 

 

  t-검정

 

- 귀무가설 : 집단의 평균 간에 차이가 없을 것이다.

- p-value < 0.05 : 귀무 가설 기각, 집단 간의 평균에 유의미한 차이가 있다.

 

  카이제곱 검정

 

- 귀무가설 : 두 집단의 빈도 분포가 독립적이다.

- p-value < 0.05 : 귀무 가설 기각, 두 집단의 빈도 분포가 독립적이지 않을 것이다.

 

  ANOVA 

 

- 귀무가설 : 집단(세 개 이상)의 평균 간에 차이가 없을 것이다.

- p-value < 0.05 : 귀무 가설 기각, 집단 간의 평균에 유의미한 차이가 있다.

 

 

(1) Gender

plt.figure(figsize = (15,8))
sns.barplot(x='Gender', y='Score_diff_total', data = base_data)
plt.grid()
plt.show()

 

 

## 범주 데이터 확인 : value_counts()
base_data['Gender'].value_counts()

 

 

## 평균 분석 : ttest_ind

t_male = base_data.loc[base_data['Gender']=='M', 'Score_diff_total']
t_female = base_data.loc[base_data['Gender']=='F', 'Score_diff_total']

spst.ttest_ind(t_male, t_female)

 

 

3-2-2) 학습목표

 

# 그래프 분석 : barplot

plt.figure(figsize = (15,8))
sns.barplot(x='학습목표', y='Score_diff_total', data = base_data)
plt.grid()
plt.show()

 

 

## 범주 데이터 확인 : value_counts()
base_data['학습목표'].value_counts()

## 분산 분석 : f_oneway

anova_1 = base_data.loc[base_data['학습목표']=='승진', 'Score_diff_total']
anova_2 = base_data.loc[base_data['학습목표']=='자기계발', 'Score_diff_total']
anova_3 = base_data.loc[base_data['학습목표']=='취업', 'Score_diff_total']

spst.f_oneway(anova_1, anova_2, anova_3)

 

 

3-2-3) 학습방법

 

## 그래프 분석 : barplot

plt.figure(figsize = (15,8))
sns.barplot(x='학습방법', y='Score_diff_total', data = base_data)
plt.grid()
plt.show()

 

 

## 범주 데이터 확인 : value_counts()
base_data['학습방법'].value_counts()

 

 

## 분산 분석 : f_oneway

anova_1 = base_data.loc[base_data['학습방법']=='온라인강의', 'Score_diff_total']
anova_2 = base_data.loc[base_data['학습방법']=='오프라인강의', 'Score_diff_total']
anova_3 = base_data.loc[base_data['학습방법']=='참고서', 'Score_diff_total']

spst.f_oneway(anova_1, anova_2, anova_3)

 

 

  3-2-4) 강의 학습 교재 유형

 

## 그래프 분석 : barplot

plt.figure(figsize = (15,8))
sns.barplot(x='강의 학습 교재 유형', y='Score_diff_total', data = base_data)
plt.grid()
plt.show()

 

 

 

## 범주 데이터 확인 : value_counts()
base_data['강의 학습 교재 유형'].value_counts()

 

 

## 분산 분석 : f_oneway

anova_1 = base_data.loc[base_data['강의 학습 교재 유형']=='일반적인 영어 텍스트 기반 교재', 'Score_diff_total']
anova_2 = base_data.loc[base_data['강의 학습 교재 유형']=='영상 교재', 'Score_diff_total']
anova_3 = base_data.loc[base_data['강의 학습 교재 유형']=='뉴스/이슈 기반 교재', 'Score_diff_total']
anova_4 = base_data.loc[base_data['강의 학습 교재 유형']=='비즈니스 시뮬레이션(Role Play)', 'Score_diff_total']

spst.f_oneway(anova_1, anova_2, anova_3, anova_4)

 

 

 3-2-6) 취약분야 인지 여부

 

## 그래프 분석 : barplot

plt.figure(figsize = (15,8))
sns.barplot(x='취약분야 인지 여부', y='Score_diff_total', data = base_data)
plt.grid()
plt.show()

 

 

## 범주 데이터 확인 : value_counts()

base_data['취약분야 인지 여부'].value_counts()

 

## 평균 분석 : ttest_ind

t_yes = base_data.loc[base_data['취약분야 인지 여부']=='알고 있음', 'Score_diff_total']
t_no = base_data.loc[base_data['취약분야 인지 여부']=='알고 있지 않음', 'Score_diff_total']

spst.ttest_ind(t_yes, t_no)

 

 

3-1) 수치형 feature --> 수치형 target

  • 수치형 변수 리스트 만들기
# 수치형 변수 리스트 정의

col_num = ['Birth_Year','3rd_LC_Score','3rd_RC_Score','3rd_Total_Score', '기출문제 공부 횟수','토익 모의테스트 횟수', '1st_LC_Score', '1st_RC_Score', '1st_Total_Score',
            '2nd_LC_Score', '2nd_RC_Score', '2nd_Total_Score', 'Score_diff_total']
base_data[col_num]

 

 

  • 숫자형 데이터의 상호 상관관계
## 데이터 프레임의 상관계수 도출하기 : corr

base_data[col_num].corr()

 

 

  • 상관계수 시각화
## 상관계수값을 heatmap을 이용하여 시각화 : heatmap

plt.figure(figsize = (12,12))
sns.heatmap(base_data[col_num].corr(),cmap="PiYG", annot=True,  vmin=-1, vmax=1)
plt.show()

 

 

 3-1-2) 기출문제 공부 횟수

 

## 상관분석 (pearsonr)

spst.pearsonr(base_data['기출문제 공부 횟수'], base_data['Score_diff_total'])

## regplot으로 시각화
plt.figure(figsize = (12,8))
sns.regplot(x = '기출문제 공부 횟수', y= 'Score_diff_total', data = base_data)
plt.grid()
plt.show()

 

 

3-1-3) 토익 모의테스트 횟수

 

## 상관분석 (pearsonr)

spst.pearsonr(base_data['토익 모의테스트 횟수'], base_data['Score_diff_total'])

 

## regplot으로 시각화

plt.figure(figsize = (15,8))
sns.regplot(x = '토익 모의테스트 횟수', y= 'Score_diff_total', data = base_data)
plt.grid()
plt.show()

 

 

3-1-4) 2차 종합점수

 

## 상관분석 (pearsonr)

spst.pearsonr(base_data['2nd_Total_Score'], base_data['Score_diff_total'])

 

 

## regplot으로 시각화
plt.figure(figsize = (15,8))
sns.regplot(x = '2nd_Total_Score', y= 'Score_diff_total', data = base_data)
plt.grid()
plt.show()

 

 (3) 수치형 변수

  • 분석 방법 : 기초 통계, 히스토그램, boxplot
  • 대상 변수 : 'Birth_Year', '기출문제 공부 횟수','토익 모의테스트 횟수', '1st_Total_Score', '2st_Total_Score'

 

 2-3-1) Bitrh_Year

 

## 수치형 변수의 기초 통계량 확인 : describe

display(base_data[['Birth_Year']].describe().T)

## 그래프 분석 : histplot, boxplot

plt.figure(figsize = (12,8))
plt.subplot(2,1,1)

## 히스토그램을 이용한 데이터 분포 확인
sns.histplot(x = 'Birth_Year', data = base_data, kde = True, bins = 35)
plt.grid()

plt.subplot(2,1,2)
## boxplot 이용한 데이터 분포 확인
sns.boxplot(x = 'Birth_Year', data = base_data)
plt.grid()

plt.show()

 

 

2-3-2) 기출문제 공부 횟수

 

## 수치형 변수의 기초 통계량 확인 : describe

display(base_data[['기출문제 공부 횟수']].describe().T)

## 그래프 분석 : histplot, boxplot

plt.figure(figsize = (12,8))
plt.subplot(2,1,1)

## 히스토그램을 이용한 데이터 분포 확인

sns.histplot(x = '기출문제 공부 횟수', data = base_data, kde = True)
plt.grid()

plt.subplot(2,1,2)

## boxplot 이용한 데이터 분포 확인
sns.boxplot(x = '기출문제 공부 횟수', data = base_data)
plt.grid()

plt.show()

 

 

2-3-3) 토익 모의테스트 횟수

 

## 수치형 변수의 기초 통계량 확인 : describe
display(base_data[['토익 모의테스트 횟수']].describe().T)

## 그래프 분석 : histplot, boxplot
plt.figure(figsize = (12,8))

plt.subplot(2,1,1)
## 히스토그램을 이용한 데이터 분포 확인
sns.histplot(x = '토익 모의테스트 횟수', data = base_data, kde = True)
plt.grid()

plt.subplot(2,1,2)
## boxplot 이용한 데이터 분포 확인
sns.boxplot(x = '토익 모의테스트 횟수', data = base_data)
plt.grid()

plt.show()

 

 

2-3-4) 1st_Total_Score

 

## 수치형 변수의 기초 통계량 확인 : describe
display(base_data[['1st_Total_Score']].describe().T)

## 그래프 분석 : histplot, boxplot
plt.figure(figsize = (12,8))
plt.subplot(2,1,1)

## 히스토그램을 이용한 데이터 분포 확인
sns.histplot(x = '1st_Total_Score', data = base_data, kde = True)
plt.grid()

plt.subplot(2,1,2)
## boxplot 이용한 데이터 분포 확인
sns.boxplot(x = '1st_Total_Score', data = base_data)
plt.grid()

plt.show()

 

 

2-3-5) 2nd_Total_Score

 

## 수치형 변수의 기초 통계량 확인 : describe
display(base_data[['2nd_Total_Score']].describe().T)

## 그래프 분석 : histplot, boxplot
plt.figure(figsize = (12,8))

plt.subplot(2,1,1)
## 히스토그램을 이용한 데이터 분포 확인
sns.histplot(x = '2nd_Total_Score', data = base_data, kde = True)
plt.grid()

plt.subplot(2,1,2)
## boxplot 이용한 데이터 분포 확인
sns.boxplot(x = '2nd_Total_Score', data = base_data)
plt.grid()

plt.show()

 

단변량 분석

  • 주요 변수들의 분포를 살펴보며 비즈니스를 파악합시다.
  • 단일 변수로 분석
    • 숫자형 변수 : 기초통계량, 히스토그램, kdeplot, 박스플롯
    • 범주형 변수 : 범주별 빈도수, 바 플롯

 

(1) 최종 차수 점수 변화(Score_diff_total)

 

## 'Score_diff_total' 변수의 기초통계량 확인
display(base_data[['Score_diff_total']].describe().T)

plt.figure(figsize = (12,8))

## 'Score_diff_total' 변수의 histplot그리기

plt.subplot(2,1,1)
sns.histplot(x = 'Score_diff_total', data = base_data, kde = True)
plt.grid()

## 'Score_diff_total' 변수의 boxplot 그리기

plt.subplot(2,1,2)
sns.boxplot(x = 'Score_diff_total', data = base_data)
plt.grid()

plt.show()

 

 

## 'Score_diff_total' 변수의 kdeplot 그리기

sns.kdeplot(x = 'Score_diff_total', data = base_data)
plt.grid()

plt.show()

 

 (2) 범주형 변수

  • 분석 방법 : 범주별 빈도수, countplot
  • 대상 변수 : Gender, 학습목표, 학습방법, 강의 학습 교재 유형, 학습빈도, 취약분야 인지 여부

 

2-2-1) 'Gender'

## 범주형 변수의 범주별 빈도수 확인하기 : value_counts()

print(base_data['Gender'].value_counts())

## 범주형 변수의 범주별 빈도 비율 확인하기 : value_counts() / df.shape[0]
print(base_data['Gender'].value_counts()/base_data.shape[0])

## 그래프 분석하기 : countplot()

plt.figure(figsize=(8, 5))
sns.countplot(x = 'Gender', data = base_data)
plt.title('Gender 현황')
plt.grid()
plt.show()

 

 

 2-2-2) 학습목표

## 범주형 변수의 범주별 빈도수 확인하기 : value_counts()
print(base_data['학습목표'].value_counts())

## 범주형 변수의 범주별 빈도 비율 확인하기 : value_counts() / df.shape[0]
print(base_data['학습목표'].value_counts()/base_data.shape[0])

## 그래프 분석하기 : countplot()

plt.figure(figsize=(8, 5))
sns.countplot(x = '학습목표', data = base_data)
plt.title('학습목표 현황')
plt.grid()
plt.show()

 

 

2-2-3) 학습방법

 

## 범주형 변수의 범주별 빈도수 확인하기 : value_counts()
print(base_data['학습방법'].value_counts())

## 범주형 변수의 범주별 빈도 비율 확인하기 : value_counts() / df.shape[0]
print(base_data['학습방법'].value_counts()/base_data.shape[0])

## 그래프 분석하기 : countplot()

plt.figure(figsize=(8, 5))
sns.countplot(x = '학습방법', data = base_data)
plt.title('학습방법 현황')
plt.grid()
plt.show()

 

 

  2-2-4) 강의 학습 교재 유형

 

## 범주형 변수의 범주별 빈도수 확인하기 : value_counts()

print(base_data['강의 학습 교재 유형'].value_counts())

## 범주형 변수의 범주별 빈도 비율 확인하기 : value_counts() / df.shape[0]
print(base_data['강의 학습 교재 유형'].value_counts()/base_data.shape[0])

## 그래프 분석하기 : countplot()

plt.figure(figsize=(8, 5))
sns.countplot(x = '강의 학습 교재 유형', data = base_data)
plt.title('강의 학습 교재 유형 현황')
plt.grid()
plt.show()

 

 

2-2-5) 학습빈도

## 범주형 변수의 범주별 빈도수 확인하기 : value_counts()

print(base_data['학습빈도'].value_counts())

## 범주형 변수의 범주별 빈도 비율 확인하기 : value_counts() / df.shape[0]
print(base_data['학습빈도'].value_counts()/base_data.shape[0])

## 그래프 분석하기 : countplot()

plt.figure(figsize=(8, 5))
sns.countplot(x = '학습빈도', data = base_data)
plt.title('학습빈도 현황')
plt.grid()
plt.show()

 

  2-2-6) 취약분야 인지 여부

 

## 범주형 변수의 범주별 빈도수 확인하기 : value_counts()

print(base_data['취약분야 인지 여부'].value_counts())
## 범주형 변수의 범주별 빈도 비율 확인하기 : value_counts() / df.shape[0]
print(base_data['취약분야 인지 여부'].value_counts()/base_data.shape[0])

## 그래프 분석하기 : countplot()
plt.figure(figsize=(8, 5))
sns.countplot(x = '취약분야 인지 여부', data = base_data)
plt.title('취약분야 인지 여부 현황')
plt.grid()
plt.show()

 

[단지별 공통 정보]와 [단지 상세 정보] 분리 및 중복 제거

 

(1) 공통정보/상세정보 분리

  • [단지별 공통 정보]
    • 대상 컬럼 : 단지코드, 총 세대수, 지역, 공가수, 도보 10분거리 내 지하철역 수(환승노선 수 반영), 도보 10분거리 내 버스정류장 수, 등록 차량수
    • 변수명 : danji_main

 

  • [단지 상세 정보]
    • 대상 컬럼 : 단지 코드, 임대건물구분, 공급유형, 전용면적, 전용면적별세대수, 임대보증금, 임대료
    • 변수명 : danji_detail
## 단지별 공통 정보 

danji_vars = ['단지코드', '총세대수', '지역', '공가수', '도보 10분거리 내 지하철역 수(환승노선 수 반영)','도보 10분거리 내 버스정류장 수', '등록차량수']
danji_main = data[danji_vars].copy()


# 단지 상세 정보
danji_detail_vars = ['단지코드', '임대건물구분', '공급유형', '전용면적', '전용면적별세대수', '임대보증금', '임대료']
danji_detail = data[danji_detail_vars].copy()

 

(2) 전체 데이터의 모든 변수명 (columns) 확인 긴 글자로 된 column명 변경하기

  • '도보 10분거리 내 지하철역 수(환승노선 수 반영)' ==> '지하철역수'
  • '도보 10분거리 내 버스정류장 수' ==> '버스정류장수'
##  컬럼 변경 하기 : rename

danji_main.rename(columns={'도보 10분거리 내 지하철역 수(환승노선 수 반영)' : '지하철역수',
                           '도보 10분거리 내 버스정류장 수' : '버스정류장수'}, inplace=True)
danji_main

 

 

(3) [단지별 공통 정보]의 중복행 제거하기

 

## 중복행 제거 : drop_duplicates

danji_main.drop_duplicates(subset=None, keep='first', inplace=True, ignore_index=False)
danji_main.head()

 

 

# 단지 코드별 행 개수를 체크하여 중복 제거가 잘 되었는지 확인  : groupby 활용
# groupby로 count한 값이 1보다 큰 출력값은 중복임

## '단지코드'별로 그룹핑하여 '총세대수' 열의 개수를 세기 (count)
## unique_check 변수에 저장하기
unique_check = danji_main.groupby('단지코드', as_index = False)['총세대수'].count()

# unique_check 데이터프레임의 컬럼명을 ['단지코드','count']로 컬럼 이름 바꾸기 
unique_check.columns = ['단지코드', 'count']

# unique_check 데이터프레임 중 'count'열이 1보다 큰 경우를 조회하기
unique_check.loc[unique_check['count']>1]

 



미니 프로젝트 2_2일차 <주택 데이터 처리>

 

컬럼 데이터 이름 변경 - replace

 

데이터프레임['컬럼명1'] 
= 데이터프레임['컬럼명1'].replace({변경 전 이름 : 변경 후 이름,
                                                        변경 전 이름: 변경 후 이름 }

 

열 이름 변경

 

데이터프레임.rename( columns = { '변경 전 컬럼 이름' : '변경 후 컬럼 이름', 
                                            변경 전 컬럼 이름' : '변경 후 컬럼 이름' } )

 

중복 제거 drop duplicates

 

데이터프레임.drop_duplicates()

 

열 이름 변경 - 통째로

 

데이터프레임.columns = ['변경 전 이름', '변경 후 이름']

 

컬럼이름 변경

 

change_list = ['공공임대(10년)', '공공임대(50년)', '공공임대(5년)', '공공임대(분납)']

데이터프레임.loc[데이터프레임['컬럼 원래 이름'],isin(change_list),'컬럼 원래 이름'] = '공공임대'

 

데이터프레임 pd.cut

 

bins [-np.inf, 숫자, 숫자, 숫자, np.inf]
labels = [라벨이름, 라벨이름]
데이터프레임['새로운 컬럼명'] = pd.cut( 데이터프레임['컬럼명'], bins=bin, laels = label)

tip['새로운 컬럼명'].value_counts()

+ Recent posts