Loading dashboard.pydeleted 100644 → 0 +0 −3080 File deleted.Preview size limit exceeded, changes collapsed. Show changes main.pydeleted 100644 → 0 +0 −136 Changes for main.py: 0 added lines, 136 removed lines. Original line number Diff line number Diff line from etsi_dq.io import load_dataset from etsi_dq.profiler import get_metadata import pandas as pd import numpy as np # 라이브러리 함수 임포트 from etsi_dq.metrics import ( check_completeness, check_reliability, check_uniqueness, check_redundancy, check_precision, check_measurement_bias, check_representation_bias, check_accuracy, check_timeliness, check_consistency, check_availability, check_integrity, check_k_anonymity, check_traceability, check_lineage, check_confidentiality, check_coverage, check_label_quality ) # 1. 데이터 로드 file_path = "data/sample.xlsx" sheet_name = "Case A (IoT)" # or "Case B (Demographic)" print(f"Loading data from {file_path} ({sheet_name})...") df = load_dataset(file_path, sheet_name=sheet_name) if df is None: exit("데이터 로드 실패") print(f"Columns: {list(df.columns)}") # ============================================================================== # [Configuration] 컬럼 매핑 (사용자 설정) # 시뮬레이션 없이, 파일 내 실제 컬럼을 지정합니다. # ============================================================================== # 공통 설정 (파일에 컬럼이 있다고 가정) config = { "time_event": "Event_Time", "time_system": "System_Time", "protected_ratio": 90, # 관리적 지표 (파일 외적 요소) "population": 100000 # 관리적 지표 (파일 외적 요소) } # 시트별 자동 설정 분기 if "Sensor_14 (Speed)" in df.columns: # Case A: IoT 설정 config.update({ "target": "Sensor_14 (Speed)", "true_val": "Sensor_14_True", "group": "Group_ID", "rule": "`Sensor_2 (T2)` > 0", "decimals": 2 }) else: # Case B: Demographic 설정 config.update({ "target": "Age", "true_val": "Age_True", "group": "Age_Group", "rule": "`Age` > 0", "decimals": 0 }) print("="*80) print(f" ETSI TR 104 180 Check - [{sheet_name}]") print("="*80) # ============================================================================== # [Execution] 측정 실행 (순수 계산) # ============================================================================== # [Phase 1: Statistics] print(f"1. Completeness : {check_completeness(df):.2f}%") print(f"2. Reliability : {check_reliability(df[config['target']]):.2f}%") print(f"3. Uniqueness : {check_uniqueness(df):.2f}%") print(f"4. Redundancy : {check_redundancy(df)}") print(f"5. Precision : {check_precision(df[config['target']], config['decimals']):.2f}%") # Bias (True Value 컬럼 사용) if config['true_val'] in df.columns: bias = check_measurement_bias(df[config['target']], df[config['true_val']]) print(f"6. Meas. Bias : {bias:.4f}") else: print("6. Meas. Bias : N/A (참값 컬럼 없음)") # Rep Bias (인구통계만) if 'Sex' in df.columns: print(f"7. Rep. Bias : {check_representation_bias(df['Sex']):.2f}%") else: print("7. Rep. Bias : N/A") # [Phase 2: Logic & Time] # Accuracy if config['true_val'] in df.columns: acc = check_accuracy(df[config['target']], df[config['true_val']], tolerance=1.0) print(f"8. Accuracy : {acc:.2f}%") else: acc = 0.0 print("8. Accuracy : N/A") # Timeliness if config['time_event'] in df.columns and config['time_system'] in df.columns: lat = check_timeliness(df[config['time_event']], df[config['time_system']]) print(f"9. Timeliness : {lat:.4f} sec") else: print("9. Timeliness : N/A") # Consistency cons = check_consistency(df, config['rule']) print(f"10. Consistency : {cons:.2f}%") # Availability avail = check_availability(df['Cycle']) if 'Cycle' in df.columns else check_availability(df[config['time_event']]) print(f"11. Availability: {avail:.2f}%") # Integrity integ = check_integrity(check_completeness(df), acc, cons) print(f"12. Integrity : {integ:.2f}") # Anonymity if config['group'] in df.columns: k = check_k_anonymity(df, [config['group']]) print(f"13. Anonymity : k={k}") else: print("13. Anonymity : N/A") # [Phase 3: Management] print(f"14. Traceability : {check_traceability(5, 6):.2f}%") print(f"15. Lineage : {check_lineage(8, 10):.2f}%") # 기밀성: 90% 보호 가정 (설정값 기반) n_prot = int(len(df) * (config['protected_ratio'] / 100)) print(f"16. Confidentiality: {check_confidentiality(n_prot, len(df)):.2f}%") print(f"17. Coverage : {check_coverage(len(df), config['population']):.2f}%") # 라벨 품질: True Value와 Target 비교 if config['true_val'] in df.columns: lq = check_label_quality(df[config['target']], df[config['true_val']]) print(f"18. Label Quality: {lq:.2f}%") else: print("18. Label Quality: N/A") print("="*80) No newline at end of file Loading
dashboard.pydeleted 100644 → 0 +0 −3080 File deleted.Preview size limit exceeded, changes collapsed. Show changes
main.pydeleted 100644 → 0 +0 −136 Changes for main.py: 0 added lines, 136 removed lines. Original line number Diff line number Diff line from etsi_dq.io import load_dataset from etsi_dq.profiler import get_metadata import pandas as pd import numpy as np # 라이브러리 함수 임포트 from etsi_dq.metrics import ( check_completeness, check_reliability, check_uniqueness, check_redundancy, check_precision, check_measurement_bias, check_representation_bias, check_accuracy, check_timeliness, check_consistency, check_availability, check_integrity, check_k_anonymity, check_traceability, check_lineage, check_confidentiality, check_coverage, check_label_quality ) # 1. 데이터 로드 file_path = "data/sample.xlsx" sheet_name = "Case A (IoT)" # or "Case B (Demographic)" print(f"Loading data from {file_path} ({sheet_name})...") df = load_dataset(file_path, sheet_name=sheet_name) if df is None: exit("데이터 로드 실패") print(f"Columns: {list(df.columns)}") # ============================================================================== # [Configuration] 컬럼 매핑 (사용자 설정) # 시뮬레이션 없이, 파일 내 실제 컬럼을 지정합니다. # ============================================================================== # 공통 설정 (파일에 컬럼이 있다고 가정) config = { "time_event": "Event_Time", "time_system": "System_Time", "protected_ratio": 90, # 관리적 지표 (파일 외적 요소) "population": 100000 # 관리적 지표 (파일 외적 요소) } # 시트별 자동 설정 분기 if "Sensor_14 (Speed)" in df.columns: # Case A: IoT 설정 config.update({ "target": "Sensor_14 (Speed)", "true_val": "Sensor_14_True", "group": "Group_ID", "rule": "`Sensor_2 (T2)` > 0", "decimals": 2 }) else: # Case B: Demographic 설정 config.update({ "target": "Age", "true_val": "Age_True", "group": "Age_Group", "rule": "`Age` > 0", "decimals": 0 }) print("="*80) print(f" ETSI TR 104 180 Check - [{sheet_name}]") print("="*80) # ============================================================================== # [Execution] 측정 실행 (순수 계산) # ============================================================================== # [Phase 1: Statistics] print(f"1. Completeness : {check_completeness(df):.2f}%") print(f"2. Reliability : {check_reliability(df[config['target']]):.2f}%") print(f"3. Uniqueness : {check_uniqueness(df):.2f}%") print(f"4. Redundancy : {check_redundancy(df)}") print(f"5. Precision : {check_precision(df[config['target']], config['decimals']):.2f}%") # Bias (True Value 컬럼 사용) if config['true_val'] in df.columns: bias = check_measurement_bias(df[config['target']], df[config['true_val']]) print(f"6. Meas. Bias : {bias:.4f}") else: print("6. Meas. Bias : N/A (참값 컬럼 없음)") # Rep Bias (인구통계만) if 'Sex' in df.columns: print(f"7. Rep. Bias : {check_representation_bias(df['Sex']):.2f}%") else: print("7. Rep. Bias : N/A") # [Phase 2: Logic & Time] # Accuracy if config['true_val'] in df.columns: acc = check_accuracy(df[config['target']], df[config['true_val']], tolerance=1.0) print(f"8. Accuracy : {acc:.2f}%") else: acc = 0.0 print("8. Accuracy : N/A") # Timeliness if config['time_event'] in df.columns and config['time_system'] in df.columns: lat = check_timeliness(df[config['time_event']], df[config['time_system']]) print(f"9. Timeliness : {lat:.4f} sec") else: print("9. Timeliness : N/A") # Consistency cons = check_consistency(df, config['rule']) print(f"10. Consistency : {cons:.2f}%") # Availability avail = check_availability(df['Cycle']) if 'Cycle' in df.columns else check_availability(df[config['time_event']]) print(f"11. Availability: {avail:.2f}%") # Integrity integ = check_integrity(check_completeness(df), acc, cons) print(f"12. Integrity : {integ:.2f}") # Anonymity if config['group'] in df.columns: k = check_k_anonymity(df, [config['group']]) print(f"13. Anonymity : k={k}") else: print("13. Anonymity : N/A") # [Phase 3: Management] print(f"14. Traceability : {check_traceability(5, 6):.2f}%") print(f"15. Lineage : {check_lineage(8, 10):.2f}%") # 기밀성: 90% 보호 가정 (설정값 기반) n_prot = int(len(df) * (config['protected_ratio'] / 100)) print(f"16. Confidentiality: {check_confidentiality(n_prot, len(df)):.2f}%") print(f"17. Coverage : {check_coverage(len(df), config['population']):.2f}%") # 라벨 품질: True Value와 Target 비교 if config['true_val'] in df.columns: lq = check_label_quality(df[config['target']], df[config['true_val']]) print(f"18. Label Quality: {lq:.2f}%") else: print("18. Label Quality: N/A") print("="*80) No newline at end of file