자신에게 친절할 것 :)

Data Science/Pandas

[EDA] 값 추가, 문자열 필터링 .str.contains(''), 값 분리, .str.split()

Tashapark 2024. 6. 7. 16:16
728x90
반응형

# 코드잇 데이터 사이언스 강의 듣는 중


<값 더하기>

- .sum(axis='colums') 

- 전처리 단계에서 필요한 변수 생성할 때 유용함. 일일히 행렬 값을 전부 치지 않아도 됨. 

df.sum(axis='columns')

#변수에 넣어주면 계산하기가 더 편해짐
df['Total']= df.sum(axis='columns')

 

--> then, 값이 마지막 열로 바로 추가됨. 

 

 

 

 

 

 

 

- 직선 그래프는 y='' 만 넣어주면 됨. 

df.plot(y='Total')

 

--> 명백하게 해가 지날 수록 tv 시청률이 줄어드는 것을 확인 가능

 

 

 

 

 

 

 

 

 

- 지상파/종편 비교 하고 싶으면, 각 값을 생성해주면 됨.

df['Group1'] = df.loc[:,'KBS':'SBS'].sum(axis='columns')
df['Group2'] = df.loc[:,'TV CHOSUN':'MBN'].sum(axis='columns')

 

- 마찬가지로 비교하고 싶은 y값에 둘 다 넣어주면 됨. 

df.plot(y=['Group1', 'Group2'])

 

 

--> 지상파는 확실한 감소세지만, 종편은 미약하게나마 상승했음을 확인 가능합니다!

 

 

 

 

 

 

 

 

++

- spss로 척도를 요인 별로 묶거나, 총점을 구할 때 많이 사용했는데..

- spss syntax도 일일이 변수 명을 더해줬어야 했다... 그것도 오류 발생 부분을 확인할 수 있어서 편하다고 생각했는데, 

확실히 슬라이싱을 쓰니깐 더 빠르게 넣을 수 있어서 좋은 것 같다. 

 


<문자열 필터링>

- .str.contains(' ') --> 불린 값으로 필터링 됨. 

 

- 장르의 종류를 확인 --> .unique()

df['Genre'].unique()

 

--> 이런 식으로 여러 가지가 나오면 그 중에 어떤 것을 픽할지 고민할 수 있음. 

--> .unique()를 언제나 떠올릴 것. 

 

 

 

 

 

- Blues가 포함된 것을 전부 가지고 오고 싶음. --> 불린 인덱싱

df[df['Genre'] =='Blues']

 

--> 이렇게 하면, 정확히 'Blues'인 것만 가지고 오게 됨. 

 

 

 

 

 

 

 

- Blues 단어가 포함된 것을 전부 가지고 오고 싶으면, --> .str.contains('') 

df[df['Genre'].str.contains('Blues')]

 

--> blues가 포함된 것을 전부 다 가지고 옴

 

 

 

 

 

 

- Blues가 메인인 것을 가지고 오려고, 블루스로 시작하는 것만을 가지고 오고 싶음 --> .str.startswith(' ')

df[df['Genre'].str.startswith('Blues')]

 

 

--> 시작되는 것만 가지고 왔음. 

 

 

 

 

 

 

- 블루스가 포함되는 지 아닌지 여부로 불린 값 벡터를 추가 가능함.

df['Contains Blues'] = df['Genre'].str.contains('Blues')

 

 

--> 필요한 대로 만들어서 쓰면 됨. 

 

 

 

 

 

 

++ 확실히, 데이터를 이리저리 처리하는 방법을 배우는 듯. 

- 심통은 이론 위주로 알려주고 spss를 활용해서 gui상에서 그냥 알아서 해야 했는데,

이렇게 배우니까 새롭긴 하다. 특히 불린은 전혀 배우지 못했던 것이라 신기하기도 하고. 

 


<예제1>

- 문자열 필터링 한 값으로 벡터를 만들고, true와 false 값에 각각 문자 부여하기.

- 처음에 df[]로 해서 전체 데이터 값이 다 바뀌어서.. 뭐지.. 하다가 .loc[조건, '해당 벡터']로 하니깐 맞게 잘 되었음.

- 나중에 헷갈릴까봐 넣어둠. 

df['분류'] = df['시설명'].str.contains('대학')

df.loc[df['분류'] == True, '분류'] = '대학'
df.loc[df['분류'] == False, '분류'] = '일반'

df

 


<문자열 분리>

- .str.split() --> 띄어쓰기 별로 다 띄어줌. 

 

--> 리스트로 만들어주니깐 이게 필요하면 이걸로 하면 됨. 

 

 

 

 

 

 

- .str.split(n=1) --> 띄어쓰기 1번 째만 해주고 뒤는 붙여줌.  

 

--> n =2면, 띄어쓰기 2번째 꺼까지 ,로 띄어줌.

 

 

 

 

 

 

 

- .str.split(n=2, expand = True) --> 띄어쓰기 2번 째까지 해주고 뒤는 붙인 후, 리스트가 아닌 dataframe으로 만들어줌.

 

--> 편하게 필요한 열을 기존 데이터에 추가해주기만 하면 됨. 

 

 

 

 

 

 

- 따로 벡터를 만들어줌. 

address = df['소재지도로명주소'].str.split(n=1, expand= True)

 

--> 필요한 0번째 벡터만 가지고 옴

 

 

 

 

 

 

 

 

- 분리된 값을 기존 데이터에 추가해줌. 

df['관할구역'] = address[0]
df

 

--> 이렇게 하면 관할구역으로 인사이트를 고민가능해짐. 

 

 

 

 

 

 

 

- 특정 문자열로 구분하고 싶으면

1) split 안에 바로 '문자열'를 넣어주면 됨. 

2) or pat='' 에 넣어줘도 됨. 

local_num = df['운영기관전화번호'].str.split('-', expand= True)
df['지역번호'] = local_num[0]

#혹은 pat=''로 넣어도 됨
phone_number = df['운영기관전화번호'].str.split(pat='-', n=2, expand=True)

 

 

728x90
반응형