centrality.py
28.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
from igraph import *
import pymongo
import matplotlib.pyplot as plt
conn = pymongo.MongoClient("localhost")
db = conn.test
MOVIE = db.movie
cur = MOVIE.find()
audiences = {}
salesPerScreens = []
salesPerScreensToObj = {}
for c in cur:
audiences[c["name"]] = c["audiences"]
salesPerScreens.append({"name": c["name"], "value": c["sales"] / c["screens"]})
salesPerScreensToObj[c["name"]] = round(c["sales"] / c["screens"], 5)
salesPerScreensTmp = salesPerScreens[:]
salesPerScreensSorted = sorted(salesPerScreensTmp, key=lambda n: salesPerScreens[salesPerScreens.index(n)]["value"], reverse=True)[:50]
data = {
"명량": "최민식,류승룡,조진웅,김명곤,진구,이정현,권율,노민우,이승준,박보검,김원해,이해영,장준녕,김길동,김강일,강태영,박노식,최덕문,조복래,문영동,이주실,주석태,고경표,김태훈,한이진,최창균,신창수,김현태,정재우,김구택,이재구,조하석",
"극한직업": "류승룡,이하늬,이동휘,공명,진선규,양현민,장진희,오정세,이중옥,송영규,신하균,김의성,김종수,허준석",
"신과함께-죄와 벌": "하정우,차태현,주지훈,김향기,마동석,김동욱,도경수,오달수,임원희,장광,정해균,김수안,정지훈,예수정,이준혁,남일우",
"국제시장": "황정민,김윤진,오달수,정진영,장영남,라미란,김슬기,이현,김민재,태인호,황선화,엄지성,장대웅,신린아,이예은,고윤,박선웅",
"베테랑": "황정민,유아인,유해진,오달수,장윤주,김시후,오대환,정웅인,정만식,송영창,진경,유인영,박소담,이동휘,배성우,천호진",
"도둑들": "김윤석,김혜수,이정재,전지현,김해숙,오달수,김수현,최덕문,최진호,예수정,채국희,기국서,주진모",
"7번방의 선물": "류승룡,박신혜,갈소원,오달수,박원상,김정태,정만식,김기천,조덕현,조재윤,박길수",
"암살": "전지현,이정재,하정우,오달수,조진웅,이경영,최덕문,김의성,박병은,김홍파,진경,김인우,심희섭,허지원,허정도,정인겸,정규수,이환,우상전",
"광해, 왕이 된 남자": "이병헌,류승룡,한효주,장광,김인권,심은경,박지아,이양희,전국향,신정근,양준모,문창길",
"신과함께-인과 연": "하정우,주지훈,김향기,마동석,김동욱,임원희,남일우,도경수,이준혁,정지훈,조한철,장광,정해균",
"택시운전사": "송강호,류준열,유해진,박혁권,최귀화,이정은,차순배,이봉련,류성현,허정도,신담수,엄태구,박민희,유은미,권순준,윤석호,이호철,이용이",
"부산행": "공유,정유미,마동석,김수안,최우식,안소희,김의성,예수정,박명신,최귀화,정석용,장혁진",
"변호인": "송강호,김영애,오달수,곽도원,임시완,송영창,정원중,조민기,이항나,이성민,차광수,한기중,심희섭,조완기,차은재",
"해운대": "설경구,하지원,박중훈,엄정화,이민기,강예원,김인권,송재호,김지영,여호민,성병숙,도용구,노준호,지대한,장명갑,최재섭,천보근,김유정,김유빈,김정운",
"괴물": "송강호,변희봉,박해일,배두나,고아성,오달수,박노식,고수희,윤제문,김뢰하,이재응,이동호",
"왕의 남자": "감우성,이준기,유해진,정진영,강성연,장항선,정석용,이승훈",
"기생충": "송강호,이선균,조여정,최우식,박소담,이정은,장혜진,박명훈,정지소,정현준",
"검사외전": "황정민,강동원,이성민,박성웅,김응수,신소율,주진모,김원해,김홍파,김병옥,박종환,전배수,박지환,손종학,김종수,한재영,민무제,이호철",
"엑시트": "조정석,윤아,고두심,박인환,황효은,김지영2,강기영,배유람,유수빈,정민성,박성일,신세휘,김강훈,김병순,김종구,이봉련",
"설국열차": "송강호,고아성",
"관상": "송강호,이정재,백윤식,조정석,이종석,김혜수,이도엽,김의성,정규수,채상우,이윤건,유상재",
"해적: 바다로 간 산적": "김남길,손예진,신정근,유해진,이경영,오달수,김태우,박철민,김원해,조달환,조희봉,정성화,최진리,이이경,안내상,김경식,이대연",
"수상한 그녀": "심은경,나문희,박인환,성동일,이진욱,김현숙,황정민2,김슬기,박형우,진영,한지은,정인기,장유,하연주,박혜진,홍석연,이상언,박승태,강한샘",
"백두산": "이병헌,하정우,마동석,전혜진,배수지,이상원,옥자연,한수현,강신철,이경영,조한철,최광일,김시아,임형국,박주환,남성준,서현우,김민식,박지홍,김준원,남문철,박성근",
"과속스캔들": "차태현,박보영,왕석현,임지규,황우슬혜,임승대,정원중,김기방,박영서",
"국가대표": "하정우,성동일,김지석,김동욱,최재환,이재응,이은성,이한위,이혜숙,김지영,현쥬니,황하나",
#"디워": "", #외국 배우
"공조": "현빈,유해진,김주혁,장영남,이해영,윤아,이동휘,공정환,엄효섭,신현빈,박민하,전국환,이이경,박진우,박형수",
"히말라야": "황정민,정우,조성하,김인권,라미란,김원해,이해영,전배수,정규수,성병숙",
"밀정": "송강호,공유,한지민,엄태구,신성록,허성태,서영주,정유안,이수광,고준,최유화,김동영,곽자형,조영규,이설구,권수현,이환,유상재,한수연,남문철,김수웅,최장원,허형규,백인권,정도원,신성일,김의건",
"최종병기 활": "박해일,류승룡,김무열,문채원,이한위,김구택,이경영,박기웅,이승준,이재구,박노식,이다윗,전민서,문영동,김현태,강태영,조하석,김길동,정제우,서동구,지건우",
"써니": "유호정,심은경,강소라,고수희,홍진희,김민영,김보미,이연경,남보라,민효린,박진주,박영서,김예원,천우희,정원중,김영옥,김시후,김혜옥,하승리",
"1987": "김윤석,하정우,유해진,김태리,이희준,박희순,서현우,박지환,이화룡,이창훈,김수진,박경혜,현봉식,김승훈,김경덕,유승목,이용직,박지홍,김의성,최광일,김종수,김혜정,조우진,임철형,이현균",
"베를린": "하정우,한석규,류승범,전지현,이경영,최무성,곽도원,김서형,배정남",
"마스터": "이병헌,강동원,김우빈,엄지원,오달수,박해수,진경,김정우,우도환,배정남,조현철,정원중,주석태,유연수,이순원,정수교,허형규",
"터널": "하정우,배두나,오달수,조현철,정석용,박혁권,남지현,신정근,유승목,이철민",
"내부자들": "이병헌,조승우,백윤식,이경영,김홍파,배성우,조재윤,김대명,조우진,이엘,정만식,김병옥,김의성,박진우,남일우",
"인천상륙작전": "이정재,이범수,진세연,정준호,박철민,김병옥,길금성,신수항,김희진,정민지,김진우,함형기,나야,이충구,성혁,고윤,장준학,진용욱,박정원,양범,이해준,윤석진,김중희,윤다영,반세정,조원희,송경철,김중기,김제열,이창세",
"럭키": "유해진,이준,조윤희,임지연,조한철,김민상,차엽,김지안,성병숙,박승태,고준,이용녀,금광산,김한규,차순형,이승철,이성욱,정희태,이동용,김서현,송요셉",
"은밀하게 위대하게": "김수현,박기웅,이현우,손현주,박혜숙,고창석,신정근,김성균,장광,홍경인,이채영,최우식,구승현,조용진,이연경,엄태구,리민,조영진,윤원석,박정기,고인범,김법래",
"범죄도시": "마동석,윤계상,조재윤,최귀화,임형준,진선규,홍기준,허동원,하준,김성규,박지환,허성태,민경진,엄지성,김구택,박상규,유지연,배진아,윤병희,이도군",
"곡성": "곽도원,황정민,천우희,김환희,허진,장소연,김도윤,손강국,박성연,전배수,정미남,최귀화",
"화려한 휴가": "김상경,안성기,이요원,이준기,박철민,박원상,송재호,나문희,권태원,엄효섭,박용수,손병호,이얼",
"좋은 놈, 나쁜 놈, 이상한 놈": "송강호,이병헌,정우성,윤제문,류승수,송영창,손병호,오달수,이청아",
"늑대소년": "송중기,박보영,장영남,유연석,김향기,이영란,유승목,서동수,우정국,남정희,구본임,안도규,신비",
"군함도": "황정민,소지섭,송중기,이정현,김수안,이경영,김민재,김중희,김인우,신승환,백승철,장성범,윤경호",
"웰컴 투 동막골": "신하균,정재영,강혜정,임하룡,서재경,류덕환,정재진,이용이,박남희,조덕현,유승목,심원철,강현중,리민,고관재,권오민,홍예인",
"사도": "송강호,유아인,문근영,전혜진,김해숙,박원상,진지희,박소담,서예지,이광일,이대연,강성해,최덕문,정석용,최민철,박명신,조승연,엄지성",
"아저씨": "원빈,김새론,김태훈,김희원,김성오,이종필,김효서,송영창,황화순,남경읍",
"미녀는 괴로워": "김아중,주진모2,김현숙,성동일,임현식,이한위,지서윤,명규,박노식,정성윤,베니",
"전우치": "강동원,임수정,김윤석,유해진,송영창,주진모,김상호,선우선,공정환,권태원,이숙,박남희,이용녀,김기천",
"연평해전": "김무열,진구,이현우,김지훈,장준학,주희중,이완,김하균,한이진,강한샘,김동범,이철민,박정학,천지유,이재원,김도혁,황인무,한강일,서동건,이한종,유형균,김선길,최건영,정해민,조하늘,김충길,서상원,황세정,장의수,권화운",
"타짜": "조승우,김혜수,백윤식,유해진,김응수,김상호,김윤석,주진모,김경익,이수경,김정난,권태원,조상건,서동수,백도빈",
"청년경찰": "박서준,강하늘,성동일,박하선,고준,이호정,조준",
"숨바꼭질": "손현주,문정희,전미선,김원해,정준원,김수안,김지영3,이준혁,노수산나,이영석,이영미,성유빈,엄지성,허남일,리민,이승희,백종우,김정우,정민성,조한철,조시내",
"덕혜옹주": "손예진,박해일,윤제문,라미란,정상훈,박수영,김소현,박주미,안내상,김재욱,여회현,신린아,이효제,이채은,이세나,김승훈,도용구,이승진,금새록,이황의,정세형,안상우,송서하,이중현",
"더 테러 라이브": "하정우,이경영,전혜진,이다윗,김소진,김홍파,김해인,한수현,이청희,강진아,강신철,최진호,김대명",
"감시자들": "설경구,정우성,한효주,김병옥,진경,이준호,손민석,이태형,강신하,이동휘,이화정,박지훈,김지훈,신성일,변요한,장원형,박지연,최원,변정현,이동진,이도윤,정재호,김준우,이현균",
"검은 사제들": "김윤석,강동원,박소담,김의성,김병옥,이호재,남일우,손종학,조수향,박웅,이정열,김소숙,민진웅,유수미",
"안시성": "조인성,남주혁,박성웅,배성우,엄태구,설현,박병은,오대환,정은채,유오성,성동일,정지훈,여회현,장광",
"의형제": "송강호,강동원,전국환,박혁권,윤희석,최정우,정인기,조석현,차엽,권범택",
"더 킹": "조인성,정우성,배성우,김아중,류준열,김의성,김민재,정성모,정은채,김소진,황승언,오대환,정인기,송영창,고아성,박정민,조우진,정원중,류태호,한수연,이주연,성동일,이열음,김규선,장명갑,송형수,남문철,남명렬,최귀화",
"완득이": "김윤석,유아인,박수영,김상호,김영재,박효주,강별,김동영",
"완벽한 타인": "유해진,조진웅,이서진,염정아,김지수,송하윤,윤경호,지우",
"타워": "설경구,손예진,김상경,김인권,안성기,송재호,이주실,이한위,권태원,전국향,정인기,차인표,전배수,박준혁,김성오,민영,이주하,조민아,도지한,이현조,권현상,이창용,김수진,박호영,박재웅",
"투사부일체": "정준호,정웅인,김상중,정운택,강성필,최윤영,한효주,박용기,임세호,박용식,이기열,전창걸",
"독전": "조진웅,류준열,김주혁,김성령,박해준,남문철,서현우,강승현,정준원,정가람,진서연,이주영,김동영,금새록",
"추격자": "김윤석,하정우,서영희,박효주,김유정,최정우,정인기,구본웅,민경진", #68위. 500만 이상
# "공작": "황정민,이성민,조진웅,주지훈,김홍파,정소리,기주봉,김응수,채용,박진영,남문철,최병모,김인우,정기섭,이승준,양현민,허승,엄지만,백승익,권범택,최정인,김소진,박혜영,김지나,곽자형,조주희",
# "바람과 함께 사라지다": "차태현,오지호,민효린,성동일,신정근,고창석,송종호,이채영,김길동,김향기,천보근,김구택,독고준",
# #"님아, 그 강을 건너지 마오": "", #영화배우가 아님
# "봉오동 전투": "유해진,류준열,조우진,박지환,최유화,성유빈,이재인,홍상표,원풍연,양현민",
"조선명탐정 : 각시투구꽃의 비밀": "김명민,한지민,오달수,최무성,우현,이재용,예수정,정인기", #salesPerScreensSorted 43위
# "군도: 민란의 시대": "하정우,강동원,조진웅,마동석,정만식,김성균,주진모,이경영,이성민,윤지혜,김재영,송영창,김병옥,임현성,강현중",
# "남산의 부장들": "이병헌,이성민,곽도원,이희준,김소진,서현우,김승훈,박성근,지현준,박지일,이태형,주석태,이도국,김민상",
# "범죄와의 전쟁: 나쁜놈들 전성시대": "최민식,하정우,조진웅,마동석,곽도원,김성균,송영창,김종수,권태원,김종구,김혜은,김영선",
# "신세계": "이정재,최민식,황정민,박성웅,송지효,김홍파,장광,김윤성,최일화,권태원,나광훈,박로사,주진모",
# "도가니": "정유미,공유,김현수,정인서,백승환,임현성,김주령,최진호,장광,전국환,엄효섭,권홍석,김지영,엄지성,남명렬,박혜진,김민상,장유",
# "내 아내의 모든 것": "임수정,이선균,류승룡,이광수,김효준,이도아,김은경,염해란,이새로미,이진희,하복음",
# "판도라": "김남길,김영애,문정희,정진영,이경영,강신일,김대명,유승목,김주현,박선희,공정환,주석태,송철호,김영웅,김태훈2,주진모,송영창,배강유,김세동,김한종,박대원,심성효,박팔영,최효상,권홍석,허선행,심영민,조덕현,손종학,김종구,장준녕,조한철,임승대,송영규,강석원,곽민석,정인기,백도빈,최명진,강태식,이승준,어성욱,형원,김태현,박용,이태형,강지원,오예설",
# "나쁜 녀석들: 더 무비": "마동석,김상중,김아중,장기용,박효준,김인우,이재윤,박원상,조영진,박형수,박상욱,한정현,전익령,김형묵,윤병희,지승현,강영묵",
"가문의 위기(가문의 영광2)": "신현준,김수미,김원희,정준하,임형준,공형진,탁재훈,정호빈,김해곤", #salesPerScreensSorted 21위
# "연가시": "김명민,문정희,김동완,이하늬,엄지성,염현서,강신일,송영창,조덕현,최정우,전국환,이형철,정인기,김세동,조한철,민경진",
# "강철비": "정우성,곽도원,김갑수,김의성,이경영,조우진,정원중,김명곤,박은혜,장현성,박선영,안미나,원진아,이재용,이윤건,김형종",
# "강철중: 공공의 적 1-1": "설경구,정재영,문성근,강신일,유해진,이문식,김남길,연제욱,정원중",
# "아가씨": "김민희,김태리,하정우,조진웅,김해숙,이용녀,이동휘,곽은진,조은형",
"말아톤": "조승우,김미숙,이기영,백성현,안내상", #salesPerScreensSorted 5위
# "용의자": "공유,박희순,조성하,유다인,김성균,조재윤,김민재,김의성,원풍연,원진,송재림,최종률,남보라,기주봉,조석현,이용직,최태환,박지일",
# "건축학개론": "엄태웅,한가인,이제훈,배수지,조정석,유연석,조현철,김의성,이승호,박수영,김동주",
"댄싱퀸": "황정민,엄정화,정성화,정규수,오나라,한수아,이아린,박정민,박사랑,여무영,성병숙,라미란,이대연,이한위,최우리,권병길,서동원", #salesPerScreensSorted 46위
"7급 공무원": "김하늘,강지환,류승룡,유승목,강신일,장남열,김형범,장영남,김정팔,김형종,박성민", #salesPerScreensSorted 45위
"우리 생애 최고의 순간": "문소리,김정은,엄태웅,김지영2,조은지,차민지,남궁,이미도,조영진,이봉규,정석용,하정우,정세형,김강민,김종언,최욱", #salesPerScreensSorted 34위
# "꾼": "현빈,유지태,배성우,박성웅,나나,안세하,최덕문,허성태,최일화,김태훈3",
# "타짜-신의 손": "최승현,신세경,곽도원,유해진,김윤석,이하늬,김인권,이경영,고수희,오정세,박효주,이준혁,이동휘,김원해,고준,조경현,박수영,김민상,손상경,임정은,정윤석", #94위, 400만 이상
# "박수건달": "박신양,김정태,엄지원,정혜영,김성균,최일화,최지호,김형범,박정자,윤송이",
# "조선명탐정 : 사라진 놉의 딸": "김명민,오달수,이연희,조관우,정원중,이채은,황채원,최무성,우현,황정민2",
# "역린": "현빈,정재영,조정석,한지민,조재현,박성웅,김성령,정은채,송영창,이도경,김민재,김대명,김주완,유은미,천보근,구승현,이재희,문지현,김창회,서이숙,성유빈,전국향",
# "남한산성": "이병헌,김윤석,박해일,고수,박희순,송영창,조우진,이다윗,허성태,김법래,조아인,진선규,유순웅,최종률,문창길,김서현,김중기,윤세웅,신기준,곽자형,박지일",
# "암수살인": "김윤석,주지훈,진선규,정종준,허진,김중기,김영웅,전국환,김종수,배해선,이봉련,정기섭,원현준,권소현",
# "국가부도의 날": "김혜수,유아인,허준호,조우진,김홍파,엄효섭,송영창,권해효,조한철,류덕환,박진주,장성범,전배수,염혜란,김형묵,동하,김민상,정규수", #100위
# "쌍화점": "조인성,주진모2,송지효,임주환,여욱환,심지호,송중기,장지원,김춘기,이종구,권태원,도용구,고인범,함건수,노민우,도예성,박종수",
# "신기전": "정재영,한은정,허준호,안성기,정성모,김명수,이도경,인교진,류현경,서주성,조원희,오순태,신정근,이승근,이창직,최승일,강지은,방수형",
# "82년생 김지영": "정유미,공유,김미경,공민정,박성연,이봉련,김성철,이얼,손성찬,강애심,김정영,류아영",
# "귀향": "손숙,강하나,최리,임성철,정무성,황화순,류신,서미지,정인기,오지혜,김민수,이승현,김시은,박근수,홍세나,남상지,차순형,박충환,지윤재,노지용,윤정로",
# "신의 한 수": "정우성,안성기,이범수,김인권,이시영,안길강,이도경,최진혁,정해균,안서현,김명수,황춘하,이일섭,김세동,김주명,이용녀,유순철,홍성덕,박지훈,윤희철,김소진,유재상",
# "태풍": "이정재,이미연,장동건,김갑수,허욱,선호진,강신성일,박찬영,김란흔,민지환",
# "부러진 화살": "안성기,박원상,나영희,김지호,문성근,이경영,진경,박수일,김준배,김응수",
# "끝까지 간다": "이선균,조진웅,신정근,정만식,신동미,김동영,박보검,주석태,허정은,이재원",
# "스파이": "설경구,문소리,고창석,한예리,정인기,라미란,송재호,김지영",
# "그것만이 내 세상": "이병헌,윤여정,박정민,문숙,최리,황석정,백현진,조관우,박지훈,김서원,홍석연",
# "돈": "류준열,유지태,조우진,손종학,원진아,정만식,임세미,김민재,김재영,김종수,진선규",
# "악인전": "마동석,김무열,김성규,유승목,최민철,김윤성,허동원,김승현,오희준,문동혁",
# "이끼": "정재영,박해일,유준상,유선,허준호,유해진,김상호,김준배,강신일,임승대,정규수,이철민,윤아름,오순태",
# "한반도": "조재현,안성기,차인표,문성근,강신일,김상중,강수연,독고영재,백일섭,최일화,박용수,이도련,이한위,박길수",
# "포화속으로": "차승원,권상우,최승현,김승우,문재원,김혜성,신현탁,구성환,김동범,김윤성,탁트인,윤승훈,김호원,김한준,조중휘,박태주,조원희,라경덕,황준영,김태환",
# "시동": "마동석,박정민,정해인,염정아,최성은,김종수,윤경호,김경덕",
# "아이 캔 스피크": "나문희,이제훈,박철민,염혜란,이상희,이지훈,정연주,김소진,김일웅,성유빈,최수인,이재인",
# "마녀": "김다미,조민수,박희순,최우식,고민시,최정우,오미희,다은,김병옥,이주원,김하나,이시우",
# "탐정: 리턴즈": "권상우,성동일,이광수,서영희,이일화,남명렬,손담비,최덕문,최성원,박성일,오희준,정연주,김성규,김중기,이청희,김용준,박성연,홍서백,홍은택",
"공공의 적 2": "설경구,정준호,강신일,박근형,변희봉,임승대,박상욱,엄태웅,정규수", #salesPerScreensSorted 32위
# "퀵": "고창석,강예원,이민기,김인권,주진모,김병철,김은옥,유승목,윤제문,마동석,송재호,전국환,오정세",
"친절한 금자씨": "이영애,최민식,권예영,김시후,남일우,김병옥,오달수,이승신,김부선,라미란", #salesPerScreensSorted 50위
# "감기": "장혁,수애,박민하,유해진,이희준,김기현,이상엽,박효주,박정민,최병모,김문수,장경업",
# "스물": "김우빈,이준호,강하늘,정소민,이유비,민효린,정주연",
# "거북이 달린다": "김윤석,정경호,견미리,선우선,김지나,신정근,최권,차은재,주진모,이무생,유하복,임형택,김희원",
# "헬로우 고스트": "차태현,강예원,이문수,고창석,장영남,천보근,공호석,정규수,김진성,구승현",
"하모니": "김윤진,나문희,강예원,이다희,장영남,박준면,정수영,이태경,문경민,도용구,지성원,차진혁,박혜진", #salesPerScreensSorted 44위
# "오싹한 연애": "손예진,이민기,박철민,김현숙,이미도,신성훈,윤지민,황승언,이현진", #128위. 300만 이상
"너는 내 운명": "전도연,황정민,나문희,정유석,서주희,윤제문,임종윤,김상호,고수희,김부선,김광규", #salesPerScreensSorted 42위
"마파도": "이정진,이문식,여운계,김수미,김을동,김형자,길해연,오달수,서영희", #salesPerScreensSorted 13위
"태극기 휘날리며": "장동건,원빈,이은주,공형진,장민호,이영란", #salesPerScreensSorted 2위
}
#500만 이상 + 스크린 수당 매출액 50위 이상 => 79개 영화, 730개 노드, 9348개 엣지
def named_union(graph1, graph2): #두 그래프 합성
A = graph1.copy()
B = graph2.copy()
Aname = A.vs["name"][:]
Bname = B.vs["name"][:]
Aes = A.es[:]
Bes = B.es[:]
Anams = set(Aname)
Bnams = set(Bname)
A.add_vertices(list(Bnams - Anams))
B.add_vertices(list(Anams - Bnams))
nams = sorted(Anams | Bnams)
Aind = [nams.index(nm) for nm in A.vs['name']]
Bind = [nams.index(nm) for nm in B.vs['name']]
A = A.permute_vertices(Aind)
B = B.permute_vertices(Bind)
Z = A | B
Z.vs['name'] = nams
Z.vs["label"] = Z.vs["name"][:]
return Z
def replaceText(x):
for r in [" ", "-", ":", "(", ")", ",", "1", "2", "3", "4", "6", "7", "8", "9"]:
x = x.replace(r, "")
return x
def printResult(names, values, x, y, n):
for i in range(0, n):
text = replaceText(names[i][:])
name = names[i].rjust(x - len(text))
value = str(round(values[i], 5))
value = value.rjust(y)
print(name, value)
print("<스크린수 당 매출액 1~50위>")
# nnn = 0
# for s in salesPerScreensSorted:
# if(s["name"] not in data):
# print(nnn, s)
# nnn += 1
printResult(list(map(lambda x:x["name"], salesPerScreensSorted)), list(map(lambda x:x["value"], salesPerScreensSorted)), 30, 16, 50)
frequency = {}
weight = {}
keys = []
top = data["명량"].split(",")
for i in range(0, len(top)-1):
frequency[top[i]] = 1
for j in range(i+1, len(top)):
join = sorted([top[i], top[j]])
join = join[0]+","+join[1]
weight[join] = {
"audiences": audiences["명량"],
"count": 1
}
keys.append(join)
frequency[top[len(top) - 1]] = 1
G = Graph.Full(len(top))
G.vs["name"] = top[:]
G.vs["label"] = G.vs["name"][:]
topTmp = data["명량"]
del data["명량"]
for movie in data:
actors = data[movie].split(",")
g = Graph.Full(len(actors))
g.vs["name"] = actors[:]
g.vs["label"] = g.vs["name"][:]
G = named_union(G, g)
for a in actors:
if(a not in frequency):
frequency[a] = 1
else:
frequency[a] += 1
for i in range(0, len(actors)-1):
for j in range(i+1, len(actors)):
join = sorted([actors[i], actors[j]])
join = join[0]+","+join[1]
if(join not in weight):
weight[join] = {
"audiences": audiences[movie],
"count": 1
}
keys.append(join)
else:
weight[join]["audiences"] += audiences[movie]
weight[join]["count"] += 1
print("\n<영화 출연 수>")
for f in sorted(list(frequency.keys()), key=lambda x: frequency[x], reverse=True)[:10]:
print(f, str(frequency[f]).rjust(3))
print("\n<같은 영화에 같이 출연한 빈도수>")
topten = sorted(keys, key=lambda n: weight[n]["count"], reverse=True)[:10]
for t in topten:
tt = replaceText(t)
print(t.rjust(14 - len(tt)) + " ", weight[t]["count"])
names, names1, names2 = G.vs["name"][:], G.vs["name"][:], G.vs["name"][:]
print("\n<degree>")
degree = G.degree()
degreeSorted = sorted(degree, reverse=True)[:10]
topDegree = sorted(names1, key=lambda n: degree[names2.index(n)], reverse=True)[:10]
printResult(topDegree, degreeSorted, 5, 4, 10)
edge_weight = [1] * len(G.es)
for k in keys:
if(weight[k]["count"] == 1):
continue
[s, e] = k.split(",")
sIdx, eIdx = names.index(s), names.index(e)
edge = G.es.select(_between = ([sIdx], [eIdx]))[0]
edge_weight[edge.index] = weight[k]["count"]
print("\n<betweenness>")
bn = G.betweenness(weights=edge_weight)
bnSorted = sorted(bn, reverse=True)[:10]
topBn = sorted(names1, key=lambda n: bn[names2.index(n)], reverse=True)[:10]
printResult(topBn, bnSorted, 5, 12, 10)
print("\n<closeness>")
cn = G.closeness(weights=edge_weight)
cnSorted = sorted(cn, reverse=True)[:10]
topCn = sorted(names1, key=lambda n: cn[names2.index(n)], reverse=True)[:10]
printResult(topCn, cnSorted, 5, 8, 10)
print("\n<eigen>")
eg = G.eigenvector_centrality(weights=edge_weight)
egSorted = sorted(eg, reverse=True)[:10]
topEg = sorted(names1, key=lambda n: eg[names2.index(n)], reverse=True)[:10]
printResult(topEg, egSorted, 5, 8, 10)
avgOfBn = []
avgOfBnToObj = {}
totalBn = 0
topActors = topTmp.split(",")
for actor in topActors:
i = names.index(actor)
totalBn += bn[i]
avgOfBn.append({"movie":"명량", "avgOfBn":round(totalBn / len(topActors), 5)})
avgOfBnToObj["명량"] = round(totalBn / len(topActors), 5)
for movie in data:
totalBn = 0
actors = data[movie].split(",")
for actor in actors:
i = names.index(actor)
totalBn += bn[i]
avgOfBn.append({"movie":movie, "avgOfBn":round(totalBn / len(actors), 5)})
avgOfBnToObj[movie] = round(totalBn / len(actors), 5)
print("\n<average of betweenness>")
avgOfBnSorted = sorted(avgOfBn, key=lambda n: n["avgOfBn"], reverse=True)[:10]
for a in avgOfBnSorted:
text = replaceText(a["movie"])
print(a["movie"].rjust(30 - len(text)), str(a["avgOfBn"]).rjust(11))
print("\n<total nodes>")
print(len(G.vs))
print("\n<total edges>")
print(len(G.es))
out = plot(G,
bbox = (2000, 2000),
vertex_size = [int((float(i)/max(bn)) * 20) + 5 for i in bn],
vertex_label_size = 10,
vertex_label_dist = 1,
vertex_label_angle = 2,
vertex_label_color = "black",
edge_color = "grey",
#autocurve = True,
layout = G.layout("fr")
)
out.save("test.png")
x, y = [], []
for movie in avgOfBnToObj:
x.append(avgOfBnToObj[movie])
y.append(salesPerScreensToObj[movie])
plt.scatter(x, y)
plt.show()