---
# System prepended metadata

title: 제4회 북커톤 기본 데이터 전처리

---

# 제4회 북커톤 기본 데이터 전처리

주어진 데이터 파일은 다음과 같습니다.

- 2015 독서리뷰-수정.xlsx
- 2016 독서리뷰-수정.xlsx
- 2017 독서리뷰-수정.xlsx
- 2018 독서리뷰-수정.xlsx
- 2019-2020 독서리뷰-수정.xlsx
- 2021-2022.12.12 오거서 독서리뷰.xls

마지막 데이터를 제외하고 xlsx 형식입니다.
**"2021-2022.12.12 오거서 독서리뷰.xls"** 파일은 .xlsx으로 변환하여 저장하였습니다.

**2015~2018 데이터:** 도서명(또는 글제목), 저자명, ISBN, 글 내용
**2019~2022 데이터:** 번호, 작성일자, 프로그램명, 게시물번호, 글자수, 조회수, 추천수, 도서명(또는 글제목), 저자명, ISBN, 글 내용

각 열 중 다음의 데이터만 남겼습니다.

**2015~2018 데이터:** 도서명, 글 내용
**2019~2022 데이터:** 도서명(또는 글제목), 글 내용, 조회수

추천수는 대부분의 데이터가 0~3의 값만 가지고 있어 반영하기 어려워 제외하였습니다.


## 데이터 불러오기
```python
import pandas as pd
import numpy as np

# 2015~2018은 형식이 같음.
df1 = pd.read_excel('2015 독서리뷰-수정.xlsx', engine='openpyxl')
df2 = pd.read_excel('2016 독서리뷰-수정.xlsx', engine='openpyxl')
df3 = pd.read_excel('2017 독서리뷰-수정.xlsx', engine='openpyxl')
df4 = pd.read_excel('2018 독서리뷰-수정.xlsx', engine='openpyxl')

#df6는 xls파일로 되어 있는데 오류가 나서 xlxs파일로 저장함
df5 = pd.read_excel('2019-2020 독서리뷰-수정.xlsx', engine='openpyxl')
df6 = pd.read_excel('2021-2022.12.12 오거서 독서리뷰.xlsx', engine='openpyxl')
```


## 필요한 열만 선택
```python
df1 = df1.loc[1:,['Unnamed: 1', 'Unnamed: 4']].rename(columns={'Unnamed: 1':'도서명', 'Unnamed: 4':'글내용'})
df2 = df2.loc[1:,['Unnamed: 1', 'Unnamed: 4']].rename(columns={'Unnamed: 1':'도서명', 'Unnamed: 4':'글내용'})
df3 = df3.loc[1:,['Unnamed: 1', 'Unnamed: 4']].rename(columns={'Unnamed: 1':'도서명', 'Unnamed: 4':'글내용'})
df4 = df4.loc[1:,['Unnamed: 1', 'Unnamed: 4']].rename(columns={'Unnamed: 1':'도서명', 'Unnamed: 4':'글내용'})

df5 = df5.loc[1:,['Unnamed: 7', 'Unnamed: 10', 'Unnamed: 5']].rename(columns={'Unnamed: 7':'도서명', 'Unnamed: 10':'글내용', 'Unnamed: 5':'조회수'})
df6 = df6.loc[1:,['Unnamed: 12', 'Unnamed: 15', 'Unnamed: 10']].rename(columns={'Unnamed: 12':'도서명', 'Unnamed: 15':'글내용', 'Unnamed: 10':'조회수'})
```

## 결측치 제거
```python
#결측치 확인
print(df1.isna().sum())
print(df2.isna().sum())
print(df3.isna().sum())
print(df4.isna().sum())
print(df5.isna().sum())
print(df6.isna().sum())

#결측치 제거
df1.dropna(axis=0)
df2.dropna(axis=0)
df3.dropna(axis=0)
df4.dropna(axis=0)
df5.dropna(axis=0)
df6.dropna(axis=0)
```

결측치는 다음과 같았습니다.

**df1**
도서명     1
글내용    25
dtype: int64

**df2**
도서명    0
글내용    9
dtype: int64

**df3**
도서명    0
글내용    1
dtype: int64

**df4**
도서명    0
글내용    0
dtype: int64

**df5**
도서명    0
글내용    0
조회수    0
dtype: int64

**df6**
도서명     0
글내용    25
조회수     0
dtype: int64


## 데이터 관찰 결과

데이터를 관찰했을 때 고려해야할 것들을 정리해보았습니다.
확인해보시고 다른 고려해야할 점이 있다면 슬랙에 남겨주세요.

1. 이름, 학번, 프로그램명 존재 (2015~2018 파일에서)
2. 영어로 쓴 독후감 존재 -> 가끔 있더라구요
3. 블로그 주소 -> 가끔 자신의 블로그를 첨부했더라구요
> **예시)**
> - 본 독후감은 필자가 운영하는 블로그에 쓴 글에 추가 내용을 덧붙인 글입니다 -블로그 주소: blog.naver.com/thseotjrkin
4. 개행 -> 개행이 아예 안된 것, 개행이 2번씩 된 것 등등 존재
5. 아주 가끔 특수문자 존재 -> 가끔 있던데 왜있는지 모르겠습니다.
6. 매우 수준 낮은 글 -> 분량 채우기식, 비표준어를 사용한 글이 생각보다 있습니다.

## 데이터 활용 전략

제가 생각한 데이터 활용 전략은 다음과 같습니다.

> 1. 일정 수준 이상의 글자수를 가진 글만 뽑기
> 2. 2019~2022 데이터는 조회수 항목이 있는데 이를 기준으로 선별
> 3. 2019~2022 데이터는 글을 작성한 아이디가 존재 -> 글을 자주 썼거나 글을 자주 쓰는 아이디를 선별하여 적용

위 과정을 통해 전체 데이터의 10% 내외만 선별하여 활용하는 것이 좋을 것 같습니다.

혹은, 대회 당일 주제어가 주어지면, 주제어와 비슷한 유의어를 포함해서 관련한 글을 뽑는 것을 좋을 것 같습니다.

**<내용 추가 중 ... >**