728x90
반응형
이제 데이터를 저장해야 한다.
진단 Tool 제작_3 (데이터 분할 및 데이터 프레임화 코드 변경)
DB에 Label 결과가 없는 상태로 1차 저장을 하고 Label 값을 사람이 넣고 난 후에 해당파일을 다시 넣으면 Label을 진행하여 각 현황에 맞는 결과를 DB에 저장한다. DB에 저장을 하기 위해서 코드를 작성했다.
if os_db_path:
os_conn = sqlite3.connect(os_db_path)
os_cursor = os_conn.cursor()
os_cursor.execute('SELECT COUNT(*) FROM processed_files WHERE filename = ?', (file_name,))
if os_cursor.fetchone()[0] == 0:
for srv_id, group in all_data.groupby('SRV_ID'):
table_name = srv_id.replace('-', '_')
os_cursor.execute(f'''
CREATE TABLE IF NOT EXISTS {table_name} (
id INTEGER PRIMARY KEY AUTOINCREMENT,
hostinfo_id INTEGER,
Content TEXT,
Label TEXT,
predict_Label TEXT,
FOREIGN KEY (hostinfo_id) REFERENCES hostinfo(id)
)
''')
group['hostinfo_id'] = hostinfo_id
group.drop(columns=['SRV_ID'], inplace=True)
group.to_sql(table_name, os_conn, if_exists='append', index=False)
processed_date = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
os_cursor.execute('INSERT INTO processed_files (filename, processed_date) VALUES (?, ?)',
(file_name, processed_date))
print(f"{file_name} 데이터가 {os_db_path}에 추가되었습니다.")
else:
print(f"{file_name} 기존 파일이므로 무시")
os_conn.commit()
os_conn.close()
id값은 전 게시글에서도 썼지만 자산번호 mapping 하기 위한 용도이며,
insert 구문을 통해 데이터를 추가하도록 했다.
각 항목별 ID 값에 해당하는 테이블이 있고, 각 테이블 안에는 스크립트 결과에서 항목별 Content(내용)이 있다.
아직 Label은 넣지 않았기 때문에 이런식으로 결과가 있는 상태에서 엑셀 파일에 Label 값을 다 넣고 다시 DB를 업데이트 한다.
os_conn.execute('BEGIN')
for index, row in label_df.iterrows():
srv_id = row['SRV_ID']
label = row['Label']
# OS DB 업데이트
table_name = srv_id.replace('-', '_')
os_cursor.execute('''
UPDATE {} SET Label = ?
WHERE hostinfo_id = ?
'''.format(table_name), (label, hostinfo_id))
# 트랜잭션 커밋
os_conn.commit()
이제 Label 값 까지 전부 들어갔다.
지금 보여지는 것은 단순 6대 뿐이지만, 테스트 결과가 100대 ~ 1000대 까지 간다면 모델링 학습할 때 더 정확한 결과를 도출해 낼 것이다.
728x90
반응형
'현업 > [dev]_Python' 카테고리의 다른 글
진단 Tool 제작_5 (결과 모델링 및 학습) (0) | 2024.07.11 |
---|---|
진단 Tool 제작_3 (데이터 분할 및 데이터 프레임화 코드 변경) (2) | 2024.07.09 |
진단 Tool 제작_2 (데이터 수집) (0) | 2024.06.27 |
진단 Tool 제작_1 (데이터 분할) (0) | 2024.06.26 |
취약점 분석 및 진단 Tool 제작 (0) | 2024.06.25 |