рдореВрд▓ рдкреЛрд╕реНрдЯ + рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рдФрд░ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛
рдЪрд░рд┐рддреНрд░ рд╕рдВрдмрдВрдз-
рдХрд┐рд╕рдиреЗ рдХрд┐рд╕рдХреЛ рдЬрдиреНрдо рджрд┐рдпрд╛?-
рдХрд┐рд╕рдХреЛ рднрд╛рдИ рдпрд╛ рдмрд╣рди-
рд╣рддреНрдпрд╛ рдХрд┐рд╕рдиреЗ рдХреА?-
рдХреМрди рдХрд┐рд╕рдХреА рд╕реЗрд╡рд╛ рдХрд░рддрд╛ рд╣реИ?-
рдЬрд┐рд╕рдХреА рдХрд┐рд╕реА рд╕реЗ рд╢рд╛рджреА рдпрд╛ рд╕рдЧрд╛рдИ рд╣реЛ рдЧрдИ рд╣реЛ-
рдХрд┐рд╕рдХреЗ рд╕рд╛рде рд╕реЗрдХреНрд╕ рдХрд┐рдпрд╛ рдерд╛?-
рдПрдХ рдХреЙрд▓рдо рдкрд░ рд╕рднреА рд░рд┐рд╢реНрддреЗрдкрд╛рддреНрд░реЛрдВ рдХреЛ рджреГрд╢реНрдп рд╕реЗ рдЬреЛрдбрд╝рдирд╛рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХрд╛ рд╕рдмрд╕реЗ "рд▓реЛрдХрдкреНрд░рд┐рдп" рдЪрд░рд┐рддреНрд░ рдХреМрди рд╣реИ?-
рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реАрди рд╕рдордп рдХреА
рдорд╛рддреНрд░рд╛-
рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХрд┐рддрдиреЗ рд╡рд░реНрдг рдереЗ?-
рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рдПрдкрд┐рд╕реЛрдб рдореЗрдВ рдХреМрди рд╕рд╛ рдкрд╛рддреНрд░ рдерд╛?рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕реНрдерд╛рди "рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕"-
рд╕реНрдерд╛рдиреЛрдВ рдХрд╛ рдирдХреНрд╢рд╛ "рдЧреЗрдо рдСрдлрд╝ рдереНрд░реЛрдиреНрд╕"-
рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рд╢реНрд░реГрдВрдЦрд▓рд╛ рддрдХ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдмрдврд╝рддреЗ рдЪрд░рд┐рддреНрд░-
"рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕" рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ "рдХрд┐рд╕рдиреЗ" рдпрд╛рддреНрд░рд╛ рдХреА?-
рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕реНрдерд╛рди "рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕" (рд╕реНрдХреНрд░реАрди рд╕рдордп рдкрд░)рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдЕрднрд┐рдиреЗрддрд╛ рдХрд┐рди рдлрд┐рд▓реНрдореЛрдВ рдореЗрдВ рдЦреЗрд▓реЗ рд╣реИрдВ рдФрд░ рд╡реЗ рдХрд┐рддрдиреЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ?- рдРрд╕реА
рдлрд┐рд▓реНрдореЗрдВ рдЬрд┐рдирдореЗрдВ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЕрднрд┐рдиреЗрддрд╛ рдиреЗ рдирд┐рднрд╛рдИ:-
рд╣реИрд░реА рдкреЙрдЯрд░ рдореЗрдВ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдЕрднрд┐рдиреЗрддрд╛-
рд╕реНрдЯрд╛рд░ рд╡рд╛рд░реНрд╕ рдореЗрдВ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдЕрднрд┐рдиреЗрддрд╛-
рдХреИрд░рд┐рдмрд┐рдпрди рдХреЗ рд╕рдореБрджреНрд░реА рдбрд╛рдХреВ рдореЗрдВ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдЕрднрд┐рдиреЗрддрд╛-
рдХрд┐рди рдлрд┐рд▓реНрдореЛрдВ / рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдореЗрдВ "рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕" рдХреЗ рдХрдИ рдХрд▓рд╛рдХрд╛рд░ рд╣реИрдВ-
рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдХрд▓рд╛рдХрд╛рд░ рдЖрдкрд╕ рдореЗрдВ рдХрд┐рддрдиреЗ рдирд┐рдХрдЯ рд╣реИрдВрдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдореЗрдВ рдмрд╛рддрдЪреАрддрдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдХрд╛ рд▓рд┐рдВрдЧ: рдХреМрди рдЕрдзрд┐рдХ рд╣реИ, рдкреБрд░реБрд╖ рдпрд╛ рдорд╣рд┐рд▓рд╛?
рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдореЗрдВ рд╡реБрд▓реНрдлреНрд░реЗрдо рд▓реИрдВрдЧреНрд╡реЗрдЬ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рдпрд╣ рд▓реЗрдЦ рдбреЗрдЯрд╛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкрд░ рдЬреНрдпрд╛рджрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрддрд╛; рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдкреЛрд╕реНрдЯ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЗрдиреНрдлреЛрдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдФрд░ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдирд┐рд░реНрдорд┐рдд рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗрдВрдЧреЗ рдЬреЛ рдЗрд╕ рдЕрджреНрднреБрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ)ред
рдкреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рдЗрдиреНрдлреЛрдЧреНрд░рд╛рдлрд┐рдХ рдореИрдереЗрдореЗрдЯрд┐рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╣реИ, рдЬрд┐рд╕реЗ рд╣реЗрдбрд░ рдореЗрдВ рд▓рд┐рдВрдХ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЪрд░рд┐рддреНрд░ рд╕рдВрдмрдВрдз
рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░рд┐рддреНрд░ рд░рд┐рд╢реНрддреЛрдВ рдХреЗ рдПрдХ рдЧреНрд░рд╛рдл рдореЗрдВ рдХрд┐рдирд╛рд░реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ:
$GOTCharacterLinks= Module[{parser}, parser= Flatten[ Thread/@ DeleteCases[ Lookup[ GOTRawData["characters.json"][ "characters" ], {"characterName",#} ], {_,_Missing} ], 1 ]&; <| "" -> Union[ DirectedEdge[#[[2]],#[[1]]]&/@parser["parents"], DirectedEdge[#[[1]],#[[2]]]&/@parser["parentOf"] ], "" -> DeleteDuplicates[ UndirectedEdge[#[[2]],#[[1]]]&/@parser["siblings"], #1===Reverse[#2]& ], ""-> Union[ DirectedEdge[#[[2]],#[[1]]]&/@parser["killedBy"], DirectedEdge[#[[1]],#[[2]]]&/@parser["killed"] ], ""->(DirectedEdge[#[[1]],#[[2]]]&/@parser["serves"]), "" -> DeleteDuplicates[ UndirectedEdge[#[[1]],#[[2]]]&/@parser["marriedEngaged"], #1===Reverse[#2]& ], ""-> DeleteDuplicates[ Flatten[ Map[ Thread@UndirectedEdge[#[[1]],#[[2]]["with"]]&, Lookup[#,{"name","sex"}]&/@ Select[ Select[ Flatten[ Lookup[ Flatten[ GOTRawData[ "episodes.json" ][ "episodes" ][ [;;,"scenes"] ], 1 ], "characters" ] ], Keys[#]=!={"name"}& ], MemberQ[Keys[#],"sex"]& ] ] ], #1===Reverse[#2]& ]|> ];
рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд░рд┐рд╢реНрддреЛрдВ рдХреЛ рд░реЗрдЦрд╛рдВрдХрди рдХреЗ рд▓рд┐рдП
GOTCharacterLinksGraph рдлрд╝рдВрдХреНрд╢рдиред
ClearAll[GOTCharacterLinksGraph]; GOTCharacterLinksGraph[ data_, OptionsPattern[ { "ImageSize"->1500, "VertexSize"->Automatic, "GraphLayout"->"GravityEmbedding" } ] ]:= Module[{vertexList}, vertexList= DeleteDuplicates[Flatten[data[[;;,1]]/._[x_,y_]:>{x,y}]]; Graph[ data, VertexLabels-> Map[ Rule[ #, Placed[ Tooltip[ If[ Head[#]===Image, Image[#,ImageSize->60], (* else *) Style[ StringReplace[#," "->"\n"], LineSpacing->{0.8,0,0}, FontFamily->"Open Sans Light", Bold, 12 ] ]&[ #/.$characterImage ], #/.$characterCardFull ], {1/2,1/2} ] ]&, vertexList ], VertexShapeFunction->"Circle", VertexSize->OptionValue["VertexSize"], VertexStyle-> Directive[ {White,EdgeForm[{LightGray,AbsoluteThickness[2]}]} ], ImageSize->OptionValue["ImageSize"], Background->GrayLevel[0.95], AspectRatio->1, GraphLayout->OptionValue["GraphLayout"] ] ];
рд╣рдо рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдореЗрдВ рдХрд┐рд╕рдиреЗ рдХрд┐рд╕рдХреЛ рдЬрдиреНрдо рджрд┐рдпрд╛:
GOTInfographicsPoster[ #, " \" \"", "ImageSize" -> 1500 ] &@ GOTCharacterLinksGraph[ Property[ #, { EdgeStyle -> Directive[ { AbsoluteThickness[2], Blue, Arrowheads[{0, {0.01, 0.5}}] } ] } ] & /@ $GOTCharacterLinks[""], "VertexSize" -> 3 ]

рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЧреЗрдо рдСрдл рдереНрд░реЛрдВрд╕ рдореЗрдВ рднрд╛рдИ рдпрд╛ рдмрд╣рди рдХреМрди рд╣реИрдВ:
GOTInfographicsPoster[ #," \" \"","ImageSize"->1500 ]&@ GOTCharacterLinksGraph[ Property[ #, {EdgeStyle->Directive[{AbsoluteThickness[2],Darker@Green}]} ]&/@ $GOTCharacterLinks[""], "VertexSize"->0.7, "GraphLayout"->Automatic ]

рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдореЗрдВ рд╕реЗ рдПрдХ: "рдЧреЗрдо рдСрдлрд╝ рдереНрд░реЛрдиреНрд╕" рдореЗрдВ рд╣рддреНрдпрд╛рдУрдВ рдХреА рдЧрд┐рдирддреА:
GOTInfographicsPoster[ #," \" \"","ImageSize"->2500 ]&@ GOTCharacterLinksGraph[ Property[ #, { EdgeStyle-> Directive[ { AbsoluteThickness[2], Black, Arrowheads[{0,{0.0075,0.5}}] } ] } ]&/@ $GOTCharacterLinks[""], "VertexSize"->1.1, "ImageSize"->2500 ]

(
рдореВрд▓ )
рдЗрддрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА - рдЬреЛ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдореЗрдВ рдХрд┐рд╕рдХреА рд╕реЗрд╡рд╛ рдХрд░рддрд╛ рд╣реИ:
GOTInfographicsPoster[ #," \" \"","ImageSize"->1000 ]&@ GOTCharacterLinksGraph[ Property[ #, { EdgeStyle-> Directive[ { AbsoluteThickness[2], Magenta, Arrowheads[{0,{0.02,0.5}}] } ] } ]&/@ $GOTCharacterLinks[""], "VertexSize"->0.5, "ImageSize"->1000, "GraphLayout"->Automatic ]

рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рд▓рдЧреЗ рдФрд░ рд╡рд┐рд╡рд╛рд╣рд┐рдд рдкрд╛рддреНрд░:
GOTInfographicsPoster[ #, " \" \"", "ImageSize"->1000 ]&@ GOTCharacterLinksGraph[ Property[ #,{EdgeStyle->Directive[{AbsoluteThickness[2],Orange}]} ]&/@ $GOTCharacterLinks[""], "VertexSize"->0.5, "ImageSize"->1000, "GraphLayout"->Automatic ]

рдереЛрдбрд╝рд╛ рдЧрд░реНрдо - рдЬрд┐рд╕рдиреЗ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдореЗрдВ рд░реЗрдЦрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдпреМрди рд╕рдВрдмрдВрдз рдмрдирд╛рдП рдереЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?
GOTInfographicsPoster[#, " \" \"", "ImageSize" -> 1300] &@ GOTCharacterLinksGraph[ Property[#, {EdgeStyle -> Directive[{AbsoluteThickness[2], Red}]}] & /@ $GOTCharacterLinks[""], "VertexSize" -> 0.9, "ImageSize" -> 1300, "GraphLayout" -> "LayeredDigraphEmbedding" ]

рдЕрдм рд╣рдо "рдЧреЗрдо рдСрдлрд╝ рдереНрд░реЛрдВрд╕" рдореЗрдВ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд╕рдВрдмрдВрдзреЛрдВ рдХреЗ рд╕рднреА рдмрдбрд╝реЗ рдЧреНрд░рд╛рдлрд╝ рдХреЛ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдШрдЯрд╛рдПрдБрдЧреЗ:
GOTInfographicsPoster[ #, " \" \"", "ImageSize"->3000 ]&@ Legended[ GOTCharacterLinksGraph[ Join[ Property[ #, { EdgeStyle-> Directive[ { AbsoluteThickness[3], Blue, Arrowheads[{0,{0.005,0.5}}] } ] } ]&/@ $GOTCharacterLinks[""], Property[ #, { EdgeStyle-> Directive[ {AbsoluteThickness[3],Darker@Green} ] } ]&/@ $GOTCharacterLinks[""], Property[ #, { EdgeStyle-> Directive[ { AbsoluteThickness[3], Black, Arrowheads[{0,{0.005,0.5}}] } ] } ]&/@ $GOTCharacterLinks[""], Property[ #, { EdgeStyle-> Directive[ { AbsoluteThickness[1], Magenta, Arrowheads[{0,{0.005,0.5}}] } ] } ]&/@ $GOTCharacterLinks[""], Property[ #, { EdgeStyle-> Directive[{AbsoluteThickness[2],Orange}] } ]&/@ $GOTCharacterLinks[""], Property[ #, {EdgeStyle->Directive[{AbsoluteThickness[3],Red}]} ]&/@ DeleteDuplicates[$GOTCharacterLinks[""]] ], "ImageSize"->3000, "VertexSize"->0.9 ], Placed[ LineLegend[ {Blue,Darker@Green,Black,Magenta,Orange,Red}, { " ", " ", "", "", " ", "" }, LegendLayout->"Row" ], Top ] ]

(
рдореВрд▓ )
рдкрд╛рддреНрд░реЛрдВ рдХреЛ рджреГрд╢реНрдп рд╕реЗ рдЬреЛрдбрд╝рдирд╛
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдПрдХ рд╣реА рджреГрд╢реНрдп рдореЗрдВ рдХреМрди рд╕реЗ рдкрд╛рддреНрд░ рджрд┐рдЦрд╛рдИ рджрд┐рдПред рдкрд╛рддреНрд░реЛрдВ рдХреЗ рдмреАрдЪ рдкреНрд░рддреНрдпреЗрдХ рдХрд┐рдирд╛рд░реЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡реЗ рдПрдХ рд╣реА рджреГрд╢реНрдп рдореЗрдВ рдереЗред рдореЛрдЯрд╛ рдФрд░ рд▓рд╛рд▓ рд░рд┐рдб, рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╢реНрдпред
рдЖрдЗрдП рдХрдИ рдЧреНрд░рд╛рдл рдмрдирд╛рддреЗ рд╣реИрдВ: рдкрд╣рд▓рд╛ рдПрдХ рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ 2 рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдЕрдЧрд▓рд╛, 5, 10 рдФрд░ 20ред
Table[ Print[ GOTInfographicsPoster[ GOTGraphPlot[ #, min, "ImageSize"->Which[min==1,5000,min==4,3000,True,2000], "MaxThickness"->25 ], " \" \" " <> ToString[min+1] <> " ", "ImageSize"->Which[min==1,5000,min==4,3000,True,2000] ]&@ Tally[ UndirectedEdge@@@ Map[ Sort, Flatten[ Map[ Subsets[#,{2}]&, Map[ #[[;;,"name"]]&, Flatten[ Lookup[ GOTRawData[ "episodes.json" ][ "episodes" ], "scenes" ] ][ [;;,"characters"] ] ] ], 1 ] ] ] ], {min,{1,4,9,19}} ];

(
рдореВрд▓ )



рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдореЗрдВ рд╕рдмрд╕реЗ "рд▓реЛрдХрдкреНрд░рд┐рдп" рдЪрд░рд┐рддреНрд░ рдХреМрди рд╣реИ?
рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ
$ GOTEpisodeData рд╡реИрд░рд┐рдПрдмрд▓ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдкрд┐рд╕реЛрдб рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдпрд░ рд╕реАрди рдбреЗрдЯрд╛ рдХрд╛
рдПрдХ рд╕реЗрдЯ рд░рдЦреЗрдВрдЧреЗред
$GOTEpisodeData= With[{data=#}, <| "EpisodeN"->#[[1]], "ScreenTime"-> SortBy[ GroupBy[ Flatten[ ReplaceAll[ Thread/@ Transpose[ { Map[ Lookup[#[[1]],"name"]&, #[[2]] ], Round@ Map[ QuantityMagnitude[ UnitConvert[ Subtract@@ ( TimeObject/@ #[ [ { 3, 2 } ] ] ), "Seconds" ] ]&, #[[2]] ] } ], {Missing["KeyAbsent","name"],x_} :> {{"",x}} ]&@ data, 1 ], First, #[[;;,2]]& ], -Total[#]& ], "LocationTime" -> SortBy[ GroupBy[ Flatten[ ReplaceAll[ Thread/@ Transpose[ { Map[{#[[{4,5}]]}&,#[[2]]] /. Missing["KeyAbsent","subLocation"]-> Nothing, Round@ Map[ QuantityMagnitude[ UnitConvert[ Subtract@@ ( TimeObject/@ #[ [ { 3, 2 } ] ] ), "Seconds" ] ]&, #[[2]] ] } ], {Missing["KeyAbsent","name"],x_} :> {{"",x}} ]&@ data, 1 ], First, #[[;;,2]]& ], -Total[#]& ], "CharacterLocations"-> GroupBy[ DeleteCases[ #/.Missing["KeyAbsent","subLocation"]->Nothing, _Missing ]&@ Flatten[ Map[ With[{location=#[[2]]}, {#,location}&/@#[[1]] ]&, Transpose[ { Map[Lookup[#[[1]],"name"]&,#[[2]]], #[[2,;;,{4,5}]] } ] ], 1 ], First, #[[;;,2]]& ]|> ]&/@ DeleteCases[ Map[ { #[[{1,2}]], Lookup[ #[[3]], { "characters", "sceneStart", "sceneEnd", "location", "subLocation" } ] }&, Lookup[ GOTRawData["episodes.json"]["episodes"], {"seasonNum","episodeNum","scenes"} ] ], {_,{_Missing...}} ];
рдкрд╣рд▓реЗ рд╕реАрдЬрд╝рди рдХреА рдкрд╣рд▓реА рдХрдбрд╝реА рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдбреЗрдЯрд╛:

рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реАрди рд╕рдордп рдХреА рдорд╛рддреНрд░рд╛
рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕реНрдХреНрд░реАрди рд╕рдордп рдХреЗ рд╕рд╛рде рдЧреЗрдо рдСрдлрд╝ рдереНрд░реЛрдиреНрд╕ рдХреЗ 30 рдкрд╛рддреНрд░:
GOTInfographicsPoster[ #, "30 , ", "ImageSize"->1500 ]&@ circleInfographics[ { Tooltip[ Row[ { #[[1]]/.$characterImage, Style[#[[1]],14,White,Bold], Style[ UnitConvert[ Quantity[#[[2]],"Seconds"], MixedUnit[ {"Hours","Minutes","Seconds"} ] ], 14, White ] }, "\n" ], #[[1]]/.$characterCardFull ], #[[2]] }&/@ KeyValueMap[ {#1,#2}&, SortBy[ Merge[ $GOTEpisodeData[[All,"ScreenTime"]], Total[Flatten[#]]& ], -#& ] ][ [1;;30] ], "Precision"->10^-6, "StepDecrease"->0.99, "ShapeFunction"->Disk, "ColorFunction"->ColorData["Rainbow"], "ImageSize"->1500 ]

(
рдореВрд▓ )
рд╣рдо рджреВрд╕рд░реЛрдВ рдХреЛ рднреА рд╡рдВрдЪрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдПрдХ рдмрдбрд╝реА рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВрдЧреЗ:
GOTInfographicsPoster[ #, "550+ ", "ImageSize"->1500, "ImageResolution"->150 ]&@ Multicolumn[ Style[ Row[{#[[1]]," \[LongDash] ",#[[2]]," c"}],FontFamily->"Myriad Pro",8 ]&/@ KeyValueMap[ {#1,#2}&, SortBy[ Merge[ $GOTEpisodeData[[All,"ScreenTime"]], Total[Flatten[#]]& ], -#& ] ], 6 ]

(
рдореВрд▓ )
рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХрд┐рддрдиреЗ рдкрд╛рддреНрд░ рдереЗ?
$ GOTEpisodeN - рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд┐рд░реНрдл рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ рдХреЗ рд▓рд┐рдП
{рд╕реАрдЬрд╝рди, рдПрдХ рд╕реАрдЬрд╝рди рдореЗрдВ рдПрдХ рд╕реАрд░реАрдЬрд╝ рдХреЗ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░
} рд╕реЗ
рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ
рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ ред
$GOTEpisodeN= <| Thread[ Rule[#,Range[Length[#]]]&@$GOTEpisodeData[[All,"EpisodeN"]] ]|>;
$ GOTEpisodeID $ GOTEpisodeN рдХреЗ рд▓рд┐рдП рдЙрд▓рдЯрд╛ рдСрдкрд░реЗрд╢рди рд╣реИред
$GOTEpisodeID= <| Thread[ Rule[Range[Length[#]],#]&@$GOTEpisodeData[[All,"EpisodeN"]] ]|>;
рдЖрдЗрдП рдкреНрд░рддреНрдпреЗрдХ рдЧреЗрдо рдСрдл рдереНрд░реЛрдВрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдмрдирд╛рдПрдВ
GOTInfographicsPoster[ #, " \" \"", "ImageSize"->1000 ]&@ BarChart[ #, BarSpacing->{0.05,2}, AspectRatio->1/2, ImageSize->1000, ChartLabels->{Keys[#],Range[10]}, ColorFunction->Function[{x},ColorData["Rainbow"][x]], GridLines->{None,Range[0,100,5]}, FrameLabel-> Map[ Style[#,FontFamily->"Open Sans",20,Bold]&, { " ", " " } ], Frame->True, Background->GrayLevel[0.95] ]&@ GroupBy[ Map[ {#["EpisodeN"],Length[#["ScreenTime"]]}&, $GOTEpisodeData[[All,{"EpisodeN","ScreenTime"}]] ], #[[1,1]]&, #[[;;,2]]& ]

рдЧреЗрдо рдСрдлрд╝ рдереНрд░реЛрдВрд╕ рдПрдкрд┐рд╕реЛрдб рдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рд╡рд░реНрдг рд╕рдмрд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдерд╛?
рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА, рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдорд┐рд▓реЗ рдПрдкрд┐рд╕реЛрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреНрд░рдордмрджреНрдз рд╣реИрдВ:
$GOTCharacters= DeleteCases[ Reverse[ SortBy[ Tally[ Flatten[Keys@$GOTEpisodeData[[All,"ScreenTime"]]] ], Last ] ][ [;;,1] ], "" ];
рдПрдХ рд╕реАрдЬрд╝рди рдореЗрдВ рдПрдкрд┐рд╕реЛрдб рдХреА рд╕рдВрдЦреНрдпрд╛:
$GOTSeriesInSeason= <| KeyValueMap[#1->Length@#2&,GroupBy[$GOTEpisodeData[[;;,1]],First]]|>;
рд╕реАрдЬрди рдХреЗ "рдорд╛рд╕реНрдХ" (рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рддреАрдХ):
$GOTSeasonsMask=KeyValueMap[ConstantArray[#1,#2]&,$GOTSeriesInSeason];
GOTCharacterBySeason рдХрд┐рд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЧреЗрдо рдСрдл рдереНрд░реЛрдВрд╕ рдХреЗ рдЪрд░рд┐рддреНрд░ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ:
GOTCharacterBySeason[name_]:= Module[{initialData,empty}, initialData= Map[ #[[;;,2]]&, GroupBy[ Cases[ {#[[1]],Keys[#[[2]]]}&/@ Lookup[ $GOTEpisodeData, {"EpisodeN","ScreenTime"} ], {number_,episode_/;Not[FreeQ[episode,name]]}:> number ], First ] ]; empty=Complement[Range[1,8],Keys[initialData]]; If[ Length[empty]===0, initialData, (* else *) KeySort@<|initialData,<|#->{}&/@empty|>|> ] ]
GOTCharacterBySeasonPlot GOTCharacterBySeason рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рддрд╛ рд╣реИред
GOTCharacterBySeasonPlot[name_]:= Flatten@ KeyValueMap[ ReplacePart[ $GOTSeasonsMask[[#1]], Thread[ Complement[Range[1,$GOTSeriesInSeason[#1]],#2]->0 ] ]&, GOTCharacterBySeason[name] ]
$ GOTSeasonColors рд░рдВрдЧреЛрдВ рдХрд╛ рд╕реЗрдЯ, рдХреНрд░рдо рдореЗрдВ рд╕реАрдЬрд╝рди рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
$GOTSeasonColors= {0->White} ~ Join ~ Thread[Range[1,8]->ColorData[54,"ColorList"][[1;;8]]];
рдЕрдВрдд рдореЗрдВ, рд╣рдо рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗ рдХрд┐ "рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕" рдХреА рдХреМрди рд╕реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХреМрди рд╕реЗ рдкрд╛рддреНрд░ рдереЗ рдФрд░ рдХрд┐рд╕рдореЗрдВ рдирд╣реАрдВ рдереЗ)
GOTInfographicsPoster[ #, "100 \" \", ", "ImageSize"->2500 ]&@ Grid[ { { " \\ ", SpanFromLeft, Style["% \n \n",12] } ~ Join ~ Map[ Style[ "S"<>ToString[#[[1]]]<>"\nE"<>ToString[#[[2]]],10 ]&, Keys[$GOTEpisodeN] ] } ~ Join ~ ( ( { ImageResize[#/.$characterImage,{Automatic,25}], #, PercentForm[ N@Total[Length/@GOTCharacterBySeason[#]] / Last[$GOTEpisodeN] ] } ~ Join ~ ReplaceAll[ GOTCharacterBySeasonPlot[#], x_Integer:>Item["",Background->x/.$GOTSeasonColors] ]&/@ DeleteCases[ $GOTCharacters[[1;;100]],"" ] ) ), ItemSize->{{2,10,5,{1.2}},{4,{1}}}, Background->White, Dividers->Gray, ItemStyle -> Directive[ FontFamily->"Open Sans",14,Bold,LineSpacing->{0.8,0,0} ], Alignment->{Center,Center} ]

(
рдореВрд▓ )
рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕реНрдерд╛рди "рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕"
рд╕реНрдерд╛рдиреЛрдВ рдХрд╛ рдирдХреНрд╢рд╛ "рдЧреЗрдо рдСрдлрд╝ рдереНрд░реЛрдиреНрд╕"
рд╣рдо рдЬреНрдпрд╛рдорд┐рддреАрдп рдЖрджрд┐рдо рд╕реЗ рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред рдЖрдЗрдП рдЙрдирдХрд╛ рд╕реЗрдЯ рдмрдирд╛рдПрдБ:
index=1; $GOTLakesIDs= { 11, 8, 9, 10, 2, 529, 530, 522, 523, 533, 532, 526, 521, 525, 531, 524, 528, 527, 7, 3, 4, 5, 6 };
$GOTMapPolygons= { FaceForm@If[MemberQ[$GOTLakesIDs,index],LightBlue,LightOrange], EdgeForm[AbsoluteThickness[1]], index++;Polygon[Accumulate[#]] }&/@ GOTRawData["lands-of-ice-and-fire.json"]["arcs"];
рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдирдХреНрд╢реЗ рдкрд░ рд╕реНрдерд╛рдиреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрдирд╛рдПрдБ:
$GOTMapPlaces= Lookup[ GOTRawData["lands-of-ice-and-fire.json"]["objects"]["places"][ "geometries" ], {"coordinates","properties"} ];
$GOTMapPlaceCoordinates=Map[#[[2,"name"]]->#[[1]]&,$GOTMapPlaces];
GOTMap рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ "рдЧреЗрдо рдСрдлрд╝ рдереНрд░реЛрдВрд╕" рдкрд░ "рднреМрдЧреЛрд▓рд┐рдХ" рд╕реНрдерд╛рдиреЛрдВ рдФрд░ рдкреНрд░рдХреНрд╖реЗрдкрд╡рдХреНрд░реЛрдВ рдХреЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
GOTMap[additinals_,OptionsPattern[{"ImageSize"->1500}]]:= Legended[ Graphics[ { $GOTMapPolygons, ( { { AbsolutePointSize[10], Black, Point[#1[[1]]], AbsolutePointSize[5], White, Point[#1[[1]]] }, Inset[ With[{placeType=#1[[2]]["type"]}, ( Framed[ #1, Background -> ( placeType /. Thread[ { "city", "castle", "ruin", "town" } -> ( Lighter[ RGBColor[ #1/255 ], 0.5 ]& )/@ { {254,92,7}, {254,252,9}, {138,182,7}, {2,130,237} } ] ), RoundingRadius->6, FrameStyle->None, FrameMargins->2 ]& )[ Style[ #1[[2]]["name"], LineSpacing->{0.8,0,0}, FontFamily->"Open Sans", Bold, 12 ] ] ], #1[[1]], If[ MemberQ[ { "Eastwatch", "The Dreadfort", "White Harbor", "Storm's End", "Ghoyan Drohe", "Qohor" }, #1[[2]]["name"] ], Scaled[{-0.1,1/2}], (* else *) Scaled[{1.1,1/2}] ] ] }& )/@ $GOTMapPlaces, additinals }, ImageSize->OptionValue["ImageSize"], Background->LightBlue, PlotRangePadding->0 ], (Placed[#1,"Bottom"]&)[ SwatchLegend[ (RGBColor[#1/255]&)/@ {{254,92,7},{254,252,9},{138,182,7},{2,130,237}}, {"city","castle","ruin","town"}, LegendLayout->"Row" ] ] ]
рд╕реНрд╡рдпрдВ рдорд╛рдирдЪрд┐рддреНрд░ рдмрдирд╛рдПрдБ:
GOTInfographicsPoster[ #," \" \"","ImageSize"->1500 ]&@ GOTMap[{}]

рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рд╢реНрд░реГрдВрдЦрд▓рд╛ рддрдХ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдХрд╛ рдЪрд▓рди
GOTCharacterLocationNamesSequence рдлрд╝рдВрдХреНрд╢рди рдЧреЗрдо рдХреЗ рд╕рд┐рдВрд╣рд╛рд╕рди рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдмреАрдЪ рд╡рд░реНрдг рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ:
GOTCharacterLocationNamesSequence[name_]:= Merge[$GOTEpisodeData[[;;,"CharacterLocations"]],Identity][name];
GOTCharacterLocationSequence рдлрд╝рдВрдХреНрд╢рди рдЕрдкрдиреЗ "рднреМрдЧреЛрд▓рд┐рдХ" рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ:
GOTCharacterLocationSequence[name_]:= DeleteCases[ Partition[ Flatten[ DeleteCases[ GOTCharacterLocationNamesSequence[name] /. {{x_String,y_String}:>y,{x_String}:>x} /. $GOTMapPlaceCoordinates, _String, Infinity ], 1 ], 2, 1 ], {x_,x_} ];
GOTMapTraectory рдлрд╝рдВрдХреНрд╢рди рдЧреЗрдо рдСрдлрд╝ рдереНрд░реЛрдВрд╕ рдореИрдк рдкрд░ рдПрдХ рдкреНрд░рдХреНрд╖реЗрдкрд╡рдХреНрд░ рдмрдирд╛рддрд╛ рд╣реИ:
ClearAll[GOTMapTraectory]; GOTMapTraectory[path_,colorFunction_:ColorData["Rainbow"]]:= Module[{kol}, kol=Length[path]; Table[ { Opacity[0.5], colorFunction[(i-1)/(kol-1)], AbsoluteThickness[10i/kol+1], CapForm["Round"], Arrow[ BSplineCurve[ { path[[i,1]], Mean[path[[i]]] + RandomInteger[{5000,20000}] Function[#/Norm[#]][ RandomChoice[{1,1}] {-1,1} * Reverse[path[[i,2]]-path[[i,1]]] ], path[[i,2]] } ] ] }, {i,1,kol} ] ];
рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдХрд┐рд╕реА рднреА рдЪрд░рд┐рддреНрд░ рдХреЗ рдЖрдВрджреЛрд▓рди рдХрд╛ рдПрдХ рдирдХреНрд╢рд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ 10 рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдирд╛рдпрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдПрдБред
( Print[ With[{track=#1,name=#1[[1]]}, ( GOTInfographicsPoster[ #1, Row[ { " ", Style[name,Bold], " \" \"", "\n", Style[ "( )", 25 ] } ], "ImageSize"->1500 ]& )[ GOTMap[ { Arrowheads[{0,0.01}], ( With[{color=#1[[2]]}, GOTMapTraectory[ GOTCharacterLocationSequence[name] ] ]& )[ track ], Inset[ track[[1]]/.$characterCardFull, Scaled[{0.99,0.99}], Scaled[{1,1}] ] } ] ] ] ]& )/@ ({#1,RGBColor[{200,42,102}/255]}&)/@$GOTCharacters[[1;;10]];


(рдЕрдиреНрдп рдХрд╛рд░реНрдб
рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ)
"рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕" рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ "рдпрд╛рддреНрд░рд╛" рдХреМрди рд╣реИ?
рд╣рдо рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рд┐рддреНрд░ рджреНрд╡рд╛рд░рд╛ рдордирдорд╛рдиреА рдЗрдХрд╛рдЗрдпреЛрдВ рдореЗрдВ рдпрд╛рддреНрд░рд╛ рдХрд┐рдП рдЧрдП рдкрде рдХреА рд▓рдВрдмрд╛рдИ рдкрд╛рдПрдВрдЧреЗ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рд╡реЗрд╕реНрдЯрд░реЛрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд┐рд╕рдиреЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдпрд╛рддреНрд░рд╛ рдХреА рд╣реИ:
GOTInfographicsPoster[ #1, " \"\" \" \"?", "ImageSize"->1500 ]&@ ( ( BarChart[ #1[[1;;All,1]], PlotRangePadding->0, BarSpacing->0.25, BarOrigin->Left, AspectRatio->1.8, ImageSize->1500, ChartLabels->#1[[1;;All,2]], Frame->True, GridLines->{Range[0,10^6,10^4],None}, ColorFunction->ColorData["Rainbow"], FrameLabel-> { {None,None}, Style[#,FontFamily->"Open Sans Light",16]&/@ { " ", " " } }, Background->GrayLevel[0.95] ]& )[ Cases[ SortBy[ ( { Total[ (Norm[Subtract@@#1]&)/@ GOTCharacterLocationSequence[#1] ], #1/.$characterCardShortSmall }& )/@ DeleteCases[ $GOTCharacters, Alternatives@@ { "", "Musician #1", "Musician #2", "Musician #3" } ], First[#1]& ], {x_/;x>0,_} ][ [-50;;-1] ] ] )

рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕реНрдерд╛рди "рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕" (рд╕реНрдХреНрд░реАрди рд╕рдордп рдкрд░)
рд╣рдо рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд╛рди (рдФрд░ рдХреНрд╖реЗрддреНрд░) рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреБрд▓ рд╕реНрдХреНрд░реАрди рд╕рдордп рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХрдИ рд░реВрдкреЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рддреБрд░рдВрдд рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред
рдмрд╛рд░ рдЧреНрд░рд╛рдл рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛:
GOTInfographicsPoster[ #1, " \" \" ( 1)", "ImageSize"->2000 ]&@ ( BarChart[ #[[;;,1]], PlotRangePadding->0, BarSpacing->{0.5,3}, BarOrigin->Left, AspectRatio->1.5, ImageSize->2000, ChartLabels->{#[[;;,2]],None}, ColorFunction-> Function[ {x},If[x>4000,Red,ColorData["Rainbow"][x/4000]] ], ColorFunctionScaling->False, PlotRange->{0,55000}, Frame->True, GridLines->{Range[0,60000,1000],None}, GridLinesStyle->LightGray, FrameTicks->{All,Automatic}, FrameLabel-> { {None,None}, Style[#,FontFamily->"Open Sans Light",16]&/@ { " , ", " , " } }, Background->GrayLevel[0.95] ]&@ KeyValueMap[ { Callout[ #[[1]], #[[2]], If[#[[1]]>20000,Bottom,Right], If[#[[1]]>4000,Scaled[1/2],Automatic] ]&/@ Transpose[{#2[[;;,2]],#2[[;;,1]]}], #1 }&, SortBy[ GroupBy[ KeyValueMap[ {#1,#2}&, Merge[ $GOTEpisodeData[[All,"LocationTime"]], Total[Flatten[#]]& ] ], #[[1,1]]&, SortBy[ Transpose[ { #[[;;,1]] /. { {x_String,y_String}:>y, {x_String}:>x }, #[[;;,2]] } ] /. {"",_}:>Nothing, Last[#]& ]& ], Total[#[[;;,2]]]& ] ] )

(
рдореВрд▓ )
рдкрд╛рдИ рдЪрд╛рд░реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛:
{ Print[ GOTInfographicsPoster[ #1, " \" \" ( 2)", "ImageSize"->1500 ]&@ stripLineInfographics[ #, "Reverse"->False, "Gaps"->{75,50}, "ColorFunctionRight"->ColorData["Rainbow"] ] ], Print[ GOTInfographicsPoster[ #1, " \" \" \n( )", "ImageSize"->1500 ]&@ stripLineInfographics[ #, "Reverse"->True, "Gaps"->{50,75}, "ColorFunctionRight"->ColorData["Rainbow"] ] ] }&@ SortBy[ GroupBy[ KeyValueMap[ {#1,#2}&, Merge[ $GOTEpisodeData[[All,"LocationTime"]], Total[Flatten[#]]& ] ], #[[1,1]]&, SortBy[ Transpose[ { #[[;;,1]] /. {{x_String,y_String}:>y,{x_String}:>x}, #[[;;,2]] } ] /. {"",_}:>Nothing, Last[#]& ]& ], -Total[#[[;;,2]]]& ];

(
рдореВрд▓ )

(
рдореВрд▓ )
рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдЕрднрд┐рдиреЗрддрд╛ рдХрд┐рди рдлрд┐рд▓реНрдореЛрдВ рдореЗрдВ рдЦреЗрд▓реЗ рд╣реИрдВ рдФрд░ рд╡реЗ рдХрд┐рддрдиреЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ?
рдмреЗрд╢рдХ, рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдиреЗ рдЕрднреА рднреА рдмрд╣реБрдд рдХреБрдЫ рдЦреЗрд▓рд╛ рд╣реИред рд╣рдо рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡реИрд░рд┐рдПрдмрд▓
$ GOTCharactersInAnotherFilms рдбреЗрдЯрд╛
рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рдкрд░ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреА рдХреМрди рд╕реА рдлрд┐рд▓реНрдореЗрдВ
рдЪрд▓рддреА рд╣реИрдВ ред
$GOTCharactersInAnotherFilms= SortBy[ Map[ { #[[1]], #[[2]][[;;,"characterName"]], If[ Head[#[[3]]]===Missing, 0, (* else *) StringCases[#[[3]],DigitCharacter..] /. x_/;Length[x]>0:>ToExpression[x] ] /. {{x_}:>x,{}->0} }&, Lookup[ Values[GOTRawData["costars.json"]], {"title","actors","year"} ] ], -Length[#[[2]]]& ];
рдЕрдм рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЕрднрд┐рдиреЗрддрд╛ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЙрд╕рдиреЗ рдХрд┐рди рдлрд┐рд▓реНрдореЛрдВ рдореЗрдВ рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ
$ GOTCharactersFilmography рдЪрд░ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ред
$GOTCharactersFilmography= Association@ SortBy[ Select[ #-> SortBy[ Cases[ $GOTCharactersInAnotherFilms, {film_,list_/;MemberQ[list,#],year_}:> {film,year} ], -Last[#]& ]&/@ $GOTCharacters, Length[#[[2]]]>0& ], -Length[#[[2]]]& ];
рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ "рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕" рдХреЗ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреА рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдХреМрди рд╕реА рдлрд╝рд┐рд▓реНрдореЗрдВ рд╣реИрдВ:
GOTInfographicsPoster[ #1, " , \" \"", "ImageSize"->800 ]&@ DateHistogram[ DeleteMissing@ Lookup[Values[GOTRawData["costars.json"]],"year"], ColorFunction->"Rainbow", ImageSize->800, Background->GrayLevel[0.95] ]

рдРрд╕реА рдлрд┐рд▓реНрдореЗрдВ рдЬрд┐рдирдореЗрдВ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЕрднрд┐рдиреЗрддрд╛ рдиреЗ рдирд┐рднрд╛рдИ:
GOTInfographicsPoster[ #1, " 20 \"\" \" \"", "ImageSize"->1500 ]&@ Grid[ { #/.$characterCardFull, TextCell[ Grid[ KeyValueMap[ {#1/.{0->"."},Row[#2," - "]}&, GroupBy[#,Last,#[[;;,1]]&] ], Alignment->{{Center,Left},{Top,Top}} ], FontFamily->"Open Sans Light", FontSize->14, TextAlignment->Left, LineSpacing->{0.9,0,0} ]&@ $GOTCharactersFilmography[#] }&/@ $GOTCharacters[[1;;20]], Alignment->{{Center,Left},Center}, ItemSize->{{20,70},Automatic}, Background->GrayLevel[0.95], Dividers->{None,{None,{Gray},None}} ]

(
рдореВрд▓ )
рд╣реИрд░реА рдкреЙрдЯрд░ рдореЗрдВ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдЕрднрд┐рдиреЗрддрд╛
GOTInfographicsPoster[ #," \" \" \" \"","ImageSize"->1500 ]&@ Grid[ { Style[#[[1]],FontFamily->"Open Sans Light",16,Bold], Row[Magnify[#,0.75]&/@(#[[2]]/.$characterCardFull)," "] }&/@ SortBy[ Select[ $GOTCharactersInAnotherFilms, StringMatchQ[ ToLowerCase@#[[1]],___~~"harry potter"~~___ ]& ], -Last[#]& ][ [{1,-1,2,3,4,5,6,7}] ], Background->GrayLevel[0.95], ItemSize->{{25,70},Automatic}, Dividers->{None,{None,{LightGray},None}}, Alignment->{{Center,Left},Center} ]

рд╕реНрдЯрд╛рд░ рд╡рд╛рд░реНрд╕ рдореЗрдВ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдЕрднрд┐рдиреЗрддрд╛
GOTInfographicsPoster[ #, " \" \" \" \"", "ImageSize"->1100 ]&@ Grid[ { Style[#[[1]],FontFamily->"Open Sans Light",16,Bold], Row[Magnify[#,0.75]&/@(#[[2]]/.$characterCardFull)," "] }&/@ SortBy[ Select[ $GOTCharactersInAnotherFilms, StringMatchQ[ ToLowerCase@#[[1]],___~~"star wars"~~___ ]& ], -Last[#]& ], Background->GrayLevel[0.95], ItemSize->{{25,45},Automatic}, Dividers->{None,{None,{LightGray},None}}, Alignment->{{Center,Left},Center} ]

рдХреИрд░рд┐рдмрд┐рдпрди рдХреЗ рд╕рдореБрджреНрд░реА рдбрд╛рдХреВ рдореЗрдВ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдЕрднрд┐рдиреЗрддрд╛
GOTInfographicsPoster[ #, " \" \" \" \"", "ImageSize"->1300 ]&@ Grid[ { Style[#[[1]],FontFamily->"Open Sans Light",16,Bold], Row[Magnify[#,0.75]&/@(#[[2]]/.$characterCardFull)," "] }&/@ SortBy[ Select[ $GOTCharactersInAnotherFilms, StringMatchQ[ ToLowerCase@#[[1]],___~~"pirates of the"~~___ ]& ], -Last[#]& ], Background->GrayLevel[0.95], ItemSize->{{25,50},Automatic}, Dividers->{None,{None,{LightGray},None}}, Alignment->{{Center,Left},Center} ]

рдЬрд┐рд╕рдореЗрдВ рдлрд┐рд▓реНрдореЛрдВ / рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдореЗрдВ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдХрдИ рдХрд▓рд╛рдХрд╛рд░ рд╣реИрдВ
GOTInfographicsPoster[ #, " () \" \"", "ImageSize"->2000 ]&@ Grid[ { Style[#[[1]],FontFamily->"Open Sans Light",16,Bold], Row[Magnify[#,0.75]&/@(#[[2]]/.$characterCardFull)," "] }&/@ SortBy[ Select[$GOTCharactersInAnotherFilms,Length[#[[2]]]>5&], -Length[#[[2]]]& ], Background->GrayLevel[0.95], ItemSize->{{20,100},Automatic}, Dividers->{None,{None,{LightGray},None}}, Alignment->{{Center,Left},Center} ]

(
рдореВрд▓ )
рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдЕрднрд┐рдиреЗрддрд╛ рдХрд┐рддрдиреЗ рдирд┐рдХрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ
рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдХрд▓рд╛рдХрд╛рд░ рдПрдХ рд╕рд╛рде рдХрд┐рддрдиреЗ рдЪрд┐рддреНрд░реЛрдВ (рдлрд┐рд▓реНрдореЛрдВ, рд╕реАрд░реАрдЬрд╝ рдЖрджрд┐) рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдПрдХ рдЧреНрд░рд╛рдл рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗред рд░реЗрдЦрд╛ рдЬрд┐рддрдиреА рдореЛрдЯреА рдФрд░ рд▓рд╛рд▓ рд╣реЛрддреА рд╣реИ, рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреА рдЗрд╕ рдЬреЛрдбрд╝реА рдХреА рдЙрддрдиреА рд╣реА рд╕рд╛рдорд╛рдиреНрдп рддрд╕реНрд╡реАрд░реЗрдВ рд╣реИрдВред (
рдореВрд▓ )
GOTInfographicsPoster[ #, " \" \"", "ImageSize"->2500 ]&@ ( ConnectedGraphComponents[ GOTGraphPlot[#,1,"ImageSize"->2500,"MaxThickness"->20] ][ [1] ]&@ Tally[ UndirectedEdge@@@ Map[ Sort, Flatten[ Map[ Subsets[#,{2}]&, Select[ Values[GOTRawData["costars.json"]][ [ ;;, "actors", All, "characterName" ] ], Length[#]>1& ] ], 1 ] ] ] )

рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдореЗрдВ рдмрд╛рддрдЪреАрдд
рд╕рдВрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдХрдИ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдкрд╕рдВрдж рд╣реИрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреМрди рд╕реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╣реИ:
GOTInfographicsPoster[ #, " , \" \"", "ImageSize"->1000 ]&@ BarChart[ #, BarSpacing->{0.05,1}, AspectRatio->1/2, ImageSize->1000, ChartLabels->{Keys[#],Range[10]}, ColorFunction->Function[{x},ColorData["Rainbow"][x]], GridLines->{None,Range[0,10000,500]}, FrameLabel-> Map[ Style[#,FontFamily->"Open Sans",20,Bold]&, {" "," "} ], Frame->True, Background->GrayLevel[0.95], PlotRangePadding->0, PlotRange->All ]&@ GroupBy[ Map[ {#[[1;;2]],Total[#[[3]][[;;,"count"]]]}&, Lookup[ GOTRawData["wordcount.json"]["count"], {"seasonNum","episodeNum","text"} ] ], #[[1,1]]&, #[[;;,2]]& ]

рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ "рдЧреЗрдо рдСрдл рдереНрд░реЛрдВрд╕" рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ "рдмрдХрд╡рд╛рд╕" рдХреМрди рд╣реИ - рдЙрддреНрддрд░ рдХрд╛рдлреА рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЯрд╛рдпрд░рд┐рдпрди рдХрд╛ рдЕрд▓рдЧрд╛рд╡ рдЙрд╕рдХреЗ рдирд┐рдХрдЯрддрдо рдЪрд░рд┐рддреНрд░ рд╕реЗ рд▓рдЧрднрдЧ 2 рдЧреБрдирд╛ рд╣реИред
GOTInfographicsPoster[ #1, " \" \"?", "ImageSize"->1500 ]&@ ( ( BarChart[ #1[[1;;All,1]], PlotRangePadding->0, BarSpacing->0.25, BarOrigin->Left, AspectRatio->1.9, ImageSize->1500, ChartLabels->#1[[1;;All,2]], Frame->True, GridLines->{Range[0,10^5,10^3],None}, ColorFunction->ColorData["Rainbow"], FrameLabel-> { {None,None}, Style[#,FontFamily->"Open Sans Light",16]&/@ { " ", " " } }, FrameTicks->{Automatic,{All,All}}, Background->GrayLevel[0.95] ]& )[ KeyValueMap[ {#2,#1/.$characterCardShortSmall}&, Select[ SortBy[ GroupBy[ Flatten[ GOTRawData["wordcount.json"]["count"][ [;;,"text"] ] ], #[["name"]]&, Total[#[[;;,"count"]]]& ], #& ], #>1000& ] ] ] )

рдЕрдВрдд рдореЗрдВ, рд╣рдо рдПрдХ рдЖрд░реЗрдЦ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдХреНрд░реАрди рд╕рдордп рдХреА рдорд╛рддреНрд░рд╛ рдФрд░ рдЪрд░рд┐рддреНрд░ рджреНрд╡рд╛рд░рд╛ рдмреЛрд▓реЗ рдЧрдП рд╢рдмреНрджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдПрдХ рд╕рд╛рде рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ:
GOTInfographicsPoster[ #1, " \" \"\n( )", "ImageSize"->2000 ]&@ Module[{data1,data2,intersection}, data1= Merge[ $GOTEpisodeData[[;;,"ScreenTime"]],Total[Flatten[#]]& ]; data2= GroupBy[ Flatten[ GOTRawData["wordcount.json"]["count"][[;;,"text"]] ], #[["name"]]&, Total[#[[;;,"count"]]]& ]; intersection=Intersection[Keys@data1,Keys@data2]; ListPlot[ Callout[{data1[#],data2[#]},#/.$characterCardShortSmall]&/@ intersection, AspectRatio->1, ImageSize->2000, PlotRange->All, ScalingFunctions->{"Log10","Log10"}, GridLines-> { {10,100}~Join~Range[0,10^5,1000], {10,100}~Join~Range[0,10^5,1000] }, Frame->True, FrameTicks->All, FrameLabel-> ReplaceAll[ { {1,1}" ", {1,1}" , " }, x_String:>Style[x,FontFamily->"Open Sans",20,Bold] ], Background->GrayLevel[0.95], PlotMarkers->{Automatic,Small}, GridLinesStyle->GrayLevel[0.85] ] ]

(
рдореВрд▓ )
рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдХрд╛ рд▓рд┐рдВрдЧ: рдХреМрди рдЕрдзрд┐рдХ рд╣реИ, рдкреБрд░реБрд╖ рдпрд╛ рдорд╣рд┐рд▓рд╛?
рдЪрд░рд┐рддреНрд░ рдирд╛рдо рд╕реЗ рд▓рд┐рдВрдЧ:
$gender= <| Flatten[ KeyValueMap[ Thread[#2->#1]&,GOTRawData["characters-gender-all.json"] ] ] ~ Join ~ { "Aegon Targaryen"->"male", "Aerys II Targaryen"->"male", "Archmaester Marwyn"->"male", "Baratheon Guard"->"male", "Brandon Stark"->"male", "Child of the Forest"->"male", "Elia Martell"->"female", "Eon Hunter"->"male", "Goldcloak #1"->"male", "Goldcloak #2"->"male", "Knight of House Frey"->"male", "Knight of House Lynderly"->"male", "Kurleket"->"male", "Lannister Guardsman"->"male", "Lord Galbart Glover"->"male", "Male Prostitute"->"male", "Masha Heddle"->"female", "Meereen Slave Master"->"male", "Mikken"->"male", "Night's Watch Deserter"->"male", "Night's Watch Messenger"->"male", "Night's Watch Officer"->"male", "Pentoshi Servant"->"male", "Rhaella Targaryen"->"female", "Rhaenys Targaryen"->"female", "Stark Bannerman"->"male", "Stark Guard"->"male", "Wedding Band"->"male", "White Walker #2"->"male", "Willis Wode"->"male", "Young Ned"->"male" }|>
рд▓рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ "рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕" рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдХрд╛ рдЕрдиреБрдкрд╛рдд - рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐ рдорд╣рд┐рд▓рд╛ 3 рдкреБрд░реБрд╖ рд╣реИрдВред рдХрднреА-рдХрднреА рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреБрд░реБрд╖ рдкрд╛рддреНрд░ рдХреЗрд╡рд▓ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдорд╣рд┐рд▓рд╛ рдХреЗ рд▓рд┐рдП рд╣реА рдкреЛрд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ)ред
GOTInfographicsPoster[ #," " ]&@ Module[{labels,counts,percents}, {labels,counts}=Transpose[Tally[Values[$gender]]]; percents=PercentForm/@N[counts/Total[counts]]; PieChart[ counts, ChartLabels-> Map[ Style[ Row[#,"\n"], 20, Bold, Black, FontFamily->"Open Sans" ]&, Transpose[{labels,counts,percents}] ], ChartStyle->{LightRed,LightBlue}, ImageSize->600, Background->GrayLevel[0.95] ] ]
, .тАФ .
YouTube тАФ .
. .