
Введение
Аниме и японская культура с каждым годом все больше интегрируется в поп культуру по всей планете, влияя уже на местные тенденции творчества, медиа и авторов, особенно среди числа молодежи. Поэтому мне стало интересно узнать проанализировать взаимосвязи между разными аниме и их рейтингом, который призван отражать качество продукта.
На сайте kaggle.com мною была найдена и проанализирована база данных о всем аниме и связанном анимированным медиа с 1917 по 2022 год. Так как она включает в себя почти 25 тысяч произведений, то было решено рассмотреть первую сотню высокооцененных произведений, так как они предположительно оказали и оказывают наибольшее влияние на современное медиа и медиа ближайшего будущего.
Для наглядности мною было решено использовать столбчатые и круговые диаграммы, так как они проще всего воспринимаются при большом объеме и взаимосвязи нескольких типов данных.
Этапы работы
В первую очередь в визуализации данных мне было важно достигнуть нескольких вещей:
Это достигалось с помощью кода.
Для понятности очень много времени искал, как настроить все так, чтобы надписи не сливались и выделялись. Также очень помогло настроить сетку.
ax.grid (True, which='both', linestyle='--', linewidth=0.5)
Для сочетания со стителем лонгрида потребовалось поработать с фонами:
ax.set_facecolor ('#f0f0f0') plt.gcf ().set_facecolor ('#B9C9D0')
А для цветового разнообразия в столбчатых диаграммах использовался градиент.
colors = sns.color_palette («viridis», len (studio_counts)) ax.bar (studio_counts.index, studio_counts.values, color=colors)
В круговых диаграммах это оказалось неуместно, так как становилось невозможно различать цвета, они недостаточно отличались или даже повторялись.
Итоговые графики
В первую очередь хотелось проводить связь разных параметров аниме именно с рейтингом, но это оказалось не очень осмысленно для 100 наиболее высокооцененных аниме. Так как различия слишком малы
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import numpy as np
data = pd.read_csv ('top-100.csv')
print (data.head ())
grouped_data = data.groupby ('Genres')['Score'].mean ().reset_index ()
plt.figure (figsize=(12, 8)) ax = sns.barplot (x='Genres', y='Score', data=grouped_data, palette='viridis') ax.set_ylim (1, 10) ax.yaxis.set_major_locator (plt.MultipleLocator (0.5)) ax.yaxis.set_major_formatter ('{x:.1f}')
ax.set_facecolor ('#f0f0f0') plt.gcf ().set_facecolor ('#B9C9D0') ax.grid (True, which='both', linestyle='--', linewidth=0.5)
plt.title ('Соотношение жанров и рейтинга') plt.xlabel ('Жанры') plt.ylabel ('Рейтинг') plt.xticks (rotation=90) plt.tight_layout () plt.show ()
Далее стал анализировать сколько аниме с разными параметрами попадали в топ 100.
Рассматривались типы произведений, первоисточник, количество эпизодов и студия-создатель.
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import numpy as np
data = pd.read_csv ('top-100.csv')
print (data.head ())
type_counts = data['Type'].value_counts ()
plt.figure (figsize=(8, 8)) ax = plt.gca () wedges, texts, autotexts = ax.pie (type_counts, labels=None, autopct='%1.1f%%', startangle=140, colors=plt.cm.Paired.colors, pctdistance=1.1)
ax.set_facecolor ('#f0f0f0') plt.gcf ().set_facecolor ('#B9C9D0')
ax.legend (wedges, type_counts.index, title="Типы», loc="center left», bbox_to_anchor=(1, 0, 0.5, 1))
plt.title ('Разделение по типам') plt.axis ('equal') plt.tight_layout () plt.show ()
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import numpy as np
data = pd.read_csv ('top-100.csv')
print (data.head ())
type_counts = data['Source'].value_counts ()
plt.figure (figsize=(8, 10)) ax = plt.gca () wedges, texts, autotexts = ax.pie (type_counts, labels=None, autopct='%1.1f%%', startangle=140, colors=plt.cm.Paired.colors, pctdistance=1.1)
ax.set_facecolor ('#f0f0f0') plt.gcf ().set_facecolor ('#B9C9D0')
ax.legend (wedges, type_counts.index, title="Типы», loc="center left», bbox_to_anchor=(1, 0, 0.5, 1))
plt.title ('Первоисточники') plt.axis ('equal') plt.tight_layout ()
plt.show ()
Количество произведений по эпизодам может не совсем объективно отражать ситуацию, так как фильмы (1 эпизод), 11-20 эпизодов и 21-50 эпизодов — это в целом самые распространенные форматы.
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import numpy as np
data = pd.read_csv ('top-100.csv')
print (data.head ())
data['Episodes'] = pd.to_numeric (data['Episodes'], errors='coerce')
def categorize_episodes (episodes): if pd.isna (episodes): return 'Unknown' elif episodes == 1: return '1' elif episodes <= 10: return '1-10' elif episodes <= 20: return '11-20' elif episodes <= 50: return '21-50' elif episodes <= 100: return '51-100' else: return '>100'
data['Episode_Category'] = data['Episodes'].apply (categorize_episodes)
episode_counts = data['Episode_Category'].value_counts ().sort_index ()
plt.figure (figsize=(10, 6)) ax = plt.gca ()
colors = colors = sns.color_palette («viridis», len (episode_counts)) ax.bar (episode_counts.index, episode_counts.values, color=colors)
plt.xlabel ('Эпизоды') plt.ylabel ('Количество произведений') plt.title ('Количество произведений по эпизодам') plt.xticks (rotation=90) plt.tight_layout ()
ax.set_facecolor ('#f0f0f0') plt.gcf ().set_facecolor ('#B9C9D0') ax.grid (True, which='both', linestyle='--', linewidth=0.5)
plt.show ()
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import numpy as np
data = pd.read_csv ('top-100.csv')
print (data.head ())
studio_counts = data['Studios'].value_counts ().sort_values (ascending=False)
plt.figure (figsize=(12, 8)) ax = plt.gca ()
colors = sns.color_palette («viridis», len (studio_counts)) ax.bar (studio_counts.index, studio_counts.values, color=colors)
plt.xlabel ('Студия') plt.ylabel ('Количество произведений') plt.title ('Сколько у студий произвидений входит в первую сотню') plt.xticks (rotation=90) plt.tight_layout ()
ax.set_facecolor ('#f0f0f0') plt.gcf ().set_facecolor ('#B9C9D0') ax.grid (True, which='both', linestyle='--', linewidth=0.5)
plt.show ()
Заключение
Итак, мы рассмотрели некоторые данные по 100 наиболее высокооцененным аниме.
Заметили взаимосвязь между рейтингом, первоисточником, типом и студией выпуска. Но не жанром или количеством эпизодов. Впрочем у последнего есть корреляция, однако вероятно это связано лишь с распространенностью форматов.
Наиболее успешными являются и скорее всего будут являться сериалы, основанные на манге и выпущенные студиями с наибольшим опытом, бюджетом и количеством персонала.
Датасет и код