๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด ์๋์ฒ๋ผ ์ค๊ณํ ์ฝ๋์์ ์ค๋ฅ๊ฐ ๋ง์ด ๋๊ณ ํจ์๋ฅผ ๋๋ฌด ๋ง์ด ๋๋ด์ผ๋ฉฐ ํจ์๋ช ์ด ๋ชจํธํ๋ค๋ ํผ๋๋ฐฑ์ ๋ฐ์ 2์ฐจ ์ค๊ณ๋ก ๋ค์ ์ฝ๋๋ฅผ ์์ฑํ์๋ค.
์ด์ ๊ธ ์ดํด๋ณด๊ธฐ
์นด์นด์คํก ๋ํ ๋ด์ฉ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌํ๊ธฐ (1)
[DA][Python] ์นด์นด์คํก ๋ํ ๋ด์ฉ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌํ๊ธฐ (1)
๊ฐ์์นด์นด์คํก ์ฑํ ๋ฐฉ์ ๋ํ ๋ด์ฉ์ ๋ค์ด๋ก๋ ํ ํ, ๋ํ ๋ด์ฉ์ ๋ถ์ํ์ฌ ์ ์๋ฏธํ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ ์ ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฒ๋ฆฌํ๋ค. ์ต์ข ๊ฒฐ๊ณผ๋ฐ์ดํฐ๋ฅผ ์ ์ฒ๋ฆฌํ์ ์, ์ต์ข ์ ์ผ๋ก ์ถ๋ ฅ๋๋
sundery.tistory.com
์นด์นด์คํก ๋ํ ๋ด์ฉ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌํ๊ธฐ (2)
[DA][Python] ์นด์นด์คํก ๋ํ ๋ด์ฉ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌํ๊ธฐ (2)
์นด์นด์คํก ๋ํ ๋ด์ฉ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌํ๊ธฐ (1) ์ดํด๋ณด๊ธฐ [Python] ์นด์นด์คํก ๋ํ ๋ด์ฉ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌํ๊ธฐ (1)๊ฐ์์นด์นด์คํก ์ฑํ ๋ฐฉ์ ๋ํ ๋ด์ฉ์ ๋ค์ด๋ก๋ ํ ํ, ๋ํ ๋ด์ฉ์ ๋ถ์ํ์ฌ ์ ์๋ฏธํ ๊ฒฐ๊ณผ
sundery.tistory.com
๊ธฐ์กด ์์ฑ ์ฝ๋
import pandas as pd
# ํ
์คํธ ํ์ผ ๊ฒฝ๋ก
kakao_file = "C:/Users/wkdtj/OneDrive/desktop/kakao2-data.txt"
# ํ์ผ ์ฝ๊ธฐ
with open(kakao_file, 'r', encoding='utf-8') as file:
lines = file.readlines()
data = []
current_date = None
current_weekday = None
#์๊ฐ ๋ณํ ํจ์ (์ค์ , ์คํ => ์ค์ ์์ ๊ณ ์คํ์ +12)
def convert_to_24hr(time_str):
if '์ค์ ' in time_str:
time = time_str.replace('์ค์ ', '')
hours, minutes = map(int, time.split(':'))
if hours == 12: # ์ค์ 12์๋ 00์๋ก ๋ณํ
hours = 0
elif '์คํ' in time_str:
time = time_str.replace('์คํ ', '')
hours, minutes = map(int, time.split(':'))
if hours != 12: # ์คํ 12์๋ ๊ทธ๋๋ก ๋๊ณ , ๋๋จธ์ง๋ 12๋ฅผ ๋ํจ
hours += 12
return f"{hours:02}:{minutes:02}"
# ๋ฐ์ดํฐ ์ฒ๋ฆฌ
for line in lines:
line = line.strip()
# ๋ ์ง ํ์: "--------------- YYYY๋
M์ D์ผ ์์ผ ---------------"
if line.startswith('---------------') and '๋
' in line and '์' in line and '์ผ' in line:
parts = line.strip('- ').split(' ')
year = parts[0][:-1] # 'YYYY๋
'์์ 'YYYY' ์ถ์ถ
month = parts[1][:-1] # 'M์'์์ 'M' ์ถ์ถ
day = parts[2][:-1] # 'D์ผ'์์ 'D' ์ถ์ถ
current_weekday = parts[3] #์์ผ์์ ์์ผ ์ถ์ถ
current_date = f"{year} {month.zfill(2)} {day.zfill(2)}"
# ๋ํ ํ์: "[๋ณด๋ธ ์ฌ๋] [์๊ฐ] ๋ฉ์์ง"
elif line.startswith('[') and '] [' in line:
try:
sender, rest = line.split('] [', 1)
name = sender[1:] # ์์ '[' ์ ๊ฑฐ
time, message = rest.split('] ', 1)
time_24hr = convert_to_24hr(time) # ์๊ฐ์ 24์๊ฐ ํ์์ผ๋ก ๋ณํ
if current_date: # ํ์ฌ ๋ ์ง๊ฐ ์๋ ๊ฒฝ์ฐ์๋ง ์ถ๊ฐ
data.append([current_date, time_24hr, name, message, current_weekday])
except ValueError:
continue # ํ์์ ๋ง์ง ์๋ ๋ผ์ธ์ ๊ฑด๋๋
#๋ฐ์ดํฐํ๋ ์ ์์ฑ
df = pd.DataFrame(data, columns=['Date', 'Time', 'Name', 'Message', 'Day_of_Week'])
# ๋ ์ง์ ์๊ฐ์ ๋ถ๋ฆฌ
df['Year'] = df['Date'].str.split(' ').str[0].astype(int)
df['Month'] = df['Date'].str.split(' ').str[1].astype(int)
df['Day'] = df['Date'].str.split(' ').str[2].astype(int)
# ์ปฌ๋ผ ์์ ๋ณ๊ฒฝ
df = df[['Year', 'Month', 'Day', 'Day_of_Week', 'Time', 'Name', 'Message']]
# ๋ฐ์ดํฐํ๋ ์ ์ถ๋ ฅ
print(df)
๊ธฐ์กด์ ์์ฑํ ์ฝ๋๋ ์์ ๊ฐ์๋ค.
๋์์จ ํผ๋๋ฐฑ์ ์ฌ์ฉํ ํจ์๊ฐ ํ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ด ๋จ์ด์ง๋ฉฐ ์ ์ํ ๋ด์ฉ์ด ๊ฐ๊ฒฐํ์ง ์์์ ์์ฌ์ ๋ค๋ ์ ์ด๋ค.
๊ทธ๋์ ์๋กญ๊ฒ ์ฝ๋๋ฅผ ์ค๊ณํ๊ณ ๊ทธ ๋ฐฉ์๋๋ก ๊ฐ๋ณผ ์๊ฐ์ด๋ค. ์ง๊ธ ์ค๊ณํ๋ ์ฝ๋๋ ํ๋ฆด ์ ์๊ธฐ ๋๋ฌธ์ ๋ง์ฝ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ฉด ๊ธ์ด ์ฌ๋ผ๊ฐ์ง ์์์ง๋ ๐ฅฒ
์ฝ๋ ์ค๊ณ
- ์ฌ์ค ์ด๋ฐ์ ์ค๊ณ๋ ๋ฐ์ดํฐํ๋ ์ํ ํ ํ์ ํจ์๋ฅผ ํ์ฑํ๋ ค ํ๋๋ฐ ์์ง ๋ถ์กฑํ ์ง์์ด ๋ง์์ ๋์๊ฒ ์ด๋ ค์ด ๊ณผ์ ์ด์๋ค. ์ฌ๋ฌ๊ฐ์ง ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ ํจ์๋ฅผ ์๊ฐํ๊ณ ์ฝ๋๋ฅผ ์ง๋ ๋ถ๋ถ์์๋ ์ด๋ ค์์ด ๋ง์์ผ๋ฉฐ, ์๋ฌด๋๋ ์ฒ์ ์๊ฐํ ๋ฐฉ๋ฒ์ด ๋ฐ์ดํฐ๋ฅผ ๋ผ์ธ๋ณ๋ก ์ ์ ํ๊ณ ํ๋ ์ํํ๋ ๊ณผ์ ์ด์๋ค๋ณด๋ ์๊ฐ์ ๊ณผ์ ์ ๋ฐ๊พธ๋ ๊ฒ๋ ์ด๋ ค์ด ๊ฒ ๊ฐ์์ ๋ค์ for๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ผ์ธ๋ณ๋ก ํ์ธํ๋ ๊ทธ ๋ด์ ํจ์๋ฅผ ๋ง๋๋ ์ฝ๋ ์ค๊ณ๋ก ๋ณ๊ฒฝ๋์๋ค.
- ์ต๋ํ ํจ์๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋ค์ด๋ณผ ์๊ฐ์ด๋ค
1. Date ์ถ๋ ฅ ํจ์
- ์๋ณธ ๋ฐ์ดํฐ
--------------- 2023๋ 3์ 24์ผ ๊ธ์์ผ ---------------
- ์ฌ๊ธฐ์ Year, Month, Day, Day_of_Week ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
- ํ์ํ ํจ์
- ๋ฌธ์ ์ ์ (processed_date_line)
- Date ๊ฐ์ ๊ฐ ๋ณ์๊ฐ ๋ณํ (read_date)
2. Time ์ถ๋ ฅ ํจ์
- ์๋ณธ ๋ฐ์ดํฐ
[์๋นต] [์คํ 2:16] ๐ ์ถ์ ๊ตํ
- ํ์ํ ํจ์
- ๋ฌธ์ ์ ์ (processed_message_line)
- ์๊ฐ ํ์ ๋ณํ ํจ์ (covert_24hr)
- Time ๊ฐ ๋ฐํ (read_time)
3. Name ์ถ๋ ฅ ํจ์
- ์๋ณธ ๋ฐ์ดํฐ
[์๋นต] [์คํ 2:16] ๐ ์ถ์ ๊ตํ
- ํ์ํ ํจ์
- ๋ฌธ์ ์ ์ (processed_message_line)
- Name ๊ฐ ๋ฐํ (read_name)
4. Message ์ถ๋ ฅ ํจ์
[์๋นต] [์คํ 2:16] ๐ ์ถ์ ๊ตํ
- ํ์ํ ํจ์
- ๋ฌธ์ ์ ์ (processed_message_line)
- Message ๊ฐ ๋ฐํ (read_message)
5. ๋ฐ์ดํฐ ๋ฆฌ์คํธ์ ๋ฐ์ดํฐ ์ถ๊ฐ ํจ์
- ๋ง๋ค์ด๋ data = [] ๋ฆฌ์คํธ์ ์์ ๋ง๋ ๋ฐ์ดํฐ๋ค์ ์ถ๊ฐํ๋ค.
- ํ์ํ ํจ์
- ๋ฆฌ์คํธ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ํจ์ (add_data)
6. ๋ฐ์ดํฐํ๋ ์ํ
- ์์ ๋ฐ์ดํฐ๊ฐ ์ฝ์ ๋ data ๋ฆฌ์คํธ๋ฅผ ๋ฐ์ดํฐ ํ๋ ์ํ ํ์ฌ ์ถ๋ ฅํ๋ค.
์์ฑํด์ผ ํ๋ ํจ์ ์์ฝ ๋ฐ ์์ ์ ๋ฆฌ
- ๋ฌธ์ ์ ์ (processed_date_line)
- ๋ฌธ์ ์ ์ (processed_message_line)
- Date ๊ฐ์ ๊ฐ ๋ณ์๊ฐ ๋ณํ (read_date)
- ์๊ฐ ํ์ ๋ณํ ํจ์ (covert_24hr)
- Time ๊ฐ ๋ฐํ (read_time)
- Name ๊ฐ ๋ฐํ (read_name)
- Message ๊ฐ ๋ฐํ (read_message)
- ๋ฆฌ์คํธ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ํจ์ (add_data)
9. ๋ฐ์ดํฐ ํ๋ ์ํ ํ์ฌ ์ถ๋ ฅ
ํด๋น ์ค๊ณ์ ๋ง์ถฐ์ ๋ค์ ๊ธ์์๋ ํจ์๋ฅผ ์์์ ๋ง์ถฐ์ ์์ฑํด๋ณด๋ ๊ฒ์๋ฌผ์ ์์ฑํ ์์ ์ด๋ค.