250313 TIL

수이·2025년 3월 13일
2

🟡 TIL

목록 보기
27/45

팀스터디

아티클스터디

양질의 데이터를 판별하는 5가지방법 : ②믿을 수 있는 데이터인가?

  • 요약 : 데이터 수가 뒷받침되더라도, 데이터 자체에 대한 신뢰성이 필요
    • 데이터 오류
      • 사실이 아닌 잘못된 정보를 적재하고 있는 경우

      • 명확히 검증할 수 있는 방법이 없음

        ⇒ 초기 데이터를 꼼꼼히 살펴보고, 수집 방법 파악

    • 결측 데이터
      • 수집 혹은 적재과정에서 누락된 데이터

        ⇒ 결측값 삭제 OR 대체

        결측 데이터가 없거나 최소로 존재하는 데이터를 선택

    • 데이터 가공 정도
      • 원천 데이터
        수집 직후 아무런 가공도 하지 않은 데이터
        데이터 오류가 적은 편이나 복잡해 이해하기 어려움

      • 가공 데이터
        분석 목적에 따라 특정 지수 개발, 머신러닝을 통한 예측
        추정값이면서 예측값임

        ⇒ 상충관계 작용 / 신뢰도가 절대적이라고는 할 수 없으나 유용

  • 주요 포인트 :
    • 데이터를 분석하는 과정은 어떤 데이터를 고르냐부터 선택의 연속인 것 같다는 생각을 했습니다.
    • 기초분석 팀과제 당시 어떤 데이터를 분석할지 고민할때 엄청 단순하게 ‘우리 조는 마케터 희망자가 많으니까~’ 하고 이커머스 데이터를 골랐었는데, 막상 분석을 시작하니 생각했던 분석의 방향과 다르게 브랜드에서 결측값이 많아 당황했던 기억이 납니다. 그때는 잘 몰라서 NaN이 브랜드인가 했습니다.(감동실화) 미리 알았다면 과제 명세만 읽어볼 것이 아니라 실 데이터를 확인했을테고, 그렇다면 이커머스가 아닌 다른 데이터를 골랐을텐데 아쉽습니다.
    • 아티클에서 제시한 대로 분석 전 명확한 기준을 가지고 데이터를 확인하는 버릇을 들여야겠습니다.

[공통 인사이트]

GIGO 쓰레기를 넣은 곳에 쓰레기가 나온다

[의미 있었던 의견]

데이터 분석은 믿음과 의심의 싸움이 아닌가

팀 기본 분석에서 이번 아티클과 공감되는 것을 많이 느꼈다.

개인스터디

데이터리터러시 1-5

결과 vs 결론

  • 결과 : 데이터를 분석해서 나온 수치나 그래프
    • ex) 고객 만족도랑 구매 빈도가 상관이 있다
  • 결론 : 그걸 해석해서 의미 도출
    • ex) 고객 만족도를 올리면 매출도 오를 것이다

예제

다음의 결론 도출이 합리적인가요? 맞다면, 왜 그렇고 아니라면, 왜 아닌지 설명해보아요.
결론: 모든 가맹점에서 가장 많이 팔리고 있는 A 제품이 대구 지점에서만 판매 실적이 부진한 것은, 대구에 큰 경쟁사가 있기 때문이다.

우리 가맹점 별 매출 데이터로 저런 결론이 나오기가 어렵지 않나?

해설

  • 실제로 경쟁사 때문에 판매 부진이 일어난 것일 수 있으나, 우리에게는 관련된 데이터가 있지 않음.
  • 위와 같은 결론은 분석의 품질을 떨어뜨리는 주범

다음의 분석 결과를 가지고 결론을 도출해보세요.

  • 데이터: 온라인 소매점의 최근 6개월 판매 데이터
  • 목적: 판매 성과 분석 및 개선 방안 도출
  • 데이터 분석 결과
    • 6개월 동안 전자제품의 판매량이 의류에 비해 25% 증가
    • 매주 금요일에는 다른 요일에 비해 판매량이 15% 더 높음
    • 오후 6시부터 9시 사이의 판매량이 전체 일일 판매량의 30%를 차지
  • 주어진 데이터: 가맹점 별 A 제품 판매 데이터
  • 전자제품 마케팅을 강화해야 한다
  • 금요일과 오후 6~9시 시간대 프로모션을 진행

해설
결론은 결과들을 바탕으로 도출된 해석이나 추론

  • 전자제품이 의류보다 인기가 높으므로, 전자제품에 대한 마케팅을 강화해야 한다.
  • 금요일과 저녁 시간대의 높은 판매량을 고려할 때, 이 시간대에 특별 프로모션을 진행하면 전체 판매량을 증가시킬 수 있다.

잘 정리하는 법

  • 핵심만 간단히
  • 상대방이 이해할 수 있게
  • 액션 플랜까지 제안
  • 시각화 팁
    • 막대그래프, 선그래프
    • 범례, 단위 필수
  • 결론 보고서에 쓰면 좋은 플로우
    • 전체 내용을 한 문장으로 정리요약
    • 해당 보고서의 메인 주제
    • 해당 보고서를 쓴 이유와 원하는 변화
    • 문제 정의
    • 핵심 내용 전개
    • 결론 및 액션 아이템

결국 데이터 리터러시란?

그냥 숫자로만 보지 말고, '왜'를 생각하는 힘
이 데이터로 뭘 할 수 있지를 고민하는 게 중요함

실습으로 익히는 Python 3,4회차

Merge ✅

  • SQL JOIN과 유사
  • 공통 컬럼 기준으로 데이터 합치기
    • on='공통컬럼', how='inner' (inner, outer, left, right 가능!)
    • 컬럼 이름 다르면 left_on='A', right_on='B'
    • 중복 컬럼 이름 suffixes=('_left', '_right')
# 공통 컬럼 기준으로 병합 (inner join)
merge_df = pd.merge(df2, df3) 
merge_df = pd.merge(df2, df3, how='inner', on='Customer ID')

# 공통 컬럼이 다를 경우
merge_df = pd.merge(df2, df3, how='inner', left_on='Customer ID', right_on='user_id')

JOIN

  • 인덱스 기준으로 데이터 합치기
    • 이름이 같은 컬럼 있을 경우 문자열 지정 lsuffix='_L', rsuffix='_R'
    • 인덱스 정렬 sort=True
df2.join(df3, how='right')  # df2 인덱스 기준으로 df3 합치기
df.join(df2, how='left', lsuffix='_old', rsuffix='_new', sort=True)  

MERGE VS JOIN

CONCAT ✅

  • SQL UNION(수직) / JOIN(수평)과 유사
    • 유연성이 좋음 / SQL의 JOIN 보다 광범위
  • 데이터프레임 또는 시리즈 수직(행) or 수평(열) 연결
  • axis=0 수직결합(기본값) axis=1 수평결합
  • 인덱스 재배열 ignore_index=True
  • 조인 축 지정 join_axes
pd.concat([df2, df3], axis=0, ignore_index=True)  # 수직 
pd.concat([df2, df3], axis=1)  # 수평

APPEND

  • 수직결합만 가능
  • 없는 건 NaN으로 처리
  • concat이 대체할 예정⚠️
# 에러가 아닌 경고메시지로, 무시하고 싶을 경우 아래 코드 입력
# import warnings
# warnings.filterwarnings('ignore')
# df2 가 df 의 아래로 붙음

df.append(df2)

CONCAT VS APPEND

Pivot Table

  • 엑셀 피봇 테이블과 유사
  • 내가 처음부터 표를 짜는 거라고 생각하면 될듯
  • 원하는 컬럼 인덱스(축) index, 열 columns, 값 values 지정
  • 연산가능 aggfunc
  • 결측값(NaN)처리 fill_value=0
# age 축 기준 / 카테고리별 고객id 카운트 
pd.pivot_table(df2, index='Age', columns='Category', values='Customer ID', aggfunc='count')

# age, category 축 기준 / 고객 ID 카운트
pd.pivot_table(df2, index='Age', columns='Category', values='Customer ID', aggfunc='count')

# gender 축 기준 / 사이즈, 나이별 고유 고객 ID 카운트
pd.pivot_table(df2, index=['Gender'], columns=['Size', 'Age'], values='Customer ID', aggfunc='nunique')

그 외 유용한 메소드

lambda

  • 이름이 없는 함수
  • 함수를 한 번만 사용하거나 함수를 인자로 전달해야 하는 경우
  • 똑같은 걸 간단하게 선언하고 싶을때
# lambda 함수를 이용한 홀수 출력하기 
mylist = [1, 2, 3, 4, 5]

mylist2 = list(filter(lambda x: x % 2 == 1, mylist))
print(mylist2)

# lambda 함수를 이용한 정렬
mylist = ['apple', 'banana', 'cherry']
mylist2 = sorted(mylist, key=lambda x: len(x))
print(mylist2)

split ✅

  • 문자열 자르기
  • 특정 문자나 패턴으로 나눌 수 있음
  • 구분자 sep
    최대 스플릿 횟수(디폴트 : 모두 다 나눔) maxsplit
# 예시 
s = "aa.bb.cc.dd.ee.ff.gg"
s.split('.')  # ['aa', 'bb', 'cc', 'dd', 'ee', 'ff', 'gg']
s.split(sep = '.')

# '.' 구분자를 기준으로 데이터를 나누고 컬럼으로 받음 
# lambda 함수와 결합하여 사용하는 경우 
# 7번 반복, a 를 컬럼 구분자로 받아주고, format 함수를 통해 a0, a1, a2 ... 로 표기
# lambda 함수를 통해 '.' 로 구분. 단, len(x.split('.') 즉 7 보다 i 가 작을 때 수행
# 중요
for i in range(i):
    df2["a{}".format(i)] = df2['x'].apply(lambda x: x.split('.')[i] if len(x.split('.'))>i else None)

rrule

  • 특정 날짜부터 원하는 주기로 날짜 생성
# 라이브러리 불러오기
from datetime import datetime
from dateutil.rrule import rrule, DAILY

# 시작, 종료날짜 설정
start_date = datetime(2024, 2, 1)
end_date = datetime(2024, 3, 1)

# 매일 날짜 생성!
weekly_rule = rrule(DAILY, dtstart=start_date, until=end_date)

for date in weekly_rule:
    print(date.strftime('%Y-%m-%d'))

# 데이터 프레임에서 특정 날짜기간에 해당하는 데이터만 슬라이싱
# 빈 리스트 생성 후 날짜를 담아주기
a=[]
for date in weekly_rule:
    a.append(date.strftime('%Y-%m-%d'))
    
# df3 에 있는 날짜 데이터는 string 
# string -> datetimd -> string 의 형태로 변환
# 위에서 받은 리스트에 해당하는 데이터만 필터링하기 위함 
df3['Time stamp2'] = pd.to_datetime(df3['Time stamp']).dt.strftime('%Y-%m-%d')

mask =(df3['Time stamp2'].isin(a))
df3[mask]

요약

  • Merge✅ 컬럼 기준 병합
  • Join 인덱스 기준 병합
  • Concat✅ 세로/가로 연결
  • Pivot Table 원하는 형태로 데이터 정리
  • lambda, split✅, rrule → 데이터 가공

갓동진의 파이썬 떠먹여주기 1회차

for 문 = 이터러블한 자료형을 반복하는 것
range = 범위를 지정해주는 것
런타임 에러 = 결과를 내지 못해서 죽음을 택한 애들
실패 = 값이 전혀 다르다

range(5)를 넣었을때 테스트케이스는 통과하지만 제출하면 틀리는 이유는 모든 케이스에 적합하지 않기 때문

PANDAS 정리

시리즈, 인덱스, 데이터프레임이 헷갈려서 따로 다시 정리해봄 🫥
🔗강의자료

시리즈 Series

1차원 데이터 구조

  • 인덱스(Index) + 값(Value)
  • 리스트, 딕셔너리와 비슷
  • 벡터 연산 가능

데이터프레임 DataFrame

2차원 데이터 구조

  • 행(Index) + 열(Columns)
  • 엑셀 표, SQL 테이블과 비슷

데일리퀘스트

SQL - 3월에 태어난 여성 회원 목록 출력하기
SQL - 대여 기록이 존재하는 자동차 리스트 구하기
Python - 콜라츠 추측
Python - 서울에서 김서방 찾기
Python - 기초 트레이닝 Day 3


일기

  • SQL 코드카타 45-46✅
  • Python 코드카타 23-24✅ 기초 트레이닝 Day3✅ 4주차 복습✅ 라이브세션 2-3회차 복습✅
  • 데이터리터러시 1-5 복습✅

라이브세션 자료도 좀 더 만져보고 하고 싶었는데, 이해가 아직 안 가는 부분이 많다..! 시각화 강의를 먼저 듣고 하면 더 이해가 잘 갈 것 같아서 내일은 시각화 강의를 시작해보려고 함 환경세팅까지만 마쳤다

동진님이 오늘 엄청엄청 설명을 잘 해주셔서 나도 헷갈렸던 부분들 한번 더 복기하고 정리할 수 있는 시간이 되어 좋았다 내 TIL에 한번씩 등장하는 동진님 ;; 등장동진;;

다솜님도 현유님도 모르는 거 여쭤봐주셔서 좋고, 내가 아는 부분을 알려드리면서 정리할 수 있어서 아주 좋다 이것이 팀플의 순기능..?

파이썬 코드 짜는 덴 아직까지도 한세월이 걸리지만 명확히 이해하고 넘어가려고 계속 노력해야지

내일은 QCC가 있는 날이니 파이팅..🍀

1개의 댓글

comment-user-thumbnail
2025년 3월 14일

파이티잉🍀

답글 달기

관련 채용 정보