내일배움캠프_QAQC 1기/TIL

[01/07] TIL_아티클, 개인 과제, 과제 해설

이지응:) 2025. 1. 7. 22:32

오늘은 오전에 남은 과제를 풀고 오후에 아티클 스터디를 하고 저녁에 데이터 분석 종합반 강의를 들었습니다.

오늘 드디어 데이터 분석 종합반을 다 들었습니다!

아티클

 

주제 : 제조업에서 데이터 분석이란? · 인생을 여행처럼🛫

내용 :

2025.01.07 - [내일배움캠프_QAQC 1기/아티클] - [01/07] 아티클_제조업에서 데이터 분석이란?

개인 과제

 

https://colab.research.google.com/drive/1CxIRx4itO5hKKLhGTCaPAIoZGLbacgqW#scrollTo=tXNYmrA_8YYq

 

오늘은 어제 다 못 푼 과제에서 level3을 풀어보았습니다.

level3은 너무 어려워서 푸는 데 시간이 진짜 오래 걸린 것 같습니다..ㅜ

 

🔩 Level. 3 : 도전! 한 걸음 더 나아가기

Level. 3 에서 가공한 데이터를 바탕으로 본격적인 시각화를 만들어 봅니다.


  1. Histogram : production 열을 사용하여 Production distribution를 확인합니다.
  2. Pie Chart : 결함률(defect_rate) 데이터를 어느 정도의 비중을 차지하는지 파악하기 위해, 파이 차트(Pie Chart) 를 생성합니다.
  3. 한 걸음 더 :전처리와 시각화를 바탕으로 각자의 결론과 인사이트를 자유롭게 적어주세요!
  4. 각 문제에는 분석가의 해석을 작성하는 공간이 있습니다.

문제 3-1 : Production distribution

요구사항


  • data_cleaned라는 DataFrame에서 production 열을 사용하여 히스토그램을 작성하세요.
  • 그래프는 2행 3열(subplot(2, 3, 1)) 레이아웃에서 첫 번째 위치에 표시되도록 설정하세요.
  • 막대(bin)의 개수(bins)는 10으로, 막대 테두리 색(edgecolor)은 'k'(검정색), 투명도(alpha)는 0.7로 지정하세요.
  • 그래프 제목(title)은 'Production Distribution'으로 하고,
    • x축 라벨: 'Production'
    • y축 라벨: 'Frequency'를 각각 설정하세요.
  • 히스토그램이 완성되면, 생산량이 어떤 구간대에 집중되어 있는지 간단히 해석해 보세요. (예: “생산량이 대체로 20~40 구간에 몰려 있다.” 등)
# 라이브러리 불러오기
import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv('/content/data_with_duplicates.csv')

# 서브플롯 레이아웃 설정 (2행 3열의 첫 번째 위치)
plt.figure(figsize=(20,10))
plt.subplot(2,3,1)

# 결측치 제거
df.isnull().sum()
df=df.dropna()

# 중복 값 제거
df.duplicated().sum()
df=df.drop_duplicates()

# 이상치 처리
q1=df['production'].quantile(0.25)
q3=df['production'].quantile(0.75)

iqr=q3-q1

lower_bound=q1-1.5*iqr
upper_bound=q3+1.5*iqr

data_cleaned =  df[(df['production'] >= lower_bound) & (df['production'] <= upper_bound)]

# 히스토그램 생성
plt.hist(df['production'], bins=10, edgecolor='k', alpha=0.7)

# 제목 및 축 라벨 설정
plt.title('Production Distribution')
plt.xlabel('Production')
plt.ylabel('Frequency')

# 서브플롯 간 여백 조정
plt.tight_layout()

# 그래프 표시
plt.show()

# 결측치 제거
df.isnull().sum()
df.dropna()

# 중복 값 제거
df.duplicated().sum()
df.drop_duplicates()

 

처음에 결측치 제거랑 중복 값 제거 부분 코드를 이렇게 작성했었는데 오류가 나지 않고 잘 돌아가서 몰랐는데 이렇게 하면 결측치랑 중복 값이 제거가 안되는 거였습니다...!

 

그래도 과제 제출 전에 알아서 다시 수정했습니다!!

 

그리고 3-1이 틀린 상태여서 3-2도 아무리 수정해도 파이차트가 이상하게 나온거 였습니다!!

분명 오류 없이 코드가 돌아가는데 파이 차트가 실제로 나와야 하는 결과와 달라서 뭐가 문젠지 몰랐는데 3-1을 해결하고 다시 돌리니 바로 해결됐습니다!

 

문제 3-2 : Defect Rate Category 파이 차트 시각화

요구사항


  1. 결함률(defect_rate) 데이터를 구간(binning) 별로 범주화(Category)하십시오.
  • 구간 구분은 [0, 0.015, 0.02, 0.025]로 설정하고, 각 구간에 대한 범주 라벨(labels)은 ['Low (<= 0.015)', 'Medium (0.015-0.02)', 'High (> 0.02)']로 지정하세요.
  • pandas.cut() 함수를 활용하여, data_cleaned['defect_rate']를 defect_rate_category라는 새로운 컬럼으로 생성하세요.
  1. 범주화된 결함률(defect_rate_category)의 각 범주별 빈도수를 계산하세요. (value_counts() 활용)
  2. 파이 차트(Pie Chart)를 그릴 때, 아래 조건을 만족하세요.
    • 차트 크기: figsize=(8, 6)
    • 파이 섹션의 색상: ['#66b3ff', '#99ff99', '#ffcc99']
    • 퍼센트 표시: autopct='%1.1f%%'
    • 시작 각도: startangle=140
    • 차트 제목: 'Defect Rate Categories'
  3. 파이 차트를 통해, 결함률이 어느 구간에 많이 분포되어 있는지 확인하고, 그에 대한 짧은 해석을 기술하세요.
    • 예: “대부분의 결함률이 Low (<= 0.015) 구간에 분포한다.”, “약 20%는 High (> 0.02) 범주에 해당한다.” 등
# 라이브러리 불러오기
import matplotlib.pyplot as plt
import pandas as pd

# 구간(binning)과 라벨 설정
bin = [0, 0.015, 0.02, 0.025]
labels = ['Low(<=0.015)','Medium (0.015-0.02)','High(>0.02)']

# 결함률 데이터를 범주화하여 새로운 컬럼 생성
data_cleaned['defect_rate_category'] = pd.cut(data_cleaned['defect_rate'], bins=bin, labels=labels)
value_counts = data_cleaned['defect_rate_category'].value_counts()

# 파이 차트 생성
plt.figure(figsize=(8,6))
colors = ["#66b3ff", "#99ff99", "#ffcc99"]
plt.pie(value_counts,labels=value_counts.index, autopct='%1.1f%%', startangle=140, colors=colors)

# 차트 제목 설정
plt.title('Defect Rate Categories')
# 차트 표시
plt.show()

 

 

튜터님이 막대그래프 그릴 때 참고하라고 올려준 자료인데, 저는 이걸 3시간동안 이것저것 해보고 찾아보고 문제를 해결하고 알았습니다;;;

뭐 그래도 결국 혼자 해냈으니 좋은거겠죠!!!

 

막대그래프 그리는 방법1

import numpy as np
import matplotlib.pyplot as plt

# 예시 데이터 (df 대신 사용)
labels = ['Line1', 'Line2', 'Line3']
y1 = [100, 150, 120]  # Production
y2 = [5, 8, 12]       # Defects

# X좌표 생성을 위해 numpy의 arange 사용
x = np.arange(len(labels))  # [0, 1, 2, ...] 형태가 됨
width = 0.4  # 막대 너비

plt.bar(x - width/2, y1, width=width, label='Production')
plt.bar(x + width/2, y2, width=width, label='Defects')

# x축 눈금과 레이블 설정
plt.xticks(x, labels, rotation=0)

plt.title('Total Production and Defects by Line')
plt.xlabel('Line')
plt.ylabel('Count')
plt.legend()
plt.grid(axis='y')
plt.show()

막대그래프 그리는 방법2

import pandas as pd
import matplotlib.pyplot as plt

# 예제 데이터프레임 (실제 데이터에 맞게 수정하세요)
line_production = pd.DataFrame({
    'Production': [100, 150, 200],
    'Defects': [5, 10, 15]
}, index=['Line 1', 'Line 2', 'Line 3'])

# 스택형 막대 그래프 그리기
line_production.plot(kind='bar', figsize=(10, 6), color=['#1f77b4', '#ff7f0e'])#, stacked=True

plt.title('Total Production and Defects by Line')
plt.xlabel('Line')
plt.ylabel('Count')
plt.xticks(rotation=0)
plt.legend(['Production', 'Defects'], loc='upper left')  # 레전드 위치 조정 가능
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()  # 레이아웃 자동 조정
plt.show()