250320 TIL

수이·2025년 3월 20일

🟡 TIL

목록 보기
32/60

팀스터디

기초 프로젝트

주제선정

개인의견

  • 배달

    • 배달 시간에 따라서 나올 수 있는 인사이트가 뭐가 있냐를 생각하면 좀 한정적인 것 같음
    • 배달원 > 나이에 따라서 다를 수도 있나? 평점 좋은 기사는 배달 시간이 빠를듯
    • 위치나 교통상황, 날씨의 경우 어떻게 할 수 있는 부분이 아니다보니 어떤 결론을 내어야 할지 잘 모르겠음
  • 구내식당

    • 이것도 배달이랑 비슷한 것 같아요!
    • 배달보다는 범위가 조금 좁혀져 있어 특정 회사마다 구내식당을 이용하는 어떤 패턴이 정말 있다면 재밌겠네용
  • 부동산

    • 일단 국내 데이터다보니 이해도가 높을 것 같아서 분석하기 용이하지 않을까~ 싶습니다
    • 고객 3명에 대한 페르소나가 있어서 기본적인 분석 방향이 잡혀있는 것 같아요(매물추천)
  • H&M

    • 도메인을 아울러서 가장 기본적이고 필수적인 부분이라고 되어있어서 기초다지기에 좋을 것 같다고 생각
    • 연령대별 인기 있는 카테고리나 색, 뉴스 구독 여부, 온/오프라인 매출 비교 등 결과물이 다채롭게 나올 수 있을 것 같음
  • 게임

    • 기본적으로 TFT 게임에 대한 이해도가 있어야 할 것 같아서 어려울 것 같음
    • 시너지나 조합에 사용된 챔피언을 통해 티어별 주요메타를 분석하는 식으로 가면 재밌을듯
  • 마케팅

    • 마케터 관련 희망자들이 있으니 요것도 괜찮다고 생각합니다
    • 다만 마케팅 관련 전문 용어에 대한 지식이 없어 공부가 필요할 것 같아요!

의견취합
생각보다 겹치지 않고 의견이 나와서, 진짜 하기 싫은 거 하나 고르기 / 진짜 하고싶은 거 고르기 했는데

  • 하기싫다
    • 게임 1 / NBA 2 / 산업xxx / 부동산1 / 헬스케어 1 / 마케팅 1
  • 진짜 하고싶다
    • 부동산 2 / 게임 2

ㅋㅋ 이러다 평생 안 정해질 것 같아서 핀볼 돌림

나는 개인적으로 데이터가 단순하지 않고 관심있는 분야인 게임을 하고싶었지만, 팀원분들 중에서는 게임에 관심이 없는 분들이 있어서 걱정됐다😅

롤체는 나도 한번밖에 해보진 않았지만, 동진님이 롤체를 하셔서 같이 자료 만드는 데 큰 도움을 주셨다

그래서 나온 결과물

무려 45페이지짜리 자료임

+) 동현님은 코테때문에 준비하느라 바쁘셔서 자료 만들때엔 참여하시지 못했지만, 팀원분들이 남겨놓은 질문 리스트에 세세하게 답변을 달아주심 🙇 감사합니다

데이터불러오기

ppt를 마치고 컬럼들 같이 보면 좋을 것 같다고 하셔서 미리 불러놓은 데이터프레임들 쭉쭉 보여드리면서 설명했다!

여기서 새롭게 알게된 건

pd.set_option('display.max_colwidth',None) # 긴 문자열 표시

컬럼 내 문자열의 길이가 긴 경우 이렇게 제한을 풀어줄 수 있다 !

내일까지 어떤 분석이 나올 수 있을지 생각해보고 논의하기로 해서, 나는 좀 더 정리해서 다듬어보려고 한다✨

개인스터디

Python 라이브러리 개인과제 피드백

🔗개인과제

필수 1) 데이터 불러오기 🟢

내가 작성한 코드

#저는 vscode를 사용했습니다
#from google.colab import drive
#drive.mount('/content/drive')

import pandas as pd

df = pd.read_csv(r"경로는비밀/flight_data_homework.csv")     

# 행 열 개수 확인
df.shape

# 테이블 처음 5줄 확인하기 
df.head()

필수 2) 결측치 처리🟢

내가 작성한 코드

import pandas as pd
import numpy as np

# 컬럼 별 결측치 개수 구하기 
df.isnull().sum()

# 결측치가 있는 행 모두 제거
df = df.dropna()

#확인
df.isnull().sum()

필수 3) 조건에 맞는 데이터 추출하기 🟢
내가 작성한 코드

import pandas as pd
import numpy as np

# destination 컬럼 기준 price의 평균값과 중앙값 
# 전처리시각화 강의자료 기준 
# df[['Price', 'Destination']].groupby('Destination').agg(['mean','median']).round(1)

# 소현튜터님 강의자료 기준 🟢
df.groupby('Destination')[['Price']].agg(['mean', 'median']).round(1)

#이 두가지가 나오는 값은 같은데 어떤 차이가 있는지 모르겠습니다

# airline, total_stops, route 중복값 제거 
# 행기준으로 airline , total , route 세개 값이 전부 일치해야 제거 
# df2_1 = df[['Airline', 'Total_Stops', 'Route']].drop_duplicates().reset_index(drop=True)

# airline, total_stops 기준 > groupby 하고 unique > route값만 중복인 걸 제거 
df2 = df.groupby(['Airline', 'Total_Stops'])['Route'].unique().explode().reset_index()
 
# 문제 정답은 route 값만 중복인 걸 제거하는 게 맞는 것 같은데 모호한 것 같아 두가지 다 제출합니다

3️⃣ 해설

두번째 문제는 중복값 제거하고 count하는 게 원래 출제 목적이라고 하셨다! count가 빠져서 어렵게 된 문제인 것 같다 😅

df2 = df.groupby(['Airline', 'Total_Stops'])['Route'].nunique().reset_index()

필수 4) 조건에 맞는 데이터 추출하기2 🟢

내가 작성한 코드

import pandas as pd
import numpy as np

# 피봇테이블 구현 / 출발지, 도착지 기준 Airline count / count 값 기준 내림차순 정렬 
pivot_table = df.pivot_table(index = ['Source', 'Destination'], values = 'Airline', aggfunc = 'count').sort_values(by = 'Airline', ascending = False)

#확인용
pivot_table

# Airline = air india / price >= 7000 필터링 
filtering = df[(df['Airline'] == 'Air India') & (df['Price'] >= 7000)]

# 확인용
filtering.head()
filtering.tail()

4️⃣ 해설

# mask 방식
mask = ((df['Airline'] == 'Air India') & (df['Price'] >= 7000)
df[mask]

도전 1) 조건에 맞는 데이터 추출하기3 🟢

내가 작성한 코드

import pandas as pd
import numpy as np
import datetime as dt 

# object > datetime 
df['Date_of_Journey'] = pd.to_datetime(df['Date_of_Journey'])
# 확인용 
df.info()

# dt.day_name 사용 
df['day_name'] = df['Date_of_Journey'].dt.day_name()
avg_wed_price = df.loc[df['day_name'] == 'Wednesday'][['Price']].agg('mean')

# 확인용
print(avg_wed_price)

5️⃣ 해설

# 예약 날짜 컬럼 datetime형식으로 변환
df['Date_of_Journey'] = pd.to_datetime(df['Date_of_Journey'].infer_datetime_format = True)

# 요일 컬럼 추가 
df['Day_of_Week'] = df['Date_of_Journey'].dt.day_name()

# 수요일에 예약된 항공권의 평균 가격 계산 
wednesday_avg_price = df[df['Day_of_Week'] == 'Wednesday']['Price'].mean()

wednesday_avg_price
  • lambda 활용
# 예약 날짜 컬럼 datetime형식으로 변환
df['Date_of_Journey'] = pd.to_datetime(df['Date_of_Journey'].infer_datetime_format = True)

# 수요일에 예약된 항공권의 평균 가격 계산 
wednesday_avg_price = df['Date_of_Journey'].apply(lambda x: x.day_name() == 'Wednesday')]['Price'].mean()

wednesday_avg_price
  • rrule 활용
# 예약 날짜 컬럼 datetime형식으로 변환
df['Date_of_Journey'] = pd.to_datetime(df['Date_of_Journey'].infer_datetime_format = True)

# 시작 날짜 설정
start_date = df['Date_of_Journey'].min()
end_date = df['Date_of_Journey'].max()

# 매주 수요일에 반복되는 날짜 생성
reservations = list(rrule(WEEKLY, dtstart = start_date, until = end_date, byweekday = WE))
wednesday_avg_price = df[df['Date_of_Journey'].isin(reservations)]['Price'].mean()
  • mask + rrule
# 예약 날짜 컬럼 datetime형식으로 변환
df['Date_of_Journey'] = pd.to_datetime(df['Date_of_Journey'].infer_datetime_format = True)

# 시작 날짜 설정
start_date = df['Date_of_Journey'].min()

# 매주 수요일에 반복되는 날짜 생성
# 월 MO 또는 0
# 화 TU 또는 1
# 수 WE 또는 2
# 목 TH 또는 3
# 금 FR 또는 4
# 토 SA 또는 5
# 일 SU 또는 6

reservations = list(rrule(WEEKLY, dtstart = start_date, byweekday = 2))
mask = (df['Date_of_Journey'].isin(reservations))
df2 = df[mask]
df2['Price'].mean

도전 2) 조건에 맞는 데이터 추출하기4 🟢

내가 작성한 코드

import pandas as pd
import numpy as np
import datetime as dt 

# Dep_TIme > datetime > hour만 추출
df['Dep_Hour'] = pd.to_datetime(df['Dep_Time'], format='%H:%M').dt.hour

# 아침,낮,오후,밤 lambda로 나눠주기   
df['DT_category'] = df['Dep_Hour'].apply(lambda x: '아침' if 5 <= x < 12
                                         else '낮' if 12 <= x < 18
                                         else '오후' if 18 <= x < 24
                                         else '밤')
# category 숫자 세기 
df['DT_category'].value_counts()

6️⃣ 해설

df['Dep_Time'] = pd.to_datetime(df['Dep_Time'].infer_datetime_format = True)

df['Time_Of_Day'] = df['Dep_Time'].apply(lambda x: '아침' if 5 <= x < 12
                                         else '낮' if 12 <= x < 18
                                         else '오후' if 18 <= x < 24
                                         else '밤')
 
df.groupby(['Time_Of_Day'])['Airline'].count.reset_index()

다 어찌저찌 정답은 잘 구했다!
pd.to_datetime쓸때 .infer_datetime_format = True를 쓰는 걸 잊지 말자

  • datetime 형식을 자동으로 추론 > 변환속도 향상

일기

  • SQL 코드카타 57-58❌
  • Python 코드카타 33-34❌
  • Pandas 과제해설 복기✅
  • 전처리&시각화 4주차❌
  • 프로젝트 주제선정✅ 데이터소스 정리✅

아침부터 새로 도입된 QR체크인은 말썽이고, 우리 팀 노션은 다른 조에서 삭제하고, 와중에 나는 실업인정 4차출석 때문에 바로 가야해서 왕 정신 없었다 😵‍💫

원래 9시 땡하면 바로 출발하려고 했는데 늦을 것 같아서 택시탐 -6700💸 돌아올때도 생각보다 일찍 끝났길래 발제 전까지 도착하고 싶어서 택시탐 -9500💸 괜자나 딩딩딩딩딩

게임 데이터 얘기하니까 잘 모르는 게임인데도 불구하고 뭔가 이것저것 나올 수 있는 분석 방향이 떠올라서 재밌을 것 같아가지고 너무 설렜다

다솜님의 목소리가 점점 축축 쳐졌지만... (미안합니다..) 그래서 아무튼 더 열심히 자료 만들게 된 것 같다!

매번 느끼지만 동진님은 참 어떤 것이든 설명하는 것에 타고나신 것 같아서 놀랍다 ppt 방향도 호다닥 정하고 뚝딱뚝딱 정리해서 만드셔서 신기했음

결국 오늘도 나오는 동진님샤라웃.. 고맙습니다.. 고맙습니다..

빨리 데이터 씹고뜯고맛보고즐기고 해야지
내일도 파이팅🍀
(강의는 꼭 듣기.. ^^ !! 양심이 있다면 ^^!!)

1개의 댓글

comment-user-thumbnail
2025년 3월 21일

게임~!!~ 수히님 전문 도메인이닷 축하해욧!!!!!!! 일주일 넘게 봐야하는데 익숙한게 좋은듯욬ㅋㅋ

답글 달기