рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕: рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдЗрдВрдлреЛрдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдСрди рдорд░реНрдбрд░реНрд╕, рд╕реЗрдХреНрд╕, рдЯреНрд░реИрд╡рд▓рд┐рдВрдЧ рд╡реЗрд╕реНрдЯрд░реЛрд╕ рдПрдВрдб рдореЛрд░




рдореВрд▓ рдкреЛрд╕реНрдЯ + рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рдФрд░ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛

рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛


рдЪрд░рд┐рддреНрд░ рд╕рдВрдмрдВрдз
- рдХрд┐рд╕рдиреЗ рдХрд┐рд╕рдХреЛ рдЬрдиреНрдо рджрд┐рдпрд╛?
- рдХрд┐рд╕рдХреЛ рднрд╛рдИ рдпрд╛ рдмрд╣рди
- рд╣рддреНрдпрд╛ рдХрд┐рд╕рдиреЗ рдХреА?
- рдХреМрди рдХрд┐рд╕рдХреА рд╕реЗрд╡рд╛ рдХрд░рддрд╛ рд╣реИ?
- рдЬрд┐рд╕рдХреА рдХрд┐рд╕реА рд╕реЗ рд╢рд╛рджреА рдпрд╛ рд╕рдЧрд╛рдИ рд╣реЛ рдЧрдИ рд╣реЛ
- рдХрд┐рд╕рдХреЗ рд╕рд╛рде рд╕реЗрдХреНрд╕ рдХрд┐рдпрд╛ рдерд╛?
- рдПрдХ рдХреЙрд▓рдо рдкрд░ рд╕рднреА рд░рд┐рд╢реНрддреЗ
рдкрд╛рддреНрд░реЛрдВ рдХреЛ рджреГрд╢реНрдп рд╕реЗ рдЬреЛрдбрд╝рдирд╛
рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХрд╛ рд╕рдмрд╕реЗ "рд▓реЛрдХрдкреНрд░рд┐рдп" рдЪрд░рд┐рддреНрд░ рдХреМрди рд╣реИ?
- рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реАрди рд╕рдордп рдХреА рдорд╛рддреНрд░рд╛
- рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХрд┐рддрдиреЗ рд╡рд░реНрдг рдереЗ?
- рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рдПрдкрд┐рд╕реЛрдб рдореЗрдВ рдХреМрди рд╕рд╛ рдкрд╛рддреНрд░ рдерд╛?
рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕реНрдерд╛рди "рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕"
- рд╕реНрдерд╛рдиреЛрдВ рдХрд╛ рдирдХреНрд╢рд╛ "рдЧреЗрдо рдСрдлрд╝ рдереНрд░реЛрдиреНрд╕"
- рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рд╢реНрд░реГрдВрдЦрд▓рд╛ рддрдХ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдмрдврд╝рддреЗ рдЪрд░рд┐рддреНрд░
- "рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕" рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ "рдХрд┐рд╕рдиреЗ" рдпрд╛рддреНрд░рд╛ рдХреА?
- рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕реНрдерд╛рди "рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕" (рд╕реНрдХреНрд░реАрди рд╕рдордп рдкрд░)
рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдЕрднрд┐рдиреЗрддрд╛ рдХрд┐рди рдлрд┐рд▓реНрдореЛрдВ рдореЗрдВ рдЦреЗрд▓реЗ рд╣реИрдВ рдФрд░ рд╡реЗ рдХрд┐рддрдиреЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ?
- рдРрд╕реА рдлрд┐рд▓реНрдореЗрдВ рдЬрд┐рдирдореЗрдВ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЕрднрд┐рдиреЗрддрд╛ рдиреЗ рдирд┐рднрд╛рдИ:
- рд╣реИрд░реА рдкреЙрдЯрд░ рдореЗрдВ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдЕрднрд┐рдиреЗрддрд╛
- рд╕реНрдЯрд╛рд░ рд╡рд╛рд░реНрд╕ рдореЗрдВ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдЕрднрд┐рдиреЗрддрд╛
- рдХреИрд░рд┐рдмрд┐рдпрди рдХреЗ рд╕рдореБрджреНрд░реА рдбрд╛рдХреВ рдореЗрдВ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдЕрднрд┐рдиреЗрддрд╛
- рдХрд┐рди рдлрд┐рд▓реНрдореЛрдВ / рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдореЗрдВ "рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕" рдХреЗ рдХрдИ рдХрд▓рд╛рдХрд╛рд░ рд╣реИрдВ
- рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдХрд▓рд╛рдХрд╛рд░ рдЖрдкрд╕ рдореЗрдВ рдХрд┐рддрдиреЗ рдирд┐рдХрдЯ рд╣реИрдВ
рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдореЗрдВ рдмрд╛рддрдЪреАрдд
рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдХрд╛ рд▓рд┐рдВрдЧ: рдХреМрди рдЕрдзрд┐рдХ рд╣реИ, рдкреБрд░реБрд╖ рдпрд╛ рдорд╣рд┐рд▓рд╛?
рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЧреЗрдо рдСрдл рдереНрд░реЛрдиреНрд╕ рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдореЗрдВ рд╡реБрд▓реНрдлреНрд░реЗрдо рд▓реИрдВрдЧреНрд╡реЗрдЬ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рдпрд╣ рд▓реЗрдЦ рдбреЗрдЯрд╛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкрд░ рдЬреНрдпрд╛рджрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрддрд╛; рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдкреЛрд╕реНрдЯ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЗрдиреНрдлреЛрдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдФрд░ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдирд┐рд░реНрдорд┐рдд рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗрдВрдЧреЗ рдЬреЛ рдЗрд╕ рдЕрджреНрднреБрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ)ред

рдкреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рдЗрдиреНрдлреЛрдЧреНрд░рд╛рдлрд┐рдХ рдореИрдереЗрдореЗрдЯрд┐рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╣реИ, рдЬрд┐рд╕реЗ рд╣реЗрдбрд░ рдореЗрдВ рд▓рд┐рдВрдХ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЪрд░рд┐рддреНрд░ рд╕рдВрдмрдВрдз


рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░рд┐рддреНрд░ рд░рд┐рд╢реНрддреЛрдВ рдХреЗ рдПрдХ рдЧреНрд░рд╛рдл рдореЗрдВ рдХрд┐рдирд╛рд░реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ:

$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 тАФ .
. .

Source: https://habr.com/ru/post/hi451640/


All Articles