728x90
이전 내용은 아래 글에서 확인 하실 수 있습니다.
[Data Analysis/공공 데이터] - [공공 데이터] 따릉이 데이터 분석 1 (데이터 확인 / 질문하기)
[공공 데이터] 따릉이 데이터 분석 1 (데이터 확인 / 질문하기)
따릉이 데이터 분석 데이터 출처 : https://data.seoul.go.kr/dataList/datasetList.do 서울 열린데이터 광장에서 제공하는 서울시 공공자전거 이용현황 데이터 - Data 1 : 서울특별시 공공자전거 대..
sks8410.tistory.com
3. 데이터 전처리
3-1 컬럼명 바꾸기
# bike_1 데이터 컬럼명 바꾸기
bike_1.columns = ['대여소번호', '대여소명', '자치구', '상세주소', '위도', '경도', '설치시기', '거치대수lcd',
'거치대수qr', '운영방식']
bike_1.head(1)
# bike_2 데이터 컬럼명 바꾸기
bike_2.columns = ['대여소명', '대여일자/월', '대여건수']
bike_2.head(1)
3-2 필요없는 컬럼 삭제하기
# bike_1 데이터의 상세주소, 위도, 경도 컬럼 삭제
bike_1 = bike_1.drop(["상세주소", "위도", "경도"], axis = 1)
print(bike_1.shape)
bike_1.head()
3-3 결측치 처리하기
# bike_1 데이터에서 설치시기가 NaN 인 데이터는 수가 매우 적으므로 삭제
dp = bike_1[bike_1["설치시기"].isnull()]
bike_1 = bike_1.drop(dp.index)
bike_1.isnull().sum()
# bike_1 데이터에서 운영방식에 따라 LCD 또는 QR 거치대의 수가 결정되기 때문에
# 거치대수lcd, 거치대수qr 컬럼의 NaN 값은 0 으로 처리
bike_1 = bike_1.fillna(0)
bike_1.isnull().sum()
# 성별 컬럼 분류 확인
bike_3["성별"].unique()
- 성별이 대소문자가 섞여 있기 때문에 대문자로 통일하도록 하겠습니다.
- nan 값은 의미있는 다른 값으로 변경하기 어렵기 때문에 그대로 사용하겠습니다.
# bike_3 데이터의 성별 값 통일
bike_3[bike_3["성별"] == "f"] = "F"
bike_3[bike_3["성별"] == "m"] = "M"
bike_3["성별"].unique()
- bike_2 데이터의 대여소명 앞자리 숫자가 대여소번호와 동일하기 때문에 숫자를 분리해서 대여소번호라는 컬럼 값으로 지정하도록 하겠습니다.
# bike_2 데이터의 대여소명 앞 숫자 분리
bike_2["대여소번호"] = bike_2["대여소명"].str.split(".", expand = True)[0]
# 대여소명은 숫자를 땐 값으로 새로운 컬럼 값으로 지정
bike_2["대여소명_new"] = bike_2["대여소명"].str.split(".", expand = True)[1]
print(bike_2.shape)
print(bike_2.isnull().sum())
bike_2.head()
bike_2[bike_2["대여소명_new"].isnull()].head()
- 대여소명_new 값이 None 인 데이터는 센터, 정비실 등이므로 데이터에서 삭제하도록 하겠습니다.
# bike_2 데이터의 대여소명_new 값이 None 인 데이터 삭제
bike_2 = bike_2.dropna(subset = ["대여소명_new"])
print(bike_2.shape)
print(bike_2.isnull().sum())
bike_2.head()
# bike_3 데이터의 대여소명 앞의 숫자가 삭제된 새로운 대여소명 컬럼 생성
bike_3["대여소명_new"] = bike_3["대여소명"].str.split(".", expand = True)[1]
print(bike_3.shape)
print(bike_3.isnull().sum())
bike_3.head()
# bike_3 데이터의 대여소명_new 값이 None 인 데이터 삭제
bike_3 = bike_3.dropna(subset = ["대여소명_new"])
print(bike_3.shape)
print(bike_3.isnull().sum())
bike_3.head()
3-4 컬럼 타입 변경
# bike_1 데이터의 대여소번호를 object 타입으로 변경
bike_1["대여소번호"] = bike_1["대여소번호"].astype("object")
bike_1.info()
# bike_3 데이터의 이용건수, 이동거리, 사용시간을 수치형 데이터로 변경
bike_3["이용건수"] = pd.to_numeric(bike_3["이용건수"])
bike_3["이동거리"] = pd.to_numeric(bike_3["이동거리"])
bike_3["사용시간"] = pd.to_numeric(bike_3["사용시간"])
bike_3.info()
# bike_3 데이터의 운동량과 탄소량을 수치형으로 변경하려고 하면 "\N" 이라는 값 때문에 변경이 안됨
# (Unable to parse string "\N" at position 57)
# 따라서, "\N" 값을 -1 로 변경 후 수치형으로 변경 (-1 인 이유는 실제로 0인 데이터와 구분짓기 위함)
# bike_3 데이터의 운동량, 탄소량 컬럼의 "\N" 값을 -1 로 변경
bike_3["운동량"][bike_3["운동량"] == r"\N"] = -1
bike_3["탄소량"][bike_3["탄소량"] == r"\N"] = -1
# bike_3 데이터의 운동량, 탄소량 컬럼을 수치형으로 변경
bike_3["운동량"] = pd.to_numeric(bike_3["운동량"])
bike_3["탄소량"] = pd.to_numeric(bike_3["탄소량"])
bike_3.info()
# bike_1 데이터의 설치시기, bike_3 데이터의 대여일자를 날짜 타입으로 변경
bike_1["설치시기"] = pd.to_datetime(bike_1["설치시기"])
bike_3["대여일자"] = pd.to_datetime(bike_3["대여일자"])
bike_1.info()
#bike_3.info()
728x90
'Data Analysis > 공공 데이터' 카테고리의 다른 글
[공공 데이터] 따릉이 데이터 분석 3 (EDA / 시각화 / 리뷰) (0) | 2021.10.19 |
---|---|
[공공 데이터] 따릉이 데이터 분석 1 (데이터 확인 / 질문하기) (0) | 2021.10.14 |