[TIL] ols : 변수명의 공백과 특수문자 해결하기
회귀분석 실습 오류
ols 모듈을 이용해 파이썬으로 회귀분석을 실습해 보았다.
import pandas as pd
from statsmodels.formula.api import ols
data5 = pd.read_excel("야매 데이터.xlsx")
불러 온 파일은, 실습을 위해 임의로 만든 데이터...
선호도를 종속변수로 회귀 분석을 하려 했다.
res5 = ols('선호도 ~ 빵,케잌 맛 + 커피 맛(아메리카노 기준) + 콘센트 적합도 + 화장실 퀄리티 + 공부 분위기 + 접근성 + 가격',
data = data5).fit()
그런데 웬걸! SyntaxError ㅠㅠ column명에 공백이 있어서 그런 모양..
실습 오류 해결기 0 : 방향 잡기
column 이름 자체를 변경하면 될 것 같았다.
오류가 나는 공백을 처리하기로 했다.
실습 오류 해결기 1 : 공백 치환
먼저 데이터의 모든 column명을 list에 넣고,
list comprehension으로 공백을 언더바로 바꿔주었다.
col_list = list(data5.columns)
col_list = [k.replace(" ","_") for k in col_list]
['카페_이름',
'빵,케잌_맛',
'커피_맛(아메리카노_기준)',
'콘센트_적합도',
'화장실_퀄리티',
'공부_분위기',
'접근성',
'가격',
'선호도']
데이터의 column명도 앞서 만든 리스트로 업데이트한다.
data5.columns = col_list
다시 ols에 넣어보지만,
res5 = ols('선호도 ~ 카페_이름 + 빵,케잌_맛 + 커피_맛(아메리카노_기준) + 콘센트_적합도 + 화장실_퀄리티 + 공부_분위기 + 접근성 + 가격',
data = data5).fit()
여전한 오류.
특수문자 때문인 것.
쉼표와 괄호도 처리해야 한다...
이 역시도 replace를 써서 앞선 과정을 응용할 수 있다.
col_list= [k.replace(",","_") for k in col_list]
하지만 괄호 ()도 처리해 주어야 하는 걸?
실습 오류 해결기2 : 정규표현식
깔끔하고 간편한 코드를 위해 정규표현식을 써보기로 했다.
re.sub(정규표현식, 치환 값, 문자)
해당 문자의 정규표현식에 해당하는 값을,
원하는 문자로 치환할 수 있다!여기서는 '_'로 바꾸지만 ''로 바꿔서 아예 없애도 된다.
import re
for k in range(len(col_list)):
filtered_col = re.sub(r'[^\d\w]', '_',col_list[k])
col_list[k] = filtered_col
^는 제외한다는 표시
d와 w는 각각 숫자와 문자 (공백은 s)
collist[k]의 숫자와 문자를 제외하고 ''로 변경하라는 명령
즉. 특수문자와 공백은 '_'로 바꿔라
['카페_이름',
'빵_케잌_맛',
'커피_맛_아메리카노_기준_',
'콘센트_적합도',
'화장실_퀄리티',
'공부_분위기',
'접근성',
'가격',
'선호도']
잘 변경했다면 잊지말고 데이터 column에 넣어주기. 그래야 ols 구문을 적용할 수 있다.
data5.columns = col_list
res5 = ols('선호도 ~ 빵_케잌_맛 + 커피_맛_아메리카노_기준_ + 콘센트_적합도 + 화장실_퀄리티 + 공부_분위기 + 접근성 + 가격',
data = data5).fit()
다시 넣어주면 오류 없이 넘어간다.
1번 과정은 버리고, 2번 과정 하나만 거치면 된다!!!
정리하자면
data5 = pd.read_excel("야매 데이터.xlsx")
col_list = list(data5.columns)
import re
for k in range(len(col_list)):
filtered_col = re.sub(r'[^\d\w]', '_',col_list[k])
col_list[k] = filtered_col
data5.columns = col_list
이렇게 해서 column명을 처리할 수 있다
추가로
독립변수 쓸 때, column명 출력해서 복붙하면, 작은 따옴표 지우랴 쉼표 지우랴 귀찮으니까...
column명을 join해주면,
text_join = ' + '.join(data5.columns)
text_join
'카페_이름 + 빵_케잌_맛 + 커피_맛_아메리카노_기준_ + 콘센트_적합도 + 화장실_퀄리티 + 공부_분위기 + 접근성 + 가격 + 선호도'
깔끔하게 +로 연결되어서 나온다.
'선호도'는 종속변수니까 지우고
ols 독립변수 자리에 붙여넣기 하면 된다. (종속변수 제외하고 join하는 것도 코드로 짤 수 있을 것 같은데 더 생각해보지 않았다)
(f-string도 될 것 같은데 생각하기 귀찮다)
첫 TIL 끝! 다음에는 더 빠르게 쓰고 싶어요 ..
Author And Source
이 문제에 관하여([TIL] ols : 변수명의 공백과 특수문자 해결하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@saeminii/TIL-ols-변수명의-공백과-특수문자-해결하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)