ghdms

데이터 추가, 각 sub 완전그래프를 union

...@@ -7,13 +7,13 @@ MOVIE = db.movie ...@@ -7,13 +7,13 @@ MOVIE = db.movie
7 cur = MOVIE.find() 7 cur = MOVIE.find()
8 audience = {} 8 audience = {}
9 for c in cur: 9 for c in cur:
10 - audience[c["name"]] = c["audience"] 10 + audience[c["name"]] = c["audience"]
11 11
12 data = { 12 data = {
13 "명량": "최민식,류승룡,조진웅,김명곤,진구,이정현,권율,노민우,이승준,박보검,김원해,이해영,장준녕,김길동,김강일,강태영,김민석,박노식,최덕문,조복래,문영동,이주실,주석태,고경표,김태훈,한이진,신유람", 13 "명량": "최민식,류승룡,조진웅,김명곤,진구,이정현,권율,노민우,이승준,박보검,김원해,이해영,장준녕,김길동,김강일,강태영,김민석,박노식,최덕문,조복래,문영동,이주실,주석태,고경표,김태훈,한이진,신유람",
14 "극한직업": "류승룡,이하늬,이동휘,공명,진선규,홍은진,양현민,장진희,오정세,이중옥,송영규,신하균,김의성,김종수,허준석", 14 "극한직업": "류승룡,이하늬,이동휘,공명,진선규,홍은진,양현민,장진희,오정세,이중옥,송영규,신하균,김의성,김종수,허준석",
15 "신과함께-죄와 벌": "하정우,차태현,주지훈,김향기,마동석,김동욱,도경수,오달수,임원희,장광,정해균,김수안,정지훈,예수정,이준혁", 15 "신과함께-죄와 벌": "하정우,차태현,주지훈,김향기,마동석,김동욱,도경수,오달수,임원희,장광,정해균,김수안,정지훈,예수정,이준혁",
16 - "국제시장": " 황정민,김윤진,오달수,정진영,장영남,라미란,김슬기,정영기,맹세창,박재우,김재철", 16 + "국제시장": "황정민,김윤진,오달수,정진영,장영남,라미란,김슬기,정영기,맹세창,박재우,김재철",
17 "베테랑": "황정민,유아인,유해진,오달수,장윤주,김시후,오대환,정웅인,정만식,송영창,진경,유인영,박소담,이동휘,배성우,천호진", 17 "베테랑": "황정민,유아인,유해진,오달수,장윤주,김시후,오대환,정웅인,정만식,송영창,진경,유인영,박소담,이동휘,배성우,천호진",
18 "도둑들": "김윤석,김혜수,이정재,전지현,김해숙,오달수,김수현,최덕문,최진호,예수정", 18 "도둑들": "김윤석,김혜수,이정재,전지현,김해숙,오달수,김수현,최덕문,최진호,예수정",
19 "7번방의 선물": "류승룡,박신혜,갈소원,오달수,박원상,김정태,정만식,김기천,조덕현,조재윤,박길수", 19 "7번방의 선물": "류승룡,박신혜,갈소원,오달수,박원상,김정태,정만식,김기천,조덕현,조재윤,박길수",
...@@ -73,70 +73,70 @@ data = { ...@@ -73,70 +73,70 @@ data = {
73 "더 킹": "조인성,정우성,배성우,류준열,김의성,이석호,김민재,정성모,정은채,김소진,황승언,이주연,박정민,김규선,남명렬,오대환,정원중,정인기,이열음", 73 "더 킹": "조인성,정우성,배성우,류준열,김의성,이석호,김민재,정성모,정은채,김소진,황승언,이주연,박정민,김규선,남명렬,오대환,정원중,정인기,이열음",
74 "완득이": "김윤석,유아인,조병찬,조세현,강별,박효주,김영재,김상호,박수영,김동영", 74 "완득이": "김윤석,유아인,조병찬,조세현,강별,박효주,김영재,김상호,박수영,김동영",
75 "완벽한 타인": "유해진,조진웅,이서진,염정아,김지수,송하윤,윤경호,지우", 75 "완벽한 타인": "유해진,조진웅,이서진,염정아,김지수,송하윤,윤경호,지우",
76 - # "타워": "", 76 + "타워": "설경구,손예진,김상경,차인표,조민아,김인권,도지한,안성기,이한위,김성오,송재호,박철민,권현상,전배수,이창용,이주실,김수진,권태원,전국향,정인기",
77 - # "투사부일체": "", 77 + "투사부일체": "정준호,정웅인,김상중,박용식,최윤영,박은비,나현주,김동성,고은영,이배훈,박기연,김성근,유인나,이희석,일호,최선영,박민애,정다은,최영미,이송,최영진,김지헌,이혁수,이기열,강성필,한효주",
78 - # "독전": "", 78 + "독전": "조진웅,류준열,김주혁,김성령,박해준,차승원,진서연,이주영,서현우,강승현,정가람,김동영,금새록,정준원",
79 - # "추격자": "", 79 + "추격자": "김윤석,엄중호,하정우,서영희,박효주,김유정,최정우,정인기",
80 - # "공작": "", 80 + "공작": "황정민,이성민,조진웅,주지훈,박혜영,김지나,김소진,양현민,정기섭,김응수,최병모,정소리,최정인,곽자형,권범택,김인우,엄지만",
81 - # "바람과 함께 사라지다": "", 81 + "바람과 함께 사라지다": "차태현,오지호,민효린,성동일,고창석,송종호,이채영,김길동,김향기,신정근,천보근",
82 - # "님아, 그 강을 건너지 마오": "", 82 +# "님아, 그 강을 건너지 마오": "", #영화배우가 아님
83 - # "봉오동 전투": "", 83 + "봉오동 전투": "유해진,류준열,조우진,강민재,오승호,박지환,최유화,성유빈,이재인,홍상표,원풍연",
84 - # "조선명탐정 : 각시투구꽃의 비밀": "", 84 + "조선명탐정 : 각시투구꽃의 비밀": "김명민,한지민,오달수,김호연,최무성,우현,이재용,예수정,정인기",
85 - # "군도: 민란의 시대": "", 85 + "군도: 민란의 시대": "하정우,강동원,조진웅,마동석,정만식,김성균,주진모,이경영,이성민,윤지혜,김재영,노남석,송영창,김병옥,임현성",
86 - # "남산의 부장들": "", 86 + "남산의 부장들": "이병헌,이성민,곽도원,이희준,김소진,김승훈,박성근,서현우,지현준,박지일,이태형,주석태,이도국,김민상",
87 - # "범죄와의 전쟁: 나쁜놈들 전성시대": "", 87 + "범죄와의 전쟁: 나쁜놈들 전성시대": "최민식,하정우,신수정,조진웅,마동석,곽도원,김성균,송영창,김종수,권태원,김종구",
88 - # "신세계": "", 88 + "신세계": "이정재,최민식,황정민,박성웅,송지효,정영기,김홍파,장광,김윤성,최일화,권태원",
89 - # "도가니": "", 89 + "도가니": "정유미,공유,허재호,임현성,최진호,이예나,김현수,장광,전국환,엄효섭,남명렬,이장유,박혜진,김민상",
90 - # "내 아내의 모든 것": "", 90 + "내 아내의 모든 것": "임수정,이선균,류승룡",
91 - # "판도라": "", 91 + "판도라": "김남길,김영애,문정희,정진영,이경영,강신일,김대명,유승목,김주현,김명민,박선희,공정환,주석태,송철호,김영웅,김태훈",
92 - # "나쁜 녀석들: 더 무비": "", 92 + "나쁜 녀석들: 더 무비": "마동석,김상중,김아중,장기용,박형수,박상욱,김인우,지승현",
93 - # "가문의 위기(가문의 영광2)": "", 93 +# "가문의 위기(가문의 영광2)": "신현준,김수미,김원희,정준하,임형준,공형진,탁재훈,정호빈,김해곤", # 겹치는 배우가 100위까지 아직 없음
94 - # "연가시": "", 94 + "연가시": "김명민,문정희,김동완,이하늬,강신일,송영창,조덕현,최정우,전국환,정인기",
95 - # "강철비": "", 95 + "강철비": "정우성,곽도원,김갑수,김의성,이경영,조우진,정원중,김명곤,박은혜,김지호,안미나,원진아",
96 - # "강철중: 공공의 적 1-1": "", 96 + "강철중: 공공의 적 1-1": "설경구,정재영,김영필,강신일,유해진,탁트인,이상현,이재원,조한영,박창용,박태훈,김건호,김재득,임장현,정원중",
97 - # "아가씨": "", 97 + "아가씨": "김민희,김태리,하정우,조진웅,김해숙,문소리,김인우,이용녀",
98 - # "말아톤": "", 98 + "말아톤": "조승우,김미숙,이기영,백성현,안내상",
99 - # "용의자": "", 99 + "용의자": "공유,박희순,조성하,유다인,김성균,조재윤,김민재,김의성,송재림,최종률,남보라,기주봉,박지일",
100 - # "건축학개론": "", 100 + "건축학개론": "엄태웅,한가인,이제훈,배수지,고준희,조정석,신예진,유연석,조현철,김의성,이승호,박수영",
101 "댄싱퀸": "황정민,엄정화,정성화,오나라,박정민,박사랑,안은정,라미란,이대연,이한위,최우리,권병길,서동원", 101 "댄싱퀸": "황정민,엄정화,정성화,오나라,박정민,박사랑,안은정,라미란,이대연,이한위,최우리,권병길,서동원",
102 - # "7급 공무원": "", 102 + "7급 공무원": "김하늘,강지환,임성현,유승목,강규영,강신일,장남열,김형범,장영남",
103 - # "우리 생애 최고의 순간": "", 103 + "우리 생애 최고의 순간": "문소리,김정은,엄태웅,김지영,조은지,강재원,이미도,조영진,이봉규,정석용,하정우,정세형,김종언,김혜진,강선희,이수정,최욱,남궁은숙",
104 - # "꾼": "", 104 + "꾼": "현빈,유지태,배성우,박성웅,나나,안세하,최덕문,허성태",
105 - # "타짜-신의 손": "", 105 + "타짜-신의 손": "최승현,신세경,곽도원,유해진,김윤석,이하늬,김인권,이경영,고수희,오정세,박효주,이준혁,이동휘,김원해,고준,조경현,박수영,김민상",
106 - # "박수건달": "", 106 + "박수건달": "박신양,김정태,엄지원,정혜영,김성균,최일화,최지호,김형범,장원종",
107 - # "조선명탐정 : 사라진 놉의 딸": "", 107 + "조선명탐정 : 사라진 놉의 딸": "김명민,오달수,이연희,조관우,정원중,최무성,우현,황정민",
108 - # "역린": "", 108 + "역린": "현빈,정재영,조정석,한지민,조재현,박성웅,김성령,정은채,강민지,석현,송영창,김대명,천보근,서이숙,성유빈,전국향",
109 - # "남한산성": "", 109 + "남한산성": "이병헌,김윤석,박해일,고수,박희순,조우진,허성태,곽자형,박지일",
110 - # "암수살인": "", 110 + "암수살인": "김윤석,주지훈,문정희,진선규,이유준,김종수,권회수,허진,배해선,이봉련,정기섭,원현준,정종준",
111 - # "국가부도의 날": "", #100위 111 + "국가부도의 날": "김혜수,유아인,허준호,조우진,김기현,염혜란,조한철,엄효섭,장성범,동하,박진주,전배수,김민상", #100위
112 - # "쌍화점": "", 112 + "쌍화점": "조인성,주진모,송지효,임주환,여욱환,심지호,송중기,노민우,조강현,김태수,최승희,이승구,권태원",
113 - # "신기전": "", 113 + "신기전": "정재영,한은정,허준호,안성기,김명수,신정근,조원희,이광희,박윤희,조주현,최만수,박보람,박성배,이승근,이연우,김진규,이기오,주부진,이정인,김용재,김서현",
114 - # "82년생 김지영": "", 114 + "82년생 김지영": "정유미,공유,김미경,공민정,박성연,이봉련,김성철,이얼,손성찬,강애심,김정영",
115 - # "귀향": "", 115 + "귀향": "손숙,강하나,최리,임성철,정무성,류신,서미지,정인기,오지혜,김시은,이민영,이수현,이승현",
116 - # "신의 한 수": "", 116 + "신의 한 수": "정우성,안성기,이범수,김인권,이시영,안길강,최진혁,강다혜,유재상,유순철,김명수,안서현,이용녀,김소진",
117 - # "태풍": "", 117 + "태풍": "이정재,이미연,장동건,김혜정,김원진,추현경,허욱,신성일,김형찬,홍의정,김이호,나수원,박태호,김경환,김상용,민성주,민지환,박광설,유승권,박병렬,김철준,이주헌,박찬영",
118 - # "부러진 화살": "", 118 + "부러진 화살": "안성기,박원상,나영희,김지호,신종훈,김준배,김응수",
119 - # "끝까지 간다": "", 119 + "끝까지 간다": "이선균,조진웅,신정근,정만식,신동미,김동영,박보검,주석태,허정은",
120 - # "스파이": "", 120 + "스파이": "설경구,문소리,고창석,한예리,오대환,라미란,서승인,이대수,이성제,최승현,정인기",
121 - # "그것만이 내 세상": "", 121 + "그것만이 내 세상": "이병헌,윤여정,박정민,김성령,최리,백현진,김서원",
122 - # "돈": "", 122 + "돈": "류준열,유지태,조우진,손종학,신재민,원진아,정만식,임세미,김민재,김재영,김종수,진선규",
123 - # "악인전": "", 123 + "악인전": "마동석,김무열,김성규,강문봉,문동혁,오희준,유승목,최민철,김승현,우상전,김윤성,허동원",
124 - # "이끼": "", 124 + "이끼": "정재영,박해일,유준상,유선,허준호,유해진,김상호,김준배,강신일,이철민,박정재,최근현,윤아름,오순태,김철현",
125 - # "한반도": "", 125 + "한반도": "조재현,안성기,차인표,문성근,강신일,이윤주,최종원,최연식,이승철,백일섭,이한위,박길수,최일화",
126 - # "포화속으로": "", 126 + "포화속으로": "차승원,권상우,최승현,김승우,문재원,김혜성,신현탁,신경선,추종범,김윤성,김한준,윤승훈,김호원",
127 - # "시동": "", 127 + "시동": "마동석,박정민,정해인,염정아,최성은,김종수,윤경호,김경덕",
128 - # "아이 캔 스피크": "", 128 + "아이 캔 스피크": "나문희,이제훈,박철민,염혜란,성유빈,김소진,이상희,정연주,이지훈,손숙,이재인,최수인",
129 - # "마녀": "", 129 + "마녀": "김다미,조민수,박희순,최우식,김하나,정다은,김기훈,최정우,고민시,오미희,김병옥,이주원",
130 - # "탐정: 리턴즈": "", 130 + "탐정: 리턴즈": "권상우,성동일,김수영,김승필,이광수,서영희,이일화,남명렬,손담비,최성원,박성일,오희준,정연주,김성규",
131 - # "공공의 적 2": "", 131 + "공공의 적 2": "설경구,정준호,유해진,강경덕,박웅,강신일,홍지연,전미애,박태수,남성훈,한재준,서영민,박상욱,최수경,변희봉",
132 - # "퀵": "", 132 + "퀵": "고창석,강예원,이민기,김인권,이건우,이새별,김병철,김재화,오정세,전국환,유승목,윤제문",
133 - # "친절한 금자씨": "", 133 + "친절한 금자씨": "이영애,최민식,권예영,김시후,남일우,김병옥,오달수,이승신,김부선,라미란,최정우,김유정",
134 - # "감기": "", 134 + "감기": "장혁,수애,박민하,남문철,유해진,이희준,김기현,이상엽,박효주,박정민,최병모,차인표,박예슬",
135 - # "스물": "", 135 + "스물": "김우빈,이준호,강하늘,오현경,정소민,이유비,정주연",
136 - # "거북이 달린다": "", 136 + "거북이 달린다": "김윤석,정경호,견미리,선우선,최수현,최권,신정근,이무생,유하복,차은재,김희원",
137 - # "헬로우 고스트": "", 137 + "헬로우 고스트": "차태현,강예원,이문수,고창석,장영남,천보근",
138 - # "하모니": "", 138 + "하모니": "김윤진,나문희,강예원,이다희,장영남,박준면,정수영,임채연,이선주,김호연,정혜원,신정원,박선희,지성원,박혜진",
139 - # "오싹한 연애": "", 139 + "오싹한 연애": "손예진,이민기,신동훈,조아라,이현진,이미도,황승언,김현숙",
140 # "방자전": "", 140 # "방자전": "",
141 # "형": "", 141 # "형": "",
142 # "마더": "", 142 # "마더": "",
...@@ -211,16 +211,41 @@ data = { ...@@ -211,16 +211,41 @@ data = {
211 # "명당": "", 211 # "명당": "",
212 } 212 }
213 213
214 -names = [] 214 +def named_union(graph1, graph2): #두 그래프 합성
215 + A = graph1.copy()
216 + B = graph2.copy()
217 + Aname = A.vs["name"][:]
218 + Bname = B.vs["name"][:]
219 + Aes = A.es[:]
220 + Bes = B.es[:]
221 + Anams = set(Aname)
222 + Bnams = set(Bname)
223 + A.add_vertices(list(Bnams - Anams))
224 + B.add_vertices(list(Anams - Bnams))
225 + nams = sorted(Anams | Bnams)
226 + Aind = [nams.index(nm) for nm in A.vs['name']]
227 + Bind = [nams.index(nm) for nm in B.vs['name']]
228 + A = A.permute_vertices(Aind)
229 + B = B.permute_vertices(Bind)
230 + Z = A | B
231 + Z.vs['name'] = nams
232 + Z.vs["label"] = Z.vs["name"][:]
233 + return Z
234 +
215 weight = {} 235 weight = {}
216 keys = [] 236 keys = []
237 +n = 0
238 +top = data["명량"].split(",")
239 +G = Graph.Full(len(top))
240 +G.vs["name"] = top[:]
241 +G.vs["label"] = G.vs["name"][:]
242 +del data["명량"]
217 for movie in data: 243 for movie in data:
218 actors = data[movie].split(",") 244 actors = data[movie].split(",")
219 - newActors = [] 245 + g = Graph.Full(len(actors))
220 - for actor in actors: 246 + g.vs["name"] = actors[:]
221 - if(actor not in names): 247 + g.vs["label"] = g.vs["name"][:]
222 - newActors.append(actor) 248 + G = named_union(G, g)
223 - names += newActors
224 249
225 for i in range(0, len(actors)-1): 250 for i in range(0, len(actors)-1):
226 for j in range(i+1, len(actors)): 251 for j in range(i+1, len(actors)):
...@@ -235,21 +260,48 @@ for movie in data: ...@@ -235,21 +260,48 @@ for movie in data:
235 else: 260 else:
236 weight[join]["audience"] += audience[movie] 261 weight[join]["audience"] += audience[movie]
237 weight[join]["count"] += 1 262 weight[join]["count"] += 1
238 -#G = Graph.Full(len(names)) 263 + # n += 1
239 -#G.vs["name"] = names 264 + # if(n > 1):
240 -#G.vs["label"] = G.vs["name"] 265 + # break
241 266
242 -topten = sorted(keys, key=lambda n: weight[n]["audience"] / weight[n]["count"], reverse=True)[:10] 267 +topten = sorted(keys, key=lambda n: weight[n]["count"], reverse=True)[:10]
243 for t in topten: 268 for t in topten:
244 print(t, weight[t]) 269 print(t, weight[t])
245 270
246 -# out = plot(G, 271 +names = G.vs["name"][:]
247 -# bbox = (2000, 2000), 272 +edge_weight = [1] * len(G.es)
248 -# vertex_size = 20, 273 +for k in keys:
249 -# vertex_label_size = 12, 274 + if(weight[k]["count"] == 1):
250 -# vertex_label_dist = 1, 275 + continue
251 -# vertex_label_angle = 2, 276 + [s, e] = k.split(",")
252 -# autocurve = True, 277 + sIdx, eIdx = names.index(s), names.index(e)
253 -# layout = G.layout("fr") 278 + edges = G.es.select(_between = ([sIdx], [eIdx]))
254 -# ) 279 + for e in edges:
255 -# out.save("test.png") 280 + edge_weight[e.index] = weight[k]["count"]
281 +
282 +names1, names2 = G.vs["name"][:], G.vs["name"][:]
283 +
284 +bn = G.betweenness(weights=edge_weight)
285 +print(sorted(bn, reverse=True)[:10])
286 +print(sorted(names1, key=lambda n: bn[names2.index(n)], reverse=True)[:10])
287 +
288 +degree = G.degree()
289 +print(sorted(degree, reverse=True)[:10])
290 +print(sorted(names1, key=lambda n: degree[names2.index(n)], reverse=True)[:10])
291 +
292 +cn = G.closeness(weights=edge_weight)
293 +print(sorted(cn, reverse=True)[:10])
294 +print(sorted(names1, key=lambda n: cn[names2.index(n)], reverse=True)[:10])
295 +
296 +out = plot(G,
297 + bbox = (2500, 2500),
298 + vertex_size = 15,
299 + vertex_label_size = 9,
300 + vertex_label_dist = 1,
301 + vertex_label_angle = 2,
302 + #autocurve = True,
303 + #layout = G.layout("fr")
304 + )
305 +out.save("test.png")
306 +
307 +#C:\Users\ghdms\2014104137\소스코드\movie_full.py
...\ No newline at end of file ...\ No newline at end of file
......