๋ฌ๋์คํผ์ฆ ์์ ์ ๋ฆฌ
< ์ด์ ๊ธ >
https://silvercoding.tistory.com/56
[์๊ฐํ ๋ถ์ ํ๋ก์ ํธ] 1-3. ํน์ ํ์ ๊ฐํ ์ผ๊ตฌ์ ์ ๋ถ์ํ๊ธฐ
๋ฌ๋์คํผ์ฆ ์์ ์ ๋ฆฌ < ์ด์ ๊ธ > https://silvercoding.tistory.com/55 https://silvercoding.tistory.com/54 https://silvercoding.tistory.com/53 https://silvercoding.tistory.com/52 [python ์๊ฐํ] 1. se..
silvercoding.tistory.com
import pandas as pd
* pandas๋ก ํ์ผ ์ฝ์ด์ค๊ธฐ
< ๊ด๋ จ ์ฐธ๊ณ ๋ฌธ์ >
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html
pandas.read_excel — pandas 1.3.1 documentation
Additional strings to recognize as NA/NaN. If dict passed, specific per-column NA values. By default the following values are interpreted as NaN: ‘’, ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’, ‘-NaN’, ‘-nan’, ‘1.#IN
pandas.pydata.org
pandas ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ์ผ ๋ณํฉํ๊ธฐ
(1) ์์ ํ์ผ ํ๊ฐ ๋ถ๋ฌ์์ ์ดํด๋ณด๊ธฐ
* ํ์ผ : ์ผ์ / ๋ ธ์ / ์งํ์ฒ ์ญ ๋ณ ์นํ์ฐจ ๊ณ ๊ฐ ์ ( 2019๋ ์๋ฐ๊ธฐ - 1์ ~ 6์, ๋ฌ๋์คํผ์ฆ ์ ๊ณต )
file = './rawfiles/CARD_SUBWAY_MONTH_201901.csv'
raw = pd.read_csv(file)
raw.head()
raw.info()
์ด 18334 ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์๊ณ , ๊ฒฐ์ธก๊ฐ์ ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
(2) ๋๊ฐ ์์ ํ์ผ ํฉ์ณ๋ณด๊ธฐ
raw = pd.DataFrame() # ๋น ๋ฐ์ดํฐ ํ๋ ์ ์์ฑ
raw.head()
# ์ฒซ ๋ฒ์งธ ํ์ผ
file = './rawfiles/CARD_SUBWAY_MONTH_201901.csv'
temp = pd.read_csv(file)
# temp.head()
raw = raw.append(temp) # ๋ฐ์ดํฐ ํ๋ ์ ์ถ๊ฐ
# raw.head()
# ๋ ๋ฒ์งธ ํ์ผ
file = './rawfiles/CARD_SUBWAY_MONTH_201902.csv'
temp = pd.read_csv(file)
raw = raw.append(temp) # ๋ฐ์ดํฐ ํ๋ ์ ์ถ๊ฐ
raw.info()
์ฐ์ , ๋น ๋ฐ์ดํฐ ํ๋ ์์ ์์ฑํ ํ, ํ์ผ์ ์ฝ์ด ์์ append๋ฅผ ์ฌ์ฉํ์ฌ ๋น ๋ฐ์ดํฐ ํ๋ ์์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํด ์ค๋ค. ์ฌ๋ฌ๊ฐ์ ํ์ผ์ ํฉ์น๊ธฐ ์ํด์๋ ์ด๋ฌํ ๋ฐ๋ณต๋๋ ์์ ์ for๋ฌธ์ผ๋ก ์์ฑํด์ฃผ๋ฉด ๋๋ค.
(3) ํด๋์ ์๋ ๋ชจ๋ ์์ ํ์ผ ๋ณํฉํ๊ธฐ
- ํด๋ ์์ ํ์ผ ์ด๋ฆ ๊ฐ์ ธ์ค๊ธฐ
# ํด๋ , ํ์ผ์ ๊ด๋ฆฌํ๋ os ๋ผ์ด๋ธ๋ฌ๋ฆฌ
import os
os.listdir()
os.listdir() ์ ์ฌ์ฉํ์ฌ ํ์ฌ ํด๋์ ์๋ ํด๋์ ํ์ผ๋ค์ ์ด๋ฆ์ ๊ทธ๋๋ก ๊ฐ์ ธ์ฌ ์ ์๋ค.
dirpath = './rawfiles/'
files = os.listdir(dirpath)
files
๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ณธ ํฌ์คํ ์์ ์ฌ์ฉํ ํ์ฌ ํด๋ ์์ rawfiles์์ ํ์ผ๋ค์ ๋ถ๋ฌ ์จ๋ค.
์ด๋ฅผ ์ด์ฉํ์ฌ ์ผ์ผ์ด ํ์ผ ์ด๋ฆ์ ๋ณต๋ถํ์ง ์์๋ ํ์ผ์ ๋ถ๋ฌ์ฌ ์ ์๋ค.
- ๋ณํฉํ๊ธฐ
# ๋น ๋ฐ์ดํฐํ๋ ์ ์ค๋น
raw = pd.DataFrame()
# ๋ณํฉ
for file in os.listdir('./rawfiles'):
# print(file)
fpath = './rawfiles/'+file
print(fpath)
temp = pd.read_csv(fpath)
raw = raw.append(temp, ignore_index = True) #ignore_index = True --> ๊ธฐ์กด ์ธ๋ฑ์ค๋ ๋ฌด์ํ๋ผ.
์์ ๊ฐ์ด ๋น ๋ฐ์ดํฐํ๋ ์์ ํ์ผ์ ํ๋์ฉ ์ถ๊ฐํ๋ค. ignore_index=True๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ์กด ์ธ๋ฑ์ค๋ฅผ ๋ฌด์ํ์ง ์์ผ๋ฉด ์๋ ์์ ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ฑ์ค๊ฐ ๋ค์ฃฝ๋ฐ์ฃฝ์ผ๋ก ์ค์ ๋์ด ์๊ฒ๋๋ค. ์์๋๋ก ํด์ฃผ๊ธฐ ์ํจ์ด๋ค.
๋ณํฉํ ๋ฐ์ดํฐ ์ดํด๋ณด๊ธฐ
raw.head()
raw.tail()
raw.info()
์ด 99342 ๊ฐ์ row๋ก , raw.tail()์ ํ์ ๋ index์ ๊ฒฐ๊ณผ์ ๊ฐ์ผ๋ฏ๋ก ์ ์์ ์ผ๋ก ๋ณํฉ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
'์์ผ' ์ปฌ๋ผ ์ถ๊ฐ ํด๋ณด๊ธฐ - datetime ์ฌ์ฉ
from datetime import datetime
- datetime.strptime()
date_str = str(20190601) # ์ซ์๊ฐ ์๋ ๋ฌธ์๋ก ์
๋ ฅ๋์ด์ผ ํจ
date = datetime.strptime(date_str, "%Y%m%d")
date
datetime.datetime(2019, 6, 1, 0, 0)
# ์์์ผ : 0 ~ ์ผ์์ผ : 6
weekday = date.weekday()
weekday
5
์ง์ ๋ฌ๋ ฅ์ ์ฐพ์๋ณด์ง ์๊ณ ๋ , datetime ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ ๊ฒ ์์ผ์ ๋ฐํํด ์ค๋ค.
- '์์ผ' ์ปฌ๋ผ ์ถ๊ฐ
weekday_dict = [ '์','ํ','์','๋ชฉ','๊ธ','ํ ','์ผ']
weekday_list = []
for date_str in raw['์ฌ์ฉ์ผ์']:
date = datetime.strptime(str(date_str), "%Y%m%d")
weekday_index = date.weekday()
weekday = weekday_dict[weekday_index]
weekday_list.append(weekday)
weekday_list์ ๊ฐ row์ ์์ผ์ ์ถ๊ฐํด ์ค๋ค.
raw['์์ผ'] = weekday_list
raw.sample(5)
'์์ผ' ์ปฌ๋ผ์ ์ถ๊ฐํด ์ฃผ๊ณ , sample์ ์ด์ฉํ์ฌ ๋๋ค์ผ๋ก row๋ฅผ ๋ถ๋ฌ์์ ํ์ธํด ๋ณธ๋ค.
raw.columns
new_columns = ['์ฌ์ฉ์ผ์', '์์ผ', '๋
ธ์ ๋ช
', '์ญID', '์ญ๋ช
', '์น์ฐจ์ด์น๊ฐ์', 'ํ์ฐจ์ด์น๊ฐ์', '๋ฑ๋ก์ผ์']
raw = raw[ new_columns ]
raw.head()
์์ผ์ ์์ ๋๊ธฐ ์ํด ์ปฌ๋ผ์ ์์น๋ฅผ ๋ฐ๊พธ์ด ์ ํํด์ค๋ค.
๋ฐ์ดํฐ ์ ์ฅ
raw.to_excel('./data/subway_raw.xlsx', index = False)
to_excel() ์ ์ด์ฉํ์ฌ ์์ ํ์ผ๋ก ์ ์ฅํด ์ค๋ค.