stereoid's picture
Add files using upload-large-folder tool
6d35aff verified
Raw
History Blame Contribute Delete
6.55 kB
import json
import pandas as pd
from collections import defaultdict
from matplotlib import pyplot as plt
import numpy as np
SPLIT_GENRE = {
"TRAIN": [
"Casual",
"Adventure",
"Action",
"Indie"
],
"VAL": [
"Strategy",
"Education",
"RPG",
"Massively Multiplayer",
"Design & Illustration",
"Animation & Modeling"
],
"TEST": [
"Simulation",
"Sports"
]
}
def parse_img_id(img_id):
img_id = str(img_id)
return int(img_id[:-3]), int(img_id[-3:])
def plot(data, img_name, is_genre=False):
plt.rcParams.update({'font.size': 18})
colors = []
for cat in data.keys():
if cat in SPLIT_GENRE['TRAIN']:
colors.append('tab:blue')
elif cat in SPLIT_GENRE['VAL']:
colors.append('tab:orange')
elif cat in SPLIT_GENRE['TEST']:
colors.append('tab:green')
else:
colors.append('gray')
if is_genre:
plt.figure(figsize=(10, 6))
plt.grid(True, axis='y', zorder=0)
plt.bar(data.keys(), data.values(), color=colors, zorder=3)
plt.xticks(rotation=30, ha='right')
plt.legend(handles=[
plt.Line2D([0], [0], color='tab:blue', lw=10, label='Train'),
plt.Line2D([0], [0], color='tab:orange', lw=10, label='Val'),
plt.Line2D([0], [0], color='tab:green', lw=10, label='Test'),
])
else:
plt.figure(figsize=(15, 6))
plt.grid(True, axis='y', zorder=0)
plt.bar(data.keys(), data.values(), zorder=3)
plt.xticks(rotation=45, ha='right')
plt.gca().yaxis.set_major_locator(plt.MaxNLocator(integer=True))
for i, v in enumerate(data.values()):
plt.text(i, v, str(v), ha='center', va='bottom')
y_max = max(data.values())
plt.ylim(0, 1.1 * y_max)
plt.tight_layout()
plt.savefig(img_name + '.png')
plt.savefig(img_name + '.pdf')
def plot_genre():
df = pd.read_csv('app_genre.csv')
with open('../data/coco_merged/annotations/semantics.json', 'r') as f:
dataset = json.load(f)
app_img_map = {}
for img in dataset['images']:
img_id = img['id']
app_id, _ = parse_img_id(img['id'])
if app_id not in app_img_map:
app_img_map[app_id] = []
app_img_map[app_id].append(img_id)
gnr_app_map = defaultdict(list)
for i in range(len(df)):
app_id = df['id'][i]
tags = df['genre'][i].split(';')
for tag in tags:
gnr_app_map[tag].append(int(app_id))
gnr_app_count = {cat: len(apps) for cat, apps in gnr_app_map.items()}
gnr_img_count = {cat: sum([len(app_img_map[app]) for app in apps]) for cat, apps in gnr_app_map.items()}
gnr_anno_count = {cat: sum([len([anno for anno in dataset['annotations'] if anno['image_id'] in app_img_map[app]]) for app in apps]) for cat, apps in gnr_app_map.items()}
split_genre_order = {genre: i for i, genre in enumerate(SPLIT_GENRE['TRAIN'] + SPLIT_GENRE['VAL'] + SPLIT_GENRE['TEST'])}
gnr_app_count = {cat: gnr_app_count[cat] for cat in sorted(gnr_app_count, key=lambda x: split_genre_order.get(x, float('inf')))}
gnr_img_count = {cat: gnr_img_count[cat] for cat in sorted(gnr_img_count, key=lambda x: split_genre_order.get(x, float('inf')))}
gnr_anno_count = {cat: gnr_anno_count[cat] for cat in sorted(gnr_anno_count, key=lambda x: split_genre_order.get(x, float('inf')))}
plot(gnr_app_count, 'genre_app_count', is_genre=True)
plot(gnr_img_count, 'genre_img_count', is_genre=True)
plot(gnr_anno_count, 'genre_anno_count', is_genre=True)
def plot_cat():
df = pd.read_csv('app_tag.csv')
with open('../data/coco_merged/annotations/semantics.json', 'r') as f:
dataset = json.load(f)
app_img_map = {}
for img in dataset['images']:
img_id = img['id']
app_id, _ = parse_img_id(img['id'])
if app_id not in app_img_map:
app_img_map[app_id] = []
app_img_map[app_id].append(img_id)
cat_app_map = defaultdict(list)
for i in range(len(df)):
app_id = df['id'][i]
tags = df['tag'][i].split(';')
for tag in tags:
cat_app_map[tag].append(int(app_id))
cat_app_map.pop('VR')
cat_app_count = {cat: len(apps) for cat, apps in cat_app_map.items()}
cat_img_count = {cat: sum([len(app_img_map[app]) for app in apps]) for cat, apps in cat_app_map.items()}
cat_anno_count = {cat: sum([len([anno for anno in dataset['annotations'] if anno['image_id'] in app_img_map[app]]) for app in apps]) for cat, apps in cat_app_map.items()}
cat_app_count = {cat: count for cat, count in list(cat_app_count.items())[:30]}
cat_img_count = {cat: count for cat, count in list(cat_img_count.items())[:30]}
cat_anno_count = {cat: count for cat, count in list(cat_anno_count.items())[:30]}
cat_app_count = {cat: count for cat, count in sorted(cat_app_count.items(), key=lambda item: item[1], reverse=True)}
cat_img_count = {cat: count for cat, count in sorted(cat_img_count.items(), key=lambda item: item[1], reverse=True)}
cat_anno_count = {cat: count for cat, count in sorted(cat_anno_count.items(), key=lambda item: item[1], reverse=True)}
plot(cat_app_count, 'tag_app_count')
plot(cat_img_count, 'tag_img_count')
plot(cat_anno_count, 'tag_anno_count')
def plot_cat_anno():
with open('../data/coco_merged/annotations/semantics.json', 'r') as f:
dataset = json.load(f)
cat_catname_map = {}
for cat in dataset['categories']:
cat_catname_map[cat['id']] = cat['name']
cat_anno_map = defaultdict(list)
for anno in dataset['annotations']:
cat_anno_map[cat_catname_map[anno['category_id']]].append(anno)
print(len(cat_anno_map['button']))
cat_anno_map.pop('button')
cat_anno_count = {cat: len(annos) for cat, annos in cat_anno_map.items()}
cat_anno_count = {cat: count for cat, count in sorted(cat_anno_count.items(), key=lambda item: item[1], reverse=True)}
cat_anno_count = {cat: count for cat, count in list(cat_anno_count.items())[:30]}
plot(cat_anno_count, 'ige_cat_anno_count')
plot_genre()
plot_cat()
plot_cat_anno()