原始帖子+支持功能和源数据目录
角色关系-
谁生了谁?-
兄弟姐妹是谁-
谁杀了谁?-
谁为谁服务?-
与某人结婚或订婚的人-
谁与谁发生性关系?-
一列中的所有关系通过场景链接角色谁是《权力的游戏》中最“受欢迎”的角色?-
角色的屏幕显示时间-
系列中有几个字符?-
哪个角色是《权力的游戏》中情节最多的角色?最受欢迎的地区“权力的游戏”-
位置地图“权力游戏”-
将权力游戏的角色从一个系列移到另一个系列-
谁从“权力的游戏”中“游历”最多?-
最受欢迎的地点“权力游戏”(在屏幕上显示)《权力的游戏》的演员上演了哪些电影?他们熟悉度如何?-
权力游戏中最受欢迎的演员出演的电影:-
哈利·波特中权力游戏的演员-
《星球大战》中权力游戏的演员-
加勒比海盗权力游戏的演员-
在哪部电影/系列中,“权力游戏”的演员很多-
权力游戏的演员之间的联系紧密权力游戏中的对话权力游戏性别角色:男人或女人是谁?
在本文中,我将讨论如何使用《权力的游戏》数据库以Wolfram Languge语言进行数据分析和可视化。 本文对数据解析没有太多的关注;我将单独讨论它。 相反,该帖子完全致力于有趣的信息图表及其创作。
我希望所构建的可视化效果会吸引那些喜欢这个精彩系列的人。
为帖子创建的信息图表在Mathematica文档中是交互式的,可以从标题中的链接下载。
角色关系
字符关系图中按类型的一组边:
$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]];


(其他卡片请参见
此处 )
谁是“权力的游戏”角色中最“旅行”的人?
根据韦斯特罗斯(Westeros),我们将找到《权力的游戏》中每个角色以任意单位行进的路径的长度,并查看谁走得最多。
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 — .
. .