
Вступление
Книги — это моя любовь. В детстве меня порой нельзя было оторвать от интересной истории. А когда кто-то дарит мне книгу или я выбираю её в подарок — это отдельная радость. И когда я наткнулась на датасет на Kaggle со списком 1000 самых популярных книг для обмена, мне стало интересно исследовать данные из него и выявить основные черты самых читаемых произведений.
Для анализа были выбраны следующие темы: 1. Самые популярные книги по рейтингу. 2. Какие слова-теги при описании книг встречаются чаще всего? 3. Связь между количеством страниц и рейтингом по возрастным группам. 4. Самые популярные авторы. 5. Соответствие статуса бестселлера и наличия экранизации.
Для визуализации данных я использовала столбчатую диаграмму, облако слов, график рассеивания, круговую диаграмму и тепловую карту.



В качестве шрифта я выбрала Educational Gothic, так как он одновременно и достаточно читабельный, и напоминающий заголовки книг. Цветовая палитра была составлена при помощи Adobe Color по фото, приведённом выше. Она отсылает к книжным переплётом и уютной атмосфере среди книжных полок.
Столбчатые диаграммы
На этой диаграмме представлены 20 книг с самым высоким рейтингом. Показатели отличаются незначительно и график получился плавным и напоминающим книги, стоящие на полке. Лидирующую позицию занимает «Маленький принц». Интересно, что в этом списке книги про Гарри Поттера встречаются целых три раза, однако большая часть произведений всё же ориентирована на более взрослую аудиторию.
top_20 = df.sort_values (by='rating_average', ascending=False).head (20)
plt.figure (figsize=(12, 8), facecolor='#FBEDE2')
diagram = sns.barplot (x='Название_ру', y='rating_average', data=top_20, palette=my_colors, hue='title', legend=False)
diagram.set_facecolor ('#FBEDE2')
font_path = '/content/EDUCATIONALGOTHIC-REGULAR.OTF' custom_font = fm.FontProperties (fname=font_path) title_font = fm.FontProperties (fname=font_path, size=20)
plt.tight_layout () plt.show (
Однако, если смотреть на место книги в рейтинге, то перед нами складывается немного другая ситуация. Вместо «Маленького принца» лидирующую позицию занимает «Гарри Поттер и философский камень». Некоторые книги при этом остаются в топ-20 в обоих графиках, как, например, «1984» или «Джейн Эйр» (хотя они меняют свои позиции). Некоторые отображаются только в одном из двух случаев, из чего можно сделать вывод, что не всегда самые высокие по рейтингу книги могут быть настолько же популярны.
plt.figure (figsize=(12, 8), facecolor='#FBEDE2')
top = df.sort_values (by='id', ascending=True).head (20) diagram = sns.barplot (x='Название_ру', y='id', data = top, palette=my_colors, hue='title', legend=False)
diagram.set_facecolor ('#FBEDE2')
plt.xticks (rotation=45, ha='right', fontsize=10)
font_path = '/content/EDUCATIONALGOTHIC-REGULAR.OTF' custom_font = fm.FontProperties (fname=font_path) title_font = fm.FontProperties (fname=font_path, size=20)
Облако слов
Чтобы конкретнее узнать, о чём самые популярные для обмена книги, я воспользовалась облаком слов и выявила самые частые слова, которые встречаются в тегах к произведениям. Оказалось, что больше всего для обмена предпочитают классические книги, связанные с романами, историей и волшебством. При этом приключения не так сильно популярны. Из 990 книг, только у 37 есть этот тэг.
words = list (df['tags'].str.split (', ')) words = [word for sublist in words for word in sublist] amount = {} for x in words: if x in amount: amount[x] += 1 else: amount[x] = 1 sorted (list (amount.items ()), key = lambda x: -x[1])[: 20] frequencies = dict (amount)
from wordcloud import WordCloud wordcloud = WordCloud (width=900, height=450, background_color='#FBEDE2', color_func=my_color_func, font_path=font).generate_from_frequencies (frequencies)
plt.figure (figsize=(15, 10)) plt.imshow (wordcloud, interpolation='bilinear') plt.axis («off») plt.show ()
График рассеивания
Мне стало также интересно, зависит ли количество страниц в книгах от возрастной категории, для которой они предназначены. Исходя из графика видно, что большая часть произведений сосредоточена в районе от 200 до 600 страниц. При этом действительно есть некоторая зависимость страниц от возраста. Все, содержащие более 800 страниц относятся к взрослой категории. Детские книги в основном доходят до 400 страниц, хотя и есть единицы, доходящие практически до 800. Книги для молодёжи по количеству страниц занимают среднюю позицию.
import seaborn as sns
translation2 = { «Adult»: «Взрослые», «Children»: «Дети», «Young Adult»: «Молодёжь и подростки"}
df['категория'] = df['age_category'].map (translation2)
df.groupby ('категория')['pageCount'].mean ()
plt.figure (figsize=(12, 6), facecolor='#FBEDE2')
sns.scatterplot (data=df, x='pageCount', y='rating_average', hue='категория', palette=my_colors, alpha=0.6)
Круговая диаграмма
Среди самых популярных авторов, книгами которых люди обмениваются оказались Стивен Кинг, Терри Пратчетт, и Дж. К. Роулинг. Этих писателей объединяет век, в котором они творили (19 век), а также они — выходцы из англоязычных стран.
author_counts = df['автор'].value_counts ()
top_authors = author_counts.head (10)
others_count = author_counts.iloc[10:].sum () if others_count > 0: top_authors['Другие авторы'] = others_count
plt.figure (figsize=(12, 10), facecolor='#FBEDE2')
plt.pie (top_authors, labels=top_authors.index, autopct='%1.1f%%', startangle=140, colors=my_colors)
plt.title ('Самые популярные авторы', color='#401801', fontproperties=title_font, fontsize=15, pad=20)
plt.axis ('equal')
plt.show ()
Тепловая карта
И последний вопрос, который я хотела выяснить: насколько часто книги из датасета, имеющие статус бестселлера имеют также и экранизацию. Почти все книги, кроме 4 имели статус бестселлера, однако экранизирована было только примерно две трети от общего количества. Несмотря на это, большинство книг из списка имеют снятые по ним фильмы. Это увеличивает популярность произведения и наслышанность о нём в обществе.
df['бестселлер'] = df['bestseller_status'].replace (translation4) df['фильм'] = df['adapted_to_movie'].replace (translation4)
ct = pd.crosstab (df['бестселлер'], df['фильм'])
plt.figure (figsize=(12, 10), facecolor='#FBEDE2')
sns.heatmap (ct, annot=True, fmt='d', cmap=my_cmap)
plt.show ()
Заключение
Таким образом, в результате анализа было выяснено, что самой популярной книгой на основе датасета является «Гарри Поттер и философский камень», а самый популярный автор — Стивен Кинг. Чаще всего люди обмениваются классическими книгами, содержащими в себе большое количество тем, в том числе и «вечных». Почти все книги, вошедшие в датасет — бестселлеры, но не все имеют экранизацию. А также я ещё раз нашла подтверждение тому, что при выборе книги для какой-то конкретной возрастной категории, нужно учитывать её объём.
Инструменты: Google Colab — создание кода и графиков Leonardo.ai — генерация картинки для обложки Upscayl — улучшение качества изображений Chat gpt — помощь в коде