#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 한약재 제품 코드 심층 분석 """ import pandas as pd def deep_analyze(): file_path = 'sample/(게시)한약재제품코드_2510.xlsx' sheet_name = '한약재 제품코드_20250930기준(유효코드만 공지)' # 데이터 읽기 - 제품코드를 문자열로 읽어서 0 유지 df = pd.read_excel(file_path, sheet_name=sheet_name, dtype={'제품코드': str}) print("=== 한약재 제품 코드 데이터 심층 분석 ===") print(f"전체 데이터: {len(df):,}개 제품") print(f"유일한 주성분코드: {df['주성분코드'].nunique()}개") print(f"유일한 약재 품목명: {df['한약재 품목명'].nunique()}개") print(f"유일한 업체: {df['업체명'].nunique()}개") # 주성분코드별 통계 print("\n=== 주성분코드별 제품 수 (상위 20개) ===") ingredient_stats = df.groupby(['주성분코드', '한약재 품목명']).size().reset_index(name='제품수') ingredient_stats = ingredient_stats.sort_values('제품수', ascending=False).head(20) for _, row in ingredient_stats.iterrows(): print(f" {row['주성분코드']} ({row['한약재 품목명']}): {row['제품수']}개 제품") # 업체별 통계 print("\n=== 업체별 제품 수 (상위 10개) ===") company_stats = df['업체명'].value_counts().head(10) for company, count in company_stats.items(): print(f" {company}: {count}개 제품") # 규격별 분석 print("\n=== 약품 규격 분석 ===") spec_stats = df['약품규격(단위)'].value_counts() print("규격 단위별 제품 수:") for spec, count in spec_stats.items(): print(f" {spec}: {count}개") # 특정 약재들 확인 print("\n=== 주요 약재 확인 ===") target_herbs = ['건강', '감초', '당귀', '황기', '숙지황', '백출', '천궁', '육계', '백작약', '인삼', '생강', '대추'] for herb in target_herbs: herb_data = df[df['한약재 품목명'] == herb] if not herb_data.empty: unique_code = herb_data['주성분코드'].iloc[0] if len(herb_data) > 0 else 'N/A' product_count = len(herb_data) company_count = herb_data['업체명'].nunique() print(f" {herb}: 주성분코드={unique_code}, {product_count}개 제품, {company_count}개 업체") else: print(f" {herb}: 데이터 없음") # 한 약재에 여러 제품이 있는 예시 - 건강 print("\n=== '건강' 약재의 제품 예시 (처음 10개) ===") gangang_data = df[df['한약재 품목명'] == '건강'].head(10) if not gangang_data.empty: for _, row in gangang_data.iterrows(): # 제품코드를 9자리로 표시 (0 패딩) product_code = str(row['제품코드']).zfill(9) print(f" 업체: {row['업체명']}, 제품명: {row['제품명']}, 제품코드: {product_code}, 규격: {row['약품규격(숫자)']} {row['약품규격(단위)']}") # 현재 시스템과의 비교 print("\n=== 현재 DB 설계와의 차이점 ===") print("1. 현재 시스템:") print(" - herb_items: 약재 기본 정보 (예: 건강)") print(" - inventory_lots: 로트별 재고 (원산지, 가격 등)") print("\nㅇ2. 제품코드 시스템:") print(" - 주성분코드: 약재별 고유 코드 (예: 3050H1AHM = 건강)") print(" - 제품코드: 업체별 제품 고유코드") print(" - 표준코드/대표코드: 바코드 시스템") print(" - 규격: 포장 단위 (500g, 1000g 등)") print("\n=== 시사점 ===") print("- 54,000개 이상의 유통 제품이 454개 주성분코드로 분류됨") print("- 같은 약재(주성분)라도 업체별로 다른 제품명과 코드를 가짐") print("- 제품별로 다양한 포장 규격 존재 (-, 500g, 600g, 1000g 등)") print("- 표준코드(바코드)를 통한 제품 식별 가능") if __name__ == "__main__": deep_analyze()