Wolfram 언어

풍부한 Knowledgebase 액세스

영화학 조사

2000년 이후 출시된 영화의 분당 비용과 흥행 수익을 Wolfram Knowledgebase를 사용해 계산합니다. 그리고 해당 영화들의 평균 상영 시간도 함께 조사합니다. 상영 시간은 인간이 만든 객체에 대해 예외적으로 소위 흔히 일컫는 분포 법을 따릅니다.

간접적으로 정의된 엔티티 클래스를 사용하여 금세기 초 이후에 출시된 영화를 선택합니다.

In[1]:=
Click for copyable input
Length[movies = EntityClass["Movie", EntityProperty["Movie", "ReleaseDate"] -> Between[{DateObject[{2000}], DateObject[{2015}]}]] // EntityList]
Out[1]=

영화의 제목, 장르, 상영 시간, 제작비, 흥행 수익을 얻을 수 있습니다.

In[2]:=
Click for copyable input
movieData = EntityValue[ movies, {EntityProperty["Movie", "Name"], EntityProperty["Movie", "Genres"], EntityProperty["Movie", "Runtime"], EntityProperty["Movie", "ReleaseDate"], EntityProperty["Movie", "ProductionBudget"], EntityProperty["Movie", "DomesticBoxOfficeGross"]}];

출시된 영화의 분당 비용은 시간에 따라 크게 변동합니다.

전체 Wolfram 언어 입력 표시하기
In[3]:=
Click for copyable input
costPerMinute = TimeSeries[{#[[1, 4]], Mean[#5/#3 & @@@ #]} & /@ Split[SortBy[ Cases[movieData, {_, _, _Quantity, _DateObject, _Quantity, _}], \ #[[4]] &], #1[[4]] === #2[[4]] &]];
In[4]:=
Click for copyable input
DateListLogPlot[costPerMinute, FrameLabel -> Automatic, PlotLabel -> "average cost per minute", AxesOrigin -> {DateObject[{2000, 1, 1}], 0}]
Out[4]=

1개월당 평균을 구하면, 분당 비용의 주기성을 볼 수 있습니다. 특히, 아래의 플롯에서 볼 수 있듯이 녹색의 격자가 독립 기념일을, 보라색 선이 추수 감사절을 나타내고 있습니다.

전체 Wolfram 언어 입력 표시하기
In[5]:=
Click for copyable input
DateListPlot[MovingAverage[costPerMinute, Quantity[1, "Months"]], FrameLabel -> Automatic, PlotLabel -> "average cost per minute", AxesOrigin -> {DateObject[{2000, 1, 1}], 0}, GridLines -> {Join[{#, Darker[Green]} & /@ Table[DateObject[{y, 7, 4}], {y, 2000, 2015}], {#, Darker[Purple]} & /@ Table[DateObject@ WolframAlpha[ "Thanksgiving " <> IntegerString[y], {{"Result", 1}, "ComputableData"}], {y, 2000, 2015}]], None}]
Out[5]=

다음의 로그 플롯에서 알 수 있듯이, 분당 흥행 수입은 이보다 더 유동적인 함수입니다.

전체 Wolfram 언어 입력 표시하기
In[6]:=
Click for copyable input
profitPerMinute = TimeSeries[{#[[1, 4]], Mean[#6/#3 & @@@ #]} & /@ Split[SortBy[ Cases[movieData, {_, _, _Quantity, _DateObject, _, _Quantity}], \ #[[4]] &], #1[[4]] === #2[[4]] &]];
In[7]:=
Click for copyable input
DateListLogPlot[MovingAverage[profitPerMinute, Quantity[1, "Months"]], FrameLabel -> Automatic, PlotLabel -> "box office receipts per film minute", AxesOrigin -> {DateObject[{2000, 1, 1}], 0}, PlotRange -> {{DateObject[{2000, 1, 1}], DateObject[{2015, 12, 31}]}, All}]
Out[7]=

평균 영화 상영 시간은 지난 15년간 매우 일정함을 알수 있습니다.

전체 Wolfram 언어 입력 표시하기
In[8]:=
Click for copyable input
averageRuntimes = {#[[1, 1]], Mean[#[[All, -1]]]} & /@ Split[Sort[{DateObject[{#4["Year"]}], UnitConvert[#3, "Minutes"]} & @@@ Cases[movieData, {_, _, _Quantity, _DateObject, _, _}]], #1[[ 1]] === #2[[1]] &];
In[9]:=
Click for copyable input
DateListPlot[averageRuntimes, FrameLabel -> Automatic, PlotLabel -> "average runtime", AxesOrigin -> {DateObject[{2000, 1, 1}], 0}]
Out[9]=

더 자세히 들여다 보면, 영화의 상영 시간 분포는 비교적 부드러운 모습을 볼수 있습니다.

In[10]:=
Click for copyable input
movieRuntimes = DeleteMissing[movieData[[All, 3]]];
In[11]:=
Click for copyable input
hg = Histogram[movieRuntimes, {1, 200, 5}, "PDF", AxesLabel -> Automatic]
Out[11]=

다수의 임베디드 분포를 사용한 모델에 가장 가까운 핏은 Lévy 안정 분포로 인한 것임을 보여주고 있습니다. 여기에서 정규 분포 (독립 분포에서 독립적으로 추출 된 확률 변수의 평균의 분포), 로그 정규 분포 (다수의 독립 정 확률 분포의 곱), 안정 분포를 계산합니다.

In[12]:=
Click for copyable input
edNormal = EstimatedDistribution[movieRuntimes, NormalDistribution[\[Mu], \[Sigma]]]
Out[12]=
In[13]:=
Click for copyable input
edLogNormal = EstimatedDistribution[movieRuntimes, LogNormalDistribution[\[Mu], \[Sigma]]]
Out[13]=
In[14]:=
Click for copyable input
edStable = EstimatedDistribution[movieRuntimes, StableDistribution[1, \[Alpha], \[Beta], \[Mu], \[Sigma]]]
Out[14]=

여기서 재미있는 것은, 안정 분포가 시각적으로 가장 핏한다는 것입니다.

전체 Wolfram 언어 입력 표시하기
In[15]:=
Click for copyable input
Show[{hg, ListLinePlot[ Table[{x, #}, {x, Quantity[0, "Minutes"], Quantity[200, "Minutes"], Quantity[1, "Minutes"]}] & /@ {PDF[edNormal, x], PDF[edLogNormal, x], PDF[edStable, x]}, PlotLegends -> {"normal", "lognormal", "stable"}, Filling -> Axis, PlotRange -> All]}]
Out[15]=

인공물 중 안정 분포를 따르는 것은 극히 적습니다. 안정 분포의 특징 중 하나는 비교적 큰, 보통 평균의 몇 배 이상 값을 포함하는 것입니다. 이 특징은 영화에서 그대로 실현되고 있습니다. 여기에는, 간접적으로 정의된 엔티티 클래스를 사용하여 2000년 1월 1일 이후 개봉된 상영 시간이 최대인 10개의 영화가 선정되어 있습니다.

In[16]:=
Click for copyable input
longest = EntityClass[ "Movie", {EntityProperty["Movie", "ReleaseDate"] -> Between[{DateObject[{2000}], DateObject[{2015}]}], EntityProperty["Movie", "Runtime"] -> TakeLargest[10]}] // EntityList
Out[16]=

그리드에 요약합니다.

전체 Wolfram 언어 입력 표시하기
In[17]:=
Click for copyable input
With[{props = {EntityProperty["Movie", "Name"], EntityProperty["Movie", "Genres"], EntityProperty["Movie", "Runtime"], EntityProperty["Movie", "ReleaseDate"]}}, TextGrid[Prepend[EntityValue[longest, props], props], Dividers -> All, Alignment -> Left, Background -> {None, {LightBlue}}]] // TraditionalForm
Out[17]//TraditionalForm=

관련 예제

de en es fr ja pt-br ru zh