目录
前言
在今年的春节档,电影《哪吒之魔童闹海》凭借强大的市场号召力和精湛的制作水准,不仅顺利突破了100亿元的票房大关,更成为中国电影史上第一部全亚洲首部票房破百亿的影片,创下全球单一电影市场最高票房纪录。很显然,这一里程碑式的成就不仅仅是数字的堆砌,更是国漫崛起的重要象征。该片是《哪吒之魔童降世》的续作,延续了前作以“我命由我不由天”的勇敢精神。故事围绕着哪吒与敖丙的重生之路展开,面对重重困难,他们的命运安排引人入胜。影片中的冲突不仅来自外部敌人海底炼狱的三龙王,还来自于角色内心的挣扎与成长,这种多维度的情节设定为整部影片增添了许多厚度。《哪吒之魔童闹海》的成功,意味着中国动画电影从数量到质量的飞跃。国漫的崛起,不仅仅依赖于新颖的故事与精良的技术,更是对中国传统文化的重新诠释与国际化的探索。在全球电影市场愈发竞争激烈的今天,这为其他国漫作品树立了一座灯塔,指引他们未来的方向。
随着电影产业的蓬勃发展,票房数据已成为衡量影片成功与否的重要指标之一。近年来,国产动画电影如《哪吒之魔童降世》等作品的崛起,不仅刷新了观众对国产动画的认知,也为电影市场注入了新的活力。在此背景下,深入挖掘票房数据背后的地理分布特征,了解不同省份对电影票房的贡献情况,对于电影制作方、发行方以及相关从业者而言,具有重要的参考价值。
传统的票房统计多以总量或城市为单位,但这种统计方式难以直观展现不同省份的票房贡献差异。而地理信息系统(GIS)技术的引入,为票房数据的空间分析提供了全新的视角。PostGIS作为开源的空间数据库扩展,能够高效处理地理数据,结合SpringBoot框架的轻量级开发特性,可以快速构建一个稳定、高效的票房分省贡献分析系统。
本文以国产动画电影《哪吒之魔童闹海》为例,探讨如何利用SpringBoot和PostGIS技术,构建一个电影票房分省贡献排行榜系统。通过整合票房数据与地理信息,该系统能够直观展示各省份的票房贡献情况,并为电影行业的区域化营销策略提供数据支持。本文将从技术架构、数据处理流程以及实际应用效果等方面展开详细讨论,旨在为电影行业数字化转型提供一种创新的解决方案。
一、数据收集
本节将重点讲解如何来搜集相关电影的票房数据,包括按照省份划分的日票房构成。主要以灯塔专业版为例来介绍。
1、灯塔专业版
大家首先需要在在手机应用市场下载一个灯塔专业版的应用。灯塔专业版是阿里巴巴影业旗下的影视数据分析平台,由上海淘票票影视文化有限公司开发运营,旨在为电影行业从业者提供精准的数据支持和决策依据。以下是使用我的个人手机打开的移动应用展示的数据,所有的数据均是来源于灯塔专业版。当然,您也可以直接于官方联系,可以拿到数据的获取连接。这里使用手动的方式进行统计。
2、上映14日票房
我们根据手机APP上的移动版本提供的票房信息,统计出从上映首日即1月29日到第十四天的各个省份的票房,最终以Excel的形式得到以下数据。
这里给出三天的票房分布数据。
序号 | 行政区代号 | 行政区名称 | 第一天 | 第二天 | 第三天 |
1 | 110000 | 北京市 | 1504.9 | 1569 | 1832.5 |
2 | 120000 | 天津市 | 624.7 | 616.8 | 784.1 |
3 | 130000 | 河北省 | 2092.1 | 2023.2 | 2592.5 |
4 | 140000 | 山西省 | 1240.5 | 1210.3 | 1503.5 |
5 | 150000 | 内蒙古自治区 | 550.5 | 596.3 | 754.6 |
6 | 210000 | 辽宁省 | 1244.1 | 1336.9 | 1689.1 |
7 | 220000 | 吉林省 | 578.4 | 616 | 770.7 |
8 | 230000 | 黑龙江省 | 593.9 | 613.1 | 749.2 |
9 | 310000 | 上海市 | 1401.8 | 1423.7 | 1774.2 |
10 | 320000 | 江苏省 | 5103 | 5041.3 | 6632.3 |
11 | 330000 | 浙江省 | 3632.2 | 3581.4 | 4609.2 |
12 | 340000 | 安徽省 | 2607.9 | 2519 | 3283.1 |
13 | 350000 | 福建省 | 1626.2 | 1685.6 | 2114.6 |
14 | 360000 | 江西省 | 1574 | 1513 | 2071.1 |
15 | 370000 | 山东省 | 3586.1 | 3448.2 | 4386.9 |
16 | 410000 | 河南省 | 3058.6 | 2913.4 | 3879.5 |
17 | 420000 | 湖北省 | 1994 | 2096 | 2712 |
18 | 430000 | 湖南省 | 1515.3 | 1602.5 | 2142.6 |
19 | 440000 | 广东省 | 4382.2 | 3732.5 | 5131.2 |
20 | 450000 | 广西壮族自治区 | 933.6 | 839.7 | 1211.1 |
21 | 460000 | 海南省 | 478.1 | 453 | 565.1 |
22 | 500000 | 重庆市 | 991.9 | 1070.4 | 1421.2 |
23 | 510000 | 四川省 | 3306.4 | 3248.9 | 3954.5 |
24 | 520000 | 贵州省 | 624.2 | 736.1 | 948.2 |
25 | 530000 | 云南省 | 891.8 | 902.5 | 1045.1 |
26 | 540000 | 西藏自治区 | 34.3 | 37.2 | 46.8 |
27 | 610000 | 陕西省 | 1351.6 | 1316.7 | 1668.9 |
28 | 620000 | 甘肃省 | 533.5 | 562.4 | 716.7 |
29 | 630000 | 青海省 | 144.9 | 150.1 | 189.7 |
30 | 640000 | 宁夏回族自治区 | 211.5 | 232 | 292.5 |
31 | 650000 | 新疆维吾尔自治区 | 335.8 | 348.6 | 445.6 |
32 | 710000 | 台湾省 | 0 | 0 | 0 |
33 | 810000 | 香港特别行政区 | 0 | 0 | 0 |
34 | 820000 | 澳门特别行政区 | 0 | 0 | 0 |
请注意,这里得到的票房数据单位是万元。 由于上映首日是大年初一,可以看到这部电影非常受欢迎,在首映日就迎来了一波高峰。
二、数据处理
在整理形成了上面各个省份的票房排行榜之后,下面我们来将数据保存到空间数据库中。好为下一步的应用做准备。数据处理分两个方面,第一方面是将票房的数据从Excel中保存到数据库中,第二方面是如何将票房中的省份信息与我们的时空数据库进行关联,为下一步做时空可视化做积累。
1、票房数据处理
将整理好的Excel数据导入到数据库中,首先需要设计一张数据库表。表结构如下:
表的物理结构SQL如下:
CREATE TABLE "public"."biz_nezha_box_office" (
"pk_id" int8 NOT NULL,
"province_code" varchar(16) COLLATE "pg_catalog"."default" NOT NULL,
"province_name" varchar(50) COLLATE "pg_catalog"."default" NOT NULL,
"population_23" numeric(10,3) NOT NULL DEFAULT 0,
"gdp_24" numeric(10,3) NOT NULL DEFAULT 0,
"day1" numeric(10,3) NOT NULL DEFAULT 0,
"day2" numeric(10,3) NOT NULL DEFAULT 0,
"day3" numeric(10,3) NOT NULL DEFAULT 0,
"day4" numeric(10,3) NOT NULL DEFAULT 0,
"day5" numeric(10,3) NOT NULL DEFAULT 0,
"day6" numeric(10,3) NOT NULL DEFAULT 0,
"day7" numeric(10,3) NOT NULL DEFAULT 0,
"day8" numeric(10,3) NOT NULL DEFAULT 0,
"day9" numeric(10,3) NOT NULL DEFAULT 0,
"day10" numeric(10,3) NOT NULL DEFAULT 0,
"day11" numeric(10,3) DEFAULT 0,
"day12" numeric(10,3) DEFAULT 0,
"day13" numeric(10,3) DEFAULT 0,
"day14" numeric(10,3) DEFAULT 0,
CONSTRAINT "pk_biz_nazhe_box_office" PRIMARY KEY ("pk_id")
);
COMMENT ON COLUMN "public"."biz_nezha_box_office"."pk_id" IS '主键';
COMMENT ON COLUMN "public"."biz_nezha_box_office"."province_code" IS '省级区划代号';
COMMENT ON COLUMN "public"."biz_nezha_box_office"."province_name" IS '省级区划名称';
COMMENT ON COLUMN "public"."biz_nezha_box_office"."population_23" IS '2023年人口数';
COMMENT ON COLUMN "public"."biz_nezha_box_office"."gdp_24" IS '2024年GDP';
COMMENT ON COLUMN "public"."biz_nezha_box_office"."day1" IS '第一天票房';
COMMENT ON COLUMN "public"."biz_nezha_box_office"."day2" IS '第二天票房';
COMMENT ON COLUMN "public"."biz_nezha_box_office"."day3" IS '第三天票房';
COMMENT ON COLUMN "public"."biz_nezha_box_office"."day4" IS '第四天票房';
COMMENT ON COLUMN "public"."biz_nezha_box_office"."day5" IS '第五天票房';
COMMENT ON COLUMN "public"."biz_nezha_box_office"."day6" IS '第六天票房';
COMMENT ON COLUMN "public"."biz_nezha_box_office"."day7" IS '第七天票房';
COMMENT ON COLUMN "public"."biz_nezha_box_office"."day8" IS '第八天票房';
COMMENT ON COLUMN "public"."biz_nezha_box_office"."day9" IS '第九天票房';
COMMENT ON COLUMN "public"."biz_nezha_box_office"."day10" IS '第十天票房';
COMMENT ON COLUMN "public"."biz_nezha_box_office"."day11" IS '第十一天票房';
COMMENT ON COLUMN "public"."biz_nezha_box_office"."day12" IS '第十二天票房';
COMMENT ON COLUMN "public"."biz_nezha_box_office"."day13" IS '第十三天票房';
COMMENT ON COLUMN "public"."biz_nezha_box_office"."day14" IS '第十四天票房';
COMMENT ON TABLE "public"."biz_nezha_box_office" IS '哪吒十日票房分布信息表';
2、时空数据关联
将各省票房数据与各省进行时空关联的实现比较简单,这里我们采用行政区划code的方式进行连接。与之前入库的省级行政区划数据进行关联,查询的SQL如下:
SELECT t1.*,st_asgeojson ( t2.geom ) geomJson
FROM biz_nezha_box_office t1,
biz_province t2
WHERE
t1.province_code = t2.code
执行上述查询语句后可以看到以下的查询结果:
在最后使用st_asgeojson空间函数将空间属性字段进行输出,前端我们就可以对面数据进行展示。
三、WebGIS设计与实现
本节将从前后端两个方面来讲解如何实现分省票房的WebGIS展示,关于SpringBoot和PostGIS的相关知识,在博主的系列博客中,有很多的介绍,可以翻阅相关的博客进行学习,这里将重点讲解一些重要的方法,对一些常见的方法如果有不明白,大家可以在评论区进行留言。
1、SpringBoot后台实现
在后台的Model层需要准备两个类,第一个是操作的实体类。与数据库的字段基本是一一对应的。java类的源码如下:
在Contoller层中,为了将两张表的数据进行整合,因此我们额外增加一个String的Geojson的属性来保存相关信息。因此新增一个VO类来保存,代码如下:
package com.yelang.project.extend.culturaltour.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* -- 这里使用@Data 注解后才能将geojson字段正确返回,否则前端报错
* @author 夜郎king
*/
@Data
@EqualsAndHashCode(callSuper=false)
public class NezhaBoxOfficeVo extends NezhaBoxOffice{
private static final long serialVersionUID = -65721231991750364L;
@TableField(exist = false)
private String geomJson;
}
在上面的实体类中,我们在数据中是有上映的14天的票房数据,但是最后我们需要统计的是一个汇总值,这里我们采用Stream的一种快速计算方法,这样就不用每个值都去调用add方法了。具体的方法如下:
/**
* - 通过Stream来进行求和
* @return
*/
public BigDecimal getTotal() {
List<BigDecimal> list = Arrays.asList(
day1, day2, day3, day4, day5, day6, day7, day8, day9, day10,
day11, day12, day13, day14
);
BigDecimal result = list.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
return result;
}
2、Leaflet前端实现
为了便于展示不同的数据情况下的颜色分布,这里将之前使用的色带,即colormap进行不同的票房标绘。在Leaflet中引入ColorMap的方法如下:
<!-- colormaps.js add by wuzuhu -->
<script th:src="@{/js/plugins/colormap/colormaps.js}"></script>
var DIY_BLUE_GREEN_YELLOW_RED_SCHEME = new MultiColorScheme('', 0, 91000,
[new Color(0, 0, 255),
new Color(0, 255, 255),
new Color(0, 255, 0),
new Color(255,255,0),
new Color(255,0,0)]);
然后在页面加载的时候展示分省的票房信息,前端代码如下:
function showBoxOffice(){
$.ajax({
type:"get",
url:prefix + "/list",
data:{},
dataType:"json",
cache:false,
processData:false,
success:function(result){
if(result.code == web_status.SUCCESS){
showLayerGroup.clearLayers();
var legendData = new Array();
for(var i = 0;i< result.data.length;i++){
var areaData = result.data[i];
var color = ccolor = makeColor(areaData.total,0,91000,DIY_BLUE_GREEN_YELLOW_RED_SCHEME);
var content = areaData.provinceName+"<br/>"+areaData.total+"万元";
var areaLayer = L.geoJSON(JSON.parse(areaData.geomJson),{style: {color:color,fillColor:color,weight:3,"opacity":0.75, fillOpacity: 0.75 }}).bindPopup(content).addTo(mymap);
legendData.push({
label: "\xa0\xa0"+areaData.provinceName+"\r\n\xa0\xa0" +areaData.total,
type: "rectangle",
radius: 12,
color: color,
fillColor: color,
fillOpacity: 0.8,
weight: 2});
}
initLegend(legendData);
}
},
error:function(){
$.modal.alertWarning("获取空间信息失败");
}
});
}
3、最终成果及分析
经过上面的步骤,最终得到了全国分省的票房贡献排行,各行政区划面数据均采用GeoJSON的展示,同时点击GeoJSON可以展示当前省份的票房信息,在地图的右下角也使用图例的方式详细展示最终的票房分析。
通过地图可以很直观的看到,使用红色标注的是票房较高的省份,而依次从红色-->黄色-->青色-->蓝色,按照票房值从高到的低的一个排序顺序。
通过图例就可以很明显的看到,在14天的票房贡献中,广东省是第一大票房贡献。大约有90522万元(即9亿)的票房,紧接着广东后面的是江苏省,以8.3亿的票房暂列第二,第三是山东省6.1亿,再接下来是河南省和四川省。四川省作为可可豆动画的所在地,保持了比较靠前的票房贡献。而后面的台湾省、香港和澳门,由于在统计数据时,没有上映,因此这里都是空的。而内地票房比较少的是西藏藏族自治区、宁夏回族自治区、青海省等。
四、总结
以上就是本文的主要内容,本文以国产动画电影《哪吒之魔童闹海》为例,探讨如何利用SpringBoot和PostGIS技术,构建一个电影票房分省贡献排行榜系统。通过整合票房数据与地理信息,该系统能够直观展示各省份的票房贡献情况,并为电影行业的区域化营销策略提供数据支持。本文将从技术架构、数据处理流程以及实际应用效果等方面展开详细讨论,旨在为电影行业数字化转型提供一种创新的解决方案。
电影的的巨大成功,在全球票房上取得了令人瞩目的成绩,以150.20亿元的票房正式闯入全球影史票房榜前五。影片不仅在中国市场大获成功,还在海外市场赢得了极高的评价,IMDb评分8.3,烂番茄爆米花指数高达99%。这种全球化的市场表现标志着中国动画电影已跻身世界一流行列。影片通过“中国故事+东方美学”的组合拳,将传统文化与现代叙事完美结合,不仅在国内引发共鸣,也在国际市场上展现了中国文化的独特魅力。这种文化突破为中国动画电影的国际化发展提供了重要启示。行文仓促,难免有许多不足之处,如有不足,在此恳请各位专家博主在评论区不吝留言指出,不胜感激。