# ---
# 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}")


# %%
