<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://digida.mgpu.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D1%87%D0%B8%D1%82%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D1%85_%D0%BF%D1%80%D0%B5%D0%B4%D0%BF%D0%BE%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B0%D0%BC</id>
	<title>Анализ читательских предпочтений по странам - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://digida.mgpu.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D1%87%D0%B8%D1%82%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D1%85_%D0%BF%D1%80%D0%B5%D0%B4%D0%BF%D0%BE%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B0%D0%BC"/>
	<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D1%87%D0%B8%D1%82%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D1%85_%D0%BF%D1%80%D0%B5%D0%B4%D0%BF%D0%BE%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B0%D0%BC&amp;action=history"/>
	<updated>2026-04-20T18:27:10Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D1%87%D0%B8%D1%82%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D1%85_%D0%BF%D1%80%D0%B5%D0%B4%D0%BF%D0%BE%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B0%D0%BC&amp;diff=39330&amp;oldid=prev</id>
		<title>Петрова Ульяна в 12:43, 19 декабря 2025</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D1%87%D0%B8%D1%82%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D1%85_%D0%BF%D1%80%D0%B5%D0%B4%D0%BF%D0%BE%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B0%D0%BC&amp;diff=39330&amp;oldid=prev"/>
		<updated>2025-12-19T12:43:43Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 15:43, 19 декабря 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l77&quot;&gt;Строка 77:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 77:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Пример вывода====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Пример вывода====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;============================================================&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;АНАЛИЗ ЧИТАТЕЛЬСКИХ ПРЕДПОЧТЕНИЙ ПО СТРАНАМ&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;АНАЛИЗ ЧИТАТЕЛЬСКИХ ПРЕДПОЧТЕНИЙ ПО СТРАНАМ&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;============================================================&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;📊 ОБЩАЯ СТАТИСТИКА:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;📊 ОБЩАЯ СТАТИСТИКА:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Петрова Ульяна</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D1%87%D0%B8%D1%82%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D1%85_%D0%BF%D1%80%D0%B5%D0%B4%D0%BF%D0%BE%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B0%D0%BC&amp;diff=39329&amp;oldid=prev</id>
		<title>Петрова Ульяна: Новая страница: «==Анализатор читательских предпочтений по странам== &#039;&#039;&#039;Анализатор читательских предпочтений по странам&#039;&#039;&#039; — это программный инструмент на языке Python, предназначенный для статистического анализа отзывов на книги с учётом географического распределения ч...»</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7_%D1%87%D0%B8%D1%82%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D1%85_%D0%BF%D1%80%D0%B5%D0%B4%D0%BF%D0%BE%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B0%D0%BC&amp;diff=39329&amp;oldid=prev"/>
		<updated>2025-12-19T12:43:18Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «==Анализатор читательских предпочтений по странам== &amp;#039;&amp;#039;&amp;#039;Анализатор читательских предпочтений по странам&amp;#039;&amp;#039;&amp;#039; — это программный инструмент на языке Python, предназначенный для статистического анализа отзывов на книги с учётом географического распределения ч...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Анализатор читательских предпочтений по странам==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Анализатор читательских предпочтений по странам&amp;#039;&amp;#039;&amp;#039; — это программный инструмент на языке Python, предназначенный для статистического анализа отзывов на книги с учётом географического распределения читателей и происхождения литературных произведений. Программа выявляет закономерности в читательских предпочтениях, жанровых пристрастиях и оценках книг в зависимости от страны читателя и страны происхождения книги.&lt;br /&gt;
&lt;br /&gt;
===Обзор===&lt;br /&gt;
Анализатор читательских предпочтений представляет собой скрипт на Python, который обрабатывает JSON-файл с отзывами на книги и предоставляет многоуровневую аналитику по географическому распределению читательских предпочтений. Программа использует встроенные библиотеки Python (json, collections) для обработки данных и не требует установки дополнительных зависимостей.&lt;br /&gt;
===Требования к данным===&lt;br /&gt;
====Формат входного файла====&lt;br /&gt;
Программа ожидает файл books_reviews.json со следующей структурой:&lt;br /&gt;
&lt;br /&gt;
json&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;rating&amp;quot;: 4.5,&lt;br /&gt;
      &amp;quot;genres&amp;quot;: [&amp;quot;Фэнтези&amp;quot;, &amp;quot;Приключения&amp;quot;],&lt;br /&gt;
      &amp;quot;country&amp;quot;: &amp;quot;США&amp;quot;,&lt;br /&gt;
      &amp;quot;reviewer&amp;quot;: {&lt;br /&gt;
        &amp;quot;country&amp;quot;: &amp;quot;Россия&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
    ...&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
===Поля данных:===&lt;br /&gt;
*	rating (float): оценка книги (обычно от 1.0 до 5.0)&lt;br /&gt;
*	genres (list): список жанров книги&lt;br /&gt;
*	country (string): страна происхождения книги&lt;br /&gt;
*	reviewer.country (string): страна читателя, оставившего отзыв&lt;br /&gt;
&lt;br /&gt;
===Функциональные возможности===&lt;br /&gt;
1. Общая статистика&lt;br /&gt;
*	Общее количество отзывов&lt;br /&gt;
*	Количество уникальных стран читателей&lt;br /&gt;
*	Количество уникальных стран книг&lt;br /&gt;
*	Количество уникальных жанров&lt;br /&gt;
2. Анализ оценок&lt;br /&gt;
*	Средние оценки по странам читателей (сортировка по количеству отзывов)&lt;br /&gt;
*	Средние оценки книг по странам происхождения (топ-10)&lt;br /&gt;
*	Средние оценки по жанрам (для жанров с ≥5 оценками)&lt;br /&gt;
3. Жанровые предпочтения&lt;br /&gt;
*	Любимые жанры по странам читателей (топ-3 для 8 самых активных стран)&lt;br /&gt;
*	Самые популярные жанры в целом (топ-10)&lt;br /&gt;
*	Корреляция жанров и оценок&lt;br /&gt;
4. Географический анализ&lt;br /&gt;
*	Предпочтения по странам происхождения книг для каждой страны читателей&lt;br /&gt;
*	Соотношение отечественных и зарубежных книг по странам&lt;br /&gt;
*	Страны-лидеры по количеству упоминаемых книг (топ-5)&lt;br /&gt;
*	Самые продуктивные страны-авторы&lt;br /&gt;
===Структура кода===&lt;br /&gt;
====Основная функция: ====&lt;br /&gt;
analyze_book_reviews(file_path)&lt;br /&gt;
Принимает путь к JSON-файлу и выполняет полный анализ данных.&lt;br /&gt;
====Вспомогательные структуры данных:====&lt;br /&gt;
*	ratings_by_country: средние оценки по странам читателей&lt;br /&gt;
*	genres_by_country: счётчики жанров по странам&lt;br /&gt;
*	book_country_by_reader_country: распределение стран книг по странам читателей&lt;br /&gt;
*	ratings_by_book_country: оценки по странам происхождения книг&lt;br /&gt;
*	domestic_vs_foreign: соотношение отечественных/зарубежных книг&lt;br /&gt;
====Алгоритмическая сложность:====&lt;br /&gt;
*	Временная сложность: O(n), где n — количество отзывов&lt;br /&gt;
*	Пространственная сложность: O(k), где k — количество уникальных стран и жанров&lt;br /&gt;
===Использование===&lt;br /&gt;
====Базовое использование:====&lt;br /&gt;
python&lt;br /&gt;
python analyzer.py&lt;br /&gt;
====Интеграция в другие проекты:====&lt;br /&gt;
python&lt;br /&gt;
from analyzer import analyze_book_reviews&lt;br /&gt;
&lt;br /&gt;
====Анализ собственного файла====&lt;br /&gt;
analyze_book_reviews(&amp;quot;path/to/your/reviews.json&amp;quot;)&lt;br /&gt;
====Обработка ошибок:====&lt;br /&gt;
=====Программа включает обработку:=====&lt;br /&gt;
*	Отсутствия файла (FileNotFoundError)&lt;br /&gt;
*	Общих ошибок выполнения (Exception)&lt;br /&gt;
====Пример вывода====&lt;br /&gt;
&lt;br /&gt;
============================================================&lt;br /&gt;
АНАЛИЗ ЧИТАТЕЛЬСКИХ ПРЕДПОЧТЕНИЙ ПО СТРАНАМ&lt;br /&gt;
============================================================&lt;br /&gt;
&lt;br /&gt;
📊 ОБЩАЯ СТАТИСТИКА:&lt;br /&gt;
Всего отзывов: 150&lt;br /&gt;
Уникальных стран читателей: 12&lt;br /&gt;
Уникальных стран книг: 8&lt;br /&gt;
Всего уникальных жанров: 25&lt;br /&gt;
&lt;br /&gt;
⭐ СРЕДНИЕ ОЦЕНКИ ПО СТРАНАМ ЧИТАТЕЛЕЙ:&lt;br /&gt;
Россия: 4.2 (45 отзывов)&lt;br /&gt;
США: 4.0 (32 отзыва)&lt;br /&gt;
Германия: 4.3 (28 отзывов)&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
📚 ЛЮБИМЫЕ ЖАНРЫ ПО СТРАНАМ ЧИТАТЕЛЕЙ:&lt;br /&gt;
Россия: Фэнтези (15), Детектив (12), Научная фантастика (8)&lt;br /&gt;
США: Роман (20), Биография (10), Драма (7)&lt;br /&gt;
...&lt;br /&gt;
Аналитические возможности&lt;br /&gt;
Выявление культурных предпочтений&lt;br /&gt;
Программа позволяет обнаруживать:&lt;br /&gt;
•	Предпочтение отечественной литературы в разных странах&lt;br /&gt;
•	Популярность жанров в зависимости от региона&lt;br /&gt;
•	Различия в строгости оценок между странами&lt;br /&gt;
Маркетинговые применения&lt;br /&gt;
•	Определение целевых рынков для перевода книг&lt;br /&gt;
•	Выявление жанров, популярных в конкретных регионах&lt;br /&gt;
•	Понимание восприятия иностранной литературы&lt;br /&gt;
Исследовательский потенциал&lt;br /&gt;
•	Анализ культурного импорта/экспорта литературы&lt;br /&gt;
•	Изучение влияния страны происхождения на оценки&lt;br /&gt;
•	Выявление универсальных vs локальных жанровых предпочтений&lt;br /&gt;
Ограничения&lt;br /&gt;
1.	Требования к данным: необходимо минимум 3 отзыва для анализа по стране&lt;br /&gt;
2.	Жанровый анализ: жанры анализируются только при наличии ≥5 оценок&lt;br /&gt;
3.	Формат данных: строгая зависимость от структуры JSON-файла&lt;br /&gt;
4.	Визуализация: отсутствие графического представления данных&lt;br /&gt;
5.	Экспорт: результаты только выводятся в консоль&lt;br /&gt;
Возможные расширения&lt;br /&gt;
Функциональные улучшения:&lt;br /&gt;
1.	Экспорт результатов в CSV/Excel форматы&lt;br /&gt;
2.	Визуализация данных с помощью matplotlib/plotly&lt;br /&gt;
3.	Веб-интерфейс для интерактивного анализа&lt;br /&gt;
4.	API-доступ к аналитическим функциям&lt;br /&gt;
5.	Расширенная фильтрация по временным периодам&lt;br /&gt;
Аналитические расширения:&lt;br /&gt;
1.	Анализ тональности текстов отзывов&lt;br /&gt;
2.	Корреляционный анализ между жанрами и географией&lt;br /&gt;
3.	Прогнозирование популярности книг в новых регионах&lt;br /&gt;
4.	Кластеризация стран по читательским предпочтениям&lt;br /&gt;
5.	Анализ временных трендов в предпочтениях&lt;br /&gt;
Технические улучшения:&lt;br /&gt;
1.	Кэширование результатов для больших наборов данных&lt;br /&gt;
2.	Инкрементальный анализ при добавлении новых отзывов&lt;br /&gt;
3.	Поддержка нескольких форматов данных (CSV, XML, SQL)&lt;br /&gt;
4.	Многопоточная обработка для больших объёмов данных&lt;br /&gt;
5.	Интеграция с базами данных (SQL, NoSQL)&lt;br /&gt;
Заключение&lt;br /&gt;
Анализатор читательских предпочтений по странам представляет собой эффективный инструмент для первичного анализа географического распределения литературных предпочтений. Благодаря простоте использования и отсутствию внешних зависимостей, программа может быть легко интегрирована в исследовательские проекты или использоваться для предварительного анализа данных в издательском бизнесе.&lt;br /&gt;
 &lt;br /&gt;
Примечание: Для работы программы требуется файл books_reviews.json в рабочей директории с корректной структурой данных.&lt;br /&gt;
&lt;br /&gt;
===Код программы на языке Python===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import json&lt;br /&gt;
from collections import Counter, defaultdict&lt;br /&gt;
&lt;br /&gt;
def analyze_book_reviews(file_path):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Анализ отзывов на книги&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Загружаем данные&lt;br /&gt;
    with open(file_path, &amp;#039;r&amp;#039;, encoding=&amp;#039;utf-8&amp;#039;) as f:&lt;br /&gt;
        data = json.load(f)&lt;br /&gt;
    &lt;br /&gt;
    reviews = data[&amp;#039;reviews&amp;#039;]&lt;br /&gt;
    &lt;br /&gt;
    print(&amp;quot;=&amp;quot; * 60)&lt;br /&gt;
    print(&amp;quot;АНАЛИЗ ЧИТАТЕЛЬСКИХ ПРЕДПОЧТЕНИЙ ПО СТРАНАМ&amp;quot;)&lt;br /&gt;
    print(&amp;quot;=&amp;quot; * 60)&lt;br /&gt;
    &lt;br /&gt;
    # 1. Общая статистика&lt;br /&gt;
    print(f&amp;quot;\n📊 ОБЩАЯ СТАТИСТИКА:&amp;quot;)&lt;br /&gt;
    print(f&amp;quot;Всего отзывов: {len(reviews)}&amp;quot;)&lt;br /&gt;
    print(f&amp;quot;Уникальных стран читателей: {len(set(r[&amp;#039;reviewer&amp;#039;][&amp;#039;country&amp;#039;] for r in reviews))}&amp;quot;)&lt;br /&gt;
    print(f&amp;quot;Уникальных стран книг: {len(set(r[&amp;#039;country&amp;#039;] for r in reviews))}&amp;quot;)&lt;br /&gt;
    print(f&amp;quot;Всего уникальных жанров: {len(set(g for r in reviews for g in r[&amp;#039;genres&amp;#039;]))}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 2. Средние оценки по странам читателей&lt;br /&gt;
    print(f&amp;quot;\n⭐ СРЕДНИЕ ОЦЕНКИ ПО СТРАНАМ ЧИТАТЕЛЕЙ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    ratings_by_country = defaultdict(list)&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        country = review[&amp;#039;reviewer&amp;#039;][&amp;#039;country&amp;#039;]&lt;br /&gt;
        rating = review[&amp;#039;rating&amp;#039;]&lt;br /&gt;
        ratings_by_country[country].append(rating)&lt;br /&gt;
    &lt;br /&gt;
    # Сортируем по количеству отзывов&lt;br /&gt;
    for country, ratings in sorted(ratings_by_country.items(), key=lambda x: len(x[1]), reverse=True):&lt;br /&gt;
        avg_rating = sum(ratings) / len(ratings)&lt;br /&gt;
        print(f&amp;quot;{country}: {avg_rating:.1f} ({len(ratings)} отзывов)&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 3. Любимые жанры по странам читателей&lt;br /&gt;
    print(f&amp;quot;\n📚 ЛЮБИМЫЕ ЖАНРЫ ПО СТРАНАМ ЧИТАТЕЛЕЙ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    genres_by_country = defaultdict(Counter)&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        country = review[&amp;#039;reviewer&amp;#039;][&amp;#039;country&amp;#039;]&lt;br /&gt;
        genres_by_country[country].update(review[&amp;#039;genres&amp;#039;])&lt;br /&gt;
    &lt;br /&gt;
    # Выводим топ стран по количеству отзывов&lt;br /&gt;
    top_countries = sorted(ratings_by_country.items(), key=lambda x: len(x[1]), reverse=True)[:8]&lt;br /&gt;
    &lt;br /&gt;
    for country, _ in top_countries:&lt;br /&gt;
        if country in genres_by_country and genres_by_country[country]:&lt;br /&gt;
            top_genres = genres_by_country[country].most_common(3)&lt;br /&gt;
            genres_str = &amp;quot;, &amp;quot;.join([f&amp;quot;{g} ({c})&amp;quot; for g, c in top_genres])&lt;br /&gt;
            print(f&amp;quot;{country}: {genres_str}&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 4. Предпочтения по странам происхождения книг&lt;br /&gt;
    print(f&amp;quot;\n🌍 ПРЕДПОЧТЕНИЯ ПО СТРАНАМ ПРОИСХОЖДЕНИЯ КНИГ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # По странам читателей&lt;br /&gt;
    book_country_by_reader_country = defaultdict(lambda: defaultdict(int))&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        reader_country = review[&amp;#039;reviewer&amp;#039;][&amp;#039;country&amp;#039;]&lt;br /&gt;
        book_country = review[&amp;#039;country&amp;#039;]&lt;br /&gt;
        book_country_by_reader_country[reader_country][book_country] += 1&lt;br /&gt;
    &lt;br /&gt;
    # Только для стран с достаточным количеством отзывов&lt;br /&gt;
    for reader_country, book_countries in sorted(book_country_by_reader_country.items()):&lt;br /&gt;
        total = sum(book_countries.values())&lt;br /&gt;
        if total &amp;gt;= 3:  # Минимум 3 отзыва для анализа&lt;br /&gt;
            print(f&amp;quot;\n{reader_country} читает книги из:&amp;quot;)&lt;br /&gt;
            for book_country, count in sorted(book_countries.items(), key=lambda x: x[1], reverse=True)[:5]:&lt;br /&gt;
                percentage = (count / total) * 100&lt;br /&gt;
                print(f&amp;quot;  {book_country}: {count} книг ({percentage:.0f}%)&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 5. Средние оценки книг по странам происхождения&lt;br /&gt;
    print(f&amp;quot;\n🏆 СРЕДНИЕ ОЦЕНКИ КНИГ ПО СТРАНАМ ПРОИСХОЖДЕНИЯ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    ratings_by_book_country = defaultdict(list)&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        book_country = review[&amp;#039;country&amp;#039;]&lt;br /&gt;
        rating = review[&amp;#039;rating&amp;#039;]&lt;br /&gt;
        ratings_by_book_country[book_country].append(rating)&lt;br /&gt;
    &lt;br /&gt;
    # Сортируем по количеству книг&lt;br /&gt;
    for country, ratings in sorted(ratings_by_book_country.items(), &lt;br /&gt;
                                   key=lambda x: len(x[1]), &lt;br /&gt;
                                   reverse=True)[:10]:  # Топ-10 стран&lt;br /&gt;
        avg_rating = sum(ratings) / len(ratings)&lt;br /&gt;
        print(f&amp;quot;{country}: {avg_rating:.1f} ({len(ratings)} книг)&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 6. Анализ предпочтений: отечественные vs зарубежные книги&lt;br /&gt;
    print(f&amp;quot;\n📖 ОТЕЧЕСТВЕННЫЕ VS ЗАРУБЕЖНЫЕ КНИГИ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    domestic_vs_foreign = defaultdict(lambda: {&amp;#039;domestic&amp;#039;: 0, &amp;#039;foreign&amp;#039;: 0})&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        reader_country = review[&amp;#039;reviewer&amp;#039;][&amp;#039;country&amp;#039;]&lt;br /&gt;
        book_country = review[&amp;#039;country&amp;#039;]&lt;br /&gt;
        &lt;br /&gt;
        if reader_country == book_country:&lt;br /&gt;
            domestic_vs_foreign[reader_country][&amp;#039;domestic&amp;#039;] += 1&lt;br /&gt;
        else:&lt;br /&gt;
            domestic_vs_foreign[reader_country][&amp;#039;foreign&amp;#039;] += 1&lt;br /&gt;
    &lt;br /&gt;
    for country, counts in sorted(domestic_vs_foreign.items()):&lt;br /&gt;
        total = counts[&amp;#039;domestic&amp;#039;] + counts[&amp;#039;foreign&amp;#039;]&lt;br /&gt;
        if total &amp;gt;= 3:  # Только для стран с достаточными данными&lt;br /&gt;
            domestic_pct = (counts[&amp;#039;domestic&amp;#039;] / total) * 100 if total &amp;gt; 0 else 0&lt;br /&gt;
            foreign_pct = (counts[&amp;#039;foreign&amp;#039;] / total) * 100 if total &amp;gt; 0 else 0&lt;br /&gt;
            print(f&amp;quot;{country}: {counts[&amp;#039;domestic&amp;#039;]} отечественных ({domestic_pct:.0f}%), &amp;quot;&lt;br /&gt;
                  f&amp;quot;{counts[&amp;#039;foreign&amp;#039;]} зарубежных ({foreign_pct:.0f}%)&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 7. Самые популярные жанры в целом&lt;br /&gt;
    print(f&amp;quot;\n🔥 САМЫЕ ПОПУЛЯРНЫЕ ЖАНРЫ В ЦЕЛОМ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    all_genres = []&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        all_genres.extend(review[&amp;#039;genres&amp;#039;])&lt;br /&gt;
    &lt;br /&gt;
    genre_counter = Counter(all_genres)&lt;br /&gt;
    total_genre_mentions = sum(genre_counter.values())&lt;br /&gt;
    &lt;br /&gt;
    print(&amp;quot;Топ-10 жанров:&amp;quot;)&lt;br /&gt;
    for genre, count in genre_counter.most_common(10):&lt;br /&gt;
        percentage = (count / total_genre_mentions) * 100&lt;br /&gt;
        print(f&amp;quot;  {genre}: {count} упоминаний ({percentage:.1f}%)&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 8. Корреляция жанров и оценок&lt;br /&gt;
    print(f&amp;quot;\n📈 СРЕДНИЕ ОЦЕНКИ ПО ЖАНРАМ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    ratings_by_genre = defaultdict(list)&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        rating = review[&amp;#039;rating&amp;#039;]&lt;br /&gt;
        for genre in review[&amp;#039;genres&amp;#039;]:&lt;br /&gt;
            ratings_by_genre[genre].append(rating)&lt;br /&gt;
    &lt;br /&gt;
    # Только жанры с минимум 5 оценками&lt;br /&gt;
    filtered_genres = {g: r for g, r in ratings_by_genre.items() if len(r) &amp;gt;= 5}&lt;br /&gt;
    &lt;br /&gt;
    if filtered_genres:&lt;br /&gt;
        for genre, ratings in sorted(filtered_genres.items(), &lt;br /&gt;
                                     key=lambda x: sum(x[1])/len(x[1]), &lt;br /&gt;
                                     reverse=True)[:10]:&lt;br /&gt;
            avg_rating = sum(ratings) / len(ratings)&lt;br /&gt;
            print(f&amp;quot;{genre}: {avg_rating:.1f} ({len(ratings)} оценок)&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Недостаточно данных для анализа по жанрам&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 9. Страны-лидеры по количеству книг&lt;br /&gt;
    print(f&amp;quot;\n🌎 СТРАНЫ-ЛИДЕРЫ ПО КОЛИЧЕСТВУ КНИГ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    book_count_by_country = Counter(review[&amp;#039;country&amp;#039;] for review in reviews)&lt;br /&gt;
    &lt;br /&gt;
    for country, count in book_count_by_country.most_common(5):&lt;br /&gt;
        percentage = (count / len(reviews)) * 100&lt;br /&gt;
        print(f&amp;quot;{country}: {count} книг ({percentage:.1f}% от всех)&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # 10. Визуализация наиболее продуктивных стран-авторов&lt;br /&gt;
    print(f&amp;quot;\n✍️ САМЫЕ ПРОДУКТИВНЫЕ СТРАНЫ-АВТОРЫ:&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # Считаем сколько книг из каждой страны&lt;br /&gt;
    country_productivity = Counter()&lt;br /&gt;
    for review in reviews:&lt;br /&gt;
        country_productivity[review[&amp;#039;country&amp;#039;]] += 1&lt;br /&gt;
    &lt;br /&gt;
    print(&amp;quot;Топ-5 стран по количеству упоминаемых книг:&amp;quot;)&lt;br /&gt;
    for country, count in country_productivity.most_common(5):&lt;br /&gt;
        print(f&amp;quot;  {country}: {count} книг&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Основная функция&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    file_path = &amp;quot;books_reviews.json&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    try:&lt;br /&gt;
        analyze_book_reviews(file_path)&lt;br /&gt;
    except FileNotFoundError:&lt;br /&gt;
        print(f&amp;quot;❌ Файл {file_path} не найден!&amp;quot;)&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(f&amp;quot;❌ Неожиданная ошибка при анализе: {e}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Петрова Ульяна</name></author>
	</entry>
</feed>