<?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%9A%D0%B0%D0%BA_%D0%BE%D1%86%D0%B5%D0%BD%D0%B8%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B2_%D1%81%D1%82%D1%83%D0%B4%D0%B8%D1%8F%D1%85_Scratch</id>
	<title>Как оценить командность в студиях Scratch - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://digida.mgpu.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9A%D0%B0%D0%BA_%D0%BE%D1%86%D0%B5%D0%BD%D0%B8%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B2_%D1%81%D1%82%D1%83%D0%B4%D0%B8%D1%8F%D1%85_Scratch"/>
	<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BE%D1%86%D0%B5%D0%BD%D0%B8%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B2_%D1%81%D1%82%D1%83%D0%B4%D0%B8%D1%8F%D1%85_Scratch&amp;action=history"/>
	<updated>2026-04-16T15:41:07Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BE%D1%86%D0%B5%D0%BD%D0%B8%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B2_%D1%81%D1%82%D1%83%D0%B4%D0%B8%D1%8F%D1%85_Scratch&amp;diff=45727&amp;oldid=prev</id>
		<title>Patarakin: /* Пример с другими студиями */</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BE%D1%86%D0%B5%D0%BD%D0%B8%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B2_%D1%81%D1%82%D1%83%D0%B4%D0%B8%D1%8F%D1%85_Scratch&amp;diff=45727&amp;oldid=prev"/>
		<updated>2026-04-01T15:08:17Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Пример с другими студиями&lt;/span&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;Версия от 18:08, 1 апреля 2026&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-l834&quot;&gt;Строка 834:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 834:&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;| 35170285 || ja || 0.0027293262514499544 || 0.9969833762483974 || 42.23447069116361 || 37.24247515241811 || 0.15670685633562206 || 0.014915076053746838 || game_studios || 2026-03-30&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;| 35170285 || ja || 0.0027293262514499544 || 0.9969833762483974 || 42.23447069116361 || 37.24247515241811 || 0.15670685633562206 || 0.014915076053746838 || game_studios || 2026-03-30&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;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 colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Файл:Command teams.png]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Patarakin</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BE%D1%86%D0%B5%D0%BD%D0%B8%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B2_%D1%81%D1%82%D1%83%D0%B4%D0%B8%D1%8F%D1%85_Scratch&amp;diff=45725&amp;oldid=prev</id>
		<title>Patarakin в 15:03, 1 апреля 2026</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BE%D1%86%D0%B5%D0%BD%D0%B8%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B2_%D1%81%D1%82%D1%83%D0%B4%D0%B8%D1%8F%D1%85_Scratch&amp;diff=45725&amp;oldid=prev"/>
		<updated>2026-04-01T15:03:35Z</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;Версия от 18:03, 1 апреля 2026&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-l805&quot;&gt;Строка 805:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 805:&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;&amp;lt;/syntaxhighlight&amp;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;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=== Пример с другими студиями ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;syntaxhighlight lang=&quot;R&quot; &amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;studios_to_analyze &amp;lt;- tibble::tibble(&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;  studio_id = c(&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    4945817,  # EN&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    1638,  # DE&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    34521830,   # FR&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    26721600,  # RU&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    35170285  # JA&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;  ),&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;  lang = c(&quot;en&quot;, &quot;de&quot;, &quot;fr&quot;, &quot;ru&quot;, &quot;ja&quot;)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{| class=&quot;wikitable sortable&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;! studio_id !! lang !! share_both !! share_only_projects !! mean_len_studio !! mean_len_project !! remix_share_total !! remix_share_internal !! sample_type !! collected_at&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| 4945817 || en || 0.0011794981771391809 || 0.9986060476088355 || 51.6 || 56.49363988306866 || 0.2641509433962264 || 0.07547169811320754 || game_studios || 2026-03-30&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| 1638 || de || 0.008676470588235294 || 0.85375 || 66.64239271781534 || 41.677028247130146 || 0.142578125 || 0.001953125 || game_studios || 2026-03-30&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| 34521830 || fr || 0.32142857142857145 || 0.5357142857142857 || 174.77450980392157 || 92.61904761904762 || 0.8857142857142857 || 0.8285714285714286 || game_studios || 2026-03-30&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| 26721600 || ru || 0.0017304364545279755 || 0.9971159392424533 || 201.51470588235293 || 71.10152916073969 || 0.2404692082111437 || 0.005865102639296188 || game_studios || 2026-03-30&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| 35170285 || ja || 0.0027293262514499544 || 0.9969833762483974 || 42.23447069116361 || 37.24247515241811 || 0.15670685633562206 || 0.014915076053746838 || game_studios || 2026-03-30&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Patarakin</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BE%D1%86%D0%B5%D0%BD%D0%B8%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B2_%D1%81%D1%82%D1%83%D0%B4%D0%B8%D1%8F%D1%85_Scratch&amp;diff=45647&amp;oldid=prev</id>
		<title>Patarakin в 12:36, 29 марта 2026</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BE%D1%86%D0%B5%D0%BD%D0%B8%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B2_%D1%81%D1%82%D1%83%D0%B4%D0%B8%D1%8F%D1%85_Scratch&amp;diff=45647&amp;oldid=prev"/>
		<updated>2026-03-29T12:36:19Z</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:36, 29 марта 2026&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-l5&quot;&gt;Строка 5:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 5:&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;|Environment=R, Scratch API, Сообщество Scratch&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;|Environment=R, Scratch API, Сообщество Scratch&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;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 colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;==  [[Командность]] ==&lt;/ins&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;&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;[[Файл:Rplot Teamwork.png]]&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;[[Файл:Rplot Teamwork.png]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Patarakin</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BE%D1%86%D0%B5%D0%BD%D0%B8%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B2_%D1%81%D1%82%D1%83%D0%B4%D0%B8%D1%8F%D1%85_Scratch&amp;diff=45646&amp;oldid=prev</id>
		<title>Patarakin в 12:35, 29 марта 2026</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BE%D1%86%D0%B5%D0%BD%D0%B8%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B2_%D1%81%D1%82%D1%83%D0%B4%D0%B8%D1%8F%D1%85_Scratch&amp;diff=45646&amp;oldid=prev"/>
		<updated>2026-03-29T12:35:29Z</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:35, 29 марта 2026&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-l5&quot;&gt;Строка 5:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 5:&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;|Environment=R, Scratch API, Сообщество Scratch&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;|Environment=R, Scratch API, Сообщество Scratch&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;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 colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Файл:Rplot Teamwork.png]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&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: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&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;div&gt;== Базовые функции - Scratch_Api_core.R ==&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;== Базовые функции - Scratch_Api_core.R ==&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;!-- diff cache key digida:diff:1.41:old-45644:rev-45646:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Patarakin</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BE%D1%86%D0%B5%D0%BD%D0%B8%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B2_%D1%81%D1%82%D1%83%D0%B4%D0%B8%D1%8F%D1%85_Scratch&amp;diff=45644&amp;oldid=prev</id>
		<title>Patarakin: Новая страница: «{{Scripting Tutorials |Description=Мы хотим сравнить командность действий в студиях Scratch. Рецепт сделан на примере 5 студий, но может быть расширен и можно провести большое исследование для множества студий |Field_of_knowledge=Информатика, Искусственный интеллект |similar_concepts=Ка...»</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BE%D1%86%D0%B5%D0%BD%D0%B8%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B2_%D1%81%D1%82%D1%83%D0%B4%D0%B8%D1%8F%D1%85_Scratch&amp;diff=45644&amp;oldid=prev"/>
		<updated>2026-03-29T12:20:21Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «{{Scripting Tutorials |Description=Мы хотим сравнить командность действий в студиях Scratch. Рецепт сделан на примере 5 студий, но может быть расширен и можно провести большое исследование для множества студий |Field_of_knowledge=Информатика, Искусственный интеллект |similar_concepts=Ка...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Scripting Tutorials&lt;br /&gt;
|Description=Мы хотим сравнить командность действий в студиях Scratch. Рецепт сделан на примере 5 студий, но может быть расширен и можно провести большое исследование для множества студий&lt;br /&gt;
|Field_of_knowledge=Информатика, Искусственный интеллект&lt;br /&gt;
|similar_concepts=Как использовать Scratch API&lt;br /&gt;
|Environment=R, Scratch API, Сообщество Scratch&lt;br /&gt;
}}&lt;br /&gt;
== Базовые функции - Scratch_Api_core.R ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
######## &lt;br /&gt;
##  Анализ командности в  Scrath studio - Base Functions&lt;br /&gt;
#### Scratch_Api_core.R&lt;br /&gt;
&lt;br /&gt;
library(httr)&lt;br /&gt;
library(jsonlite)&lt;br /&gt;
library(dplyr)&lt;br /&gt;
library(purrr)&lt;br /&gt;
library(tidyr)&lt;br /&gt;
library(lubridate)&lt;br /&gt;
&lt;br /&gt;
##------------- get_studio_projects &lt;br /&gt;
get_studio_projects &amp;lt;- function(studio_id, limit = 40, verbose = TRUE) {&lt;br /&gt;
  offset &amp;lt;- 0&lt;br /&gt;
  all_projects &amp;lt;- list()&lt;br /&gt;
  page &amp;lt;- 1&lt;br /&gt;
  &lt;br /&gt;
  repeat {&lt;br /&gt;
    url &amp;lt;- paste0(&lt;br /&gt;
      &amp;quot;https://api.scratch.mit.edu/studios/&amp;quot;,&lt;br /&gt;
      studio_id,&lt;br /&gt;
      &amp;quot;/projects/?limit=&amp;quot;, limit,&lt;br /&gt;
      &amp;quot;&amp;amp;offset=&amp;quot;, offset&lt;br /&gt;
    )&lt;br /&gt;
    &lt;br /&gt;
    if (verbose) message(&amp;quot;Requesting page &amp;quot;, page, &amp;quot; (offset = &amp;quot;, offset, &amp;quot;)&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    resp &amp;lt;- GET(url)&lt;br /&gt;
    if (status_code(resp) != 200) {&lt;br /&gt;
      warning(&amp;quot;Non-200 status code: &amp;quot;, status_code(resp), &amp;quot; at offset &amp;quot;, offset)&lt;br /&gt;
      break&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    txt  &amp;lt;- content(resp, as = &amp;quot;text&amp;quot;, encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
    dat  &amp;lt;- fromJSON(txt, flatten = TRUE)&lt;br /&gt;
    &lt;br /&gt;
    # dat — либо data.frame, либо пустой список&lt;br /&gt;
    if (length(dat) == 0) break&lt;br /&gt;
    &lt;br /&gt;
    all_projects[[length(all_projects) + 1]] &amp;lt;- dat&lt;br /&gt;
    &lt;br /&gt;
    # если вернулось меньше, чем limit, значит это была последняя страница&lt;br /&gt;
    if (nrow(dat) &amp;lt; limit) break&lt;br /&gt;
    &lt;br /&gt;
    offset &amp;lt;- offset + limit&lt;br /&gt;
    page   &amp;lt;- page + 1&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (length(all_projects) == 0) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  bind_rows(all_projects) |&amp;gt;&lt;br /&gt;
    transmute(&lt;br /&gt;
      project_id  = id,&lt;br /&gt;
      title       = title,&lt;br /&gt;
      creator_id  = creator_id,&lt;br /&gt;
      username    = username&lt;br /&gt;
    ) |&amp;gt;&lt;br /&gt;
    distinct()&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
##------------- get_get_user_projects&lt;br /&gt;
# 1. проекты пользователя: /users/&amp;lt;username&amp;gt;/projects&lt;br /&gt;
get_user_projects &amp;lt;- function(username, limit = 40, max_pages = 10, verbose = TRUE) {&lt;br /&gt;
  offset &amp;lt;- 0&lt;br /&gt;
  all &amp;lt;- list()&lt;br /&gt;
  page &amp;lt;- 1&lt;br /&gt;
  &lt;br /&gt;
  repeat {&lt;br /&gt;
    if (page &amp;gt; max_pages) break&lt;br /&gt;
    &lt;br /&gt;
    url &amp;lt;- paste0(&lt;br /&gt;
      &amp;quot;https://api.scratch.mit.edu/users/&amp;quot;,&lt;br /&gt;
      username,&lt;br /&gt;
      &amp;quot;/projects?limit=&amp;quot;, limit,&lt;br /&gt;
      &amp;quot;&amp;amp;offset=&amp;quot;, offset&lt;br /&gt;
    )&lt;br /&gt;
    if (verbose) message(&amp;quot;User &amp;quot;, username, &amp;quot;: page &amp;quot;, page, &amp;quot; (offset = &amp;quot;, offset, &amp;quot;)&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    resp &amp;lt;- GET(url)&lt;br /&gt;
    if (status_code(resp) != 200) break&lt;br /&gt;
    &lt;br /&gt;
    txt &amp;lt;- content(resp, as = &amp;quot;text&amp;quot;, encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
    dat &amp;lt;- fromJSON(txt, flatten = TRUE)&lt;br /&gt;
    if (length(dat) == 0) break&lt;br /&gt;
    &lt;br /&gt;
    all[[length(all) + 1]] &amp;lt;- dat&lt;br /&gt;
    &lt;br /&gt;
    if (nrow(dat) &amp;lt; limit) break&lt;br /&gt;
    offset &amp;lt;- offset + limit&lt;br /&gt;
    page   &amp;lt;- page + 1&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (length(all) == 0) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  res &amp;lt;- bind_rows(all)&lt;br /&gt;
  &lt;br /&gt;
  res |&amp;gt;&lt;br /&gt;
    transmute(&lt;br /&gt;
      project_id = id,&lt;br /&gt;
      title      = title,&lt;br /&gt;
      username   = username   # &amp;lt;- просто подставляем аргумент&lt;br /&gt;
    ) |&amp;gt;&lt;br /&gt;
    distinct()&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 2. студии проекта: /projects/&amp;lt;id&amp;gt;/studios&lt;br /&gt;
#-- get_project_studios&lt;br /&gt;
&lt;br /&gt;
get_project_studios &amp;lt;- function(username, project_id, limit = 40, max_pages = 10, verbose = TRUE) {&lt;br /&gt;
  user_name &amp;lt;- as.character(username)[1]  # гарантируем скалярную строку&lt;br /&gt;
  offset &amp;lt;- 0&lt;br /&gt;
  all &amp;lt;- list()&lt;br /&gt;
  page &amp;lt;- 1&lt;br /&gt;
  &lt;br /&gt;
  repeat {&lt;br /&gt;
    if (page &amp;gt; max_pages) break&lt;br /&gt;
    &lt;br /&gt;
    url &amp;lt;- paste0(&lt;br /&gt;
      &amp;quot;https://api.scratch.mit.edu/users/&amp;quot;,&lt;br /&gt;
      user_name,&lt;br /&gt;
      &amp;quot;/projects/&amp;quot;,&lt;br /&gt;
      project_id,&lt;br /&gt;
      &amp;quot;/studios?limit=&amp;quot;, limit,&lt;br /&gt;
      &amp;quot;&amp;amp;offset=&amp;quot;, offset&lt;br /&gt;
    )&lt;br /&gt;
    &lt;br /&gt;
    if (verbose) {&lt;br /&gt;
      message(&amp;quot;User &amp;quot;, user_name,&lt;br /&gt;
              &amp;quot;, project &amp;quot;, project_id,&lt;br /&gt;
              &amp;quot;: page &amp;quot;, page, &amp;quot; (offset = &amp;quot;, offset, &amp;quot;)&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    resp &amp;lt;- httr::GET(url)&lt;br /&gt;
    if (httr::status_code(resp) != 200) {&lt;br /&gt;
      return(NULL)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    txt &amp;lt;- httr::content(resp, as = &amp;quot;text&amp;quot;, encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
    dat &amp;lt;- jsonlite::fromJSON(txt, flatten = TRUE)&lt;br /&gt;
    &lt;br /&gt;
    if (length(dat) == 0) break&lt;br /&gt;
    &lt;br /&gt;
    all[[length(all) + 1]] &amp;lt;- dat&lt;br /&gt;
    &lt;br /&gt;
    if (nrow(dat) &amp;lt; limit) break&lt;br /&gt;
    offset &amp;lt;- offset + limit&lt;br /&gt;
    page   &amp;lt;- page + 1&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (length(all) == 0) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  res &amp;lt;- dplyr::bind_rows(all)&lt;br /&gt;
  if (!(&amp;quot;id&amp;quot; %in% names(res)) || !(&amp;quot;title&amp;quot; %in% names(res))) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  res |&amp;gt;&lt;br /&gt;
    dplyr::transmute(&lt;br /&gt;
      studio_id   = id,&lt;br /&gt;
      studio_name = title&lt;br /&gt;
    ) |&amp;gt;&lt;br /&gt;
    dplyr::distinct()&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# 3. связка &amp;quot;автор — его проекты — студии этих проектов&amp;quot;&lt;br /&gt;
get_user_project_studios &amp;lt;- function(username, verbose = TRUE) {&lt;br /&gt;
  user_projects &amp;lt;- get_user_projects(username, verbose = verbose)&lt;br /&gt;
  if (is.null(user_projects) || nrow(user_projects) == 0) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  proj_studios &amp;lt;- user_projects |&amp;gt;&lt;br /&gt;
    dplyr::mutate(&lt;br /&gt;
      studios = purrr::map(&lt;br /&gt;
        project_id,&lt;br /&gt;
        ~ get_project_studios(username, .x, verbose = verbose)&lt;br /&gt;
      )&lt;br /&gt;
    )&lt;br /&gt;
  &lt;br /&gt;
  proj_studios_nonempty &amp;lt;- proj_studios |&amp;gt;&lt;br /&gt;
    dplyr::filter(!purrr::map_lgl(studios, is.null))&lt;br /&gt;
  &lt;br /&gt;
  if (nrow(proj_studios_nonempty) == 0) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  proj_studios_nonempty |&amp;gt;&lt;br /&gt;
    tidyr::unnest(cols = studios) |&amp;gt;&lt;br /&gt;
    dplyr::transmute(&lt;br /&gt;
      username,&lt;br /&gt;
      project_id,&lt;br /&gt;
      project_title = title,&lt;br /&gt;
      studio_id,&lt;br /&gt;
      studio_name&lt;br /&gt;
    ) |&amp;gt;&lt;br /&gt;
    dplyr::distinct()&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
## --------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
get_studio_author_studios &amp;lt;- function(studio_id, verbose = TRUE) {&lt;br /&gt;
  # 1. проекты студии&lt;br /&gt;
  studio_projects &amp;lt;- get_studio_projects(studio_id, verbose = verbose)&lt;br /&gt;
  if (is.null(studio_projects) || nrow(studio_projects) == 0) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  # 2. авторы этих проектов&lt;br /&gt;
  authors &amp;lt;- unique(studio_projects$username)&lt;br /&gt;
  &lt;br /&gt;
  # 3. для каждого автора — его проекты и студии этих проектов&lt;br /&gt;
  author_studios &amp;lt;- purrr::map_df(&lt;br /&gt;
    authors,&lt;br /&gt;
    ~ {&lt;br /&gt;
      if (verbose) message(&amp;quot;Author: &amp;quot;, .x)&lt;br /&gt;
      get_user_project_studios(.x, verbose = verbose)&lt;br /&gt;
    }&lt;br /&gt;
  )&lt;br /&gt;
  &lt;br /&gt;
  # 4. возвращаем оба слоя: проекты самой студии и студии авторов&lt;br /&gt;
  list(&lt;br /&gt;
    studio_projects = studio_projects,&lt;br /&gt;
    author_studios  = author_studios&lt;br /&gt;
  )&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
### --- Studio comments ---&lt;br /&gt;
&lt;br /&gt;
############################################################&lt;br /&gt;
# 0. Вспомогательная функция: безопасный GET с JSON&lt;br /&gt;
############################################################&lt;br /&gt;
&lt;br /&gt;
safe_get_json &amp;lt;- function(url, verbose = TRUE) {&lt;br /&gt;
  if (verbose) message(&amp;quot;GET &amp;quot;, url)&lt;br /&gt;
  resp &amp;lt;- GET(url)&lt;br /&gt;
  if (status_code(resp) != 200) return(NULL)&lt;br /&gt;
  txt &amp;lt;- content(resp, as = &amp;quot;text&amp;quot;, encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
  if (identical(txt, &amp;quot;&amp;quot;) || is.null(txt)) return(NULL)&lt;br /&gt;
  out &amp;lt;- fromJSON(txt, flatten = TRUE)&lt;br /&gt;
  out&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
###--------&lt;br /&gt;
&lt;br /&gt;
get_studio_comments &amp;lt;- function(studio_id,&lt;br /&gt;
                                limit = 40,&lt;br /&gt;
                                max_pages = 200,&lt;br /&gt;
                                verbose = TRUE) {&lt;br /&gt;
  offset &amp;lt;- 0&lt;br /&gt;
  page &amp;lt;- 1&lt;br /&gt;
  all &amp;lt;- list()&lt;br /&gt;
  &lt;br /&gt;
  repeat {&lt;br /&gt;
    if (page &amp;gt; max_pages) break&lt;br /&gt;
    &lt;br /&gt;
    url &amp;lt;- paste0(&lt;br /&gt;
      &amp;quot;https://api.scratch.mit.edu/studios/&amp;quot;,&lt;br /&gt;
      studio_id,&lt;br /&gt;
      &amp;quot;/comments?limit=&amp;quot;, limit,&lt;br /&gt;
      &amp;quot;&amp;amp;offset=&amp;quot;, offset&lt;br /&gt;
    )&lt;br /&gt;
    &lt;br /&gt;
    dat &amp;lt;- safe_get_json(url, verbose = verbose)&lt;br /&gt;
    if (is.null(dat) || length(dat) == 0) break&lt;br /&gt;
    &lt;br /&gt;
    all[[length(all) + 1]] &amp;lt;- dat&lt;br /&gt;
    &lt;br /&gt;
    if (nrow(dat) &amp;lt; limit) break&lt;br /&gt;
    &lt;br /&gt;
    offset &amp;lt;- offset + limit&lt;br /&gt;
    page   &amp;lt;- page + 1&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (length(all) == 0) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  res &amp;lt;- bind_rows(all)&lt;br /&gt;
  &lt;br /&gt;
  res |&amp;gt;&lt;br /&gt;
    transmute(&lt;br /&gt;
      studio_id        = studio_id,&lt;br /&gt;
      comment_id       = id,&lt;br /&gt;
      parent_id        = if (&amp;quot;parent_id&amp;quot; %in% names(res)) parent_id else NA,&lt;br /&gt;
      author_id        = `author.id`,&lt;br /&gt;
      author_username  = `author.username`,&lt;br /&gt;
      content          = content,&lt;br /&gt;
      datetime_created = lubridate::as_datetime(datetime_created),&lt;br /&gt;
      datetime_modified = lubridate::as_datetime(datetime_modified),&lt;br /&gt;
      visibility       = visibility,&lt;br /&gt;
      reply_count      = reply_count&lt;br /&gt;
    )&lt;br /&gt;
}&lt;br /&gt;
###----&lt;br /&gt;
get_project_comments &amp;lt;- function(username,&lt;br /&gt;
                                 project_id,&lt;br /&gt;
                                 limit = 40,&lt;br /&gt;
                                 max_pages = 200,&lt;br /&gt;
                                 verbose = TRUE) {&lt;br /&gt;
  offset &amp;lt;- 0&lt;br /&gt;
  page &amp;lt;- 1&lt;br /&gt;
  all &amp;lt;- list()&lt;br /&gt;
  user_name &amp;lt;- as.character(username)[1]&lt;br /&gt;
  &lt;br /&gt;
  repeat {&lt;br /&gt;
    if (page &amp;gt; max_pages) break&lt;br /&gt;
    &lt;br /&gt;
    url &amp;lt;- paste0(&lt;br /&gt;
      &amp;quot;https://api.scratch.mit.edu/users/&amp;quot;,&lt;br /&gt;
      user_name,&lt;br /&gt;
      &amp;quot;/projects/&amp;quot;,&lt;br /&gt;
      project_id,&lt;br /&gt;
      &amp;quot;/comments?limit=&amp;quot;, limit,&lt;br /&gt;
      &amp;quot;&amp;amp;offset=&amp;quot;, offset&lt;br /&gt;
    )&lt;br /&gt;
    &lt;br /&gt;
    dat &amp;lt;- safe_get_json(url, verbose = verbose)&lt;br /&gt;
    if (is.null(dat) || length(dat) == 0) break&lt;br /&gt;
    &lt;br /&gt;
    all[[length(all) + 1]] &amp;lt;- dat&lt;br /&gt;
    &lt;br /&gt;
    if (nrow(dat) &amp;lt; limit) break&lt;br /&gt;
    &lt;br /&gt;
    offset &amp;lt;- offset + limit&lt;br /&gt;
    page   &amp;lt;- page + 1&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (length(all) == 0) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  res &amp;lt;- bind_rows(all)&lt;br /&gt;
  &lt;br /&gt;
  res |&amp;gt;&lt;br /&gt;
    transmute(&lt;br /&gt;
      project_id        = project_id,&lt;br /&gt;
      project_owner     = user_name,&lt;br /&gt;
      comment_id        = id,&lt;br /&gt;
      parent_id         = if (&amp;quot;parent_id&amp;quot; %in% names(res)) parent_id else NA,&lt;br /&gt;
      author_id         = `author.id`,&lt;br /&gt;
      author_username   = `author.username`,&lt;br /&gt;
      content           = content,&lt;br /&gt;
      datetime_created  = lubridate::as_datetime(datetime_created),&lt;br /&gt;
      datetime_modified = lubridate::as_datetime(datetime_modified),&lt;br /&gt;
      visibility        = visibility,&lt;br /&gt;
      reply_count       = reply_count&lt;br /&gt;
    )&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
### ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
get_all_project_comments_for_studio &amp;lt;- function(studio_id,&lt;br /&gt;
                                                studio_projects,&lt;br /&gt;
                                                verbose = TRUE) {&lt;br /&gt;
  if (is.null(studio_projects) || nrow(studio_projects) == 0) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  # Оставляем только нужные поля&lt;br /&gt;
  sp &amp;lt;- studio_projects |&amp;gt;&lt;br /&gt;
    transmute(&lt;br /&gt;
      project_id,&lt;br /&gt;
      project_owner = username&lt;br /&gt;
    ) |&amp;gt;&lt;br /&gt;
    distinct()&lt;br /&gt;
  &lt;br /&gt;
  all_comments &amp;lt;- purrr::map2_df(&lt;br /&gt;
    sp$project_owner,&lt;br /&gt;
    sp$project_id,&lt;br /&gt;
    ~ {&lt;br /&gt;
      if (verbose) message(&amp;quot;Project &amp;quot;, .y, &amp;quot; (owner: &amp;quot;, .x, &amp;quot;)&amp;quot;)&lt;br /&gt;
      get_project_comments(.x, .y, verbose = verbose)&lt;br /&gt;
    }&lt;br /&gt;
  )&lt;br /&gt;
  &lt;br /&gt;
  if (nrow(all_comments) == 0) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  all_comments |&amp;gt;&lt;br /&gt;
    mutate(&lt;br /&gt;
      studio_id = studio_id,&lt;br /&gt;
      .before = 1&lt;br /&gt;
    )&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
##------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
analyze_studio_comments &amp;lt;- function(studio_id,&lt;br /&gt;
                                    studio_projects,&lt;br /&gt;
                                    verbose = TRUE) {&lt;br /&gt;
  # 4.1. Комментарии в студии&lt;br /&gt;
  studio_comments &amp;lt;- get_studio_comments(studio_id, verbose = verbose)&lt;br /&gt;
  &lt;br /&gt;
  # 4.2. Комментарии ко всем проектам студии&lt;br /&gt;
  project_comments &amp;lt;- get_all_project_comments_for_studio(&lt;br /&gt;
    studio_id = studio_id,&lt;br /&gt;
    studio_projects = studio_projects,&lt;br /&gt;
    verbose = verbose&lt;br /&gt;
  )&lt;br /&gt;
  &lt;br /&gt;
  # Если нет комментариев, возвращаем только то, что есть&lt;br /&gt;
  if (is.null(studio_comments) &amp;amp;&amp;amp; is.null(project_comments)) {&lt;br /&gt;
    warning(&amp;quot;Нет комментариев ни в студии, ни в проектах.&amp;quot;)&lt;br /&gt;
    return(NULL)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  # 4.3. Авторские составы&lt;br /&gt;
  # — кто пишет в студии, кто в проектах, кто в обоих&lt;br /&gt;
  authors_studio &amp;lt;- studio_comments |&amp;gt;&lt;br /&gt;
    distinct(author_username) |&amp;gt;&lt;br /&gt;
    mutate(where = &amp;quot;studio&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  authors_projects &amp;lt;- project_comments |&amp;gt;&lt;br /&gt;
    distinct(author_username) |&amp;gt;&lt;br /&gt;
    mutate(where = &amp;quot;projects&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  authors_all &amp;lt;- bind_rows(authors_studio, authors_projects) |&amp;gt;&lt;br /&gt;
    group_by(author_username) |&amp;gt;&lt;br /&gt;
    summarise(&lt;br /&gt;
      in_studio   = &amp;quot;studio&amp;quot;   %in% where,&lt;br /&gt;
      in_projects = &amp;quot;projects&amp;quot; %in% where,&lt;br /&gt;
      .groups = &amp;quot;drop&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
  &lt;br /&gt;
  # 4.4. Частоты комментариев по авторам&lt;br /&gt;
  studio_author_freq &amp;lt;- studio_comments |&amp;gt;&lt;br /&gt;
    count(author_username, name = &amp;quot;studio_comments&amp;quot;) |&amp;gt;&lt;br /&gt;
    arrange(desc(studio_comments))&lt;br /&gt;
  &lt;br /&gt;
  project_author_freq &amp;lt;- project_comments |&amp;gt;&lt;br /&gt;
    count(author_username, name = &amp;quot;project_comments&amp;quot;) |&amp;gt;&lt;br /&gt;
    arrange(desc(project_comments))&lt;br /&gt;
  &lt;br /&gt;
  # 4.5. Простые текстовые показатели&lt;br /&gt;
  # длина комментария в символах&lt;br /&gt;
  studio_text_stats &amp;lt;- studio_comments |&amp;gt;&lt;br /&gt;
    mutate(&lt;br /&gt;
      n_chars = nchar(content, allowNA = TRUE)&lt;br /&gt;
    )&lt;br /&gt;
  &lt;br /&gt;
  project_text_stats &amp;lt;- project_comments |&amp;gt;&lt;br /&gt;
    mutate(&lt;br /&gt;
      n_chars = nchar(content, allowNA = TRUE)&lt;br /&gt;
    )&lt;br /&gt;
  &lt;br /&gt;
  # 4.6. Динамика по времени (по месяцам)&lt;br /&gt;
  studio_time &amp;lt;- studio_comments |&amp;gt;&lt;br /&gt;
    mutate(month = floor_date(datetime_created, &amp;quot;month&amp;quot;)) |&amp;gt;&lt;br /&gt;
    count(month, name = &amp;quot;studio_comments&amp;quot;) |&amp;gt;&lt;br /&gt;
    arrange(month)&lt;br /&gt;
  &lt;br /&gt;
  project_time &amp;lt;- project_comments |&amp;gt;&lt;br /&gt;
    mutate(month = floor_date(datetime_created, &amp;quot;month&amp;quot;)) |&amp;gt;&lt;br /&gt;
    count(month, name = &amp;quot;project_comments&amp;quot;) |&amp;gt;&lt;br /&gt;
    arrange(month)&lt;br /&gt;
  &lt;br /&gt;
  # 4.7. Собираем результаты для дальнейшей визуализации / анализа&lt;br /&gt;
  res &amp;lt;- list(&lt;br /&gt;
    studio_comments      = studio_comments,&lt;br /&gt;
    project_comments     = project_comments,&lt;br /&gt;
    authors_overlap      = authors_all,&lt;br /&gt;
    studio_author_freq   = studio_author_freq,&lt;br /&gt;
    project_author_freq  = project_author_freq,&lt;br /&gt;
    studio_text_stats    = studio_text_stats,&lt;br /&gt;
    project_text_stats   = project_text_stats,&lt;br /&gt;
    studio_time          = studio_time,&lt;br /&gt;
    project_time         = project_time&lt;br /&gt;
  )&lt;br /&gt;
  &lt;br /&gt;
  # 4.8. Простые сводные метрики для интерпретации&lt;br /&gt;
  # Авторские роли&lt;br /&gt;
  n_authors_total &amp;lt;- nrow(authors_all)&lt;br /&gt;
  n_only_studio   &amp;lt;- sum(authors_all$in_studio &amp;amp; !authors_all$in_projects)&lt;br /&gt;
  n_only_proj     &amp;lt;- sum(!authors_all$in_studio &amp;amp; authors_all$in_projects)&lt;br /&gt;
  n_both          &amp;lt;- sum(authors_all$in_studio &amp;amp; authors_all$in_projects)&lt;br /&gt;
  &lt;br /&gt;
  share_only_studio &amp;lt;- n_only_studio / n_authors_total&lt;br /&gt;
  share_only_proj   &amp;lt;- n_only_proj   / n_authors_total&lt;br /&gt;
  share_both        &amp;lt;- n_both        / n_authors_total&lt;br /&gt;
  &lt;br /&gt;
  # Средняя длина комментариев (в символах)&lt;br /&gt;
  mean_len_studio  &amp;lt;- mean(studio_text_stats$n_chars,  na.rm = TRUE)&lt;br /&gt;
  mean_len_project &amp;lt;- mean(project_text_stats$n_chars, na.rm = TRUE)&lt;br /&gt;
  &lt;br /&gt;
  # Топ-авторы в студии и в проектах (по числу комментариев)&lt;br /&gt;
  top_studio_authors &amp;lt;- studio_author_freq |&amp;gt;&lt;br /&gt;
    head(10)&lt;br /&gt;
  &lt;br /&gt;
  top_project_authors &amp;lt;- project_author_freq |&amp;gt;&lt;br /&gt;
    head(10)&lt;br /&gt;
  &lt;br /&gt;
  res$summary_metrics &amp;lt;- list(&lt;br /&gt;
    n_authors_total   = n_authors_total,&lt;br /&gt;
    n_only_studio     = n_only_studio,&lt;br /&gt;
    n_only_projects   = n_only_proj,&lt;br /&gt;
    n_both            = n_both,&lt;br /&gt;
    share_only_studio = share_only_studio,&lt;br /&gt;
    share_only_projects = share_only_proj,&lt;br /&gt;
    share_both        = share_both,&lt;br /&gt;
    mean_len_studio   = mean_len_studio,&lt;br /&gt;
    mean_len_project  = mean_len_project,&lt;br /&gt;
    top_studio_authors   = top_studio_authors,&lt;br /&gt;
    top_project_authors  = top_project_authors&lt;br /&gt;
  )&lt;br /&gt;
  &lt;br /&gt;
  res&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
###################&lt;br /&gt;
&lt;br /&gt;
# Вспомогательная: метаданные проекта по /projects/&amp;lt;id&amp;gt;&lt;br /&gt;
get_project_metadata &amp;lt;- function(project_id, verbose = TRUE) {&lt;br /&gt;
  url &amp;lt;- paste0(&amp;quot;https://api.scratch.mit.edu/projects/&amp;quot;, project_id)&lt;br /&gt;
  if (verbose) message(&amp;quot;GET &amp;quot;, url)&lt;br /&gt;
  &lt;br /&gt;
  resp &amp;lt;- httr::GET(url)&lt;br /&gt;
  if (httr::status_code(resp) != 200) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  txt &amp;lt;- httr::content(resp, as = &amp;quot;text&amp;quot;, encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
  if (identical(txt, &amp;quot;&amp;quot;) || is.null(txt)) return(NULL)&lt;br /&gt;
  &lt;br /&gt;
  jsonlite::fromJSON(txt, flatten = TRUE)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Ремикс-метрики для одной студии&lt;br /&gt;
get_studio_remix_stats &amp;lt;- function(studio_id,&lt;br /&gt;
                                   studio_projects,&lt;br /&gt;
                                   verbose = TRUE) {&lt;br /&gt;
  if (is.null(studio_projects) || nrow(studio_projects) == 0) {&lt;br /&gt;
    warning(&amp;quot;No projects for studio &amp;quot;, studio_id)&lt;br /&gt;
    return(NULL)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  proj_ids &amp;lt;- unique(studio_projects$project_id)&lt;br /&gt;
  proj_set &amp;lt;- proj_ids  # вектор для проверки принадлежности&lt;br /&gt;
  &lt;br /&gt;
  if (verbose) message(&amp;quot;Studio &amp;quot;, studio_id, &amp;quot;: &amp;quot;, length(proj_ids), &amp;quot; projects&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  # Получаем remix.parent и remix.root для каждого проекта&lt;br /&gt;
  meta_list &amp;lt;- purrr::map(&lt;br /&gt;
    proj_ids,&lt;br /&gt;
    function(pid) {&lt;br /&gt;
      dat &amp;lt;- get_project_metadata(pid, verbose = verbose)&lt;br /&gt;
      if (is.null(dat) || is.null(dat$remix)) {&lt;br /&gt;
        return(&lt;br /&gt;
          tibble(&lt;br /&gt;
            project_id = pid,&lt;br /&gt;
            remix_parent = NA_integer_,&lt;br /&gt;
            remix_root   = NA_integer_&lt;br /&gt;
          )&lt;br /&gt;
        )&lt;br /&gt;
      }&lt;br /&gt;
      tibble(&lt;br /&gt;
        project_id   = pid,&lt;br /&gt;
        remix_parent = if (!is.null(dat$remix$parent)) dat$remix$parent else NA_integer_,&lt;br /&gt;
        remix_root   = if (!is.null(dat$remix$root))   dat$remix$root   else NA_integer_&lt;br /&gt;
      )&lt;br /&gt;
    }&lt;br /&gt;
  )&lt;br /&gt;
  &lt;br /&gt;
  remix_df &amp;lt;- bind_rows(meta_list)&lt;br /&gt;
  &lt;br /&gt;
  n_projects &amp;lt;- nrow(remix_df)&lt;br /&gt;
  &lt;br /&gt;
  # Является ли проект ремиксом вообще&lt;br /&gt;
  remix_df &amp;lt;- remix_df |&amp;gt;&lt;br /&gt;
    mutate(&lt;br /&gt;
      is_remix = !is.na(remix_parent) | !is.na(remix_root),&lt;br /&gt;
      parent_in_studio = !is.na(remix_parent) &amp;amp; remix_parent %in% proj_set,&lt;br /&gt;
      root_in_studio   = !is.na(remix_root)   &amp;amp; remix_root   %in% proj_set&lt;br /&gt;
    )&lt;br /&gt;
  &lt;br /&gt;
  n_remix_total          &amp;lt;- sum(remix_df$is_remix, na.rm = TRUE)&lt;br /&gt;
  n_remix_strict_internal &amp;lt;- sum(remix_df$parent_in_studio, na.rm = TRUE)&lt;br /&gt;
  n_remix_broad_internal  &amp;lt;- sum(remix_df$root_in_studio,   na.rm = TRUE)&lt;br /&gt;
  &lt;br /&gt;
  tibble(&lt;br /&gt;
    studio_id              = studio_id,&lt;br /&gt;
    n_projects             = n_projects,&lt;br /&gt;
    n_remix_total          = n_remix_total,&lt;br /&gt;
    n_remix_strict_internal = n_remix_strict_internal,&lt;br /&gt;
    n_remix_broad_internal  = n_remix_broad_internal,&lt;br /&gt;
    share_remix_total          = if (n_projects &amp;gt; 0) n_remix_total / n_projects else NA_real_,&lt;br /&gt;
    share_remix_strict_internal = if (n_projects &amp;gt; 0) n_remix_strict_internal / n_projects else NA_real_,&lt;br /&gt;
    share_remix_broad_internal  = if (n_projects &amp;gt; 0) n_remix_broad_internal  / n_projects else NA_real_&lt;br /&gt;
  )&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####-- &lt;br /&gt;
analyze_remix_for_one &amp;lt;- function(studio_id, lang = NA, verbose = TRUE) {&lt;br /&gt;
  message(&amp;quot;=== Studio &amp;quot;, studio_id, &amp;quot; (&amp;quot;, lang, &amp;quot;) ===&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  sp &amp;lt;- get_studio_projects(studio_id, verbose = verbose)&lt;br /&gt;
  if (is.null(sp) || nrow(sp) == 0) {&lt;br /&gt;
    warning(&amp;quot;No projects for studio &amp;quot;, studio_id)&lt;br /&gt;
    return(NULL)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  rs &amp;lt;- get_studio_remix_stats(&lt;br /&gt;
    studio_id       = studio_id,&lt;br /&gt;
    studio_projects = sp,&lt;br /&gt;
    verbose         = verbose&lt;br /&gt;
  )&lt;br /&gt;
  &lt;br /&gt;
  # Убираем внутренний studio_id, оставляем только внешний&lt;br /&gt;
  rs &amp;lt;- dplyr::select(rs, -studio_id)&lt;br /&gt;
  &lt;br /&gt;
  rs&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scratch_Api_team_analysis.R  ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
&lt;br /&gt;
library(scales)&lt;br /&gt;
library(fmsb)&lt;br /&gt;
&lt;br /&gt;
source(&amp;quot;Scratch_Api_core.R&amp;quot;, encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#################&lt;br /&gt;
studios_to_analyze &amp;lt;- tibble::tibble(&lt;br /&gt;
  studio_id = c(&lt;br /&gt;
    32968123,  # EN&lt;br /&gt;
    51122357,  # DE&lt;br /&gt;
    1865715,   # FR&lt;br /&gt;
    29547282,  # RU&lt;br /&gt;
    294100     # JA&lt;br /&gt;
  ),&lt;br /&gt;
  lang = c(&amp;quot;en&amp;quot;, &amp;quot;de&amp;quot;, &amp;quot;fr&amp;quot;, &amp;quot;ru&amp;quot;, &amp;quot;ja&amp;quot;)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
##################&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 2.1. Проекты студий&lt;br /&gt;
studio_projects_list &amp;lt;- studios_to_analyze |&amp;gt;&lt;br /&gt;
  mutate(&lt;br /&gt;
    studio_projects = map(&lt;br /&gt;
      studio_id,&lt;br /&gt;
      ~ get_studio_projects(.x, verbose = TRUE)&lt;br /&gt;
    )&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# 2.2. Анализ комментариев для каждой студии&lt;br /&gt;
studio_comments_analysis &amp;lt;- studio_projects_list |&amp;gt;&lt;br /&gt;
  mutate(&lt;br /&gt;
    comments_analysis = map2(&lt;br /&gt;
      studio_id, studio_projects,&lt;br /&gt;
      ~ analyze_studio_comments(&lt;br /&gt;
        studio_id       = .x,&lt;br /&gt;
        studio_projects = .y,&lt;br /&gt;
        verbose         = TRUE&lt;br /&gt;
      )&lt;br /&gt;
    )&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
# 2.3. Сводные метрики по комментариям (studio_metrics)&lt;br /&gt;
studio_metrics &amp;lt;- studio_comments_analysis |&amp;gt;&lt;br /&gt;
  mutate(&lt;br /&gt;
    summary_metrics = map(comments_analysis, ~ .x$summary_metrics)&lt;br /&gt;
  ) |&amp;gt;&lt;br /&gt;
  unnest_wider(summary_metrics)&lt;br /&gt;
&lt;br /&gt;
studio_metrics&lt;br /&gt;
&lt;br /&gt;
#######################################&lt;br /&gt;
# Предполагаем, что функция analyze_remix_for_one уже определена в Scratch_Api_core.R&lt;br /&gt;
&lt;br /&gt;
studio_remix_metrics &amp;lt;- studios_to_analyze |&amp;gt;&lt;br /&gt;
  mutate(&lt;br /&gt;
    remix_metrics = map2(&lt;br /&gt;
      studio_id, lang,&lt;br /&gt;
      ~ analyze_remix_for_one(&lt;br /&gt;
        studio_id = .x,&lt;br /&gt;
        lang      = .y,&lt;br /&gt;
        verbose   = TRUE&lt;br /&gt;
      )&lt;br /&gt;
    )&lt;br /&gt;
  ) |&amp;gt;&lt;br /&gt;
  unnest(cols = remix_metrics)&lt;br /&gt;
&lt;br /&gt;
studio_remix_metrics&lt;br /&gt;
&lt;br /&gt;
############################&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
studio_team_profile &amp;lt;- studio_metrics |&amp;gt;&lt;br /&gt;
  inner_join(&lt;br /&gt;
    studio_remix_metrics,&lt;br /&gt;
    by = c(&amp;quot;studio_id&amp;quot;, &amp;quot;lang&amp;quot;)&lt;br /&gt;
  ) |&amp;gt;&lt;br /&gt;
  transmute(&lt;br /&gt;
    studio_id,&lt;br /&gt;
    lang,&lt;br /&gt;
    share_both,&lt;br /&gt;
    share_only_projects,&lt;br /&gt;
    mean_len_studio,&lt;br /&gt;
    mean_len_project,&lt;br /&gt;
    remix_share_total    = n_remix_total / n_projects,&lt;br /&gt;
    remix_share_internal = n_remix_strict_internal / n_projects&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
studio_team_profile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
##################&lt;br /&gt;
# Берём профиль командности&lt;br /&gt;
team_radar &amp;lt;- studio_team_profile |&amp;gt;&lt;br /&gt;
  mutate(&lt;br /&gt;
    metric_A_both     = share_both,&lt;br /&gt;
    metric_A_onlyproj = share_only_projects,&lt;br /&gt;
    metric_L_studio   = rescale(mean_len_studio),&lt;br /&gt;
    metric_L_project  = rescale(mean_len_project),&lt;br /&gt;
    metric_R_total    = remix_share_total,&lt;br /&gt;
    metric_R_internal = remix_share_internal&lt;br /&gt;
  ) |&amp;gt;&lt;br /&gt;
  select(studio_id, lang,&lt;br /&gt;
         metric_A_both,&lt;br /&gt;
         metric_A_onlyproj,&lt;br /&gt;
         metric_L_studio,&lt;br /&gt;
         metric_L_project,&lt;br /&gt;
         metric_R_total,&lt;br /&gt;
         metric_R_internal)&lt;br /&gt;
&lt;br /&gt;
# Пример: строим radar для ru-студии&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ru_row &amp;lt;- team_radar |&amp;gt;&lt;br /&gt;
  filter(lang == &amp;quot;ru&amp;quot;) |&amp;gt;&lt;br /&gt;
  select(-studio_id, -lang)&lt;br /&gt;
&lt;br /&gt;
radar_data_ru &amp;lt;- rbind(&lt;br /&gt;
  apply(ru_row, 2, function(x) 1),  # max&lt;br /&gt;
  apply(ru_row, 2, function(x) 0),  # min&lt;br /&gt;
  ru_row&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
rownames(radar_data_ru) &amp;lt;- c(&amp;quot;max&amp;quot;, &amp;quot;min&amp;quot;, &amp;quot;ru&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
radarchart(&lt;br /&gt;
  radar_data_ru,&lt;br /&gt;
  axistype  = 1,&lt;br /&gt;
  pcol      = &amp;quot;red&amp;quot;,&lt;br /&gt;
  pfcol     = scales::alpha(&amp;quot;red&amp;quot;, 0.3),&lt;br /&gt;
  plwd      = 2,&lt;br /&gt;
  cglcol    = &amp;quot;grey&amp;quot;,&lt;br /&gt;
  cglty     = 1,&lt;br /&gt;
  axislabcol = &amp;quot;grey&amp;quot;,&lt;br /&gt;
  vlcex     = 0.8,&lt;br /&gt;
  title     = &amp;quot;Профиль командности студии (ru)&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 ##############&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Вспомогательная функция: построить радар для одной студии по lang&lt;br /&gt;
plot_team_radar &amp;lt;- function(team_radar, lang_code) {&lt;br /&gt;
  row &amp;lt;- team_radar |&amp;gt;&lt;br /&gt;
    filter(lang == lang_code) |&amp;gt;&lt;br /&gt;
    select(-studio_id, -lang)&lt;br /&gt;
  &lt;br /&gt;
  radar_data &amp;lt;- rbind(&lt;br /&gt;
    apply(row, 2, function(x) 1),&lt;br /&gt;
    apply(row, 2, function(x) 0),&lt;br /&gt;
    row&lt;br /&gt;
  )&lt;br /&gt;
  rownames(radar_data) &amp;lt;- c(&amp;quot;max&amp;quot;, &amp;quot;min&amp;quot;, lang_code)&lt;br /&gt;
  &lt;br /&gt;
  radarchart(&lt;br /&gt;
    radar_data,&lt;br /&gt;
    axistype   = 1,&lt;br /&gt;
    pcol       = &amp;quot;steelblue&amp;quot;,&lt;br /&gt;
    pfcol      = alpha(&amp;quot;steelblue&amp;quot;, 0.3),&lt;br /&gt;
    plwd       = 2,&lt;br /&gt;
    cglcol     = &amp;quot;grey80&amp;quot;,&lt;br /&gt;
    cglty      = 1,&lt;br /&gt;
    axislabcol = &amp;quot;grey30&amp;quot;,&lt;br /&gt;
    vlcex      = 0.7,&lt;br /&gt;
    title      = paste(&amp;quot;Командность студии:&amp;quot;, lang_code)&lt;br /&gt;
  )&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Ставим сетку 2x3 (5 студий + 1 пустое место)&lt;br /&gt;
par(mfrow = c(2, 3), mar = c(2, 2, 3, 2))&lt;br /&gt;
&lt;br /&gt;
for (lg in team_radar$lang) {&lt;br /&gt;
  plot_team_radar(team_radar, lg)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
par(mfrow = c(1, 1))  # вернуть настройку&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Patarakin</name></author>
	</entry>
</feed>