movie.py 10.9 KB
from igraph import *
import pymongo

conn = pymongo.MongoClient("localhost")
db = conn.test
MOVIE = db.movie
cur = MOVIE.find()
audience = {}
for c in cur:
	audience[c["name"]] = c["audience"]

data = {
    "명량": "최민식,류승룡,조진웅,김명곤,진구,이정현,권율,노민우,이승준,박보검,김원해,이해영,장준녕,김길동,김강일,강태영,김민석,박노식,최덕문,조복래,문영동,이주실,주석태,고경표,김태훈,한이진,신유람",
    "극한직업": "류승룡,이하늬,이동휘,공명,진선규,홍은진,양현민,장진희,오정세,이중옥,송영규,신하균,김의성,김종수,허준석",
    "신과함께-죄와 벌": "하정우,차태현,주지훈,김향기,마동석,김동욱,도경수,오달수,임원희,장광,정해균,김수안,정지훈,예수정,이준혁",
    "국제시장": " 황정민,김윤진,오달수,정진영,장영남,라미란,김슬기,정영기,맹세창,박재우,김재철",
    "베테랑": "황정민,유아인,유해진,오달수,장윤주,김시후,오대환,정웅인,정만식,송영창,진경,유인영,박소담,이동휘,배성우,천호진",
    "도둑들": "김윤석,김혜수,이정재,전지현,김해숙,오달수,김수현,최덕문,최진호,예수정",
    "7번방의 선물": "류승룡,박신혜,갈소원,오달수,박원상,김정태,정만식,김기천,조덕현,조재윤,박길수",
    "암살": "전지현,이정재,하정우,오달수,조진웅,이경영,최덕문,김의성,박병은,김홍파,진경,김인우,심희섭,허지원,허정도,정인겸",
    "광해, 왕이 된 남자": "이병헌,류승룡,한효주,장광,김인권,심은경,김명곤,박지아,이양희,전국향",
    "신과함께-인과 연": "하정우,주지훈,김향기,마동석,김동욱,도경수,이준혁,정지훈,조한철,장광",
    "택시운전사": "송강호,류준열,유해진,박혁권,최귀화,이정은,차순배,이봉련,류성현,허정도",
    "부산행": "공유,정유미,마동석,김수안,최우식,안소희,김의성,예수정,박명신",
    "변호인": "송강호,김영애,오달수,곽도원,임시완,송영창,정원중,조민기,이항나,이성민,차광수,한기중,심희섭,김동현,조완기,차은재",
    "해운대": "설경구,하지원,박중훈,엄정화,이민기,강대규,김원영,김유빈,신정원,성유경,박재홍,나승현,김재경,장원준,임동우,김정곤,정종원,이지애,최재섭,장명갑,지대한,천보근,강예원,김희미",
    "괴물": "송강호,변희봉,박해일,배두나,고아성,오달수,박노식,고수희,윤제문,김뢰하,이재응,이왕우",
    "왕의 남자": "감우성,이준기,유해진,정진영,강성연,이동수,김주홍,장항선,정석용",
    "기생충": "송강호,이선균,조여정,최우식,박소담,이정은,장혜진,박명훈,현승민,정현준",
    "검사외전": "황정민,강동원,이성민,박성웅,김응수,신소율,주진모,김원해,김홍파,김병옥,박종환,전배수,박지환,손종학,김종수,한재영,이석준,이선주,민무제",
    "엑시트": "조정석,윤아,설도희,최재영,고두심,김환영,변건우,황지현,황효은,박인환,김지영,강기영,배유람,유수빈,정민성,박성일,신세휘,김강훈,김병순,김종구,이봉련",
    "설국열차": "송강호,고아성",
    "관상": "송강호,이정재,백윤식,조정석,이종석,김혜수,이도엽,김의성",
    "해적: 바다로 간 산적": "김남길,손예진,신정근,유해진,이경영,오달수,김태우,박철민,김원해,조달환,조희봉,정성화,최진리,이이경,권성영,김재학,김한준,안내상,이대연",
    "수상한 그녀": "심은경,나문희,박인환,성동일,이진욱,김현숙,황정민,김슬기,박형우,진영,김동희,한지은,정인기,이장유,하연주,박혜진",
    "백두산": "이병헌,하정우,마동석,전혜진,배수지,이상원,옥자연,한수현,강신철,이경영,조한철,최광일,김시아,임형국,박주환,남성준,서현우,김민식,박지홍,김준원,남문철,박성근",
    "과속스캔들": "차태현,박보영,왕석현,임지규,황우슬혜,정원중,김기방",
    "국가대표": "하정우,성동일,김지석,김동욱,최재환,이재응,이은성,방수연,심영,이한위,이혜숙,김지영,쥬니,황하나",
    "공조": "현빈,유해진,김주혁,장영남,이해영,윤아,이동휘,박형수,공정환,엄효섭,신현빈",
    "히말라야": "황정민,정우,조성하,김인권,라미란,김원해,이해영,전배수,유선",
    "밀정": "송강호,공유,한지민,엄태구,신성록,서영주,정유안,이수광,고준,최유화,허성태,김동영,곽자형,조영규",
    "최종병기 활": "박해일,류승룡,김무열,문채원,이한위,김구택,이경영,박기웅,이승준,이재구,박노식,이다윗,전민서,문영동",
    "써니": "유호정,심은경,강소라,고수희,홍진희,김민영,김선경,김보미,이연경,남보라,민효린,조민수,박진주,박영서,김예원,천우희,정원중,김영옥,김시후,김혜옥",
    # "1987": "",
    # "베를린": "",
    # "마스터": "",
    # "터널": "",
    # "내부자들": "",
    # "인천상륙작전": "",
    # "럭키": "",
    # "은밀하게 위대하게": "",
    # "범죄도시": "",
    # "곡성": "",
    # "화려한 휴가": "",
    # "좋은 놈, 나쁜 놈, 이상한 놈": "",
    # "늑대소년": "",
    # "군함도": "",
    # "웰컴 투 동막골": "",
    # "사도": "",
    # "아저씨": "",
    # "미녀는 괴로워": "",
    # "전우치": "",
    # "연평해전": "",
    # "타짜": "",
    # "청년경찰": "",
    # "숨바꼭질": "",
    # "덕혜옹주": "",
    # "더 테러 라이브": "",
    # "감시자들": "",
    # "검은 사제들": "",
    # "안시성": "",
    # "의형제": "",
    # "더 킹": "",
    # "완득이": "",
    # "완벽한 타인": "",
    # "타워": "",
    # "투사부일체": "",
    # "독전": "",
    # "추격자": "",
    # "공작": "",
    # "바람과 함께 사라지다": "",
    # "님아, 그 강을 건너지 마오": "",
    # "봉오동 전투": "",
    # "조선명탐정 : 각시투구꽃의 비밀": "",
    # "군도: 민란의 시대": "",
    # "남산의 부장들": "",
    # "범죄와의 전쟁: 나쁜놈들 전성시대": "",
    # "신세계": "",
    # "도가니": "",
    # "내 아내의 모든 것": "",
    # "판도라": "",
    # "나쁜 녀석들: 더 무비": "",
    # "가문의 위기(가문의 영광2)": "",
    # "연가시": "",
    # "강철비": "",
    # "강철중: 공공의 적 1-1": "",
    # "아가씨": "",
    # "말아톤": "",
    # "용의자": "",
    # "건축학개론": "",
    "댄싱퀸": "황정민,엄정화,정성화,오나라,박정민,박사랑,안은정,라미란,이대연,이한위,최우리,권병길,서동원",
    # "7급 공무원": "",
    # "우리 생애 최고의 순간": "",
    # "꾼": "",
    # "타짜-신의 손": "",
    # "박수건달": "",
    # "조선명탐정 : 사라진 놉의 딸": "",
    # "역린": "",
    # "남한산성": "",
    # "암수살인": "",
    # "국가부도의 날": "",
    # "쌍화점": "",
    # "신기전": "",
    # "82년생 김지영": "",
    # "귀향": "",
    # "신의 한 수": "",
    # "태풍": "",
    # "부러진 화살": "",
    # "끝까지 간다": "",
    # "스파이": "",
    # "그것만이 내 세상": "",
    # "돈": "",
    # "악인전": "",
    # "이끼": "",
    # "한반도": "",
    # "포화속으로": "",
    # "시동": "",
    # "아이 캔 스피크": "",
    # "마녀": "",
    # "탐정: 리턴즈": "",
    # "공공의 적 2": "",
    # "퀵": "",
    # "친절한 금자씨": "",
    # "감기": "",
    # "스물": "",
    # "거북이 달린다": "",
    # "헬로우 고스트": "",
    # "하모니": "",
    # "오싹한 연애": "",
    # "방자전": "",
    # "형": "",
    # "마더": "",
    # "그놈 목소리": "",
    # "친구 2": "",
    # "식객": "",
    # "26년": "",
    # "고지전": "",
    # "워낭소리": "",
    # "프리즌": "",
    # "가장 보통의 연애": "",
    # "말모이": "",
    # "극비수사": "",
    # "표적": "",
    # "너의 결혼식": "",
    # "내가 살인범이다": "",
    # "부당거래": "",
    # "소원": "",
    # "너는 내 운명": "",
    # "시라노; 연애조작단": "",
    # "곤지암": "",
    # "살인자의 기억법": "",
    # "마파도": "",
    # "후궁 : 제왕의 첩": "",
    # "탐정 : 더 비기닝": "",
    # "지금 만나러 갑니다": "",
    # "가문의 부활 - 가문의 영광3": "",
    # "위험한 상견례": "",
    # "아수라": "",
    # "보안관": "",
    # "기술자들": "",
    # "굿모닝 프레지던트": "",
    # "태극기 휘날리며": "",
    # "라스트 갓파더": "",
    # "1번가의 기적": "",
    # "증인": "",
    # "목격자": "",
    # "조작된 도시": "",
    # "블랙머니": "",
    # "반창꼬": "",
    # "우리들의 행복한 시간": "",
    # "조선명탐정: 흡혈괴마의 비밀": "",
    # "화차": "",
    # "이웃사람": "",
    # "재심": "",
    # "히트맨": "",
    # "사바하": "",
    # "화이: 괴물을 삼킨 아이": "",
    # "의뢰인": "",
    # "가문의 영광4 - 가문의 수난": "",
    # "블라인드": "",
    # "박열": "",
    # "미인도": "",
    # "음란서생": "",
    # "내 생애 가장 아름다운 일주일": "",
    # "하녀": "",
    # "황해": "",
    # "7광구": "",
    # "타짜: 원 아이드 잭": "",
    # "박쥐": "",
    # "마당을 나온 암탉": "",
    # "악의 연대기": "",
    # "강남 1970": "",
    # "신의 한 수: 귀수편": "",
    # "마이 웨이": "",
    # "나의 사랑 나의 신부": "",
    # "바르게 살자": "",
    # "내 사랑 내 곁에": "",
    # "초능력자": "",
    # "굿바이 싱글": "",
    # "몽타주": "",
    # "명당": "",
    }

g = Graph()
names = []
vertex_weight = []
vertex_color = []
edge_weight = []

for movie in data:
	g.add_vertices(1)
	names.append(movie)
	vertex_color.append("red")

	actors = data[movie].split(",")
	newActors = []
	for actor in actors:
		if(actor not in names):
			newActors.append(actor)
	names += newActors
	g.add_vertices(len(newActors))
	vertex_color += ["blue"] * len(newActors)

	edges = []
	s = names.index(movie)
	for actor in actors:
		e = names.index(actor)
		edges.append((s, e))
	g.add_edges(edges)

	vertex_weight.append(audience[movie])
	vertex_weight += [1] * len(newActors)
	edge_weight += [audience[movie]] * len(actors)
g.vs["name"] = names
g.vs["label"] = g.vs["name"]
g.vs["color"] = vertex_color
g.es["weight"] = edge_weight
bn = g.betweenness(weights=edge_weight)
print(sorted(bn, reverse=True)[:10])
bn_norm = [int((float(i)/max(bn)) * 40) + 10 for i in bn]

out = plot(g,
	bbox = (1500, 1500),
	vertex_size = 20,
    vertex_label_size = 12,
    vertex_label_dist = 1,
    vertex_label_angle = 2,
    autocurve = True,
    layout = g.layout("fr")
    )
out.save("test.png")