diff --git "a/Vodka_v3_tagger/analyzing tags.ipynb" "b/Vodka_v3_tagger/analyzing tags.ipynb" new file mode 100644--- /dev/null +++ "b/Vodka_v3_tagger/analyzing tags.ipynb" @@ -0,0 +1,1858 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "e4cf52c9", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "45c13edc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'analyzing tags.ipynb'\t\t models\r\n", + " artists.txt\t\t\t movements.txt\r\n", + " convnextv2_v2_selected_tags.csv output.csv\r\n", + " exclude_tags.csv\t\t requirements.txt\r\n", + " flavors.txt\t\t\t swinv2_v2_selected_tags.csv\r\n", + " fox_tagger.ipynb\t\t tags_explorer.ipynb\r\n", + " inputs\t\t\t\t test_mediums.csv\r\n", + " mediums.txt\t\t\t wd14-tagger.py\r\n" + ] + } + ], + "source": [ + "!ls" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "5daeac89", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
filenametags:probabilities
0rank_153/abstract wallpaper, soft Holographic ...solo:0.4231683909893036, blurry:0.402657270431...
1rank_153/superintelligent AI Outbreak, singula...solo:0.966153621673584, realistic:0.6967797875...
2rank_153/attack on titan comes to tron .pngsolo_focus:0.38329532742500305
3rank_153/happy people at a technology conferen...closed_eyes:0.6947624683380127, multiple_girls...
4rank_153/hair extensions sale. mediumshot of t...solo:0.9741677045822144, realistic:0.805432915...
.........
10851rank_383/a photomof an icebear a photomof of ...water:0.5361649990081787, outdoors:0.510073065...
10852rank_383/one real penguin one real polar bear...water:0.7702387571334839, outdoors:0.625067353...
10853rank_383/elegant Mudi dog in top hat, photogra...looking_at_viewer:0.8424056768417358, simple_b...
10854rank_383/polar bear on an ice floe, photograph...cloud:0.6485034227371216, water:0.591051518917...
10855rank_383/unreal situation one penguin and one...outdoors:0.756171464920044, cloud:0.6558051109...
\n", + "

10856 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " filename \n", + "0 rank_153/abstract wallpaper, soft Holographic ... \\\n", + "1 rank_153/superintelligent AI Outbreak, singula... \n", + "2 rank_153/attack on titan comes to tron .png \n", + "3 rank_153/happy people at a technology conferen... \n", + "4 rank_153/hair extensions sale. mediumshot of t... \n", + "... ... \n", + "10851 rank_383/a photomof an icebear a photomof of ... \n", + "10852 rank_383/one real penguin one real polar bear... \n", + "10853 rank_383/elegant Mudi dog in top hat, photogra... \n", + "10854 rank_383/polar bear on an ice floe, photograph... \n", + "10855 rank_383/unreal situation one penguin and one... \n", + "\n", + " tags:probabilities \n", + "0 solo:0.4231683909893036, blurry:0.402657270431... \n", + "1 solo:0.966153621673584, realistic:0.6967797875... \n", + "2 solo_focus:0.38329532742500305 \n", + "3 closed_eyes:0.6947624683380127, multiple_girls... \n", + "4 solo:0.9741677045822144, realistic:0.805432915... \n", + "... ... \n", + "10851 water:0.5361649990081787, outdoors:0.510073065... \n", + "10852 water:0.7702387571334839, outdoors:0.625067353... \n", + "10853 looking_at_viewer:0.8424056768417358, simple_b... \n", + "10854 cloud:0.6485034227371216, water:0.591051518917... \n", + "10855 outdoors:0.756171464920044, cloud:0.6558051109... \n", + "\n", + "[10856 rows x 2 columns]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tag_data = pd.read_csv('output.csv')\n", + "tag_data" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "f0393ccc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
tags:probabilitiesfilename
0solo:0.4231683909893036rank_153/abstract wallpaper, soft Holographic ...
0blurry:0.40265727043151855rank_153/abstract wallpaper, soft Holographic ...
1solo:0.966153621673584rank_153/superintelligent AI Outbreak, singula...
1realistic:0.6967797875404358rank_153/superintelligent AI Outbreak, singula...
1upper_body:0.5917714834213257rank_153/superintelligent AI Outbreak, singula...
.........
10854water:0.5910515189170837rank_383/polar bear on an ice floe, photograph...
10854outdoors:0.38133224844932556rank_383/polar bear on an ice floe, photograph...
10855outdoors:0.756171464920044rank_383/unreal situation one penguin and one...
10855cloud:0.6558051109313965rank_383/unreal situation one penguin and one...
10855water:0.6154978275299072rank_383/unreal situation one penguin and one...
\n", + "

34972 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " tags:probabilities \n", + "0 solo:0.4231683909893036 \\\n", + "0 blurry:0.40265727043151855 \n", + "1 solo:0.966153621673584 \n", + "1 realistic:0.6967797875404358 \n", + "1 upper_body:0.5917714834213257 \n", + "... ... \n", + "10854 water:0.5910515189170837 \n", + "10854 outdoors:0.38133224844932556 \n", + "10855 outdoors:0.756171464920044 \n", + "10855 cloud:0.6558051109313965 \n", + "10855 water:0.6154978275299072 \n", + "\n", + " filename \n", + "0 rank_153/abstract wallpaper, soft Holographic ... \n", + "0 rank_153/abstract wallpaper, soft Holographic ... \n", + "1 rank_153/superintelligent AI Outbreak, singula... \n", + "1 rank_153/superintelligent AI Outbreak, singula... \n", + "1 rank_153/superintelligent AI Outbreak, singula... \n", + "... ... \n", + "10854 rank_383/polar bear on an ice floe, photograph... \n", + "10854 rank_383/polar bear on an ice floe, photograph... \n", + "10855 rank_383/unreal situation one penguin and one... \n", + "10855 rank_383/unreal situation one penguin and one... \n", + "10855 rank_383/unreal situation one penguin and one... \n", + "\n", + "[34972 rows x 2 columns]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Split the tags:probabilities column into separate rows\n", + "df = tag_data['tags:probabilities'].str.split(',', expand=True).stack().reset_index(level=-1, drop=True).rename('tags:probabilities').to_frame().join(tag_data[['filename']], how='left')\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "77ac4379", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
tags:probabilitiesfilenametagsprobabilities
0solo:0.4231683909893036rank_153/abstract wallpaper, soft Holographic ...solo0.4231683909893036
0blurry:0.40265727043151855rank_153/abstract wallpaper, soft Holographic ...blurry0.40265727043151855
1solo:0.966153621673584rank_153/superintelligent AI Outbreak, singula...solo0.966153621673584
1realistic:0.6967797875404358rank_153/superintelligent AI Outbreak, singula...realistic0.6967797875404358
1upper_body:0.5917714834213257rank_153/superintelligent AI Outbreak, singula...upper_body0.5917714834213257
...............
10854water:0.5910515189170837rank_383/polar bear on an ice floe, photograph...water0.5910515189170837
10854outdoors:0.38133224844932556rank_383/polar bear on an ice floe, photograph...outdoors0.38133224844932556
10855outdoors:0.756171464920044rank_383/unreal situation one penguin and one...outdoors0.756171464920044
10855cloud:0.6558051109313965rank_383/unreal situation one penguin and one...cloud0.6558051109313965
10855water:0.6154978275299072rank_383/unreal situation one penguin and one...water0.6154978275299072
\n", + "

34972 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " tags:probabilities \n", + "0 solo:0.4231683909893036 \\\n", + "0 blurry:0.40265727043151855 \n", + "1 solo:0.966153621673584 \n", + "1 realistic:0.6967797875404358 \n", + "1 upper_body:0.5917714834213257 \n", + "... ... \n", + "10854 water:0.5910515189170837 \n", + "10854 outdoors:0.38133224844932556 \n", + "10855 outdoors:0.756171464920044 \n", + "10855 cloud:0.6558051109313965 \n", + "10855 water:0.6154978275299072 \n", + "\n", + " filename tags \n", + "0 rank_153/abstract wallpaper, soft Holographic ... solo \\\n", + "0 rank_153/abstract wallpaper, soft Holographic ... blurry \n", + "1 rank_153/superintelligent AI Outbreak, singula... solo \n", + "1 rank_153/superintelligent AI Outbreak, singula... realistic \n", + "1 rank_153/superintelligent AI Outbreak, singula... upper_body \n", + "... ... ... \n", + "10854 rank_383/polar bear on an ice floe, photograph... water \n", + "10854 rank_383/polar bear on an ice floe, photograph... outdoors \n", + "10855 rank_383/unreal situation one penguin and one... outdoors \n", + "10855 rank_383/unreal situation one penguin and one... cloud \n", + "10855 rank_383/unreal situation one penguin and one... water \n", + "\n", + " probabilities \n", + "0 0.4231683909893036 \n", + "0 0.40265727043151855 \n", + "1 0.966153621673584 \n", + "1 0.6967797875404358 \n", + "1 0.5917714834213257 \n", + "... ... \n", + "10854 0.5910515189170837 \n", + "10854 0.38133224844932556 \n", + "10855 0.756171464920044 \n", + "10855 0.6558051109313965 \n", + "10855 0.6154978275299072 \n", + "\n", + "[34972 rows x 4 columns]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Split the tags:probabilities into separate columns\n", + "df[['tags', 'probabilities']] = df['tags:probabilities'].str.split(':', expand=True)\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "0a2c9c56", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
tags:probabilitiesfilenametagsprobabilities
0solo:0.4231683909893036rank_153/abstract wallpaper, soft Holographic ...solo0.423168
0blurry:0.40265727043151855rank_153/abstract wallpaper, soft Holographic ...blurry0.402657
1solo:0.966153621673584rank_153/superintelligent AI Outbreak, singula...solo0.966154
1realistic:0.6967797875404358rank_153/superintelligent AI Outbreak, singula...realistic0.696780
1upper_body:0.5917714834213257rank_153/superintelligent AI Outbreak, singula...upper_body0.591771
...............
10854water:0.5910515189170837rank_383/polar bear on an ice floe, photograph...water0.591052
10854outdoors:0.38133224844932556rank_383/polar bear on an ice floe, photograph...outdoors0.381332
10855outdoors:0.756171464920044rank_383/unreal situation one penguin and one...outdoors0.756171
10855cloud:0.6558051109313965rank_383/unreal situation one penguin and one...cloud0.655805
10855water:0.6154978275299072rank_383/unreal situation one penguin and one...water0.615498
\n", + "

34972 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " tags:probabilities \n", + "0 solo:0.4231683909893036 \\\n", + "0 blurry:0.40265727043151855 \n", + "1 solo:0.966153621673584 \n", + "1 realistic:0.6967797875404358 \n", + "1 upper_body:0.5917714834213257 \n", + "... ... \n", + "10854 water:0.5910515189170837 \n", + "10854 outdoors:0.38133224844932556 \n", + "10855 outdoors:0.756171464920044 \n", + "10855 cloud:0.6558051109313965 \n", + "10855 water:0.6154978275299072 \n", + "\n", + " filename tags \n", + "0 rank_153/abstract wallpaper, soft Holographic ... solo \\\n", + "0 rank_153/abstract wallpaper, soft Holographic ... blurry \n", + "1 rank_153/superintelligent AI Outbreak, singula... solo \n", + "1 rank_153/superintelligent AI Outbreak, singula... realistic \n", + "1 rank_153/superintelligent AI Outbreak, singula... upper_body \n", + "... ... ... \n", + "10854 rank_383/polar bear on an ice floe, photograph... water \n", + "10854 rank_383/polar bear on an ice floe, photograph... outdoors \n", + "10855 rank_383/unreal situation one penguin and one... outdoors \n", + "10855 rank_383/unreal situation one penguin and one... cloud \n", + "10855 rank_383/unreal situation one penguin and one... water \n", + "\n", + " probabilities \n", + "0 0.423168 \n", + "0 0.402657 \n", + "1 0.966154 \n", + "1 0.696780 \n", + "1 0.591771 \n", + "... ... \n", + "10854 0.591052 \n", + "10854 0.381332 \n", + "10855 0.756171 \n", + "10855 0.655805 \n", + "10855 0.615498 \n", + "\n", + "[34972 rows x 4 columns]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Convert probabilities to float\n", + "df['probabilities'] = df['probabilities'].astype(float)\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "b2d7662e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Unique tags: ['solo' ' blurry' ' realistic' ' upper_body' ' looking_at_viewer'\n", + " 'solo_focus' 'closed_eyes' ' multiple_girls' ' dark_skin'\n", + " ' dark-skinned_female' 'jewelry' ' closed_eyes' 'white_background'\n", + " ' painting_(medium)' ' water' ' from_behind' ' blurry_background'\n", + " 'realistic' ' indoors' ' book' 'looking_at_viewer' 'outdoors'\n", + " ' signature' 'full_body' ' outdoors' ' chibi' ' solo' ' artist_name'\n", + " ' cloud' ' day' 'blurry' ' blurry_foreground' ' simple_background'\n", + " ' white_background' ' jewelry' 'painting_(medium)' ' full_body'\n", + " ' from_side' 'multiple_girls' ' looking_back' ' monochrome'\n", + " ' looking_to_the_side' ' blue_sky' ' shiny' 'cloud' ' nude' 'dark_skin'\n", + " ' solo_focus' 'indoors' 'monochrome' ' greyscale' 'simple_background'\n", + " ' food' 'greyscale' 'food' 'from_behind' ' motion_blur'\n", + " ' real_world_location' 'book' 'water' ' painting_(object)' ' pillow'\n", + " 'surreal' 'english_text' ' english_text' 'shiny' 'motion_blur' ' surreal'\n", + " ' gradient' ' gradient_background' ' indian_style' 'gradient' ' sepia'\n", + " 'pillow' 'upper_body' ' wet' ' photo_(object)' 'artist_name' 'day'\n", + " 'gradient_background' ' dated' ' military' 'indian_style' 'signature'\n", + " 'retro_artstyle' 'from_side' ' comic' 'wet' 'photo_background'\n", + " ' retro_artstyle' ' photo_background' 'blurry_background'\n", + " ' twitter_username' ' paint' 'sepia' 'nude' ' concept_art' 'military'\n", + " ' censored' ' 1980s_(style)' 'painting_(object)' 'concept_art'\n", + " ' painting_(action)' ' sketch' ' real_life_insert' 'twitter_username'\n", + " 'dated' 'real_world_location' '1980s_(style)' 'comic' 'blue_sky'\n", + " 'dark-skinned_female' ' shiny_skin' ' photo_inset' ' two_side_up' 'chibi']\n" + ] + } + ], + "source": [ + "# Print unique tags\n", + "print(\"Unique tags: \", df['tags'].unique())\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "600826eb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Tag frequency:\n", + " tags\n", + "solo 4100\n", + " looking_at_viewer 2660\n", + " realistic 2522\n", + " outdoors 1792\n", + " blurry 1467\n", + " ... \n", + "dated 1\n", + "twitter_username 1\n", + " shiny_skin 1\n", + " photo_inset 1\n", + " two_side_up 1\n", + "Name: count, Length: 116, dtype: int64\n" + ] + } + ], + "source": [ + "# Print tag frequency\n", + "print(\"\\nTag frequency:\\n\", df['tags'].value_counts())" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "06401c10", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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9YVMJlO59e3bV8LERERERET0pdOTcuHFihXD9OnTUbJkSQghsGrVKrRq1QoXLlxAuXLlAAC9e/dGaGio4jnGxsZSxSUiIiIioq+ApEVSy5YtVe5PmTIFixYtwsmTJxVFkrGxMezs7KSIR0REREREXyGtOScpPT0d69atQ2JiImrWrKloX7NmDQoVKgQPDw8EBwcjKSlJwpRERERERPSlk/RIEgBERkaiZs2aePfuHUxNTbF582aULVsWANC5c2eUKFECDg4OiIiIwOjRo3Hjxg1s2rQp1/klJycjOTlZcT8+Pr7A/wYiIiIiIvpySF4klS5dGhcvXkRcXBw2bNiAoKAghIeHo2zZsujTp49iuvLly8Pe3h4NGjTA7du34erqmuP8pk2bhpCQEE3FJyIiIiKiL4zk3e0MDAzg5uYGLy8vTJs2DRUqVMC8efNynLZ69eoAgFu3buU6v+DgYMTFxSluDx48KJDcRERERET0ZZL8SNL7MjIyVLrLKbt48SIAwN7ePtfny+VyyOXygohGRERERERfAUmLpODgYDRt2hTFixfHmzdvsHbtWhw6dAi7d+/G7du3sXbtWjRr1gw2NjaIiIjA0KFD4ePjA09PTyljExERERHRF0zSIunZs2cIDAzEkydPYGFhAU9PT+zevRuNGjXCgwcPsG/fPsydOxeJiYlwdHRE27Zt8eOPP0oZmYiIiIiIvnCSFknLly/P9TFHR0eEh4drMA0REREREZEWDNxARERERESkTVgkERERERERKWGRREREREREpIRFEhERERERkRIWSUREREREREpYJBERERERESlhkURERERERKSERRIREREREZESFklERERERERKWCQREREREREpYZFERERERESkhEUSERERERGREhZJRERERERESlgkERERERERKWGRREREREREpIRFEhERERERkRIWSUREREREREpYJBERERERESlhkURERERERKSERRIREREREZESFklERERERERKWCQREREREREpYZFERERERESkhEUSERERERGREhZJRERERERESlgkERERERERKWGRREREREREpIRFEhERERERkRIWSUREREREREpYJBERERERESlhkURERERERKSERRIREREREZESFklERERERERKWCQREREREREpYZFERERERESkhEUSERERERGREkmLpEWLFsHT0xPm5uYwNzdHzZo1sXPnTsXj7969Q//+/WFjYwNTU1O0bdsWT58+lTAxERERERF96SQtkooVK4bp06fj3LlzOHv2LOrXr49WrVrhypUrAIChQ4fi33//xfr16xEeHo7Hjx+jTZs2UkYmIiIiIqIvnEwIIdR9UnR0NO7fv4+kpCTY2tqiXLlykMvl+RLI2toaP/30E7755hvY2tpi7dq1+OabbwAA169fR5kyZXDixAnUqFEjT/OLj4+HhYUF4uLiYG5u/sFpncZs/8/5s9yb3jzf5kVERERERP9dXmsDvbzO8N69e1i0aBHWrVuHhw8fQrm2MjAwQJ06ddCnTx+0bdsWOjrqH6BKT0/H+vXrkZiYiJo1a+LcuXNITU1Fw4YNFdO4u7ujePHiHyySkpOTkZycrLgfHx+vdhYiIiIiIvp65amaGTRoECpUqIC7d+9i8uTJuHr1KuLi4pCSkoKYmBjs2LED3t7eGD9+PDw9PXHmzJk8B4iMjISpqSnkcjn69u2LzZs3o2zZsoiJiYGBgQEsLS1Vpi9SpAhiYmJynd+0adNgYWGhuDk6OuY5CxERERERUZ6OJJmYmODOnTuwsbHJ9ljhwoVRv3591K9fHxMmTMCuXbvw4MEDVK1aNU8BSpcujYsXLyIuLg4bNmxAUFAQwsPD1fsrlAQHB2PYsGGK+/Hx8SyUiIiIiIgoz/JUJE2bNi3PM2zSpIlaAQwMDODm5gYA8PLywpkzZzBv3jx06NABKSkpiI2NVTma9PTpU9jZ2eU6P7lcnm/nRxERERER0dfnP41u9+LFC2zfvh1bt27FkydP8iVQRkYGkpOT4eXlBX19fezfv1/x2I0bNxAdHY2aNWvmy7KIiIiIiIjel+eBG963ceNG9OzZE6VKlUJqaipu3LiBBQsWoHv37nmeR3BwMJo2bYrixYvjzZs3WLt2LQ4dOoTdu3fDwsICPXv2xLBhw2BtbQ1zc3MMHDgQNWvWzPPIdkREREREROrKc5GUkJAAU1NTxf2QkBCcPn0apUqVAgBs374dvXv3VqtIevbsGQIDA/HkyRNYWFjA09MTu3fvRqNGjQAAP//8M3R0dNC2bVskJyfDz88PCxcuzPP8iYiIiIiI1JXnIsnLywszZ85Eq1atMp+op4dnz54piqSnT5/CwMBArYUvX778g48bGhpiwYIFWLBggVrzJSIiIiIi+lR5LpJ2796N/v37Y+XKlViwYIFicIX09HSkpaVBR0cHK1euLMCoREREREREBS/PRZKTkxO2b9+Ov/76C3Xr1sWgQYNw69Yt3Lp1C+np6XB3d4ehoWFBZiUiIiIiIipwao9u16lTJ5w5cwaXLl2Cr68vMjIyULFiRRZIRERERET0RVBrdLsdO3bg2rVrqFChApYtW4bw8HB06dIFTZs2RWhoKIyMjAoqJxERERERkUbk+UjS8OHD0b17d5w5cwbfffcdJk2ahLp16+L8+fMwNDREpUqVsHPnzoLMSkREREREVOBkQgiRlwltbGywZ88eeHl54dWrV6hRowZu3rypePzq1av47rvvcOTIkQIL+yni4+NhYWGBuLg4mJubf3BapzHb822596Y3z7d5ERERERHRf5fX2iDPR5JMTExw9+5dAMCDBw+ynYNUtmxZrSuQiIiIiIiI1JXnImnatGkIDAyEg4MD6tati0mTJhVkLiIiIiIiIknkeeCGLl26oEmTJrhz5w5KliwJS0vLAoxFREREREQkDbVGt7OxsYGNjU1BZSEiIiIiIpJcnrrb9e3bFw8fPszTDP/++2+sWbPmP4UiIiIiIiKSSp6OJNna2qJcuXKoXbs2WrZsiSpVqsDBwQGGhoZ4/fo1rl69iqNHj2LdunVwcHDAkiVLCjo3ERERERFRgchTkTRp0iQMGDAAy5Ytw8KFC3H16lWVx83MzNCwYUMsWbIETZo0KZCgREREREREmpDn6yQpe/36NaKjo/H27VsUKlQIrq6ukMlkBZHvP+N1koiIiIiICMh7baDWwA1ZrKysYGVl9cnhiIiIiIiItFWer5NERERERET0NWCRREREREREpIRFEhERERERkRIWSURERERERErULpLevn2LpKQkxf379+9j7ty52LNnT74GIyIiIiIikoLaRVKrVq2wevVqAEBsbCyqV6+O2bNno1WrVli0aFG+ByQiIiIiItIktYuk8+fPo06dOgCADRs2oEiRIrh//z5Wr16N+fPn53tAIiIiIiIiTVK7SEpKSoKZmRkAYM+ePWjTpg10dHRQo0YN3L9/P98DEhERERERaZLaRZKbmxvCwsLw4MED7N69G40bNwYAPHv27INXrSUiIiIiIvocqF0kjR8/HiNGjICTkxOqVauGmjVrAsg8qlSpUqV8D0hERERE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QgwYMADbtm3D4cOHUaxYMUW7nZ0dUlJSEBsbq3I06enTp7Czs8txXsHBwRg2bJjifnx8PBwdHfMtKxERERERfdnUPicpPwkhMGDAAGzevBkHDhyAs7OzyuNeXl7Q19fH/v37FW03btxAdHR0ruc/yeVyxah7WTciIiIiIqK8+qQjSfmlf//+WLt2LbZs2QIzMzPFeUYWFhYwMjKChYUFevbsiWHDhsHa2hrm5uYYOHAgatasyZHtiIiIiIioQEhaJC1atAgA4Ovrq9K+YsUKdOvWDQDw888/Q0dHB23btkVycjL8/PywcOFCDSclIiIiIqKvhaRFkhDio9MYGhpiwYIFWLBggQYSERERERHR1+6TzkmKjY3FsmXLEBwcjFevXgEAzp8/j0ePHuVrOCIiIiIiIk1T+0hSREQEGjZsCAsLC9y7dw+9e/eGtbU1Nm3ahOjoaKxevbogchIREREREWmE2keShg0bhm7duiEqKgqGhoaK9mbNmuHw4cP5Go6IiIiIiEjT1C6Szpw5g++++y5be9GiRRWj0xEREREREX2u1C6S5HI54uPjs7XfvHkTtra2+RKKiIiIiIhIKmoXSf7+/ggNDUVqaioAQCaTITo6GqNHj0bbtm3zPSAREREREZEmqV0kzZ49GwkJCShcuDDevn2LunXrws3NDWZmZpgyZUpBZCQiIiIiItIYtUe3s7CwwN69e3H06FFEREQgISEBlStXRsOGDQsiHxERERERkUZ98sVkvb294e3tnZ9ZiIiIiIiIJKd2kTR//vwc22UyGQwNDeHm5gYfHx/o6ur+53BERERERESapnaR9PPPP+P58+dISkqClZUVAOD169cwNjaGqakpnj17BhcXFxw8eBCOjo75HpiIiIiIiKggqT1ww9SpU1G1alVERUXh5cuXePnyJW7evInq1atj3rx5iI6Ohp2dHYYOHVoQeYmIiIiIiAqU2keSfvzxR2zcuBGurq6KNjc3N8yaNQtt27bFnTt3MHPmTA4HTkREREREnyW1jyQ9efIEaWlp2drT0tIQExMDAHBwcMCbN2/+ezoiIiIiIiINU7tIqlevHr777jtcuHBB0XbhwgX069cP9evXBwBERkbC2dk5/1ISERERERFpiNpF0vLly2FtbQ0vLy/I5XLI5XJUqVIF1tbWWL58OQDA1NQUs2fPzvewRERERERE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mus0crkccrlcg6mIiIiIiLQXRwRUn1YXSSNGjEDLli1RokQJPH78GBMmTICuri46deokdTQiIiIiIvqPtLWA0+oi6eHDh+jUqRNevnwJW1tbeHt74+TJk7C1tZU6GhERERERfaG0ukhat26d1BGIiIiIiOgr81kN3EBERERERFTQWCQREREREREpYZFERERERESkhEUSERERERGREhZJRERERERESlgkERERERERKWGRREREREREpIRFEhERERERkRIWSUREREREREpYJBERERERESlhkURERERERKSERRIREREREZESFklERERERERKWCQREREREREpYZFERERERESkhEUSERERERGREhZJRERERERESlgkERERERERKWGRREREREREpIRFEhERERERkRIWSUREREREREpYJBERERERESlhkURERERERKSERRIREREREZESFklERERERERKWCQREREREREpYZFERERERESkhEUSERERERGREhZJRERERERESlgkERERERERKWGRREREREREpIRFEhERERERkRIWSUREREREREpYJBERERERESlhkURERERERKSERRIREREREZGSz6JIWrBgAZycnGBoaIjq1avj9OnTUkciIiIiIqIvlNYXSX///TeGDRuGCRMm4Pz586hQoQL8/Pzw7NkzqaMREREREdEXSOuLpDlz5qB3797o3r07ypYti99++w3Gxsb4/fffpY5GRERERERfID2pA3xISkoKzp07h+DgYEWbjo4OGjZsiBMnTuT4nOTkZCQnJyvux8XFAQDi4+M/uryM5KT/mPh/8rK8vMrPXID2ZsvPXACzfQp+1j4Ns6mPn7VPw2zq42ft0zCb+vhZ+zSazpY1jRDig9PJxMemkNDjx49RtGhRHD9+HDVr1lS0jxo1CuHh4Th16lS250ycOBEhISGajElERERERJ+RBw8eoFixYrk+rtVHkj5FcHAwhg0bprifkZGBV69ewcbGBjKZ7D/NOz4+Ho6Ojnjw4AHMzc3/a9R8xWyfRluzaWsugNk+lbZm09ZcALN9Km3Npq25AGb7VNqaTVtzAcz2qfIzmxACb968gYODwwen0+oiqVChQtDV1cXTp09V2p8+fQo7O7scnyOXyyGXy1XaLC0t8zWXubm51n14sjDbp9HWbNqaC2C2T6Wt2bQ1F8Bsn0pb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a9YMAJCamooxY8bAwMAAUVFRghMSEZGiPXr0CEePHsW+ffuwY8cOFm4AF0lERNWKjo4OTp48CQcHB7nxc+fOoXPnzsjPzxeUjN7F06dPZcUanj59WuFrWdSBiMoTGhoqK9hw+fJlGBsbo1OnTrLzSa1atRIdUShutyMiqkbMzMxQWFhYZry4uBj169cXkIjeh5GREbKysmBqagpDQ8Nyz6tKpVJIJJJqfzWYiMo3adIkdOnSBRMnTkTXrl3RsmVL0ZGUChdJRETVyNKlSzFt2jSsXbsWjo6OAF4WcfDx8cGyZcsEp6PKiomJgbGxMQDgyJEjgtMQkSrKzs4WHUGpcbsdEVEV93plzLy8PBQVFUFd/eV1slef16xZk5XQiIiIwDtJRERVHqufVW1RUVHQ09NDp06dAABr167Fpk2bYGdnh7Vr18LIyEhwQiIi1cM7SURERCqsZcuW+P777+Hh4YGUlBQ4Ojpi1qxZOHLkCGxsbBAUFCQ6IhGRyuGdJCIiIhV248YN2NnZAQD27NmDvn37YvHixUhMTISHh4fgdEREqklNdAAiIiJ6f5qamrLS7dHR0fjkk08AAMbGxm8tD05EROXjnSQiIiIV1qlTJ8ycORPOzs44c+YMdu7cCQBIS0tDw4YNBacjIlJNvJNERESkwtasWQN1dXXs3r0b69atQ4MGDQAAkZGRcHd3F5yOiEg1sXADERERERFRKbyTREREREREVAoXSURERERERKVwkURERERERFQKF0lERERERESlcJFERERERERUChdJREREREREpXCRREREREREVAoXSURERERERKVwkURERERERFQKF0lERKQyJBJJhR/z5s0THZGIiKoAddEBiIiIKisrK0v2+c6dOzFnzhykpqbKxvT09ETEIiKiKoZ3koiISGXUq1dP9lGrVi1IJBLZ47y8PAwfPhx169aFnp4e2rVrh+joaLk/n5WVhd69e0NHRwcWFhbYvn07GjdujFWrVgEApFIp5s2bh0aNGkFLSwv169eHt7e3gO+UiIhE4p0kIiKqEnJzc+Hh4YFFixZBS0sLv/76K/r27YvU1FQ0atQIAODl5YWHDx/i6NGj0NDQwMyZM5GdnS37O/bs2YOVK1ciJCQEzZs3x71795CcnCzqWyIiIkG4SCIioiqhVatWaNWqlezxggULEBYWhvDwcEydOhVXr15FdHQ0zp49C0dHRwDAzz//DGtra9mfuX37NurVq4fu3btDQ0MDjRo1wscff6zw74WIiMTidjsiIqoScnNz4evrC1tbWxgaGkJPTw9XrlzB7du3AQCpqalQV1dHmzZtZH+mSZMmMDIykj3+/PPPUVBQAEtLS0yYMAFhYWEoKipS+PdCRERicZFERERVgq+vL8LCwrB48WIcP34cSUlJaNmyJV68eFHpv8PMzAypqan46aefoKOjgy+//BJdunRBYWHhB0xORETKhoskIiKqEuLi4jB69GgMGDAALVu2RL169XDz5k3Z882aNUNRURHOnz8vG7t27Rr+/vtvub9HR0cHffv2RWBgII4ePYpTp04hJSVFUd8GEREpAZ5JIiKiKsHa2hqhoaHo27cvJBIJvvvuO5SUlMiet7GxQffu3TFx4kSsW7cOGhoamDVrFnR0dCCRSAAAwcHBKC4uRvv27aGrq4utW7dCR0cH5ubmor4tIiISgHeSiIioSlixYgWMjIzg5OSEvn37omfPnnLnjwDg119/Rd26ddGlSxcMGDAAEyZMgL6+PrS1tQEAhoaG2LRpE5ydnWFvb4/o6Gjs378ftWvXFvEtERGRIBKpVCoVHYKIiEiEzMxMmJmZITo6Gt26dRMdh4iIlAQXSUREVG3ExMQgNzcXLVu2RFZWFr766ivcvXsXaWlp0NDQEB2PiIiUBM8kERFRtVFYWIhvv/0W169fh76+PpycnLBt2zYukIiISA7vJBEREREREZXCwg1ERERERESlcJFERERERERUChdJREREREREpXCRREREREREVAoXSURERERERKVwkURERERERFQKF0lERERERESlcJFERERERERUChdJREREREREpfw/c1hqRoq8OokAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "N = 20 # Top 20 tags\n", + "total_images = df['filename'].nunique() # Count of unique images\n", + "\n", + "tag_counts = df['tags'].value_counts()[:N] / total_images * 100 # Get tag counts as percentage of total images\n", + "\n", + "plt.figure(figsize=(10,5))\n", + "tag_counts.plot(kind='bar')\n", + "plt.xlabel('Tags')\n", + "plt.ylabel('Percentage of Images (%)')\n", + "plt.title('Histogram of Tag Frequency as Percentage of Images (Top 20)')\n", + "plt.grid(False)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "98a81896", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
tags:probabilitiesfilenametagsprobabilities
0solo:0.4231683909893036rank_153/abstract wallpaper, soft Holographic ...solo0.423168
0blurry:0.40265727043151855rank_153/abstract wallpaper, soft Holographic ...blurry0.402657
1solo:0.966153621673584rank_153/superintelligent AI Outbreak, singula...solo0.966154
1realistic:0.6967797875404358rank_153/superintelligent AI Outbreak, singula...realistic0.696780
1upper_body:0.5917714834213257rank_153/superintelligent AI Outbreak, singula...upper_body0.591771
...............
10854water:0.5910515189170837rank_383/polar bear on an ice floe, photograph...water0.591052
10854outdoors:0.38133224844932556rank_383/polar bear on an ice floe, photograph...outdoors0.381332
10855outdoors:0.756171464920044rank_383/unreal situation one penguin and one...outdoors0.756171
10855cloud:0.6558051109313965rank_383/unreal situation one penguin and one...cloud0.655805
10855water:0.6154978275299072rank_383/unreal situation one penguin and one...water0.615498
\n", + "

34972 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " tags:probabilities \n", + "0 solo:0.4231683909893036 \\\n", + "0 blurry:0.40265727043151855 \n", + "1 solo:0.966153621673584 \n", + "1 realistic:0.6967797875404358 \n", + "1 upper_body:0.5917714834213257 \n", + "... ... \n", + "10854 water:0.5910515189170837 \n", + "10854 outdoors:0.38133224844932556 \n", + "10855 outdoors:0.756171464920044 \n", + "10855 cloud:0.6558051109313965 \n", + "10855 water:0.6154978275299072 \n", + "\n", + " filename tags \n", + "0 rank_153/abstract wallpaper, soft Holographic ... solo \\\n", + "0 rank_153/abstract wallpaper, soft Holographic ... blurry \n", + "1 rank_153/superintelligent AI Outbreak, singula... solo \n", + "1 rank_153/superintelligent AI Outbreak, singula... realistic \n", + "1 rank_153/superintelligent AI Outbreak, singula... upper_body \n", + "... ... ... \n", + "10854 rank_383/polar bear on an ice floe, photograph... water \n", + "10854 rank_383/polar bear on an ice floe, photograph... outdoors \n", + "10855 rank_383/unreal situation one penguin and one... outdoors \n", + "10855 rank_383/unreal situation one penguin and one... cloud \n", + "10855 rank_383/unreal situation one penguin and one... water \n", + "\n", + " probabilities \n", + "0 0.423168 \n", + "0 0.402657 \n", + "1 0.966154 \n", + "1 0.696780 \n", + "1 0.591771 \n", + "... ... \n", + "10854 0.591052 \n", + "10854 0.381332 \n", + "10855 0.756171 \n", + "10855 0.655805 \n", + "10855 0.615498 \n", + "\n", + "[34972 rows x 4 columns]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "3e9a47f9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
tags:probabilitiesfilenametagsprobabilitiesbucket
0solo:0.4231683909893036rank_153/abstract wallpaper, soft Holographic ...solo0.423168(0.4, 0.5]
0blurry:0.40265727043151855rank_153/abstract wallpaper, soft Holographic ...blurry0.402657(0.4, 0.5]
1solo:0.966153621673584rank_153/superintelligent AI Outbreak, singula...solo0.966154(0.9, 1.0]
1realistic:0.6967797875404358rank_153/superintelligent AI Outbreak, singula...realistic0.696780(0.6, 0.7]
1upper_body:0.5917714834213257rank_153/superintelligent AI Outbreak, singula...upper_body0.591771(0.5, 0.6]
..................
10854water:0.5910515189170837rank_383/polar bear on an ice floe, photograph...water0.591052(0.5, 0.6]
10854outdoors:0.38133224844932556rank_383/polar bear on an ice floe, photograph...outdoors0.381332(0.3, 0.4]
10855outdoors:0.756171464920044rank_383/unreal situation one penguin and one...outdoors0.756171(0.7, 0.8]
10855cloud:0.6558051109313965rank_383/unreal situation one penguin and one...cloud0.655805(0.6, 0.7]
10855water:0.6154978275299072rank_383/unreal situation one penguin and one...water0.615498(0.6, 0.7]
\n", + "

34972 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " tags:probabilities \n", + "0 solo:0.4231683909893036 \\\n", + "0 blurry:0.40265727043151855 \n", + "1 solo:0.966153621673584 \n", + "1 realistic:0.6967797875404358 \n", + "1 upper_body:0.5917714834213257 \n", + "... ... \n", + "10854 water:0.5910515189170837 \n", + "10854 outdoors:0.38133224844932556 \n", + "10855 outdoors:0.756171464920044 \n", + "10855 cloud:0.6558051109313965 \n", + "10855 water:0.6154978275299072 \n", + "\n", + " filename tags \n", + "0 rank_153/abstract wallpaper, soft Holographic ... solo \\\n", + "0 rank_153/abstract wallpaper, soft Holographic ... blurry \n", + "1 rank_153/superintelligent AI Outbreak, singula... solo \n", + "1 rank_153/superintelligent AI Outbreak, singula... realistic \n", + "1 rank_153/superintelligent AI Outbreak, singula... upper_body \n", + "... ... ... \n", + "10854 rank_383/polar bear on an ice floe, photograph... water \n", + "10854 rank_383/polar bear on an ice floe, photograph... outdoors \n", + "10855 rank_383/unreal situation one penguin and one... outdoors \n", + "10855 rank_383/unreal situation one penguin and one... cloud \n", + "10855 rank_383/unreal situation one penguin and one... water \n", + "\n", + " probabilities bucket \n", + "0 0.423168 (0.4, 0.5] \n", + "0 0.402657 (0.4, 0.5] \n", + "1 0.966154 (0.9, 1.0] \n", + "1 0.696780 (0.6, 0.7] \n", + "1 0.591771 (0.5, 0.6] \n", + "... ... ... \n", + "10854 0.591052 (0.5, 0.6] \n", + "10854 0.381332 (0.3, 0.4] \n", + "10855 0.756171 (0.7, 0.8] \n", + "10855 0.655805 (0.6, 0.7] \n", + "10855 0.615498 (0.6, 0.7] \n", + "\n", + "[34972 rows x 5 columns]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Define the number of buckets and the bucket size\n", + "num_buckets = 10\n", + "bucket_size = 0.1\n", + "\n", + "# Add a new column for bucket assignment\n", + "df['bucket'] = pd.cut(df['probabilities'], bins=np.arange(0, 1.1, bucket_size))\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "16114f67", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
tags:probabilitiesfilenametagsprobabilitiesbucket
5787blurry:0.3959270715713501other/puppet show with three puppets, bright c...blurry0.3959270
5222blurry:0.4131569266319275other/Human three eyes, dark, putrefaction, be...blurry0.4131570
879blurry:0.3553133010864258rank_312/Realistic neon background with deep 3...blurry0.3553130
6573blurry:0.4470059275627136other/candid photography, new centurion mascot...blurry0.4470061
10709blurry:0.45952045917510986rank_21/Huge tiger alphamale, resting, side vi...blurry0.4595201
7646blurry:0.4162548780441284other/underwater coral reef that is made out o...blurry0.4162551
7927blurry:0.49198809266090393other/King Charles coronation, 19th century, f...blurry0.4919882
2182blurry:0.5393935441970825other/Japanese anime character mascot style, l...blurry0.5393942
3011blurry:0.48686888813972473other/guitar pedal, Atlanta hawks .pngblurry0.4868692
311blurry:0.552057147026062rank_2/backgammon stock image popular no text ...blurry0.5520573
6732blurry:0.5711941123008728other/Joan of Arc fighting with orcs in front ...blurry0.5711943
4469blurry:0.5772258639335632other/A spectacular high biological symmetrica...blurry0.5772263
7874blurry:0.6162235140800476other/wide shot 1990s Polaroid of a lion in Ne...blurry0.6162244
3067blurry:0.6416111588478088other/a closeup of a dark container of drugs, ...blurry0.6416114
3530blurry:0.6438701152801514other/company logo, chain links, create the le...blurry0.6438704
7938blurry:0.7145698070526123other/close up shot motherboard Macintosh. Top...blurry0.7145705
791blurry:0.6758755445480347rank_157/A disheveled, intoxicated man passion...blurry0.6758765
9264blurry:0.6917563676834106rank_179/cosmic anglerfish floating through th...blurry0.6917565
3264blurry:0.7890454530715942other/high quality, Full restaurant scene with...blurry0.7890456
4528blurry:0.7844282984733582other/a group of kids in 2022 in the red squar...blurry0.7844286
5843blurry:0.7933396697044373other/macro lens portrait of a vibrant cobalt ...blurry0.7933406
10576blurry:0.8410934209823608rank_19/a blue and white porcelaine of a nauti...blurry0.8410937
2363blurry:0.8584378361701965other/worker face, smiling face, latin guy, mi...blurry0.8584387
10557blurry:0.8420693874359131rank_19/Small droplets bounce up after hitting...blurry0.8420697
8820blurry:0.9111797213554382rank_3/close up on an exquisite menue in a mic...blurry0.9111808
4904blurry:0.8975179195404053other/minimalist agat stone background for the...blurry0.8975188
460blurry:0.9105137586593628rank_2/ordinated gummybears stock image popula...blurry0.9105148
8807blurry:0.9544382095336914rank_3/luxury liquor ad a martini served in el...blurry0.9544389
3521blurry:0.9709577560424805other/A highly accurate Chucky from Childs Pla...blurry0.9709589
7651blurry:0.9852639436721802other/A stunning high definition photograph, c...blurry0.9852649
\n", + "
" + ], + "text/plain": [ + " tags:probabilities \n", + "5787 blurry:0.3959270715713501 \\\n", + "5222 blurry:0.4131569266319275 \n", + "879 blurry:0.3553133010864258 \n", + "6573 blurry:0.4470059275627136 \n", + "10709 blurry:0.45952045917510986 \n", + "7646 blurry:0.4162548780441284 \n", + "7927 blurry:0.49198809266090393 \n", + "2182 blurry:0.5393935441970825 \n", + "3011 blurry:0.48686888813972473 \n", + "311 blurry:0.552057147026062 \n", + "6732 blurry:0.5711941123008728 \n", + "4469 blurry:0.5772258639335632 \n", + "7874 blurry:0.6162235140800476 \n", + "3067 blurry:0.6416111588478088 \n", + "3530 blurry:0.6438701152801514 \n", + "7938 blurry:0.7145698070526123 \n", + "791 blurry:0.6758755445480347 \n", + "9264 blurry:0.6917563676834106 \n", + "3264 blurry:0.7890454530715942 \n", + "4528 blurry:0.7844282984733582 \n", + "5843 blurry:0.7933396697044373 \n", + "10576 blurry:0.8410934209823608 \n", + "2363 blurry:0.8584378361701965 \n", + "10557 blurry:0.8420693874359131 \n", + "8820 blurry:0.9111797213554382 \n", + "4904 blurry:0.8975179195404053 \n", + "460 blurry:0.9105137586593628 \n", + "8807 blurry:0.9544382095336914 \n", + "3521 blurry:0.9709577560424805 \n", + "7651 blurry:0.9852639436721802 \n", + "\n", + " filename tags \n", + "5787 other/puppet show with three puppets, bright c... blurry \\\n", + "5222 other/Human three eyes, dark, putrefaction, be... blurry \n", + "879 rank_312/Realistic neon background with deep 3... blurry \n", + "6573 other/candid photography, new centurion mascot... blurry \n", + "10709 rank_21/Huge tiger alphamale, resting, side vi... blurry \n", + "7646 other/underwater coral reef that is made out o... blurry \n", + "7927 other/King Charles coronation, 19th century, f... blurry \n", + "2182 other/Japanese anime character mascot style, l... blurry \n", + "3011 other/guitar pedal, Atlanta hawks .png blurry \n", + "311 rank_2/backgammon stock image popular no text ... blurry \n", + "6732 other/Joan of Arc fighting with orcs in front ... blurry \n", + "4469 other/A spectacular high biological symmetrica... blurry \n", + "7874 other/wide shot 1990s Polaroid of a lion in Ne... blurry \n", + "3067 other/a closeup of a dark container of drugs, ... blurry \n", + "3530 other/company logo, chain links, create the le... blurry \n", + "7938 other/close up shot motherboard Macintosh. Top... blurry \n", + "791 rank_157/A disheveled, intoxicated man passion... blurry \n", + "9264 rank_179/cosmic anglerfish floating through th... blurry \n", + "3264 other/high quality, Full restaurant scene with... blurry \n", + "4528 other/a group of kids in 2022 in the red squar... blurry \n", + "5843 other/macro lens portrait of a vibrant cobalt ... blurry \n", + "10576 rank_19/a blue and white porcelaine of a nauti... blurry \n", + "2363 other/worker face, smiling face, latin guy, mi... blurry \n", + "10557 rank_19/Small droplets bounce up after hitting... blurry \n", + "8820 rank_3/close up on an exquisite menue in a mic... blurry \n", + "4904 other/minimalist agat stone background for the... blurry \n", + "460 rank_2/ordinated gummybears stock image popula... blurry \n", + "8807 rank_3/luxury liquor ad a martini served in el... blurry \n", + "3521 other/A highly accurate Chucky from Childs Pla... blurry \n", + "7651 other/A stunning high definition photograph, c... blurry \n", + "\n", + " probabilities bucket \n", + "5787 0.395927 0 \n", + "5222 0.413157 0 \n", + "879 0.355313 0 \n", + "6573 0.447006 1 \n", + "10709 0.459520 1 \n", + "7646 0.416255 1 \n", + "7927 0.491988 2 \n", + "2182 0.539394 2 \n", + "3011 0.486869 2 \n", + "311 0.552057 3 \n", + "6732 0.571194 3 \n", + "4469 0.577226 3 \n", + "7874 0.616224 4 \n", + "3067 0.641611 4 \n", + "3530 0.643870 4 \n", + "7938 0.714570 5 \n", + "791 0.675876 5 \n", + "9264 0.691756 5 \n", + "3264 0.789045 6 \n", + "4528 0.784428 6 \n", + "5843 0.793340 6 \n", + "10576 0.841093 7 \n", + "2363 0.858438 7 \n", + "10557 0.842069 7 \n", + "8820 0.911180 8 \n", + "4904 0.897518 8 \n", + "460 0.910514 8 \n", + "8807 0.954438 9 \n", + "3521 0.970958 9 \n", + "7651 0.985264 9 " + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tag_to_analyze = 'blurry'\n", + "num_buckets = 10\n", + "\n", + "df['bucket'] = pd.cut(df['probabilities'], bins=num_buckets, labels=False)\n", + "selected_rows = pd.DataFrame()\n", + "\n", + "for bucket in range(num_buckets):\n", + " bucket_rows = df[df['tags'] == tag_to_analyze]\n", + " bucket_rows = bucket_rows[bucket_rows['bucket'] == bucket].sample(3)\n", + " selected_rows = pd.concat([selected_rows, bucket_rows])\n", + "\n", + "selected_rows" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "385336ec", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " tags probabilities\n", + "0 blurry 0.402657\n", + "5 blurry 0.460198\n", + "7 blurry 0.482327\n", + "9 blurry 0.676133\n", + "11 blurry 0.735523\n", + "... ... ...\n", + "10841 blurry 0.685423\n", + "10842 blurry 0.911074\n", + "10843 blurry 0.398091\n", + "10849 blurry 0.764415\n", + "10850 blurry 0.523123\n", + "\n", + "[1951 rows x 2 columns]\n", + "\n", + "Total occurrences of 'blurry': 1951\n" + ] + } + ], + "source": [ + "# Choose a tag to analyze\n", + "tag_to_analyze = 'blurry'\n", + "\n", + "# Lowercase and strip whitespaces\n", + "df['tags'] = df['tags'].str.lower().str.strip()\n", + "\n", + "# Create a dataframe with probabilities associated with the chosen tag\n", + "df_tag = df[df['tags'] == tag_to_analyze][['tags', 'probabilities']]\n", + "\n", + "# Display the dataframe\n", + "print(df_tag)\n", + "\n", + "# Calculate the total number of occurrences of the chosen tag\n", + "total_occurrences = df[df['tags'] == tag_to_analyze].shape[0]\n", + "\n", + "print(f\"\\nTotal occurrences of '{tag_to_analyze}': {total_occurrences}\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "e93d4ff2", + "metadata": {}, + "outputs": [], + "source": [ + "# Create a DataFrame with tag counts\n", + "df_tags_count = pd.DataFrame(df['tags'].value_counts().reset_index())\n", + "df_tags_count.columns = ['tag', 'count']\n", + "\n", + "# Save DataFrame to CSV\n", + "df_tags_count.to_csv('tag_counts.csv', index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "6caf25a8", + "metadata": {}, + "outputs": [], + "source": [ + "# Filter the dataframe to include only rows with a probability >= 0.3\n", + "df_high_prob = df[df['probabilities'] >= 0.5]\n", + "\n", + "# Create a DataFrame with tag counts\n", + "df_tags_count_high_prob = pd.DataFrame(df_high_prob['tags'].value_counts().reset_index())\n", + "df_tags_count_high_prob.columns = ['tag', 'count']\n", + "\n", + "# Save DataFrame to CSV\n", + "df_tags_count_high_prob.to_csv('tag_counts_high_prob.csv', index=False)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "22f46a3a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Enter the tag to analyze: blurry_background\n" + ] + }, + { + "data": { + "image/png": "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FBgYeNO6Ro0aJYvFoldffVWnT5/WxIkT1bhxY+3cuTNb32BmpbZrGYahxx9/XGvWrFGPHj1UtWpVLV++XC+//LL+/vtvTZgwwWb99evXa/HixXrxxRfl4+OjSZMmqW3btjpx4oQKFy58w7r+++8/1a9fX4cOHVLfvn0VERGhhQsXqlu3bjp//rwGDBigcuXKae7cuYqOjlbx4sX10ksvSZKKFi1602Net26dvvzyS/Xv319ubm6aMmWKHnvsMW3ZskUVK1a0Wbddu3YqXbq0Ro8ebQ2DPXv21OzZs/Xkk0/qpZde0ubNmzVmzBjt27dP33zzjc3jDx48qA4dOuj5559X165dFRMTo3bt2mnZsmVq0qSJpKsfoL799lu1a9dOERERio+P1yeffKJ69epp7969CgkJsdlmTvX99SZOnKh+/frJ29tbr7/+uiTd9HW4evVqNW3aVNWrV9fbb78tJycnxcTEqGHDhvr1119Vs2ZNSdLzzz+vRYsWqW/fvipfvrzOnj2r9evXa9++fapWrZrptp977jkVK1ZMo0ePVv/+/fXggw9aa1m5cqWaNm2q++67T8OGDdN///2nyZMnq3bt2tq+fXumkGjWh9d75JFH1L9/f02aNEmvvfaaypUrJ0nW/86aNUve3t4aNGiQvL29tXr1ar311ltKSEjQe++9Z93O1KlT1bdvX9WtW1fR0dE6duyYWrdurYIFC6p48eI2++zSpYvWrVt3w5qul1v9fq0rV64oKipKderU0fvvvy9PT0/rstWrV+urr75S3759VaRIEUVEROiZZ57RuHHjdO7cORUqVMi67g8//KCEhAQ988wz2dp/Tr5f0tLS1KJFC61atUodO3bUgAEDdPHiRa1YsUJ79uxRyZIlM+0/LS1Nzz77rL788kt98803at68uSTp77//tobooUOHysvLS5999pnNKazXio2N1VNPPaXnnntOvXr1UtmyZRUfH69atWrp8uXL6t+/vwoXLqzZs2fr8ccf16JFi/TEE09k67nK8O+//+qxxx5TmzZt1L59ey1atEivvvqqKlWqpKZNm0q6+ve0UaNGOnHihPr376+QkBDNnTtXq1evtmufQL5gAMgTMTExhiRj69atN1zHz8/PeOCBB6z33377bePat+mECRMMScaZM2duuI2tW7cakoyYmJhMy+rVq2dIMqZNm2a6rF69etb7a9asMSQZxYoVMxISEqztX331lSHJ+PDDD61tYWFhRteuXW+5zZvV1rVrVyMsLMx6/9tvvzUkGSNHjrRZ78knnzQsFotx6NAha5skw9XV1aZt165dhiRj8uTJmfZ1rYkTJxqSjHnz5lnbUlJSjMjISMPb29vm2MPCwozmzZvfdHvX1iTJ+O2336xtx48fN9zd3Y0nnnjC2pbRx0899ZTN43fu3GlIMnr27GnTPnjwYEOSsXr1apu6JBlff/21te3ChQtGcHCwzespKSnJSEtLs9ne0aNHDTc3N2PEiBHWtuz0/fX9lnHsb7/9tvV+xmv/6NGj1rYKFSrYvDau3/eaNWsMwzCM9PR0o3Tp0kZUVJSRnp5uXe/y5ctGRESE0aRJE2ubn5+f0adPn0zbvJWMfS5cuNCmvWrVqkZAQIBx9uxZa9uuXbsMJycno0uXLta2G/XhjSxcuNDmGK91+fLlTG3PPfec4enpaSQlJRmGYRjJyclG4cKFjQcffNBITU21rjdr1ixDUqbnNeN9fyu30+/X91uGo0ePZnrPd+3a1ZBkDBkyJFMNkgwnJyfjjz/+sGmPjY01JBlTp061aX/88ceN8PBwm9fGreT0+2XmzJmGJGP8+PGZ9pVRV8bz8N577xmpqalGhw4dDA8PD2P58uU26/fr18+wWCzGjh07rG1nz541ChUqlOk9lHEcy5Yts9nGwIEDDUnGr7/+am27ePGiERERYYSHh1uPyex9aRjmfZnxGpozZ461LTk52QgKCjLatm1rbcv4e/rVV19Z2xITE41SpUrd8DUP5HechgfkI97e3jedFS/jmorvvvvO7skQ3Nzc1L179yyv36VLF/n4+FjvP/nkkwoODtbSpUvt2n9WLV26VM7Ozurfv79N+0svvSTDMPTTTz/ZtDdu3NjmG9zKlSvL19dXR44cueV+goKC9NRTT1nbChQooP79++vSpUtat26d3ccQGRmp6tWrW++XKFFCrVq10vLlyzOdVvX8889nqkuSBg0aZNOeMap1/Sk1ISEhNt8Y+/r6qkuXLtqxY4fi4uIkXe17J6erf/bT0tJ09uxZ66mcZqeqOarvr7Vz504dPHhQTz/9tM6ePat//vlH//zzjxITE9WoUSP98ssv1veCv7+/Nm/erJMnT972fk+dOqWdO3eqW7duNiMZlStXVpMmTUyfg+v70B7XjtxcvHhR//zzj+rWravLly9bT6X77bffdPbsWfXq1cvmmsZOnTqpYMGCmba5du3aLI8qSXnX7y+88IJpe7169TJdG1imTBk99NBDmj9/vrXt3Llz+umnn9SpU6ds/8RCTr5fvv76axUpUkT9+vXLtJ/r60pJSVG7du20ZMkSLV26VI8++qjN8mXLlikyMtJmApxChQpZT1O8XkREhKKiomzali5dqpo1a9qcCurt7a3evXvr2LFj2rt3782emhvy9va2GcFzdXVVzZo1bf7GLl26VMHBwXryySetbZ6enurdu7dd+wTyA8ISkI9cunTJ5kPK9Tp06KDatWurZ8+eCgwMVMeOHfXVV19lKzgVK1YsW5M5lC5d2ua+xWJRqVKlcn3a4+PHjyskJCTT85FxutLx48dt2kuUKJFpGwULFtS///57y/2ULl3a+qHoVvvJjuufO+nqh77Lly/rzJkzNu0RERGZ6nJyclKpUqVs2oOCguTv75+prlKlSmX6YFamTBlJsvZVenq6JkyYoNKlS8vNzU1FihRR0aJFtXv3bl24cOGW9edV31/r4MGDkqSuXbuqaNGiNrfPPvtMycnJ1trHjRunPXv2KDQ0VDVr1tSwYcNuGZZvJOP5LVu2bKZl5cqVswa2a13fh/b4448/9MQTT8jPz0++vr4qWrSo9QNqxnFm1Hb9a8PFxSVHZtfLi353cXHJdLpghhs9j126dNGGDRusx79w4UKlpqbaNYV/Tr5fDh8+rLJly2ZpMp4xY8bo22+/1aJFi0yvET1+/Himfs2o14zZc3X8+PEbvm4zltujePHimZ6z6//GZtR//Xpm9QB3CsISkE/89ddfunDhwg3/UZSufuv8yy+/aOXKlercubN2796tDh06qEmTJqYXgN9oGzntRt/qZrWmnHCj2day8426I92oX3LyR4lHjx6tQYMG6ZFHHtG8efO0fPlyrVixQhUqVMi307Zn1PXee+9pxYoVpjdvb29JUvv27XXkyBFNnjxZISEheu+991ShQoVMo5C55XbfW+fPn1e9evW0a9cujRgxQj/88INWrFihsWPHSlK+7SMp+38Drh21ud6NnseOHTuqQIEC1tGlefPmqUaNGrn2QTw33i9RUVHy8vLSuHHjlJSUdNs13s5rLrt9dqf/jQXsxQQPQD4xd+5cScp0SsX1nJyc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SfPnz9eoUaM0duxYbdu2TSVKlNDUqVMzPXbVqlWKjY3VihUrtGTJEiUmJioqKkoFCxbU1q1btXDhQq1cuVJ9+/bN0nFf64MPPrCGoBdffFEvvPCCYmNjJUmXLl1SixYtVL58eW3btk3Dhg3T4MGDs72P28E1S0A+l9fni98M55IDAPKb0NBQTZgwQRaLRWXLltXvv/+uCRMmqFevXnZvc8SIEWrSpIlNW+nSpTVu3DibtrJly2ru3Ll65ZVXJEkxMTFq166dvL29c6T2Z5991rrufffdp0mTJunBBx/UpUuX5O3trY8//lh+fn5asGCBChQoIEkqUybzv9XffPONunTpos8++8wmyE2ePFk9evRQ9+7dJUlvvfWWfv75Z5sRIkny8vLSZ599JldXV0nS9OnTlZSUpDlz5sjLy0uS9NFHH6lly5YaO3asAgMDs3T8ktSsWTO9+OKLkqRXX31VEyZM0Jo1a1S2bFl9/vnnSk9P14wZM+Tu7q4KFSror7/+0gsvvJDl7d8uRpYAAABwx3r44YdlsVis9yMjI3Xw4EGlpaXZvc0aNWpkaqtevXqmtp49eyomJkaSFB8fr59++skm4NzKrWrftm2bWrZsqRIlSsjHx0f16tWTJJ04cUKStHPnTtWtW9calMxs3rxZ7dq109y5czONeMXGxqpmzZo2bdffl6RKlSpZg5Ik7du3T1WqVLEGJUmqXbu20tPTraNCWZUxcidJFotFQUFB1lMNM0b23N3dretERkZma/u3i7AEAACAu56T09WPvddeE5Sammq67rUh4GZtXbp00ZEjR7Rx40bNmzdPERERqlu3bo7Um3Gqm6+vr+bPn6+tW7fqm2++kfT/kyx4eHjccjslS5bU/fffr5kzZ97weG/F7NhvxcnJKdO1Y2b7vz7oWSwWpaenZ3t/uYWwBAAAgDvW5s2bbe5v2rRJpUuXlrOzs0170aJFJcnmGqPb/a2ewoULq3Xr1oqJidGsWbOsp7Nl1c1q379/v86ePat3331XdevW1f33359pcofKlSvr119/vWkIKlKkiFavXq1Dhw6pffv2NuuWLVtWW7dutVn/+vtmypUrp127dikxMdHatmHDBjk5OVkngChatKjNc52WlqY9e/bcctvX72f37t1KSkqytm3atClb27hdhCUAAADcsU6cOKFBgwYpNjZWX3zxhSZP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MEaWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMCEQ8PSmDFj9OCDD8rHx0cBAQFq3bq1YmNjbdZJSkpSnz59VLhwYXl7e6tt27aKj493UMUAAAAA7hUODUvr1q1Tnz59tGnTJq1YsUKpqal69NFHlZiYaF0nOjpaP/zwgxYuXKh169bp5MmTatOmjQOrBgAAAHAvcHHkzpctW2Zzf9asWQoICNC2bdv0yCOP6MKFC5oxY4Y+//xzNWzYUJIUExOjcuXKadOmTXr44YcdUTYAAACAe0C+umbpwoULkqRChQpJkrZt26bU1FQ1btzYus7999+vEiVKaOPGjabbSE5OVkJCgs0NAAAAALIr34Sl9PR0DRw4ULVr11bFihUlSXFxcXJ1dZW/v7/NuoGBgYqLizPdzpgxY+Tn52e9hYaG5nbpAAAAAO5C+SYs9enTR3v27NGCBQtuaztDhw7VhQsXrLc///wzhyoEAAAAcC9x6DVLGfr27aslS5bol19+UfHixa3tQUFBSklJ0fnz521Gl+Lj4xUUFGS6LTc3N7m5ueV2yQAAAADucg4dWTIMQ3379tU333yj1atXKyIiwmZ59erVVaBAAa1atcraFhsbqxMnTigyMjKvywUAAABwD3HoyFKfPn30+eef67vvvpOPj4/1OiQ/Pz95eHjIz89PPXr00KBBg1SoUCH5+vqqX79+ioyMZCY8AAAAALnKoWFp6tSpkqT69evbtMfExKhbt26SpAkTJsjJyUlt27ZVcnKyoqKiNGXKlDyuFAAAAMC9xqFhyTCMW67j7u6ujz/+WB9//HEeVAQAAAAAV+Wb2fAAAAAAID8hLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACRdHFwAAAADcDSasOODoEqyim5RxdAl3BUaWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAA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0qV688039cEHH2jkyJF5UTKuY08fXmvLli3as2ePevbsmVsl4ibs6b+nn35aI0aMUJ06dVSgQAGVLFlS9evX12uvvZYXJeMa9vRfVFSUxo8fr4MHDyo9PV0rVqzQ4sWLderUqbwoGTkgLi7OtM8TEhL033//ZWkbhCXkiosXL6pz586aPn26ihQp4uhyYKfIyEh16dJFVatWVb169bR48WIVLVpUn3zyiaNLQxakp6crICBAn376qapXr64OHTro9ddf17Rp0xxdGuwwY8YMVapUSTVr1nR0KciitWvXavTo0ZoyZYq2b9+uxYsX68cff9Q777zj6NKQBR9++KFKly6t+++/X66ururbt6+6d+8uJyc+Pt9LXBxdAO4MRYoUkbOzs+Lj423a4+PjFRQUlGn9w4cP69ixY2rZsqW1LT09XZLk4uKi2NhYlSxZMneLho3s9qGZAgUK6IEHHtChQ4dyo0TchD39FxwcrAIFCsjZ2dnaVq5cOcXFxSklJUWurq65WjNs3c57MDExUQsWLNCIESNys0TchD399+abb6pz587W0cBKlSopMTFRvXv31uuvv86H7jxkT/8VLVpU3377rZKSknT27FmFhIRoyJAhuu+++/KiZOSAoKAg0z739fWVh4dHlrbBuxRZ4urqqurVq2vVqlXWtvT0dK1atUqRkZGZ1r///vv1+++/a+fOndbb448/rgYNGmjnzp0KDQ3Ny/Kh7PehmbS0NP3+++8KDg7OrTJxA/b0X+3atXXo0CHrFxWSdODAAQUHBxOUHOB23oMLFy5UcnKynnnmmdwuEzdgT/9dvnw5UyDK+PLi6vXpyCu38/5zd3dXsWLFdOXKFX399ddq1apVbpeLHBIZGWnT55K0YsWKLH/ukcTU4ci6BQsWGG5ubsasWbOMvXv3Gr179zb8/f2tU0l37tzZGDJkyA0fz2x4jpfdPhw+fLixfPly4/Dhw8a2bduMjh07Gu7u7sYff/zhqEO4p2W3/06cOGH4+PgYffv2NWJjY40lS5YYAQEBxsiRIx11CPc8e/+O1qlTx+jQoUNel4vrZLf/3n77bcPHx8f44osvjCNHjhg///yzUbJkSaN9+/aOOoR7Wnb7b9OmTcbXX39tHD582Pjll1+Mhg0bGhEREca///7roCPAxYsXjR07dhg7duwwJBnjx483duzYYRw/ftww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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Choose a tag to analyze\n", + "tag_to_analyze = input('Enter the tag to analyze: ').lower().strip()\n", + "\n", + "# Lowercase and strip whitespaces\n", + "df['tags'] = df['tags'].str.lower().str.strip()\n", + "\n", + "plt.figure(figsize=(10,5))\n", + "\n", + "# Filter dataframe for chosen tag and plot histogram of probabilities\n", + "df[df['tags'] == tag_to_analyze]['probabilities'].hist(bins=20, alpha=0.5)\n", + "\n", + "plt.legend([tag_to_analyze])\n", + "plt.xlabel('Probability')\n", + "plt.ylabel('Frequency')\n", + "plt.title(f'Distribution of probabilities for tag: {tag_to_analyze}')\n", + "plt.grid(False)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "402f072a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
filenamefinal_tags
0other/, trending on artstation, vertical kowlo...outdoors
1other/. ultra detailed Cartoon CG elderly char...jewelry, blurry
2other/1 anime boy medium long white hair blu...solo, looking at viewer, simple background, ...
3other/1 anime boy, medium long white hair, blu...solo, looking at viewer, upper body, day, ...
4other/1 anime boy, white hair, blue eyes, whit...solo, looking at viewer, upper body, blurry...
.........
10357rank_99/photography of a highly detailed adora...solo, looking at viewer, blurry, realistic,...
10358rank_99/photography wizard woman with cornflow...looking at viewer, realistic, solo
10359rank_99/photography woman and baby daughter we...jewelry, realistic
10360rank_99/superb photography of a warrior girl w...solo, blurry background, jewelry, looking a...
10361rank_99/superresolution photography of a woman...solo, jewelry, realistic, indoors, closed ...
\n", + "

10362 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " filename \n", + "0 other/, trending on artstation, vertical kowlo... \\\n", + "1 other/. ultra detailed Cartoon CG elderly char... \n", + "2 other/1 anime boy medium long white hair blu... \n", + "3 other/1 anime boy, medium long white hair, blu... \n", + "4 other/1 anime boy, white hair, blue eyes, whit... \n", + "... ... \n", + "10357 rank_99/photography of a highly detailed adora... \n", + "10358 rank_99/photography wizard woman with cornflow... \n", + "10359 rank_99/photography woman and baby daughter we... \n", + "10360 rank_99/superb photography of a warrior girl w... \n", + "10361 rank_99/superresolution photography of a woman... \n", + "\n", + " final_tags \n", + "0 outdoors \n", + "1 jewelry, blurry \n", + "2 solo, looking at viewer, simple background, ... \n", + "3 solo, looking at viewer, upper body, day, ... \n", + "4 solo, looking at viewer, upper body, blurry... \n", + "... ... \n", + "10357 solo, looking at viewer, blurry, realistic,... \n", + "10358 looking at viewer, realistic, solo \n", + "10359 jewelry, realistic \n", + "10360 solo, blurry background, jewelry, looking a... \n", + "10361 solo, jewelry, realistic, indoors, closed ... \n", + "\n", + "[10362 rows x 2 columns]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Filter rows where probability is >= 0.3\n", + "df_high_prob = df[df['probabilities'] >= 0.3]\n", + "\n", + "# Replace underscores with spaces in tags\n", + "df_high_prob['tags'] = df_high_prob['tags'].str.replace('_', ' ')\n", + "\n", + "# Group by filename, join tags with a comma and a space, and reset the index\n", + "df_final = df_high_prob.groupby('filename')['tags'].apply(', '.join).reset_index()\n", + "\n", + "# Rename the column\n", + "df_final.columns = ['filename', 'final_tags']\n", + "\n", + "# Display the final DataFrame\n", + "df_final" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "87b9c975", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "File /home/irakli/foxtagger/vokda_v3_prep/other/A highly accurate Michael Myers standing in the middle of a suburban street wearing an orange Balenc.txt not found.\n", + "File /home/irakli/foxtagger/vokda_v3_prep/other/Beautiful dark skin latina arabic moroccan Lebanese woman model with a dark hair wearing big small w.txt not found.\n", + "File /home/irakli/foxtagger/vokda_v3_prep/other/a highly accurate Jason Voorhees standing at the summer camp wearing a red Gucci suit, holding an ic.txt not found.\n", + "File /home/irakli/foxtagger/vokda_v3_prep/rank_176/Professional photo of a wood barrel of ginger on white background FFFFFF. Photo is taken from above .txt not found.\n", + "File /home/irakli/foxtagger/vokda_v3_prep/rank_291/Still from stylish cinematic historical masterpiece with grotesque and campy vibe titled the cheese .txt not found.\n", + "File /home/irakli/foxtagger/vokda_v3_prep/rank_297/Igbo Nigerian royal wedding .txt not found.\n", + "File /home/irakli/foxtagger/vokda_v3_prep/rank_297/Young Akan Ghanaian King and Queen visiting St. Peters Basilica .txt not found.\n", + "File /home/irakli/foxtagger/vokda_v3_prep/rank_297/Young Bambara Malian King and Queen visiting Sheikh Zayed Grand Mosque .txt not found.\n", + "File /home/irakli/foxtagger/vokda_v3_prep/rank_297/young Mende Sierra Leonean king and queen visiting St. Peters Basilica .txt not found.\n" + ] + } + ], + "source": [ + "import os\n", + "\n", + "# Base directory where your folders (rank_2, extra, rank_15, etc.) are located\n", + "base_dir = '/home/irakli/foxtagger/vokda_v3_prep'\n", + "\n", + "# Iterate over rows in the DataFrame\n", + "for index, row in df_final.iterrows():\n", + " # Get the filename and tags from the DataFrame\n", + " filename = row['filename']\n", + " tags = row['final_tags']\n", + "\n", + " # Remove the file extension from the filename\n", + " filename = os.path.splitext(filename)[0]\n", + "\n", + " # Construct the path to the text file\n", + " txt_file_path = os.path.join(base_dir, filename + '.txt')\n", + "\n", + " # Open the text file, read its contents, and prepend the new tags\n", + " try:\n", + " with open(txt_file_path, 'r+') as f:\n", + " original_caption = f.read()\n", + " f.seek(0) # Set the pointer to the beginning of the file\n", + " new_caption = tags + ', ' + original_caption\n", + " f.write(new_caption)\n", + " except FileNotFoundError:\n", + " print(f\"File {txt_file_path} not found.\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6e1ce230", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}