Diary, Data, IT

[TIL] 7일차 TIL(20230214) - 데이터 전처리 및 다중막대그래프 본문

STARTERS/TIL

[TIL] 7일차 TIL(20230214) - 데이터 전처리 및 다중막대그래프

라딘 2023. 2. 14. 17:17

 

[TIL] 7일차 TIL(20230214) - 데이터 전처리 및 다중막대그래프

 

 


1. 데이터프레임 문자열 전처리

- df[column].str[0]: 칼럼의 각 문자열(리스트)의 첫번째 값 가져오기
- df[column].str.find('찾을 문자열'): 해당 문자열이 존재하면 시작 인덱스를 반환, 없으면 -1
- find를 이용해서 df[df[column].str.find('찾을 문자열') > 0]을 하면 원하는 문자열을 포함한 행만 가져올 수 있음

 

ex) ,가 포함된 숫자 칼럼을 int형으로 바꾸기
- df[col].str.replace(',','').astype('int64')
- replace를 통해 ,를 제거해주고 int형으로 바꿔줄 수 있음

 

 

2. 결측치가 아닌 행 추출

- df[df[col].notnull()]

 

 

3. 특정 칼럼에 존재하는 결측치 제거

- df.dropna(subset = [column])

 


4. 다중막대그래프

- 축을 숫자로 설정해주면 축+- 지정을 통해 막대의 위치를 조금씩 움직일 수 있다.(np.arange 사용)
- 축을 조금씩 다르게 해준 막대 그래프를 여러개 겹쳐서 그리면 여러개의 정보를 담은 다중막대그래프를 그릴 수 있음

#인덱스 생성
import numpy as np
x_index = np.arange(1, len(df_84_price)+1)

#그래프 그리기
plt.figure(figsize = (15, 5))

plt.bar(x_index-0.3, df_84_price['최대'], width = 0.2, align = 'edge', label = '최대')
plt.bar(x_index-0.1, df_84_price['평균'], width = 0.2, align = 'edge', label = '평균')
plt.bar(x_index+0.1, df_84_price['중간'], width = 0.2, align = 'edge', label = '중간')
plt.bar(x_index+0.3, df_84_price['최소'], width = 0.2, align = 'edge', label = '최소')
plt.xticks(x_index, labels = df_84_price.index, rotation = 45)
plt.grid(axis = 'y', ls = ':')

plt.title('시도별 아파트 매매가 현황(84㎡)', size = 20)
plt.ylabel('매매가(만원)')
plt.legend()
plt.show()

 


5. 얕은복사, 깊은복사

- df.copy(): 데이터프레임을 깊은복사하여 다른 메모리 주소를 가지는 독립적인 객체로 생성

- df2 = df1: 데이터프레임을 얕은복사하는 것으로 한 데이터프레임의 값을 수정하게되면 둘 다 값이 변경됨

- 원본을 따로 저장하고 수정을 방지하기 위해서는 깊은복사(copy)를 사용해야함

 

 


 

소감 및 정리

어제에 이어 실제 데이터를 활용해서 그래프를 그려보는 학습을 추가적으로 진행했다. 오늘은 좀 더 복잡한 그래프를 그리기도 하고, 그동안 배웠던 내용을 복습하고 손에 익힐 수 있었다. 본문에 수록한 다중막대그래프는 처음 그려보는 그래프였는데, 축을 자유자재로 활용할 수 있다는 점이 신기했고 알아두면 유용하게 사용할 수 있을 것 같다. 또 다룬 데이터에 기본적으로 문자열 데이터가 포함되어있어서 문자열을 처리하는 법에 대해 배웠는데, 해당 함수들을 사용하면 간단하게 문자열을 수정할 수 있다는 점에서 활용도가 높아보여 꼭 알아두어야겠다.