[ 데이터 전처리 & 시각화 개인과제 ]
- 과제 개요 및 목표
- 주요 과제 : 결측치 처리 , 날짜 데이터 전처리 , 불량률 계산 , 데이터 시각화
- 과제 수행 소회 ( 경험 )
공장 데이터(Defects, Temperature 등)를 포함한 CSV 파일을 불러오고,🔩 Level. 1 : 데이터 전처리
- 결측치 처리 : Defects 열의 이상치로 추정되는 특정 값을 NaN으로 대체하고, Temperature의 결측값은 평균값으로 채웁니다.도전 과제
- 품질 분석에 앞서 필수적으로 수행해야 하는 전처리 작업을 진행합니다.
문제 1-1 : 데이터 전처리 요구 사항
CSV 파일 읽기 및 데이터 기본 확인
- CSV 파일을 읽어 DataFrame(df) 을 생성합니다.
- 데이터셋 미리보기 : df의 상위 5개 행을 출력하세요.
- 데이터 정보 : 컬럼명, 데이터 타입, 결측치 등 기본 정보를 출력하세요.
- 기술 통계 : 평균, 표준편차, 최소/최대값 등 기술 통계를 출력하세요.
- 결측값 개수 : 각 열별로 결측값이 몇 개인지 출력하세요.
- 중복 행이 몇 개인지 출력하세요.
문제 1-2 : 결측치 처리
요구사항
- Defects 열에 이상치로 추정되는 9999라는 값을 발견했습니다.
- 이는 현실적인 결함 수로 보기 어려우므로 NaN(결측치)로 대체해야 합니다.
- Temperature 열에 존재하는 결측치(또는 NaN)을 Temperature 열의 평균값으로 대체
문제 1-3 : 날짜 데이터 전처리
요구사항
- 날짜 컬럼의 데이터 타입 확인
- Date 열이 문자열(object) 타입인지 확인하세요.
- 문자열을 날짜 타입으로 변환
- pd.to_datetime()을 사용하여 Date 열을 datetime64 타입으로 변환하세요.
- 변환 후 데이터 타입 확인
- 변환된 Date 열의 타입이 datetime64[ns]인지 확인하세요.
- 연도, 월, 일 파생 컬럼 생성
- Date 열로부터 Year, Month, Day 세 개의 컬럼을 추출해 새로운 열로 추가하세요.
문제 1-4 : 불량률(Defect Rate) 계산
문제 설명
공정 데이터에는 생산량(Production)과 결함 수(Defects)가 기록되어 있습니다. 하지만 Defects 열에는 이상치(9999)가 포함되어 있어 분석에 방해가 됩니다. 이러한 이상치를 처리하고, 각 행에 대해 불량률(DefectRate = Defects / Production)을 계산하세요.
요구사항
- Defects 열에서 9999를 결측치(NaN)로 처리하세요.
- DefectRate라는 새로운 열을 만들고, 결함 수 / 생산량을 계산하여 저장하세요.
- Line, Production, Defects, DefectRate 컬럼만 선택하여 앞부분 5개 행을 출력하세요.
🔩Level. 2 : 데이터 시각화
Level. 1에서 가공한 데이터를 바탕으로 본격적인 시각화를 만들어 봅니다.
- Bar Chart : 라인별로 데이터를 그룹화하여 생산량과 불량 수치 를 파악하고, **막대 그래프(Bar Chart)**를 생성합니다.
- Pie Chart : 전체 생산량(Production)에서 각각 어느 정도의 비중을 차지하는지 파악하기 위해, 파이 차트(Pie Chart) 를 생성합니다.
- Line Chart : 일자별 생산량(Production)과 불량 수량(Defects) 을 시각적으로 비교하여 불량률 추이와 생산 변동성을 파악하는 복합 선 그래프(Line Chart) 를 생성합니다.
문제 2-1 : Bar Chart - 라인별 Production & Defects
문제 설명
공장 내에는 A, B, C 등 여러 생산 라인(Line) 이 존재하며, 각 라인마다 하루 생산량(Production) 과 불량(Defects) 데이터가 기록됩니다. 라인별로 이러한 데이터를 그룹화하여 생산량과 불량 수치 를 파악하고, 막대 그래프(Bar Chart) 로 시각화하여 비교하려고 합니다.
요구사항
- 라인별 그룹화
- 주어진 데이터에서 라인(Line) 을 기준으로 그룹화하세요.
- 각 라인별 생산량(Production) 과 불량(Defects) 의 총합(합계)을 구하세요.
- Bar Chart 작성
- X축에는 라인(Line) 을 표시합니다.
- Y축에는 생산량(Production) 과 불량(Defects) 의 합계를 나타냅니다.
- 각 라인별로 두 가지 막대(Production/Defects)를 나란히 배치하여 시각적인 비교가 가능하도록 합니다.
- 그래프 꾸미기
- 그래프의 제목(title) 을 적절히 설정하세요.
- X축 라벨(xlabel)과 Y축 라벨(ylabel)을 알맞게 설정합니다.
- 범례(legend)를 추가하여 Production 와 Defects 를 명확하게 구분하세요.
- X축에 라인(A, B, C) 이름이 정확히 표시되도록 하세요 (필요에 따라 plt.xticks 등을 사용)
- Y축에 대한 격자(grid)를 추가하여 막대의 높이를 쉽게 확인할 수 있도록 합니다.
문제 2-2 : Pie Chart - 라인별 Production 비중
문제 설명
공장 내 여러 생산 라인(A, B, C)이 전체 생산량(Production)에서 각각 어느 정도의 비중을 차지하는지 파악하기 위해, 파이 차트(Pie Chart) 를 작성하려고 합니다.
요구사항
- Pie Chart 작성
- 파이 차트를 사용하여 각 라인의 Production 비중을 시각화하세요.
- 각 파이 조각에 라인 이름과 퍼센트(%) 를 표시하기 위해 autopct='%1.1f%%' 옵션을 사용하세요.
- 파이 차트의 색상을 라인별로 다르게 지정하여 구분이 용이하도록 합니다.
- 그래프 꾸미기
- 그래프의 제목(title) 을 적절히 설정하세요 (예: "라인별 Production 비중").
- 불필요한 축 라벨(예: 축 눈금)을 제거하여 파이 차트가 깔끔하게 보이도록 합니다.
- 그래프의 색상을 명확히 구분할 수 있도록 설정하세요.
문제 2-3 : 복합 Line Chart - 일자별 Production & Defects
문제 설명
공장에서는 매일 다양한 제품을 생산하고, 그 과정에서 발생하는 불량 수량 역시 기록합니다. 일자별 생산량(Production)과 불량 수량(Defects) 을 시각적으로 비교하여 불량률 추이와 생산 변동성을 파악하려고 합니다. 이에 따라, 주어진 데이터를 날짜별로 집계하고 선 그래프(Line Chart) 로 나타내는 작업을 수행해야 합니다.
요구사항
- 날짜별 집계
- 주어진 데이터에서 “일자(Date)”, “생산량(Production)”, “불량(Defects)”을 날짜별로 그룹화하여 총합(또는 평균)으로 집계하세요.
- Line Chart 작성
- X축에는 날짜(Date)를, Y축에는 “생산량(Production)”과 “불량(Defects)” 수치를 배치합니다.
- 날짜별 “Production”을 나타내는 선과 “Defects”를 나타내는 선을 같은 그래프에 그립니다.
- 그래프 꾸미기
- 그래프의 제목(title) 을 적절히 설정하세요.
- X축 라벨(xlabel)과 Y축 라벨(ylabel)을 설정합니다.
- 범례(legend)를 통해 두 선이 어떤 값(Production/Defects)인지 명확히 구분되도록 합니다.
- 그래프에 격자(grid)를 추가하여 가독성을 높이세요.
- 복합 그래프 참고 자료참고 블로그 바로가기
- 여러 그래프를 겹쳐 그리는 방법을 모르겠다면, 아래 링크를 참고하세요!
문제 2-4 : Boxplot – 라인별 온도 분포 시각화
문제 설명
공장에서는 라인별 온도(Temperature)를 일정하게 유지하는 것이 품질 관리에 매우 중요합니다.
온도는 제품 품질에 직접적인 영향을 줄 수 있기 때문에, 각 라인의 온도 분포를 주기적으로 점검하는 것이 필수적입니다.
Boxplot을 활용하면 각 생산 라인(Line)에서 측정된 온도의 범위, 중앙값, 이상치 등을 시각적으로 확인할 수 있습니다.
이를 통해 특정 라인의 온도 편차가 큰지, 혹은 이상 온도가 자주 발생하는 라인이 있는지를 쉽게 파악할 수 있습니다.
데이터를 기반으로 라인별 온도 데이터를 시각화하고, 품질 관리에 활용할 수 있는 인사이트를 도출해보세요.
요구사항
- 라인별 그룹화
- 주어진 데이터에서 Line 컬럼을 기준으로 온도(Temperature) 데이터를 그룹화하세요.
- Boxplot 작성
- seaborn 또는 matplotlib를 사용하여 라인별 온도 분포를 Boxplot으로 시각화합니다.
- X축에는 라인 이름(Line), Y축에는 온도 값(Temperature) 을 배치합니다.
- 그래프 꾸미기
- 그래프의 제목(title) 을 적절히 설정하세요.
- X축 라벨(xlabel)과 Y축 라벨(ylabel)을 설정합니다.
- 격자(grid) 를 추가하여 그래프의 가독성을 높이세요.
문제 2-5 : Violinplot – 라인별 온도 분포 및 밀도 시각화
문제 설명
공장에서 라인(Line)마다 일정한 온도를 유지하는 것은 제품의 품질과 생산 안정성에 직결됩니다.
온도 편차가 크거나, 특정 라인에서 온도가 한쪽으로 쏠리는 현상은 공정 이상이나 설비 문제로 이어질 수 있으므로,
라인별로 온도 데이터의 분포를 면밀히 분석하는 것이 중요합니다.
Boxplot은 이상치 및 중앙값, 사분위수 등 요약 통계를 제공해주지만,
데이터가 어느 구간에 몰려 있는지, 즉 분포의 형태(밀도)를 파악하는 데는 한계가 있습니다.
이러한 한계를 보완하기 위해 Violinplot을 활용하면,
Boxplot의 요약 통계 정보와 함께 데이터의 분포 밀도를 함께 시각화할 수 있습니다.
요구사항
- Line 컬럼을 기준으로 데이터를 분리하고, 각 라인의 Temperature 분포를 비교하세요.
- 시각화는 Seaborn의 violinplot() 함수를 사용합니다.
- 그래프는 다음과 같은 구성 조건을 충족해야 합니다:
- X축: 생산 라인 이름 (Line)
- Y축: 온도 값 (Temperature)
- 그래프 제목(title) 을 명확히 설정하세요.
- X/Y축 라벨을 지정하세요.
- grid()를 추가하여 그래프의 가독성을 높이세요.
문제 2-6: 결함 관련 상관관계 히트맵 시각화
문제 설명
제품 생산 중 발생하는 불량(Defects)은 공정 조건, 생산량, 온도 등 다양한 수치형 변수의 영향을 받을 수 있습니다.
이러한 변수들과의 관계를 분석하는 것은 결함 원인을 파악하고 품질 개선 방향을 제시하는 데 매우 중요합니다.
상관관계 히트맵(correlation heatmap)은 여러 수치형 변수 간의 관계를 시각적으로 직관적으로 파악할 수 있는 강력한 도구입니다.
특히 Defects가 다른 변수들과 얼마나 밀접하게 연결되어 있는지를 한눈에 확인할 수 있습니다.
요구사항
- df.corr() 함수를 사용하여 수치형 변수 간 상관계수(Correlation Coefficient)를 계산하세요.
- seaborn의 heatmap() 함수를 사용하여 히트맵 시각화를 작성하세요.
- 히트맵에는 반드시 Defects 컬럼이 포함되도록 하며, 해석 중심은 Defects와의 관계입니다.
- 시각화 구성 요소는 다음 조건을 반드시 포함해야 합니다:
- 색상은 상관계수의 크기에 따라 변화 (cmap 설정)
- annot=True로 각 셀에 상관계수 숫자 표시
- 그래프 제목(title), 컬러바(colorbar), X/Y축 라벨 추가
- 해결과정 : 노션과 실시간 세션 자료를 활용하여 문제를 해결하였다.
- 느낀점 : 전에는 시각화를 단순히 '예쁜 결과물을 만드는 과정'이라고 생각했다. 하지만 이번 과제를 통해 시각화는 내 분석의 논리를 상대방에게 설득하는 가장 강력한 언어라는 점을 깨달았다. 동일한 데이터라도 어떤 축을 설정하고, 어떤 시각화 기법을 선택하느냐에 따라 전달되는 메시지가 완전히 달라진다는 사실이 무척 흥미로웠다. 이제는 그래프를 볼 때 '어떻게 예쁘게 그릴까'가 아니라, 이 그래프를 통해 어떤 의사결정을 이끌어낼 것인가를 먼저 고민하게 되었다
3. 해설 세션 핵심 내용
- 문제점의 Want
- 가설 설정
- 현업에서 센서 데이터, 데이터 구매. 데이터 수집 후 분석
- 분석 방법
: 시각적 분석 , 통계 분석(회귀,시계열,상관관계,F검정) , 머신러닝/딥러닝 -XAI , 기출 통계(평균, 분산, 표준편차,max,min), 추론검정 ( t검정 , f검정 , 카이제곱 검정 )
- 분석 방법
- 결론
- 데이터 프레임이 회손 될 경우
- 방지 : df = df.copy()
- 데이터 클랜징 :결측값 제거, 이상치 제거
- .isnull()
- .isnull().sum() 결측값 개수
'내일배움캠프(QA,QC_5기)' 카테고리의 다른 글
| [내일배움캠프] QA/QC_5기 ( 20일차 ) (0) | 2026.04.03 |
|---|---|
| [내일배움캠프] QA/QC_5기 ( 19일차 ) (0) | 2026.04.02 |
| [내일배움캠프] QA/QC_5기 ( 17일차 ) (0) | 2026.03.31 |
| [내일배움캠프] QA/QC_5기 ( 16일차 ) (0) | 2026.03.30 |
| [내일배움캠프] QA/QC_5기 ( 15일차 ) (2) | 2026.03.27 |