2026. 3. 11. 20:51ㆍTIL
📢 오늘의 목표
🚩Pandas와 matplotlib을 이용하여 스파르타 캠프의 수강생들의 수강 정보 분석 및 최적의 결론 내기
🚩Python 기본 강좌 수강으로 기본기 다지기
🚩Article Study로 데이터 분석에 대한 현재 산업 트렌드 분석
🚩Career Study로 직무 방향 정하기
📅 TIL
❇️ 마케터, 기획자를 위한 실전 데이터 분석 3주차
1️⃣ 수업 목표

2️⃣ 문제 상황



3️⃣ 가설 설정
❗수업을 시작하는 9시 혹은 점심 먹고 나서인 13시경에 수강 인원이 가장 많을 것이다.
❗한 주의 시작인 월요일이나 자유롭게 수강할 수 있는 주말이 많을 것이다.
❗인구가 가장 많은 수도권(서울+경기도) 지역의 수강 인원이 가장 많을 것이다.
4️⃣데이터 분석
# Pandas 불러오기
import pandas as pd
# 데이터 파일 불러오기
sparta_data = pd.read_table('access_detail.csv',sep=',')
# head 기능을 통해 데이터 확인
sparta_data.head()
# String 데이터를 요일 데이터로 변경
format='%Y-%m-%dT%H:%M:%S.%f'
sparta_data['access_date_time'] = pd.to_datetime(sparta_data['access_date'], format='mixed')
sparta_data.tail(5)
# String 데이터를 시간 데이터로 변경
sparta_data['access_date_time_weekday'] = sparta_data['access_date_time'].dt.day_name()
sparta_data.tail(5)
# 요일 데이터를 정렬하고 유저 아이디를 기준으로 정렬
weeks = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
weekdata = sparta_data.groupby('access_date_time_weekday')['user_id'].count()
weekdata
weekdata = weekdata.agg(weeks)
weekdata
# 시간 데이터를 정렬하고 유저 아이디를 기준으로 정렬
sparta_data['access_date_time_hour'] = sparta_data['access_date_time'].dt.hour
hourdata = sparta_data.groupby('access_date_time_hour')['user_id'].count()
hourdata = hourdata.sort_index()
hourdata


| ⛔문제 상황 발생 문제: string data를 요일 데이터로 변환하는 과정에서 오류 발생 해결 방법: format='%Y-%m-%dT%H:%M:%S.%f'에서 dT와 % 사이에 - 하나 더 넣어서 오류가 남 -를 강의 자료를 보고 수정했더니 정상적으로 분석이 이루어 졌음 |
import matplotlib.pyplot as plt
import numpy as np
#그래프 사이즈
plt.figure(figsize=(10,5))
#그래프 x축 y축
plt.bar(weekdata.index, weekdata)
#그래프 명
plt.title('요일별 수강 완료 수강생 수')
#그래프 x축 레이블
plt.xlabel('요일')
#그래프 y축 레이블
plt.ylabel('수강생(명)')
#그래프 출력
plt.show()

💬 바 그래프로 시각화 결과 화요일과 일요일에 수강생 수가 가장 많았음을 알 수 있다!
import matplotlib.pyplot as plt
import numpy as np
#그래프 사이즈
plt.figure(figsize=(10,5))
#그래프 x축 y축
plt.plot(hourdata.index, hourdata)
#그래프 명
plt.title('시간별 수강 완료 사용자 수')
#그래프 x축 레이블
plt.xlabel('시간')
#그래프 y축 레이블
plt.ylabel('사용자(명)')
#그래프 출력
plt.show()

💬 선 그래프로 시각화 결과 18시 가량에 가장 수강을 많이 했음을 알 수 있다.
sparta_data_pivot_table = pd.pivot_table(sparta_data, values='user_id',
index=['access_date_time_weekday'],
columns=['access_date_time_hour'],
aggfunc="count").agg(weeks)
sparta_data_pivot_table
#그래프 사이즈 변경
plt.figure(figsize=(14,5))
#pcolor를 이용하여 heatmap 그리기
plt.pcolor(sparta_data_pivot_table)
#히트맵에서의 x축
plt.xticks(np.arange(0.5, len(sparta_data_pivot_table.columns), 1), sparta_data_pivot_table.columns)
#히트맵에서의 y축
plt.yticks(np.arange(0.5, len(sparta_data_pivot_table.index), 1), sparta_data_pivot_table.index)
#그래프 명
plt.title('요일별 종료 시간 히트맵')
#그래프 x축 레이블
plt.xlabel('시간')
#그래프 y축 레이블
plt.ylabel('요일')
#plt.colorbar() 명령어를 추가하면 그래프 옆에 숫자별 색상값을 나타내는 컬러바를 보여 줌
plt.colorbar()
plt.show()

💬 히트맵로 시각화 결과 화요일 18시 가량에 가장 수강을 많이 했음을 알 수 있다.
import pandas as pd
sparta_data = pd.read_table('students_area_detail.csv',sep=',')
sparta_data.head()
category_range = set(sparta_data['area'])
print(category_range, len(category_range))
#새로운 테이블을 만들고자 할 땐 기존의 테이블에서 필요한 "열의 이름"을 대괄호에 넣어 변수 지정
area_info=sparta_data[['area','latitude','longitude']]
area_info.head()
#drop_duplicates()을 이용하여 area(지역) 컬럼의 중복 데이터를 처리
area_info=area_info.drop_duplicates(['area'])
area_info
#.reset_index()를 이용해, 인덱스를 재정렬 할 수 있음
area_info= area_info.reset_index()
area_info
area_info = area_info.sort_values(by=["area"], ascending=[True])
area_info
number_of_students = pd.DataFrame(sparta_data.groupby('area')['user_id'].count())
number_of_students
result = pd.merge(area_info, number_of_students, on="area")
result

import matplotlib.pyplot as plt
import numpy as np
plt.rc('font', family='NanumBarunGothic')
#그래프 사이즈 변경
plt.figure(figsize=(10,5))
#그래프 x축 y축
plt.plot(result['area'], result['user_id'])
#그래프 명
plt.title('지역별 사용자 수')
#그래프 x축 레이블
plt.xlabel('지역')
#그래프 y축 레이블
plt.ylabel('사용자(명)')
#x축 눈금 수
plt.xticks(np.arange(13))
#그래프 출력
plt.show()

💬 선 그래프로 시각화 결과 서울에 수강생 수가 가장 많았음을 알 수 있다!
# 필요한 라이브러리 사용 선언하기
import folium
from folium.plugins import MarkerCluster
m = folium.Map(location=[37.5536067,126.9674308],
zoom_start=11)
for n in result.index:
radius = result.loc[n,'user_id']
#loc[n,"열 이름"] => loc[]를 활용하여 n번째의 열을 조회 할수 있다!
folium.CircleMarker([result['latitude'][n],result['longitude'][n]],
radius = radius/50, fill=True).add_to(m)
#.add_to(m)를 활용하여, 지정해 두었던 우리나라의 지도를 가져올 수 있다.

💬 지도에 시각화 결과 서울에 수강생 수가 가장 많았음을 알 수 있다!
| ⛔문제 상황 발생 문제: 시각화 과정에서 레이블이 깨지는 문제 발생 해결 방법: !sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
를 이용해서 나눔 폰트를 불러오고 plt.rc('font', family='NanumBarunGothic')를 이용해 적용하는 방식으로 문제 해결
|
5️⃣결론 및 고찰
결론적으로 처음 세웠던 가설 중 "수업을 시작하는 아침 9시 혹은 점심 먹고 나서인 13시경에 수강 인원이 가장 많을 것이다."는 틀린 가설이었고 "한 주의 시작인 월요일이나 자유롭게 수강할 수 있는 주말이 많을 것이다."는 일부만 맞는 가설이었고 "인구가 가장 많은 수도권(서울+경기도) 지역의 수강 인원이 가장 많을 것이다."는 맞는 가설이었다.
2주차 강의까지는 큰 문제없이 진행했지만 이번 강의부터는 새로운 내용이 너무 많이 나와서 여러번 복습을 진행해서 내것으로 만들어야겠다. 또한 이번에 사용한 시각화 툴 말고도 다른 시각화 툴을 사용해서 데이터를 처리 할 수 있는지 찾아봐야겠다.
🗯️과제

#Pandas를 실행
import pandas as pd
# 데이터 불러오기
sparta_data = pd.read_table('done_detail.csv',sep=',')
# 데이터 확인
sparta_data.head()
# Str > Time_weekday 데이터로
format='%Y-%m-%dT%H:%M:%S.%f'
sparta_data['done_date_time'] = pd.to_datetime(sparta_data['done_date'],format='mixed')
sparta_data.tail(5)
#Str > Time 데이터로
sparta_data['done_date_time_weekday']=sparta_data['done_date_time'].dt.day_name()
sparta_data.tail(5)
#시간 순으로 정렬 및 user_id를 기준으로 데이터 정리
sparta_data['done_date_time_hour']=sparta_data['done_date_time'].dt.hour
hourdata = sparta_data.groupby ('done_date_time_hour')['user_id'].count()
hourdata = hourdata.sort_index()
hourdata
import matplotlib.pyplot as plt
import numpy as np
plt.figure(figsize=(10,5))
plt.bar(weekdata.index, weekdata)
plt.title('요일별 수강 완료 수강생 수')
plt.xlabel('요일')
plt.ylabel('수강생(명)')
plt.show()

💬 인원이 가장 많고 연속되지 않는 요일인 화요일 일요일에 튜터님을 배치하면 좋을 것 같다.
❇️아티클 스터디
1️⃣ 아티클
사용자 데이터를 효과적으로 분석하는 법
https://yozm.wishket.com/magazine/detail/1967/
사용자 데이터를 효과적으로 분석하는 법 | 요즘IT
사용성 평가나 설문 조사 그리고 인터뷰와 같은 사용자 조사는 고객 관점에서의 사업 기회 발굴과 디자인 개선에 대한 인사이트를 제공해 줍니다. 그렇지만 단순히 사용자 조사로 수집된 데이
yozm.wishket.com
2️⃣ 요약
사용자 조사는 사업자 입장에서 고객에 대한 자세한 정보를 제공하지만 이에 대한 인사이트가 없다면 데이터 그 자체의 의미는 없다. 따라서 데이터 특징에 대한 명확한 시각화 과정이 필요하다.
만족도 점수, 과제 수행 시간 등 정량적 데이터는 통계적 방법을 활용해서 구하는데 이 방법도 기술 통계와 추론 통계로 구분된다. 하지만 두 방법 중 하나를 사용하는 것이 아닌 기술 통계를 기반으로 추가적으로 추론 통계까지 진행한다.
기술 통계의 경우 범주형 데이터는 빈도나 백분율을, 수치형 데이터는 평균이나 표준편차같은 통계값을 구할 수 있다. 이 데이터를 이용하여 범주형 데이터는 파이 차트와 누적 막대그래프로 시각화할 수 있고 수치형 데이터는 막대그래프와 선으로 시각화 할 수 있다. 또한 때로는 방사형 그래프와 산점도을 이용하여 한 눈에 데이터를 잘 보이게 할 수 있다.
추론 통계의 경우 t-검정이나 분산 분석같이 동 집단 간의 차이를 밝히는 방법이나 변수들 간의 연관성을 파악하는 상관 분석, 회귀 분석이 있다.이 결과는 정규 분포로 시각화 할 수 있다.
이러한 데이터를 현업에서 활용할때 유의 깊게 살펴야하는 점은 분석과 해석의 차이를 아는 것이고, 그래프를 그릴때 조그마한 차이를 크게 나타내어 혼동을 일으키면 안된다. 그리고 통계적 유의성과 디자인 의사 결정 또한 참고해야한다.
3️⃣ 주요 포인트
👌 사용자 조사에서의 인사이트의 중요성과 데이터 종류 차이에 따른 구별 방법의 차이
👌 기술 통계에서 수치형 데이터와 범주형 데이터간의 자료 시각화 방법 차이
👌 추론 통계에서 데이터 시각화 방법과 모집단과 추론과 가설 검정 방법
👌 데이터 시각화 및 이용시 유의 사항
4️⃣ 핵심 개념
💬 데이터는 그 자체로는 의미 있는 정보를 제공하지 않으므로 수집한 데이터에 맞는 적합한 분석과 이를 시각화하는 과정이 필요함
💬 정량적 데이터는 만족도 점수, 과제 수행 시간 등 얼마나 많은 행동이 일어나는 지에 대한 정보로 기술 통계와 추론 통계를 통해 해석 할 수 있음
💬 기술 통계의 경우 범주형 데이터와 수치형 데이터로 나뉘고 각각 파이차트와 누적 막대그래프, 막대 그래프와 선 그래프로 시각화 할 수 있음
💬 추론 통계의 경우 t-검정이나 분산 분석과 같은 방법 혹은 상관 분석이나 회귀붐석으로 데이터를 해석 할 수 있음
💬 이러한 데이터를 현업에서 활용할 때는 분석과 해석의 차이를 숙지해야하고 시각화된 데이터를 오해석하는 일이 없도록 해야함
5️⃣ 용어 정리
✔ 정성적 데이터
수치로 표현하기 어려운 의견, 감정, 경험 등 질적 특성을 설명하는 데이터이다.
✔ 정량적 데이터
수치로 측정 가능하며 통계적 분석이 가능한 숫자 형태의 데이터이다.
✔ 시각화
데이터를 그래프나 차트 등 시각적 형태로 표현하여 이해를 쉽게 하는 과정이다.
✔ 기술 통계
데이터를 요약하고 특징을 설명하기 위해 평균, 분산, 빈도 등을 계산하는 통계 방법이다.
✔ 추론 통계
표본 데이터를 이용해 모집단의 특성을 추정하거나 가설을 검정하는 통계 방법이다.
✔ 범주형 데이터
성별, 지역, 제품 종류처럼 특정 범주나 그룹으로 구분되는 데이터이다.
✔ 수치형 데이터
길이, 시간, 점수처럼 숫자로 측정되어 계산과 비교가 가능한 데이터이다.
✔ 신뢰 구간
표본 통계량을 통해 모집단의 실제 값이 포함될 것으로 예상되는 값의 범위이다.
✔ 방사형 그래프
여러 변수의 값을 중심에서 방사형으로 뻗은 축을 기준으로 비교하는 그래프이다.
✔ 산점도
두 변수 간의 관계나 상관성을 점의 분포로 나타내는 그래프이다.
✔ 분산 분석(ANOVA)
세 개 이상 집단 간 평균 차이가 통계적으로 유의한지 검정하는 방법이다.
✔ t-검정
두 집단의 평균 차이가 통계적으로 유의한지 확인하는 통계적 검정 방법이다.
✔ p-value
통계 검정에서 귀무가설이 맞다는 가정 하에 현재 결과가 나타날 확률을 의미하는 값이다.
✔ SPSS
데이터 분석과 통계 처리를 위해 사용되는 대표적인 통계 분석 소프트웨어이다.
✔ SAS
대규모 데이터 분석과 통계 모델링에 사용되는 기업 및 연구기관에서 많이 사용하는 통계 프로그램이다.
❇️커리어 스터디
🧪관련 data research
💬s emiconductor test research prediction
💬 Wafer fault Prediction
🚫 공정에서 발생 가능한 여러 문제들
⏩ Ion Implantation 공정에서 이온 주입 조건(Ion Implantation Condition) 이상으로 wafer에 damage 발생 가능
🚨 이온 주입 에너지(Energy) 또는 도즈(Dose)가 과도하여 예상보다 더 깊게 박혀서 원하는 전기적 특성을 띄지 못함
🚩공정 데이터와 wafer defect 데이터를 AI를 통한 머신 러닝으로 실시간 상관 분석하여 공정 결함률 하락.
⏩ etching 공정에서 식각 속도 불균일으로 패턴간의 불균일이 발생 가능
🚨가스 유량 및 RF power 변동으로 인한 CD Loss (임계 치수 손실) 불균일이 발생
🚩etch rate 및 CD(Critical Dimension) 데이터 통계 분석으로 문제 원인 파악 후 조치
⏩ 노광(Exposure) 조건 이상으로 패턴이 미형성되거나 depth가 일정하게 형성되지 않을 수 있음
🚨 Exposure dose 편차로 인한 패턴 미형성과 bridge 현상이 발생
🚩Computer Vision 기반 딥러닝 모델을 이용하여 패턴 형성 상태 자동 검사
'TIL' 카테고리의 다른 글
| 20260313 TIL (0) | 2026.03.13 |
|---|---|
| 20260312 TIL (0) | 2026.03.12 |
| 20260310 TIL (0) | 2026.03.10 |
| 20260309 TIL (0) | 2026.03.09 |
| 부트캠프 QAQC트랙 수료 중 나의 목표 (0) | 2026.03.09 |