144 lines
4.1 KiB
Python
144 lines
4.1 KiB
Python
|
# ---
|
||
|
# jupyter:
|
||
|
# jupytext:
|
||
|
# formats: ipynb,py:percent
|
||
|
# text_representation:
|
||
|
# extension: .py
|
||
|
# format_name: percent
|
||
|
# format_version: '1.3'
|
||
|
# jupytext_version: 1.16.4
|
||
|
# kernelspec:
|
||
|
# display_name: hug
|
||
|
# language: python
|
||
|
# name: python3
|
||
|
# ---
|
||
|
|
||
|
# %%
|
||
|
import pandas as pd
|
||
|
import matplotlib.pyplot as plt
|
||
|
import numpy as np
|
||
|
import os
|
||
|
|
||
|
# note: we assume that you will execute from the directory of this code
|
||
|
# check your current directory
|
||
|
print("Current Working Directory:", os.getcwd())
|
||
|
|
||
|
|
||
|
# %%
|
||
|
|
||
|
|
||
|
|
||
|
# 전체 글꼴 크기 설정
|
||
|
plt.rcParams.update({'font.size': 18})
|
||
|
|
||
|
# CSV 파일 읽기
|
||
|
df = pd.read_csv('../exports/raw_data.csv')
|
||
|
|
||
|
# ships_idx 별 전체 갯수 계산
|
||
|
total_counts = df['ships_idx'].value_counts().sort_index()
|
||
|
|
||
|
# ships_idx 별 MDM=True 인 갯수 계산
|
||
|
mdm_true_counts = df[df['MDM'] == True]['ships_idx'].value_counts().sort_index()
|
||
|
|
||
|
# 데이터프레임으로 합치기
|
||
|
summary_df = pd.DataFrame({
|
||
|
'SD': total_counts,
|
||
|
'PD': mdm_true_counts
|
||
|
}).fillna(0) # NaN 값을 0으로 대체
|
||
|
|
||
|
# SD와 PD의 총 갯수 계산
|
||
|
total_SD = summary_df['SD'].sum()
|
||
|
total_PD = summary_df['PD'].sum()
|
||
|
|
||
|
# 총 갯수 출력
|
||
|
print(f"Total SD: {total_SD}")
|
||
|
print(f"Total PD: {total_PD}")
|
||
|
|
||
|
# 시각화
|
||
|
fig, ax = plt.subplots(figsize=(10, 6))
|
||
|
|
||
|
# Total Counts 먼저 그리기 (굵은 막대로 설정)
|
||
|
summary_df['SD'].plot(kind='barh', ax=ax, color='orange', alpha=0.5, label='SD', width=0.8) # 막대 폭을 넓게 설정
|
||
|
|
||
|
# MDM=True Counts를 그 위에 겹쳐서 그리기 (굵은 막대로 설정)
|
||
|
summary_df['PD'].plot(kind='barh', ax=ax, color='blue', alpha=0.7, label='PD', width=0.8) # 막대 폭을 넓게 설정
|
||
|
|
||
|
# y축 라벨을 10 단위로 설정
|
||
|
y_labels = ax.get_yticks()
|
||
|
ax.set_yticks(np.arange(min(y_labels), max(y_labels) + 1, 10))
|
||
|
ax.set_yticklabels([int(label) for label in np.arange(min(y_labels), max(y_labels) + 1, 10)])
|
||
|
|
||
|
# 그리드 추가
|
||
|
ax.grid(True)
|
||
|
|
||
|
# 범례와 제목 설정
|
||
|
plt.legend(prop={'size': 18}) # 레전드 글꼴 크기 설정
|
||
|
plt.xlabel('Counts')
|
||
|
plt.ylabel('Ships')
|
||
|
|
||
|
|
||
|
# save to outputs
|
||
|
# Save the plot to the specified folder
|
||
|
plt.savefig('../outputs/count_statistics_of_each_ship.png')
|
||
|
|
||
|
# 그래프 출력
|
||
|
plt.show()
|
||
|
|
||
|
|
||
|
# %%
|
||
|
|
||
|
# SD와 PD의 총 갯수 계산
|
||
|
total_SD = summary_df['SD'].sum() # SD의 총 갯수
|
||
|
total_PD = summary_df['PD'].sum() # PD의 총 갯수
|
||
|
|
||
|
# tag_description의 글자수 계산
|
||
|
df['tag_description_length'] = df['tag_description'].astype(str).apply(len)
|
||
|
|
||
|
# tag_description의 평균 글자수 계산
|
||
|
mean_tag_description_length = df['tag_description_length'].mean()
|
||
|
|
||
|
# 결과 출력
|
||
|
print(f"Tag Description의 평균 글자수: {mean_tag_description_length:.2f}")
|
||
|
|
||
|
# 글자수 분포를 히스토그램으로 시각화
|
||
|
plt.figure(figsize=(10, 6))
|
||
|
plt.hist(df['tag_description_length'], bins=30, color='skyblue', edgecolor='black', alpha=0.7)
|
||
|
plt.title('Distribution of Tag Description Lengths')
|
||
|
plt.xlabel('Tag Description Length (characters)')
|
||
|
plt.ylabel('Frequency')
|
||
|
plt.grid(True)
|
||
|
plt.show()
|
||
|
|
||
|
# tag_description을 ' '로 split한 후 토큰 수 계산
|
||
|
df['tag_description_tokens'] = df['tag_description'].astype(str).apply(lambda x: len(x.split(' ')))
|
||
|
|
||
|
# tag_description의 평균 토큰 수 계산
|
||
|
mean_tag_description_tokens = df['tag_description_tokens'].mean()
|
||
|
|
||
|
# 결과 출력
|
||
|
print(f"Tag Description의 평균 토큰 수: {mean_tag_description_tokens:.2f}")
|
||
|
|
||
|
# 토큰 수 분포를 히스토그램으로 시각화
|
||
|
plt.figure(figsize=(10, 6))
|
||
|
plt.hist(df['tag_description_tokens'], bins=30, color='lightgreen', edgecolor='black', alpha=0.7)
|
||
|
plt.title('Distribution of Tag Description Tokens')
|
||
|
plt.xlabel('Number of Tokens')
|
||
|
plt.ylabel('Frequency')
|
||
|
plt.grid(True)
|
||
|
plt.show()
|
||
|
|
||
|
# 전체 텍스트에서 모든 토큰 수와 고유 토큰 수 계산
|
||
|
all_tokens = df['tag_description'].astype(str).apply(lambda x: x.split(' ')).sum() # 전체 토큰 리스트
|
||
|
unique_tokens = set(all_tokens) # 고유 토큰 집합
|
||
|
|
||
|
# 전체 토큰 수와 고유 토큰 수 계산
|
||
|
total_token_count = len(all_tokens)
|
||
|
unique_token_count = len(unique_tokens)
|
||
|
|
||
|
# 결과 출력
|
||
|
print(f"전체 토큰 수: {total_token_count}")
|
||
|
print(f"고유 토큰 수: {unique_token_count}")
|
||
|
|
||
|
|
||
|
# %%
|