2025 내일배움캠프 QAQC_2기

2025 내일배움캠프 QAQC_2기 본캠프 18일차

mingdoremi 2025. 6. 5. 20:54

안녕하세요! 오늘은 본캠프 18일차입니다!!!!

오늘도 코드카타로 시작하겠습니다!

 

Python

Q. 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

def solution(n):
    answer = []
    answer = [int(i) for i in reversed(str(n))]
    return answer

★오답노트★

n을 문자열로 바꾸는 것을 생각하지 못하였다.

 

SQL

Q. FOOD_FACTORY 테이블에서 강원도에 위치한 식품공장의 공장 ID, 공장 이름, 주소를 조회하는 SQL문을 작성해주세요. 이때 결과는 공장 ID를 기준으로 오름차순 정렬해주세요.

select factory_id, factory_name, address
from food_factory
where address like'%강원%'
order by factory_id

 

오늘은 개인과제 복습을 하고, 자소서 작성이랑 채용공고를 찾아봤어요!

개인과제에서 막혔던 부분을 팀장님께서 도와주셨습니다!!!

 

문제 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)를 추가하여 가독성을 높이세요.
# 1) 날짜별 집계
# your code here
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('/content/manufacturing_data_400.csv')
df['Date'] = pd.to_datetime(df['Date'])
df['Defects'] = df['Defects'].replace(9999, np.nan)

group_date = df.groupby('Date')[['Production','Defects']].sum()
group_date

# 2) 선 그래프(Line Chart) 작성
plt.figure(figsize=(14, 6))
plt.plot(group_date.index, group_date['Production'], label='Total Production', marker='o')
plt.plot(group_date.index, group_date['Defects'], label='Total Defects', marker='x')

plt.title('Daily Trends: Production and Defects')
plt.xlabel('Date')
plt.ylabel('Count')
plt.xticks(group_date.index.tolist())
plt.legend()
plt.grid(True)
plt.show()

2-3번 문제에서 x그리드가 사진과 같이 촘촘하게 되어야하는데 저는 그리드가 크게 나와서 문제 해결을 못하고 있었는데,

plt.xticks(group_date.index.tolist())
#그래프의 X축 눈금(틱)을 group_date의 인덱스 값으로 지정해서, 그래프에 정확하게 라인 이름이나 날짜 등을 보여주도록 해줍니다.

이 코드를 작성하니까 촘촘하게 바뀌더라고요! 팀장님 감사합니다~!~!

 

문제 3-1 : Production distribution

 

공장에서는 매일 생산되는 제품의 수량을 기록하고 있으며, 동일한 생산량이 중복해서 기록되기도 합니다.

이 데이터에서 중복된 값을 제거하고,생산량(production)의 분포를 히스토그램으로 시각화

하여 생산량이 주로 어느 구간에 집중되어 있는지를 파악하고자 합니다.

 

  • 데이터 data_with_duplicates 파일을 pandas로 읽어오세요.
  • production 열을 기준으로 중복값을 제거하세요.
  • 결측값이 있는 행은 모두 제거하세요.
  • 히스토그램은 다음 조건을 만족해야 합니다:
    • bins=10 (막대 수 10개)
    • edgecolor='k' (검정 테두리)
    • alpha=0.7 (투명도)
    • figsize=(8, 6)
  • X축 라벨: 'Production', Y축 라벨: 'Frequency', 그래프 제목: 'Production Distribution'
  • 시각화 결과를 바탕으로, 생산량이 주로 어떤 구간에 분포하는지 간단히 해석해보세요.
# 라이브러리 불러오기
import matplotlib.pyplot as plt
import pandas as pd

# CSV 파일 불러오기
df = pd.read_csv('/content/data_with_duplicates.csv')
# 중복 제거
drop_duplicates = df.drop_duplicates(subset='production')

# 결측값 제거
data_cleaned = drop_duplicates.dropna()

# 히스토그램 시각화
plt.figure(figsize=(8, 6))
plt.hist(data_cleaned['production'], bins=10, edgecolor='k', alpha=0.7)

# 히스토그램 생성
plt.title('Production Distribution')
plt.xlabel('Production')
plt.ylabel('Frequency')
plt.show()


# 분석가의 해석
#생산량은 특정 구간에 집중되어 있으며, 특히 1000 ~ 1025 구간, 1225 ~ 1250 구간에서 빈도가 높게 나타났다.

 

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

  • 3-1번에서 전처리 하였던 데이터 셋을 그대로 사용 할 것
  • data_cleaned['defect_rate'] 열을 다음 기준으로 범주화하세요:
    • 구간: [0, 0.015, 0.02, 0.025]
    • 라벨: ['Low (<= 0.015)', 'Medium (0.015-0.02)', 'High (> 0.02)']
    • pd.cut() 함수 사용, include_lowest=True 포함
  • 새로 생성된 범주형 데이터는 defect_rate_category라는 열 이름으로 추가하세요.
  • 각 범주의 빈도수를 계산하여 DRC 변수에 저장하세요.
  • 파이 차트는 다음 시각화 조건을 따르세요:
    • figsize=(8, 6)
    • colors = ['#66b3ff', '#99ff99', '#ffcc99']
    • autopct='%1.1f%%', startangle=140
    • 제목: 'Defect Rate Categories'
# 라이브러리 불러오기
import matplotlib.pyplot as plt
import pandas as pd

# 3-1번에서 전처리 하였던 데이터 셋을 그대로 사용 할 것
df = pd.read_csv('/content/data_with_duplicates.csv')
drop_duplicates = df.drop_duplicates(subset='production')
data_cleaned = drop_duplicates.dropna()

# 구간(binning)과 라벨 설정
bins = [0, 0.015, 0.02, 0.025]
labels = ['Low (<= 0.015)', 'Medium (0.015-0.02)', 'High (> 0.02)']
defect_rate_category = pd.cut(data_cleaned['defect_rate'],
                              bins = bins,
                              labels = labels,
                              include_lowest=True)

# 결함률 데이터를 범주화하여 새로운 컬럼 생성
data_cleaned['defect_rate_category'] = defect_rate_category

# 범주별 빈도수 계산
DRC = data_cleaned['defect_rate_category'].value_counts().sort_index()
# 파이 차트 생성
plt.figure(figsize=(8, 6))
colors = ['#66b3ff', '#99ff99', '#ffcc99']

plt.pie(DRC, labels=DRC.index, colors=colors, autopct='%1.1f%%', startangle=140)
# 차트 제목 설정
plt.title("Defect Rate Categories")

# 차트 표시
plt.show()

 

오늘도 너무너무 수고 많으셨습니다!!! 내일은 또 쉬는 날이네요!

휴일 잘 보내고 다음주에 뵐게요!! 😋