{ "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": "iVBORw0KGgoAAAANSUhEUgAAA0sAAAHWCAYAAACmIxLCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABQ0UlEQVR4nO3dd3QU1f/G8WeTkN5oaRCSSJOOgGgo0o00QZCiSJNioQZRwQpIEVRAUEARQlUUxIYI0hW+NKkiEDqokIAgBIIpJPP7g5P9sWSAZEmyAd6vc/bo3pmd+cze3bDP3pm7FsMwDAEAAAAAbDg5ugAAAAAAyI8ISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYISwAAAABggrAEAAAAACYIS0A+NmzYMFksljzZV/369VW/fn3r/bVr18pisWjRokV5sv9u3bopPDw8T/Zlr0uXLqlnz54KCgqSxWLRwIEDHV2SJCk8PFwtWrTIse1lp+/N+s1isWjYsGHW+7NmzZLFYtGxY8eyvO+1a9dmr+jbtHXrVtWqVUteXl6yWCzauXNnnu4/P7jdfr9T5PT7JSuOHTsmi8Wi999/P0/3m1846n0N5ATCEpBHMj4wZtzc3d0VEhKiqKgoTZo0SRcvXsyR/Zw8eVLDhg3Llx/28nNtWTF69GjNmjVLL7zwgubOnavOnTs7uqQ71pQpUzRr1ixHlyFJSk1NVbt27XTu3DlNmDBBc+fOVVhYWK7tb+/evRo2bFiWwiMAwLFcHF0AcK8ZMWKEIiIilJqaqri4OK1du1YDBw7U+PHj9f3336ty5crWdd944w0NGTIkW9s/efKkhg8frvDwcFWtWjXLj/v555+ztR973Ky26dOnKz09PddruB2rV6/Www8/rLffftvRpeQbWem3zp07q2PHjnJzc7O2TZkyRUWKFFG3bt1s1n3kkUf033//ydXVNTfKNXX48GEdP35c06dPV8+ePXN9f3v37tXw4cNVv379O3Z0BgDuFYQlII81bdpUNWrUsN4fOnSoVq9erRYtWujxxx/Xvn375OHhIUlycXGRi0vuvk0vX74sT0/PPP1waqZAgQIO3X9WnD59WuXLl8/1/SQmJsrLyyvX95MTstJvzs7OcnZ2ztL2nJyc5O7ufrtlZcvp06clSf7+/jm2zTupD/ODGz1f6enpSklJyfPXxJ3IMAwlJSVZ//0AkDM4DQ/IBxo2bKg333xTx48f17x586ztZtcsrVixQnXq1JG/v7+8vb1VtmxZvfbaa5Kunhf+4IMPSpK6d+9uPeUv43Sn+vXrq2LFitq2bZseeeQReXp6Wh97/TVLGdLS0vTaa68pKChIXl5eevzxx/Xnn3/arBMeHp5phOD6bd6qNrNrIBITE/XSSy8pNDRUbm5uKlu2rN5//30ZhmGznsViUd++ffXtt9+qYsWKcnNzU4UKFbRs2TLzJ/w6p0+fVo8ePRQYGCh3d3dVqVJFs2fPti7PON/+6NGj+vHHH6213+w0qoya5s+fr7Jly8rd3V3Vq1fXL7/8YrNeRh/v3btXTz/9tAoWLKg6depIkq5cuaJ33nlHJUuWlJubm8LDw/Xaa68pOTnZdJ8///yzqlatKnd3d5UvX16LFy+2WX7u3DkNHjxYlSpVkre3t3x9fdW0aVPt2rXLdHtZ6fusXLty/TVL4eHh+uOPP7Ru3Trrc3nt68Ts2obNmzfrsccek5+fnzw9PVWvXj1t2LDBZp2LFy9q4MCBCg8Pl5ubmwICAtSkSRNt3779hrV169ZN9erVkyS1a9fOphbp6mhi3bp15eXlJX9/f7Vq1Ur79u2z2cbN+tDsuWjXrp0kqUGDBtbjzzje7777Ts2bN1dISIjc3NxUsmRJvfPOO0pLS8u0rY8//lj33XefPDw8VLNmTf3666+m7+MTJ05o//79N3wOrpeVfr/ejfot41qda0+57Natm7y9vXX48GE1a9ZMPj4+6tSpkyTb902FChXk5uamn376SeHh4WrVqlWm/SYlJcnPz0/PPfdclo8vQ06+X5KSkjRs2DCVKVNG7u7uCg4OVps2bXT48OEb7t8wDPXu3Vuurq42+969e7fq1asnDw8PFS9eXCNHjlRMTEymvzkZ114tX75cNWrUkIeHhz755BNJ0pEjR9SuXTsVKlRInp6eevjhh/Xjjz/a7P9G1xKa9WXGvx179+5VgwYN5OnpqWLFimncuHGZjuuvv/5S69at5eXlpYCAAEVHR9/wbxZwJ2BkCcgnOnfurNdee00///yzevXqZbrOH3/8oRYtWqhy5coaMWKE3NzcdOjQIeuHxnLlymnEiBF666231Lt3b9WtW1eSVKtWLes2zp49q6ZNm6pjx4565plnFBgYeNO6Ro0aJYvFoldffVWnT5/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/bcctvX72f37t1KSkqytm3atClb27hdhCUAAADcsU6cOKFBgwYpNjZWX3zxhSZPnqwBAwZkWs/Dw0MPP/ywdeKGdevW6Y033rjt/ffs2VOzZ8/Wvn371LVr1xyrvUSJEnJ1ddXkyZN15MgRff/993rnnXdsHt+3b18lJCSoY8eO+u2333Tw4EHNnTs306lwAQEBWr16tfbv36+nnnrKOgFEv379NGPGDM2ePVsHDx7UyJEjtXv3bptTA8106tRJ7u7u6tq1q/bs2aM1a9aoX79+6ty5s/V6pYYNG+rHH3/Ujz/+qP379+uFF17Q+fPns/X8PP3007JYLOrVq5f27t2rpUuX6v3338/WNm4XEzwAAADA1J0wsU+XLl3033//qWbNmnJ2dtaAAQPUu3dv03VnzpypHj16qHr16ipbtqzGjRunRx999Lb237hxYwUHB6tChQoKCQnJsdqLFi2qWbNm6bXXXtOkSZNUrVo1vf/++3r88cetjy9cuLBWr16tl19+WfXq1ZOzs7OqVq2q2rVrZ9pXUFCQVq9erfr166tTp076/PPP1alTJx05ckSDBw9WUlKS2rdvr27dumnLli03rdvT01PLly/XgAED9OCDD8rT01Nt27bV+PHjres8++yz2rVrl7p06SIXFxdFR0erQYMG2Xp+vL299cMPP+j555/XAw88oPLly2vs2LFq27ZttrZzOyyG2UT0d5GEhAT5+fnpwoUL8vX1dXQ5QLYxGx4AIDclJSXp6NGjioiIsLmQHllz6dIlFStWTDExMWrTpo2jy7ltTZo0UVBQkObOnevoUux2s9d0drMBI0sAAABANqWnp+uff/7RBx98IH9/f5sRnzvF5cuXNW3aNEVFRcnZ2VlffPGFVq5cqRUrVji6tHyDsAQAAABk04kTJxQREaHixYtr1qxZcnFxsVlWvnz5Gz527969KlGiRF6UeVMWi0VLly7VqFGjlJSUpLJly+rrr79W48aNHV1avkFYAgAAALIpPDw809TYGUJCQm460152r23KLR4eHlq5cqWjy8jXCEsAAABADnJxcVGpUqUcXQZyAFOHAwAA4IajJMCdJidfy4ws5TFmNgMAAPlJgQIFJF292N/Dw8PB1QC37/Lly5L+/7V9OwhLAAAA9zBnZ2f5+/vr9OnTkq7+hs6tfpQUyI8Mw9Dly5d1+vRp+fv7y9nZ+ba3SVgCAAC4xwUFBUmSNTABdzJ/f3/ra/p2EZYAAADucRaLRcHBwQoICFBqaqqjywHsVqBAgRwZUcpAWAIAAICkq6fk5eQHTeBOx2x4AAAAAGCCsAQAAAAAJghLAAAAAGCCsAQAAAAAJghLAAAAAGCCsAQAAAAAJghLAAAAAGCCsAQAAAAAJghLAAAAAGCCsAQAAAAAJghLAAAAAGCCsAQAAAAAJghLAAAAAGCCsAQAAAAAJghLAAAAAGCCsAQAAAAAJghLAAAAAGCCsAQAAAAAJghLAAAAAGCCsAQAAAAAJghLAAAAAGCCsAQAAAAAJlwcXQCQYcKKA44uwSq6SRlHlwAAAAAHY2QJAAAAAEwQlgAAAADABGEJAAAAAEwQlgAAAADABGEJAAAAAEwQlgAAAADABGEJAAAAAEzwO0v3sPz0u0YAAABAfsPIEgAAAACYICwBAAAAgAnCEgAAAACYcGhYSktL05tvvqmIiAh5eHioZMmSeuedd2QYhnUdwzD01ltvKTg4WB4eHmrcuLEOHjzowKoBAAAA3AscGpbGjh2rqVOn6qOPPtK+ffs0duxYjRs3TpMnT7auM27cOE2aNEnTpk3T5s2b5eXlpaioKCUlJTmwcgAAAAB3O4fOhve///1PrVq1UvPmzSVJ4eHh+uKLL7RlyxZJV0eVJk6cqDfeeEOtWrWSJM2ZM0eBgYH69ttv1bFjR4fVDgAAAODu5tCRpVq1amnVqlU6cODqFNa7du3S+vXr1bRpU0nS0aNHFRcXp8aNG1sf4+fnp4ceekgbN2403WZycrISEhJsbgAAAACQXQ4dWRoyZIgSEhJ0//33y9nZWWlpaRo1apQ6deokSYqLi5MkBQYG2jwuMDDQuux6Y8aM0fDhw3O3cAAAAAB3PYeOLH311VeaP3++Pv/8c23fvl2zZ8/W+++/r9mzZ9u9zaFDh+rChQvW259//pmDFQMAAAC4Vzh0ZOnll1/WkCFDrNceVapUScePH9eYMWPUtWtXBQUFSZLi4+MVHBxsfVx8fLyqVq1quk03Nze5ubnleu0AAAAA7m4OHVm6fPmynJxsS3B2dlZ6erokKSIiQkFBQVq1apV1eUJCgjZv3qzIyMg8rRUAAADAvcWhI0stW7bUqFGjVKJECVWoUEE7duzQ+PHj9eyzz0qSLBaLBg4cqJEjR6p06dKKiIjQm2++qZCQELVu3dqRpeMuN2HFAUeXAAAAAAdzaFiaPHmy3nzzTb344os6ffq0QkJC9Nxzz+mtt96yrvPKK68oMTFRvXv31vnz51WnTh0tW7ZM7u7uDqwcAAAAwN3OYhiG4egiclNCQoL8/Px04cIF+fr6OrocRixwR4tuUsbRJQAAANgtu9nAodcsAQAAAEB+RVgCAAAAABOEJQAAAAAwQVgCAAAAABMOnQ0PwJ0lP01QwmQTAAAgtzGyBAAAAAAmCEsAAAAAYIKwBAAAAAAmCEsAAAAAYIKwBAAAAAAmCEsAAAAAYIKwBAAAAAAmCEsAAAAAYIKwBAAAAAAmCEsAAAAAYIKwBAAAAAAmCEsAAAAAYIKwBAAAAAAmCEsAAAAAYIKwBAAAAAAmXBxdAADcDSasOODoEqyim5RxdAkAANwVGFkCAAAAABOEJQAAAAAwQVgCAAAAABOEJQAAAAAwQVgCAAAAABOEJQAAAAAwQVgCAAAAABOEJQAAAAAwQVgCAAAAABOEJQAAAAAwQVgCAAAAABOEJQAAAAAwQVgCAAAAABOEJQAAAAAwQVgCAAAAABMuji4AAOwxYcUBR5cAAADucowsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmCAsAQAAAIAJwhIAAAAAmGDqcAC4y+SnadWjm5RxdAkAANiNkSUAAAAAMEFYAgAAAAAThCUAAAAAMEFYAgAAAAAThCUAAAAAMEFYAgAAAAAThCUAAAAAMMHvLAEAcg2/+QQAuJMxsgQAAAAAJghLAAAAAGCCsAQAAAAAJghLAAAAAGCCsAQAAAAAJghLAAAAAGCCsAQAAAAAJghLAAAAAGCCsAQAAAAAJghLAAAAAGCCsAQAAAAAJlwcXQAAAHlhwooDji4h34puUsbRJQBAvsTIEgAAAACYICwBAAAAgAnCEgAAAACYcHhY+vvvv/XMM8+ocOHC8vDwUKVKlfTbb79ZlxuGobfeekvBwcHy8PBQ48aNdfDgQQdWDAAAAOBe4NCw9O+//6p27doqUKCAfvrpJ+3du1cffPCBChYsaF1n3LhxmjRpkqZNm6bNmzfLy8tLUVFRSkpKcmDlAAAAAO52Dp0Nb+zYsQoNDVVMTIy1LSIiwvr/hmFo4sSJeuONN9SqVStJ0pw5cxQYGKhvv/1WHTt2zPOaAQAAANwbHDqy9P3336tGjRpq166dAgIC9MADD2j69OnW5UePHlVcXJwaN25sbfPz89NDDz2kjRs3mm4zOTlZCQkJNjcAAAAAyC6HhqUjR45o6tSpKl26tJYvX64XXnhB/fv31+zZsyVJcXFxkqTAwECbxwUGBlqXXW/MmDHy8/Oz3kJDQ3P3IAAAAADclRwaltLT01WtWjWNHj1aDzzwgHr37q1evXpp2rRpdm9z6NChunDhgvX2559/5mDFAAAAAO4VDg1LwcHBKl++vE1buXLldOLECUlSUFCQJCk+Pt5mnfj4eOuy67m5ucnX19fmBgAAAADZ5dCwVLt2bcXGxtq0HThwQGFhYZKuTvYQFBSkVatWWZcnJCRo8+bNioyMzNNaAQAAANxbHDobXnR0tGrVqqXRo0erffv22rJliz799FN9+umnkiSLxaKBAwdq5MiRKl26tCIiIvTmm28qJCRErVu3dmTpAAAAAO5yDg1LDz74oL755hsNHTpUI0aMUEREhCZOnKhOnTpZ13nllVeUmJio3r176/z586pTp46WLVsmd3d3B1YOAAAA4G5nMQzDcHQRuSkhIUF+fn66cOFCvrh+acKKA44uAQAAG9FNyji6BADIE9nNBg4dWQIAAI7HF3nmCJEAHDrBAwAAAADkV3aFpSNHjuR0HQAAAACQr9gVlkqVKqUGDRpo3rx5SkpKyumaAAAAAMDh7ApL27dvV+XKlTVo0CAFBQXpueee05YtW3K6NgAAAABwGLvCUtWqVfXhhx/q5MmTmjlzpk6dOqU6deqoYsWKGj9+vM6cOZPTdQIAAABAnrqtCR5cXFzUpk0bLVy4UGPHjtWhQ4c0ePBghYaGqkuXLjp16lRO1QkAAAAAeeq2wtJvv/2mF198UcHBwRo/frwGDx6sw4cPa8WKFTp58qRatWqVU3UCAAAAQJ6y63eWxo8fr5iYGMXGxqpZs2aaM2eOmjVrJienq9krIiJCs2bNUnh4eE7WCgAAAAB5xq6wNHXqVD377LPq1q2bgoODTdcJCAjQjBkzbqs4AAAAAHAUu8LSwYMHb7mOq6urunbtas/mAQAAAMDh7LpmKSYmRgsXLszUvnDhQs2ePfu2iwIAAAAAR7MrLI0ZM0ZFihTJ1B4QEKDRo0ffdlEAAAAA4Gh2haUTJ04oIiIiU3tYWJhOnDhx20UBAAAAgKPZFZYCAgK0e/fuTO27du1S4cKFb7soAAAAAHA0u8LSU089pf79+2vNmjVKS0tTWlqaVq9erQEDBqhjx445XSMAAAAA5Dm7ZsN75513dOzYMTVq1EguLlc3kZ6eri5dunDNEgAAAIC7gl1hydXVVV9++aXeeecd7dq1Sx4eHqpUqZLCwsJyuj4AAAAAcAi7wlKGMmXKqEyZMjlVCwAAAADkG3aFpbS0NM2aNUurVq3S6dOnlZ6ebrN89erVOVIcAAAAADiKXWFpwIABmjVrlpo3b66KFSvKYrHkdF0AAAAA4FB2haUFCxboq6++UrNmzXK6HgAAAADIF+yaOtzV1VWlSpXK6VoAAAAAIN+wKyy99NJL+vDDD2UYRk7XAwAAAAD5gl2n4a1fv15r1qzRTz/9pAoVKqhAgQI2yxcvXpwjxQEAAACAo9gVlvz9/fXEE0/kdC0AAAAAkG/YFZZiYmJyug4AAAAAyFfsumZJkq5cuaKVK1fqk08+0cWLFyVJJ0+e1KVLl3KsOAAAAABwFLtGlo4fP67HHntMJ06cUHJyspo0aSIfHx+NHTtWycnJmjZtWk7XCQAAAAB5yq6RpQEDBqhGjRr6999/5eHhYW1/4okntGrVqhwrDgAAAAAcxa6RpV9//VX/+9//5OrqatMeHh6uv//+O0cKAwAAAABHsmtkKT09XWlpaZna//rrL/n4+Nx2UQAAAADgaHaFpUcffVQTJ0603rdYLLp06ZLefvttNWvWLKdqAwAAAACHses0vA8++EBRUVEqX768kpKS9PTTT+vgwYMqUqSIvvjii5yuEQAAAADynF1hqXjx4tq1a5cWLFig3bt369KlS+rRo4c6depkM+EDAAAAANyp7ApLkuTi4qJnnnkmJ2sBAAAAgHzDrrA0Z86cmy7v0qWLXcUAAAAAQH5hV1gaMGCAzf3U1FRdvnxZrq6u8vT0JCwBAAAAuOPZNRvev//+a3O7dOmSYmNjVadOHSZ4AAAAAHBXsPuapeuVLl1a7777rp555hnt378/pzYLAADgEBNWHHB0CTaim5RxdAnAPceukaUbcXFx0cmTJ3NykwAAAADgEHaNLH3//fc29w3D0KlTp/TRRx+pdu3aOVIYAAAAADiSXWGpdevWNvctFouKFi2qhg0b6oMPPsiJugAAAADAoewKS+np6TldBwAAAADkKzl6zRIAAAAA3C3sGlkaNGhQltcdP368PbsAAAAAAIeyKyzt2LFDO3bsUGpqqsqWLStJOnDggJydnVWtWjXrehaLJWeqBAAAAIA8ZldYatmypXx8fDR79mwVLFhQ0tUfqu3evbvq1q2rl156KUeLBAAAAIC8Ztc1Sx988IHGjBljDUqSVLBgQY0cOZLZ8AAAAADcFewKSwkJCTpz5kym9jNnzujixYu3XRQAAAAAOJpdYemJJ55Q9+7dtXjxYv3111/666+/9PXXX6tHjx5q06ZNTtcIAAAAAHnOrmuWpk2bpsGDB+vpp59Wamrq1Q25uKhHjx567733crRAAAAAAHAEu8KSp6enpkyZovfee0+HDx+WJJUsWVJeXl45WhwAAAAAOMpt/SjtqVOndOrUKZUuXVpeXl4yDCOn6gIAAAAAh7IrLJ09e1aNGjVSmTJl1KxZM506dUqS1KNHD6YNBwAAAHBXsCssRUdHq0CBAjpx4oQ8PT2t7R06dNCyZctyrDgAAAAAcBS7rln6+eeftXz5chUvXtymvXTp0jp+/HiOFAYAAAAAjmTXyFJiYqLNiFKGc+fOyc3N7baLAgAAAABHsyss1a1bV3PmzLHet1gsSk9P17hx49SgQYMcKw4AAAAAHMWu0/DGjRunRo0a6bffflNKSopeeeUV/fHHHzp37pw2bNiQ0zUCAAAAQJ6za2SpYsWKOnDggOrUqaNWrVopMTFRbdq00Y4dO1SyZMmcrhEAAAAA8ly2R5ZSU1P12GOPadq0aXr99ddzoyYAAAAAcLhsjywVKFBAu3fvzo1aAAAAACDfsOs0vGeeeUYzZszI6VoAAAAAIN+wa4KHK1euaObMmVq5cqWqV68uLy8vm+Xjx4/PkeIAAAAAwFGyFZaOHDmi8PBw7dmzR9WqVZMkHThwwGYdi8WSc9UBAAAAgINkKyyVLl1ap06d0po1ayRJHTp00KRJkxQYGJgrxQEAAACAo2TrmiXDMGzu//TTT0pMTMyRQt59911ZLBYNHDjQ2paUlKQ+ffqocOHC8vb2Vtu2bRUfH58j+wMAAACAm7FrgocM14cne23dulWffPKJKleubNMeHR2tH374QQsXLtS6det08uRJtWnTJkf2CQAAAAA3k62wZLFYMl2TdLvXKF26dEmdOnXS9OnTVbBgQWv7hQsXNGPGDI0fP14NGzZU9erVFRMTo//973/atGnTbe0TAAAAAG4lW9csGYahbt26yc3NTdLV0+Sef/75TLPhLV68OMvb7NOnj5o3b67GjRtr5MiR1vZt27YpNTVVjRs3trbdf//9KlGihDZu3KiHH37YdHvJyclKTk623k9ISMhyLQAAAACQIVthqWvXrjb3n3nmmdva+YIFC7R9+3Zt3bo107K4uDi5urrK39/fpj0wMFBxcXE33OaYMWM0fPjw26oLAAAgv5mw4sCtV8oj0U3KOLoEIE9kKyzFxMTk2I7//PNPDRgwQCtWrJC7u3uObXfo0KEaNGiQ9X5CQoJCQ0NzbPsAAAAA7g23NcHD7di2bZtOnz6tatWqycXFRS4uLlq3bp0mTZokFxcXBQYGKiUlRefPn7d5XHx8vIKCgm64XTc3N/n6+trcAAAAACC7sjWylJMaNWqk33//3aate/fuuv/++/Xqq68qNDRUBQoU0KpVq9S2bVtJUmxsrE6cOKHIyEhHlAwAAADgHuKwsOTj46OKFSvatHl5ealw4cLW9h49emjQoEEqVKiQfH191a9fP0VGRt5wcgcAAAAAyCkOC0tZMWHCBDk5Oalt27ZKTk5WVFSUpkyZ4uiyAAAAANwDLEZO/bJsPpWQkCA/Pz9duHAhX1y/lJ9msgEAALAHs+HhTpXdbOCwCR4AAAAAID8jLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACcISAAAAAJggLAEAAACACRdHFwAAAIA7y4QVBxxdglV0kzKOLgF3MUaWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATLg4ugAAAADAXhNWHHB0CVbRTco4ugTkMEaWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMCEQ8PSmDFj9OCDD8rHx0cBAQFq3bq1YmNjbdZJSkpSnz59VLhwYXl7e6tt27aKj493UMUAAAAA7hUODUvr1q1Tnz59tGnTJq1YsUKpqal69NFHlZiYaF0nOjpaP/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/ftwwDMMYMmSI0blzZ+v6GVOHv/zyy8a+ffuMjz/+ONtTh3MaHrKsQ4cOOnPmjN566y3FxcWpatWqWrZsmfXCuRMnTnBKQT6X3T78999/1atXL8XFxalgwYKqXr26/ve//6l8+fKOOoR7Wnb7LzQ0VMuXL1d0dLQqV66sYsWKacCAAXr11VcddQj3PHv+jsbGxmr9+vX6+eefHVEyrpHd/nvjjTdksVj0xhtv6O+//1bRokXVsmVLjRo1ylGHcE/Lbv8lJSXpjTfe0JEjR+Tt7a1mzZpp7ty58vf3d9AR4LffflODBg2s9wcNGiRJ6tq1q2bNmqVTp07pxIkT1uURERH68ccfFR0drQ8//FDFixfXZ599pqioqCzv02IYjAMDAAAAwPUYBgAAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIAAAAAE4QlAAAAADBBWAIA3FG6deum1q1b39Y2jh07JovFop07d95wnbVr18pisej8+fOSpFmzZsnf39+6fNiwYapatept1QEAyN8ISwCAXNOtWzdZLBZZLBa5urqqVKlSGjFihK5cueLo0m6pVq1aOnXqlPz8/EyXDx48WKtWrbLez4kQBwDIX1wcXQAA4O722GOPKSYmRsnJyVq6dKn69OmjAgUKaOjQoTbrpaSkyNXV1UFVZubq6qqgoKAbLvf29pa3t3ceVgQAyGuMLAEAcpWbm5uCgoIUFhamF154QY0bN9b3339vHYkZNWqUQkJCVLZsWUnS77//roYNG8rDw0OFCxdW7969denSpUzbHT58uIoWLSpfX189//zzSklJsS5btmyZ6tSpI39/fxUuXFgtWrTQ4cOHM21j//79qlWrltzd3VWxYkWtW7fOuuz60/Cud+1peMOGDdPs2bP13XffWUfS1q5dq4YNG6pv3742jztz5oxcXV1tRqUAAPkTYQkAkKc8PDyswWbVqlWKjY3VihUrtGTJEiUmJioqKkoFCxbU1q1btXDhQq1cuTJT4Fi1apX27duntWvX6osvvtDixYs1fPhw6/LExEQNGjRIv/32m1atWiUnJyc98cQTSk9Pt9nOyy+/rJdeekk7duxQZGSkWrZsqbNnz2b7mAYPHqz27dvrscce06lTp3Tq1CnVqlVLPXv21Oeff67k5GTruvPmzVOxYsXUsGHDbO8HAJC3CEsAgDxhGIZWrlyp5cuXW4OCl5eXPvvsM1WoUEEVKlTQ559/rqSkJM2ZM0cVK1ZUw4YN9dFHH2nu3LmKj4+3bsvV1VUzZ85UhQoV1Lx5c40YMUKTJk2yhqG2bduqTZs2KlWqlKpWraqZM2fq999/1969e21q6tu3r9q2baty5cpp6tSp8vPz04wZM7J9bN7e3vLw8LCOogUFBcnV1VVt2rSRJH333XfWdWfNmmW9lgsAkL8RlgAAuWrJkiXy9vaWu7u7mjZtqg4dOmjYsGGSpEqVKtlcp7Rv3z5VqVJFXl5e1rbatWsrPT1dsbGx1rYqVarI09PTej8yMlKXLl3Sn3/+KUk6ePCgnnrqKd13333y9fVVeHi4JOnEiRM2tUVGRlr/38XFRTVq1NC+ffty7Njd3d3VuXNnzZw5U5K0fft27dmzR926dcuxfQAAcg8TPAAAclWDBg00depUubq6KiQkRC4u//9Pz7WhKCe1bNlSYWFhmj59ukJCQpSenq6KFSvaXNeUV3r27KmqVavqr7/+UkxMjBo2bKiwsLA8rwMAkH2MLAEAcpWXl5dKlSqlEiVK2AQlM+XKldOuXbuUmJhobduwYYOcnJysE0BI0q5du/Tff/9Z72/atEne3t4KDQ3V2bNnFRsbqzfeeEONGjVSuXLl9O+//5rub9OmTdb/v3LlirZt26Zy5crZdZyurq5KS0vL1F6pUiXVqFFD06dP1+eff65nn33Wru0DAPIeYQkAkG906tRJ7u7u6tq1q/bs2aM1a9aoX79+6ty5swIDA63rpaSkqEePHtq7d6+WLl2qt99+W3379pWTk5MKFiyowoUL69NPP9WhQ4e0evVqDRo0yHR/H3/8sb755hvt379fffr00b///mt3mAkPD9fu3bsVGxurf/75R6mpqdZlPXv21LvvvivDMPTEE0/YtX0AQN4jLAEA8g1PT08tX75c586d04MPPqgnn3xSjRo10kcffWSzXqNGjVS6dGk98sgj6tChgx5//HHrdVBOTk5asGCBtm3bpooVKyo6Olrvvfee6f7effddvfvuu6pSpYrWr1+v77//XkWKFLGr9l69eqls2bKqUaOGihYtqg0bNliXPfXUU3JxcdFTTz0ld3d3u7YPAMh7FsMwDEcXAQDA3ezYsWMqWbKktm7dqmrVqjm6HABAFhGWAADIJampqTp79qwGDx6so0eP2ow2AQDyP07DAwAgl2zYsEHBwcHaunWrpk2b5uhyAADZxMgSAAAAAJhgZAkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMAEYQkAAAAATBCWAAAAAMDE/wHP38uoMVK0EwAAAABJRU5ErkJggg==", "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 }