본 캠프 TIL

12월 17일 TIL

meoca1257 2024. 12. 17. 16:53

데이터 분석 복습 5주차 6~9 & 숙제

 

1) 자체 숙제 (문제점 발견)

 

만들어 보기

 

created_at user_id name progress_rate
2022. 8. 15 237a15a4c854a19f 이시우 100
2022. 8. 8 9e39ebcdb3e41fdb 경서희 100
2022. 8. 8 ccd9564adf22a5f7 지소희 36
2022. 8. 1 291ad78f3adfa9ee 최가은 100

 

자료 일부분임 

 

필요 정보 - created_at , progress_rate , user_id 

created_at 날짜별로 나누기 위해

progress_rate 날짜별 진도율을 알기 위해

user_id 각 개체별로 카운트하여 총 합을 알아내기 위해

 

예상 작업 순서

1. 공란 확인 후 있을 시 제거

2. created_at 데이터 형식 확인, 날짜형으로 변경

3. created_at_week 열을 추가 몇 주차인지 명시

4. 40~45 주차별 유저 수 와 진도율에 따른 강의 주차로 쪼개기 

0~4.11% 0주차

4.12~26.03% 1주차

26.04~41.1% 2주차

41.11~61.64% 3주차

61.65~80.82% 4주차

80~83~100% 5주차 

5. ex) 처럼 만들기

ex)

시작일 주차 유저수

44주차 4주차 87

44주차 5주차 102

45주차 1주차 12

45주차 2주차 40

 

시작 전 문제점 확인 

1. 상단 사진 처럼 굳이 만들 필요 없이 히트맵 만드는게 더 좋음

2. 히트맵과 코호트는 비슷하다 생각하에 감이 안잡힘 

 

결론 : 강의 들은 후에 복습을 하여 감 부터 익히자 

 

ok

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

2) 데이터 전처리 

 

 2-1) isnull dropna 쓴다. (정답)

-> 그냥 isnull로 확인 말고 dropna면 끝남

sparta_data=sparta_data.dropna()

 

 2-2) created_at 데이터 타입 확인 created_at_week 로 변경, progress_rate 를 progress_rate_week로 변경

  2-2-1) 데이터 타입 확인 (정답?)

sparta_data.info()

created_at 은 글자형이고 progress_rate는 숫자형 

created_at 을 날짜형으로 변경 필요

 

 

print(type(sparta_data['created_at'][1]))

강의 자료를 상단의 명령어 이용해서 'str' 스트링 타입 문자열임을 확인함

 

왜?????? 

 

info 자료를 단위 컬럼 별 객체가 몇개 있는지 확인, dtype 확인 

dtype 이란 

 

 

결과: 별 차이 없어보임 편한거 써도 되는지 문제점은 없는지 확인 필요. 

질문 ㄱㄱㄱㄱㄱ

 

질문 답변:  상관없다 니가 맞았다~ 기분 좋다

 

 

 

 2-2-2) created_at 날짜형 변경(정답)

format='%Y. %m. %d'
sparta_data['created_at_day'] = pd.to_datetime(sparta_data['created_at'], format=format, errors='coerce')

 

 2-2-2) created_at_day를 2022년 몇일차 인지created_at_stated로 변환(오답)

왜 오답? : 날짜순으로 갈 필요 없이 바로 몇주차인지 구하면 되는거라 굳이 길 어렵게 갈 필요 없음

sparta_data['created_at_started'] = sparta_data['created_at_day'].dt.day().count()

오류남 

 

 정답 : 몇주차인지 먼저 구하면 됨 (복습)

#수강 시작 주 구하고, 테이블의 열로 추가 하기
sparta_data['start_week']= sparta_data['start_time'].dt.isocalendar().week
sparta_data.tail()

 

#이전에 배웠듯이 set()은 set안의 데이터는 순서가 정해져있지 않고, 중복되지 않는 고유한 요소를 가져옵니다!
category_range = set(sparta_data['start_week'])
category_range

 

2-2-3) 주차 별 나열이 필요함 31~36주차 순으로 (모름 복습)

 

progress_rate = list(sparta_data['progress_rate'])

범주화 할 데이터 리스트 만들기

 

2-2-4) 범주를 구분하는 기준 및 라벨(수강 주차) 만들기

 

 

#범주를 구분하는 기준 bins 처음(0)과 끝(100) 잊지 말고 기입 해주세요!
bins = [0,4.11,26.03,41.10,61.64,80.82,100]
#구분한 범주의 라벨 labels
labes=[0,1,2,3,4,5]

 

=> 규칙을 지정해주는중 (데이터 범위별 라벨링)

 

2-2-5) 진도율에 따라 주차별로 변경하기

 

#범주화에 사용하는 함수

cuts = pd.cut(progress_rate,bins, right=True,include_lowest=True, labels=labels)

cuts

 

progress_rate 와 bins를 집어 넣어주면 이제 알아서 데이터가 어떻게 생겼는지 알려줌

******강의자료 오타 발견 십

 

2-2-6) 범주화 결과물을 테이블로 변경하기(복습)

 

#결과물을 테이블로 변경하기
cuts = pd.DataFrame(cuts)
cuts.tail()

판다스가 알아먹을 수 있는 데이터 프래임으로 바꿔줘

 

 

2-2-7) 합체 join

 

#concat() 함수를 이용하여, sparta_data 테이블과, cuts 테이블 병합 할수 있습니다 :)
sparta_data = pd.concat([sparta_data,cuts],axis=1, join='inner')
sparta_data.head()

axis=1 이란 표현이 인덱스 별로 합쳐주겠다는 얘기

판다스 콘캣 - 테이블 합치기 , axis:중심선 (다른 숫자 넣으면 이상해짐)

 

 

2-2-8) 테이블 컬럼 이름 바꾸기 

 

sparta_data.columns[6]="weeks"
#6번째의 컬럼의 이름만 "weeks" 변경 해주면 되겠죠?
#하지만 이렇게 작성하면 오류가 발생 할꺼예요!

->

한 객체가 아닌 전체를 바꿔줘야 말을 알아먹음

=>

#그래서, 귀찮더라도, 우리가 원하는 컬럼의 이름을 다 작성해 줍시다!
sparta_data.columns=['created_at','user_id','name','progress_rate','start_time','start_week',"week"]
sparta_data.head()

 

 

 

 

3) 데이터 분석하기

3-1) 수강 시작 주와, 수강 주차를 기준으로 테이블 만들기

groupby 사용

 

grouping = sparta_data.groupby(['start_week','week'])

grouping.head()

 

보여지는 것에 큰 차이는 없지만 179개 행과 7개의 열로 묶임 

 

 

3-2) 수강 수 구하기 그리고 테이블로 변경 하기

cohort_data = grouping['user_id'].apply(pd.Series.nunique)
cohort_data = pd.DataFrame(cohort_data)
cohort_data.head(6)

 

유저 id별로 유니크한 값(시작주,~주차)으로 코홀트 데이터 만들어주란 명령어

                       5            167

 

ex) (1~3주차는 무시하고 단순 이해용)

5주차는  167 값이 나와야함 

4주차는  14+167 값이 나와야함

왜냐면 4주차 때는 14+167 181명이 4주차를 수강했고 5주차때는 14명이 빠진 167명만 수강을 들었으니까 

 

즉 ! 수정 필요! 명령어 필요! 무슨 명령어? 몰라! 

 

3-3) 수강 주차 별, 수강한 총 인원 구하기 ★ ★ ★ ★ ★어려움 주의★ ★ ★ ★ ★ ★ ★

 

#첫 주가 31주니 변수를 하나 만들어 줍니다!

 


f=31
#처음 수강 시작한 주의 범위가 {31,32,33,34,35,36} 이니, range(6)으로 합시다!
for i in range(6):
  for j in range(5, 0, -1):
    cohort_data.at[(f,j-1), 'user_id'] = int(cohort_data.at[(f,j),'user_id']) +  int(cohort_data.at[(f,j-1),'user_id'])

  f=f+1

 

해설 : 5주차부터 0주차 까지 1씩 내려가면서,

31주의 5-1=4주차 'user_id' 코홀트 데이터는 5주차 데이터에다가 4주차 데이터를 더해서 넣어주겠다.

j : 0~5주차 / f : 31~36주

 

*int : 숫자형이다~

* at(....) 함수 : 를 이용하여 테이블의 하나의 요소에 접근 할수 있습니다 .

*******오류 발생 신규 코드로 수정 필요 -> 아니다 오류는 아닌데 추후에 바뀔거니까 알아두란 내용임

**오해 정리 : 

<ipython-input-40-6f0f75a01b87>:52: FutureWarning: The default of observed=False is deprecated and will be changed to True in a future version of pandas. Pass observed=False to retain current behavior or observed=True to adopt the future default and silence this warning. grouping = sparta_data.groupby(['start_week','week'])

 

ai 의 도움 ( = 신인가?)

 

결론 : ai 미쳤네 나 이거 왜 배워?  이해하고 더 잘 쓰라고 

 

 

3-3) cohort_data에 인덱스 설정하기

 

cohort_data = cohort_data.reset_index()

cohort_data.head()

 

 

오늘의 결론 ::: 

 

1. 데이터 분석 5주차 부터는 턱이 너무 높다 

TIL 작성도 필수긴 하지만 지금부턴 복습말곤 쓸게없다

그치만 양이 너무 많아 당분간 (~20일 까지)은 느낀점 그리고 깊이 깨달은 점 위주로 작성해보겠다

 

2. AI는 신이야

발달된 AI에 맞춰 향상된 인간이 되도록 열심히 공부하자

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

업무 스터디

목적 : 관심 산업군 공정 파악

링크 : 7조

 

관심 산업군 : 철강산업 

제품 공정 과정 - 고로 방식, 전기로 방식

(자세한 내용은 링크 참조)

  1. 고로 방식 - 원재료인 철광석과 석탄이 소결, 코크스 가공 과정을 거쳐 용광로로 주입 / 주조 공정을 통해 철강 생산
  2. 전기로 방식 - 전기로에 고철을 녹여 만든 쇳물을 철강으로 생산

특수 강판(전기 강판)

  • 제조 공정
  1. 변압기, 전기차, 하이브리드차 등
  2. 예비소둔 : 스케일 브레이커 및 염산탱크를 통해 열연소재 표면에 형성된 녹(Scale)을 제거한 후 열처리를 통하여 냉간 압연성을 개선하고, 자기적 특성을 향상시키는 공정
  3. 냉간압연 : 용도에 맞는 두께와 재질 확보를 위해 통상 40%~90%의 압하율로 진행되며, 균일한 두께 및 형상 확보를 위해 자동 두께 제어기, 자동 형상 제어기 등의 첨단기기를 이용
  4.  소둔(열처리) : 열처리를 통해 냉간압연 조직을 재결정 조직으로 바꾸는 공정 - 방향성 전기강판은 소재 내 탄소를 제거하고 MgO 코팅을 실시하는 탈탄소둔과 압연방향으로 자기특성이 우수한 2차 재결정 조직을 형성시키는 고온 소둔이 있습니다. 무방향성 전기강판은 재결정과 절연 코팅을 실시합니다.
  5.  절연코팅 : 철심 제조시 가공성 개선 및 와전류 손실을 최소화하기 위해 연속 코터(Coater)를 이용하여 강판 상하면에 절연 코팅액을 도포하는 공정입니다. 방향성 전기강판은 암갈색의 Forsterite(Mg2SiO4)를 주성분으로 하는 베이스 코팅과 인산염 베이스의 투명한 절연코팅으로 구성되어 있습니다. 무방향성 전기강판은 용도 및 요구 특성에 따라 코팅 두께, 성분 등이 달라집니다.
  • 압하율 = 두께 감소율
  • 코팅 공정

상대적 저점도 용액을 슬롯 코터, 바코터, 혹은 그라뷰어 코터와 같은 코팅 장비를 사용하여 적절한 마이크로 규모의 유동을 발생하여, 최종적으로는 큰 종횡비(aspect ratio)를 가지는 필름 형태로 도포 할 수 있으며, 이를 도포 공정(applicationprocess) 혹은 협의의 코팅 공정(coating process)이라고 불린다.

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

아티클 스터디

목적:랜덤한 아티클을 선정 해당 아티클을 요약 후 팀원에게 발표 및 서로의 요약을 비교대조해 나 자신을 발전시키자

링크: 데이터 분석의 시작은 Business다 | by Jeongmin Ju | Medium

 

데이터 분석의 시작은 Business다

안녕하세요. 저는 제약, 패션, 배달 산업에서 데이터 분석가로 근무하면서 산업별 회사의 비즈니스 모델을 파악하는 것이 중요하다는 것을 깨달았습니다. 이번 글은 데이터를 분석하기에 앞서

medium.com

 

  • 요약 : 데이터 분석 목적
  • 주요 포인트 :
  1. 데이터 분석가 필수 역량

1.1)도메인의 흐름을 빠르게 파악하기 위해 사업과 시장 경제에 대한 이해

  1. 데이터 분석 순서프로덕트 문제 정의 목적에 맞는 데이터를 검색
  2. 사업 목표 설정
  3. 사업 모델과 생산 성장 및 사용 방식에 영향을 끼치는 요인
ex )  산업 지표를 바탕으로 한 북극성 지표 중 중점적 요인

 

  • 핵심 개념 :

데이터 분석 전 목적이 무엇인지 제대로 알 필요가 있다.

  • 용어 정리 :
  • 주요 산업 지표
  • 마켓 플레이스란?       
  • 2-sided Market  ex) 야놀자
    • 공급자A-중간 관계자-소비자
    3-sided Market ex) 배민
    • 공급자A-중간 관계자-공급자B-중간 관계자-소비자
    • 단점
      공급자,중간 관계자, 소비자 간 균형이 필수 요소
      
    • 수요와 공급의 불균형 문제
  • 2-sided Market
  • 산업 지표를 파악하기 위한 필수 의문점
  • 우리는 어떤 가치를 고객에게 제공하고자 할까? 우리 비즈니스를 가장 잘 측정하는 방법과 지표는 무엇일까?
  • 북극성 지표
    1. 매출
    2. 사용자 수
    3. 서비스 이용 강도
    4. 서비스를 이용중인 사용자 수
    5. 지출 대비 수익 창출의 효율성
    6. 고객의 만족 여부
  • 데이터 분석 사이클 (데이터 분석 강의 자료)

문제 정의 및 가설 설정 → 데이터 분석 기초 세팅 → 데이터 분석 → 분석 결과 시각화 → 최종 결론

 

결론 : 그럴듯한 내용 그럴듯하게 영어로 포장해서 그럴듯하게 야랄라 했네

그럴듯하다고 필요없는 내용은 절대 아님 철학에서 같은 말 다르게 하는 같은 느낌

필요성을 느낄 땐 없어선 안될 정보들임

'본 캠프 TIL' 카테고리의 다른 글

12월24일 TIL  (1) 2024.12.24
12월23일 TIL  (4) 2024.12.23
12월 20일 TIL (데이터 분석 복복습 완!/과제 완!)  (6) 2024.12.20
12월 18일 TIL  (6) 2024.12.18
12월 16일 TIL  (2) 2024.12.16