양질의 데이터를 판별하는 5가지방법 : ②믿을 수 있는 데이터인가?
사실이 아닌 잘못된 정보를 적재하고 있는 경우
명확히 검증할 수 있는 방법이 없음
⇒ 초기 데이터를 꼼꼼히 살펴보고, 수집 방법 파악
수집 혹은 적재과정에서 누락된 데이터
⇒ 결측값 삭제 OR 대체
결측 데이터가 없거나 최소로 존재하는 데이터를 선택
원천 데이터
수집 직후 아무런 가공도 하지 않은 데이터
데이터 오류가 적은 편이나 복잡해 이해하기 어려움
가공 데이터
분석 목적에 따라 특정 지수 개발, 머신러닝을 통한 예측
추정값이면서 예측값임
⇒ 상충관계 작용 / 신뢰도가 절대적이라고는 할 수 없으나 유용
[공통 인사이트]
GIGO 쓰레기를 넣은 곳에 쓰레기가 나온다
[의미 있었던 의견]
데이터 분석은 믿음과 의심의 싸움이 아닌가
팀 기본 분석에서 이번 아티클과 공감되는 것을 많이 느꼈다.
다음의 결론 도출이 합리적인가요? 맞다면, 왜 그렇고 아니라면, 왜 아닌지 설명해보아요.
결론: 모든 가맹점에서 가장 많이 팔리고 있는 A 제품이 대구 지점에서만 판매 실적이 부진한 것은, 대구에 큰 경쟁사가 있기 때문이다.
우리 가맹점 별 매출 데이터로 저런 결론이 나오기가 어렵지 않나?
해설
다음의 분석 결과를 가지고 결론을 도출해보세요.
- 데이터: 온라인 소매점의 최근 6개월 판매 데이터
- 목적: 판매 성과 분석 및 개선 방안 도출
- 데이터 분석 결과
- 6개월 동안 전자제품의 판매량이 의류에 비해 25% 증가
- 매주 금요일에는 다른 요일에 비해 판매량이 15% 더 높음
- 오후 6시부터 9시 사이의 판매량이 전체 일일 판매량의 30%를 차지
- 주어진 데이터: 가맹점 별 A 제품 판매 데이터
해설
결론은 결과들을 바탕으로 도출된 해석이나 추론
그냥 숫자로만 보지 말고, '왜'를 생각하는 힘
이 데이터로 뭘 할 수 있지를 고민하는 게 중요함
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')
lsuffix='_L'
, rsuffix='_R'
sort=True
df2.join(df3, how='right') # df2 인덱스 기준으로 df3 합치기
df.join(df2, how='left', lsuffix='_old', rsuffix='_new', sort=True)
axis=0
수직결합(기본값) axis=1
수평결합ignore_index=True
join_axes
pd.concat([df2, df3], axis=0, ignore_index=True) # 수직
pd.concat([df2, df3], axis=1) # 수평
concat
이 대체할 예정⚠️# 에러가 아닌 경고메시지로, 무시하고 싶을 경우 아래 코드 입력
# import warnings
# warnings.filterwarnings('ignore')
# df2 가 df 의 아래로 붙음
df.append(df2)
index
, 열 columns
, 값 values
지정aggfunc
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 함수를 이용한 홀수 출력하기
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)
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)
# 라이브러리 불러오기
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
→ 데이터 가공 for 문 = 이터러블한 자료형을 반복하는 것
range = 범위를 지정해주는 것
런타임 에러 = 결과를 내지 못해서 죽음을 택한 애들
실패 = 값이 전혀 다르다
range(5)를 넣었을때 테스트케이스는 통과하지만 제출하면 틀리는 이유는 모든 케이스에 적합하지 않기 때문
시리즈, 인덱스, 데이터프레임이 헷갈려서 따로 다시 정리해봄 🫥
🔗강의자료
1차원 데이터 구조
2차원 데이터 구조
SQL - 3월에 태어난 여성 회원 목록 출력하기
SQL - 대여 기록이 존재하는 자동차 리스트 구하기
Python - 콜라츠 추측
Python - 서울에서 김서방 찾기
Python - 기초 트레이닝 Day 3
코드카타 45-46✅
코드카타 23-24✅
기초 트레이닝 Day3✅
4주차 복습✅
라이브세션 2-3회차 복습✅
1-5 복습✅
라이브세션 자료도 좀 더 만져보고 하고 싶었는데, 이해가 아직 안 가는 부분이 많다..! 시각화 강의를 먼저 듣고 하면 더 이해가 잘 갈 것 같아서 내일은 시각화 강의를 시작해보려고 함 환경세팅까지만 마쳤다
동진님이 오늘 엄청엄청 설명을 잘 해주셔서 나도 헷갈렸던 부분들 한번 더 복기하고 정리할 수 있는 시간이 되어 좋았다 내 TIL에 한번씩 등장하는 동진님 ;; 등장동진;;
다솜님도 현유님도 모르는 거 여쭤봐주셔서 좋고, 내가 아는 부분을 알려드리면서 정리할 수 있어서 아주 좋다 이것이 팀플의 순기능..?
파이썬 코드 짜는 덴 아직까지도 한세월이 걸리지만 명확히 이해하고 넘어가려고 계속 노력해야지
내일은 QCC가 있는 날이니 파이팅..🍀
파이티잉🍀