DO NOT CHANGE THIS FILE.

Build a POC of user clustering based on their create pattern.

- You have inputs dfs from an input directory
- bosts_action_df:
    - ['clip_id', 'created_at', 'updated_at', 'download_audio_count', 'download_video_count', 'share_count', 'is_public_approved', 'inferred_language', 'download_audio_wav_count', 'lyrics_copyright_metadata', 'content_rating', 'content_rating_tags', 'lyrics_copyright_v3_metadata', 'first_published_at', 'reuse_prompt_count', 'audio_snippets']
- reaction_df:
    - ['id', 'play_count', 'skip_count', 'flagged', 'flagged_reason', 'reaction_type', 'updated_at', 'clip_id', 'user_id', 'feedback_reason', 'is_pro_user']
- total_clip_df:
    - ['id', 'created_at', 'updated_at', 'time_used', 'metadata', 'user_id', 'status', 'discord_message_id', 'prompt_id', 'request_id', 'is_generated', 's3_id', 'upvote_count', 'batch_index', 'model_name', 'prompt_text', 'daily_theme_id', 'is_deleted', 'image_s3_id', 'is_public', 'dislike_count', 'flag_count', 'play_count', 'skip_count', 'title', 'slug', 'creation_source', 'allow_comments', 'is_hidden', 'display_tags', 'continued_parent', 'duration', 'source', 'clip_type', 'task', 'edited_clip_id', 'date', 'hour', 'is_pro_user']
- playlist_clip_df:
    - ['id', 'relative_index', 'updated_at', 'clip_id', 'playlist_id', 'updated_by_id', 'created_session_id']

In total_clip_df, the id is also clip_id. You can use that information to join.
Leverage these information and do a user clustering based on features you can make with the dataframes.

The starting pool of users should be all the unique_users in the total_clip_df.

Some expected clusters are:
- bots (create a lot agressively but no consumption)
- causual users (genreate lyrics gpt_description_prompt in metadata is a valid string)
- pro serious users
- others?

Real Input folder is at:
`/home/tony/Data/Usercluster/sample_20250623/`
When instructed to use real data -- you can use this data.