A indústria cinematográfica brasileira é caracterizada por uma história de extremos, alternando entre períodos de grande popularidade e crises estruturais. Desde o auge nos anos 1970 — impulsionado por políticas de fomento e o sucesso de filmes populares — até o declínio acentuado nas décadas subsequentes, o mercado sempre demonstrou forte correlação com a estabilidade econômica e o ambiente regulatório do país (AIC - Academia Internacional de Cinema 2019).
Após ser duramente atingido pela pandemia de Covid-19 e pela ascensão do streaming, o circuito exibidor brasileiro mostra sinais de recuperação. Em 2023, o país registrou 114,1 milhões de pagantes e cerca de 3.480 salas, embora ainda aquém dos patamares pré-pandemia (Salgado 2024). Essa recuperação é sustentada por marcos regulatórios recentes, como o restabelecimento da Cota de Tela (“Lei Nº 14.814, de 15 de Janeiro de 2024,” n.d.), que obriga exibidoras a dedicarem um número mínimo de sessões à produção nacional até 2033. Essa medida é vista como crucial para proteger o cinema nacional e garantir sua participação efetiva nos horários de maior procura.
Embora a recuperação do público seja um indicador positivo, a infraestrutura de exibição no Brasil apresenta um desafio estrutural: a baixa cobertura e a alta concentração. A migração histórica dos cinemas de rua para o modelo de multiplex em shopping centers resultou em um mercado onde 88,4% das salas estão em shoppings, e apenas 8% dos municípios brasileiros (451 de 5.565) possuem acesso a um cinema (Salgado 2024).
Essa concentração levanta a questão central desta análise: se o acesso à experiência cinematográfica está geograficamente restrito e se essa limitação influencia diretamente os hábitos de consumo e a rentabilidade do setor.
Este relatório apresenta uma análise da forma de consumo e disponibilidade de cinemas e filmes no Brasil em 2024, confrontando a infraestrutura de salas (acessibilidade) com o comportamento de bilheteria (demanda).
O estudo utilizará exclusivamente dados consolidados de bilheteria e cadastro de salas da Agência Nacional do Cinema (ANCINE) referentes ao ano de 2024, visando mapear:
Padrões de Consumo: A distribuição temporal (mês, dia, horário) do público e da receita.
Alcance Geográfico: A relação entre o número de salas/complexos por UF e município e o desempenho de público.
Influência da Infraestrutura: Como a disponibilidade e o tipo de sala (e sua localização) se correlacionam com a capacidade de atração de público no cenário pós-pandemia, sob a vigência de novas políticas como a Cota de Tela.
Nesta seção são apresentadas as fontes de dados utilizadas no estudo, ambas disponibilizadas pela Agência Nacional do Cinema (ANCINE) por meio do Portal Brasileiro de Dados Abertos. As duas bases possuem ampla cobertura nacional e seguem padrões de padronização definidos por instruções normativas específicas.
O conjunto de dados de “Relatório de Bilheteria Diária de Obras Informadas Pelas Distribuidoras” (2024) reúne informações declaradas pelas exibidoras sobre todas as sessões de cinema realizadas no país. Cada registro corresponde a uma sessão individual e inclui data, horário, obra exibida, características da sala e do exibidor, além de indicadores de público e receita.
Os dados são originalmente organizados por no e mês, mas cada mês é subdividido em arquivos referentes às semanas consolidadas, no formato:
YYYY-MM-s01
YYYY-MM-s02
YYYY-MM-s03
YYYY-MM-s04
YYYY-MM-s05
Por exemplo:
2014-01-s012014-01-s022023-11-s012023-11-s02Essa estrutura permite que a base seja atualizada continuamente, com novas semanas publicadas conforme o envio obrigatório das informações pelas exibidoras. Assim, o conjunto disponibilizado é sempre o mais atualizado possível, porém meses muito recentes podem aparecer ainda incompletos.
Para garantir consistência temporal e evitar problemas decorrentes de semanas não consolidadas, esta análise utiliza exclusivamente os dados referentes a 2024, que apresentam maior estabilidade e cobertura completa.
O envio das informações é regulamentado pela Instrução Normativa nº 123/2015, que define as diretrizes do Sistema de Controle de Bilheteria (SCB).
Mais informações: Instrução Normativa n.º 123, de 22 de dezembro de 2015 (ANCINE 2015)
A base contém informações como:
Esses campos tornam possível realizar análises temporais, geográficas, econômicas e estruturais do mercado exibidor brasileiro.
A base de “Salas de Exibição e Complexos Registrados Na ANCINE” (2024) reúne informações do cadastro oficial de salas, complexos e exibidores registrados na ANCINE. Inclui dados estruturais (capacidade, acessibilidade, operação), localização, situação de funcionamento e informações cadastrais.
Esse cadastro segue normas estabelecidas pelas instruções normativas:
Mais informações:
A base inclui:
Essa base é fundamental para contextualizar as análises de bilheteria com a infraestrutura de exibição existente no país.
Esses são os pacotes necessários para executar a análise descrita nesse documento:
| Pacote | Justificativa |
|---|---|
| tidyverse | Conjunto de pacotes para manipulação, transformação e visualização
de dados (inclui dplyr, ggplot2,
tidyr, readr, etc.). |
| hms | Manipulação e formatação de horários no padrão HH:MM:SS. |
| DT | Criação e exibição de tabelas interativas. |
| scales | Formatação de números, percentuais e escalas usada em gráficos. |
| plotly | Gráficos interativos integrados com ggplot ou criados do zero. |
| geobr | Download de shapefiles do Brasil para mapas e análises geográficas. |
library(tidyverse)
library(hms)
library(DT)
library(scales)
library(plotly)
library(geobr)
Os dados de bilheteria diária e das salas de cinema utilizados neste
estudo são disponibilizados pela ANCINE por meio do Portal Brasileiro de
Dados Abertos, como explicado da seção de Introdução. Cada mês é
dividido em arquivos semanais (por exemplo: 2024-01-s01,
2024-01-s02, …), contendo todas as sessões de cinema
realizadas naquela semana.
Embora a base complete constantemente novas semanas ao longo do ano — sendo, portanto, a mais atualizada possível — para esta análise foram utilizados exclusivamente os dados referentes ao ano de 2024, que é o último ano completo no momento dessa análise.
Isso significa que, entre todos os arquivos disponibilizados (2014–2025), foram carregados apenas aqueles que seguem o padrão:
bilheteria-diaria-obras-por-exibidoras-2024-XX-sYY.csv
onde:
XX representa o mês (01 a 12)YY representa a semana do mês (s01 a s05, dependendo do
calendário)A opção por limitar a análise ao ano de 2024 se justifica pela necessidade de trabalhar com:
Além disso, para garantir consistência na correspondência com a base de Salas de Exibição e Complexos, também foi carregada a versão mais recente disponível do cadastro oficial de salas no ano de referência.
Nesta subseção, identificamos na pasta de trabalho apenas os arquivos
semanais do ano de 2024. Os nomes seguem o padrão
YYYY-MM-sXX, o que permite filtrar os arquivos desejados
com expressões regulares. Em seguida, uma função auxiliar extrai o mês
de referência de cada arquivo para que possam ser agrupados.
pasta <- "Bilheteria-Salas-Cinema"
# *Assumindo que os arquivos CSV estão na pasta especificada*
arquivos_bilheteria <- list.files(
pasta,
pattern = "^bilheteria-diaria-obras-por-exibidoras-2024-\\d{2}-s\\d{2}\\.csv$",
full.names = TRUE
)
extrair_mes <- function(caminho) {
nome <- basename(caminho)
sub(".*(2024-\\d{2}).*", "\\1", nome)
}
meses <- sapply(arquivos_bilheteria, extrair_mes)
Cada mês do ano é distribuído em múltiplos arquivos semanais. Nesta
etapa, os arquivos são agrupados por mês e combinados em um único data
frame mensal. A função map_dfr() é utilizada para ler e
empilhar todas as semanas daquele mês, removendo colunas irrelevantes
para a análise.
# Usando split() e lapply() para agrupar e carregar
lista_meses_combinados <- lapply(
split(arquivos_bilheteria, meses),
function(arquivos_mes) {
map_dfr(
arquivos_mes,
~read_csv2(
file = .x,
locale = locale(encoding = "UTF-8"),
col_select = -c(REGISTRO_GRUPO_EXIBIDOR, REGISTRO_EXIBIDOR, REGISTRO_COMPLEXO, NOME_SALA, MUNICIPIO_SALA_COMPLEXO,
AUDIO, LEGENDADA, CNPJ_EXIBIDORA, RAZAO_SOCIAL_EXIBIDORA)
)
)
}
)
Motivos para o descarte das colunas:
Além da base de bilheteria, também é carregado o cadastro oficial de salas e complexos exibidores da ANCINE. Esses metadados são importantes para complementar e validar as informações de exibição presentes nos relatórios de bilheteria. Algumas colunas menos relevantes são descartadas para otimizar o processamento.
df_salas <- read_csv2(
file = file.path(pasta, "salas-de-exibicao-e-complexos.csv"),
locale = locale(encoding = "UTF-8"),
col_select = -c(
PAGINA_ELETRONICA_COMPLEXO, ENDERECO_COMPLEXO, NUMERO_ENDERECO_COMPLEXO,
COMPLEMENTO_COMPLEXO, BAIRRO_COMPLEXO, DATA_INICIO_FUNCIONAMENTO_SALA, DATA_SITUACAO_SALA, SITUACAO_SALA, DATA_SITUACAO_COMPLEXO, SITUACAO_COMPLEXO, SITUACAO_EXIBIDOR, MUNICIPIO_COMPLEXO, COMPLEXO_ITINERANTE, CNPJ_EXIBIDOR, REGISTRO_EXIBIDOR, NOME_GRUPO_EXIBIDOR, NOME_EXIBIDOR, CEP_COMPLEXO, CNPJ_SALA
)
)
Motivos para o descarte das colunas:
Após o carregamento das bases, realizamos uma inspeção preliminar para verificar a estrutura dos dados, identificar possíveis problemas e garantir que o conteúdo está coerente com o esperado. A seguir, são exibidos exemplos das primeiras linhas de cada uma das fontes utilizadas.
Essa prévia permite inspecionar nomes de colunas, formatos de data, valores ausentes e outras possíveis inconsistências antes de etapas posteriores de limpeza e integração.
A base de bilheteria foi organizada em uma lista
(lista_meses_combinados), na qual cada elemento corresponde
a um mês completo de 2024 já resultante da combinação de suas
semanas.
A visualização abaixo mostra as primeiras linhas do primeiro mês disponível na lista:
datatable(
head(lista_meses_combinados[[1]], 10),
extensions = "Scroller",
options = list(
deferRender = TRUE,
scrollX = TRUE,
scrollY = 300,
scroller = TRUE
),
rownames = FALSE
)
A visualização abaixo mostra as primeiras linhas da base de dados que descreve as salas de cinema registradas pela ANCINE:
datatable(
head(df_salas),
extensions = "Scroller",
options = list(
deferRender = TRUE,
scrollX = TRUE,
scrollY = 300,
scroller = TRUE
),
rownames = FALSE
)
Aqui vamos ver como está a situação dos dados quanto a presença de NA’s.
# 1. Calcular percentual de NA por coluna em cada mês
na_pct_por_mes <- lista_meses_combinados %>%
map_dfr(
~ colMeans(is.na(.x)) * 100, # colMeans = média lógica, vira % de NA
.id = "Mes"
)
# 2. Transformar para formato longo (tidy)
na_pct_long <- na_pct_por_mes %>%
pivot_longer(-Mes, names_to = "Coluna", values_to = "Pct_NA")
# 3. Criar o heatmap
ggplot(na_pct_long, aes(x = Mes, y = Coluna, fill = Pct_NA)) +
geom_tile(color = "white") +
scale_fill_gradient(
low = "#FFFFFF",
high = "#0D47A1", # sua cor primária
name = "% NA"
) +
labs(
title = "Percentual de valores NA por coluna e mês",
x = "Mês",
y = "Coluna"
) +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1)
)
Observa-se uma maior concentração de valores ausentes nas colunas PAIS_OBRA e TITULO_BRASIL. No caso de PAIS_OBRA, a ausência é esperada, pois esse campo não é preenchido quando o item exibido pertence às categorias “Mostra e Festivais”, “Shows e Musicais” ou “Eventos Esportivos”. Nessas situações, o país de produção não se aplica.
datatable(
lista_meses_combinados[["2024-01"]] %>%
filter(is.na(PAIS_OBRA)) %>%
slice(526:530) %>%
select(DATA_EXIBICAO, TITULO_ORIGINAL, TITULO_BRASIL, PAIS_OBRA),
extensions = "Scroller",
options = list(
deferRender = TRUE,
scrollX = TRUE,
scrollY = 300,
scroller = TRUE
),
rownames = FALSE
)
Para evitar que esses casos apareçam como valores faltantes nas análises — o que poderia sugerir erro de preenchimento — optou-se por recodificar esses NA específicos como “Não se aplica”, preservando a interpretação correta do dado.
lista_meses_combinados_tratados <- lista_meses_combinados %>%
map(~.x %>%
mutate(
PAIS_OBRA = ifelse(
TITULO_ORIGINAL %in% c("Mostras e Festivais", "Shows e Musicais", "Eventos Esportivos"),
"Não se aplica",
PAIS_OBRA
)
)
)
datatable(
lista_meses_combinados_tratados[["2024-01"]] %>%
filter(TITULO_ORIGINAL %in% c("Mostras e Festivais", "Shows e Musicais", "Eventos Esportivos")) %>%
slice(526:530) %>%
select(DATA_EXIBICAO, TITULO_ORIGINAL, TITULO_BRASIL, PAIS_OBRA),
extensions = "Scroller",
options = list(
deferRender = TRUE,
scrollX = TRUE,
scrollY = 300,
scroller = TRUE
),
rownames = FALSE
)
No caso de TITULO_BRASIL, os valores ausentes ocorrem principalmente porque, para filmes nacionais, apenas a coluna TITULO_ORIGINAL é utilizada, deixando TITULO_BRASIL em branco. Além disso, esse campo também não é preenchido quando o conteúdo exibido pertence às categorias “Mostra e Festivais”, “Shows e Musicais” ou “Eventos Esportivos”.
datatable(
lista_meses_combinados[["2024-01"]] %>%
filter(is.na(TITULO_BRASIL)) %>%
slice(1:10) %>%
select(DATA_EXIBICAO, TITULO_ORIGINAL, TITULO_BRASIL, PAIS_OBRA),
extensions = "Scroller",
options = list(
deferRender = TRUE,
scrollX = TRUE,
scrollY = 300,
scroller = TRUE
),
rownames = FALSE
)
Para esse caso, vamos simplesmente repetir o Título Original do filme para a coluna TITULO_BRASIL, já que utilizaremos ela para as análises.
lista_meses_combinados_tratados <- lista_meses_combinados_tratados %>%
map(~.x %>%
mutate(
# Preenche TITULO_BRASIL com TITULO_ORIGINAL se for NA
TITULO_BRASIL = if_else(is.na(TITULO_BRASIL), TITULO_ORIGINAL, TITULO_BRASIL)
)
)
datatable(
lista_meses_combinados_tratados[["2024-01"]] %>%
filter(PAIS_OBRA == "BRASIL") %>%
slice(2:6) %>%
select(DATA_EXIBICAO, TITULO_ORIGINAL, TITULO_BRASIL, PAIS_OBRA),
extensions = "Scroller",
options = list(
deferRender = TRUE,
scrollX = TRUE,
scrollY = 300,
scroller = TRUE
),
rownames = FALSE
)
Como mencionado anteriormente, a coluna SESSAO armazena tanto a data quanto o horário da sessão em formato de texto. Nesta etapa, extraímos apenas o horário para manter na coluna SESSAO, enquanto a data é preservada na coluna DATA_EXIBICAO. Em seguida, ambas são convertidas para formatos apropriados: DATA_EXIBICAO para o tipo Date e SESSAO para o tipo hms.
lista_meses_combinados_tratados <- lista_meses_combinados_tratados %>%
map(~.x %>%
mutate(
# Trata SESSAO para extrair apenas o horário (HH:mm:ss)
SESSAO = str_extract(SESSAO, "\\d{2}:\\d{2}:\\d{2}$"),
DATA_EXIBICAO = as.Date(DATA_EXIBICAO, format = "%d/%m/%Y"),
SESSAO = as_hms(SESSAO)
)
)
Nesta etapa, convertemos essas colunas para factor, já que representam variáveis categóricas e devem ser tratadas como tal nas análises subsequentes.
lista_meses_combinados_tratados <- lista_meses_combinados_tratados %>%
map(~.x %>%
mutate(
across(
c(
TITULO_ORIGINAL, TITULO_BRASIL, PAIS_OBRA, UF_SALA_COMPLEXO
),
factor
)
)
)
Após os tratamentos realizados, temos:
| Variável | Tipo | Descrição |
|---|---|---|
| DATA_EXIBICAO | Date | Data em que a sessão de cinema ocorreu. |
| SESSAO | hms | Horário da sessão (formato horas:minutos:segundos). |
| TITULO_ORIGINAL | Factor | Título original do filme informado pelo exibidor. |
| TITULO_BRASIL | Factor | Título comercial utilizado no Brasil. |
| CPB_ROE | chr | Código identificador da obra audiovisual no sistema da Ancine. |
| PAIS_OBRA | Factor | País de origem da obra audiovisual. |
| REGISTRO_SALA | num | Código identificador único da sala de exibição. |
| PUBLICO | num | Número de espectadores presentes na sessão. |
| UF_SALA_COMPLEXO | Factor | Unidade Federativa (estado) do complexo exibidor. |
datatable(
lista_meses_combinados_tratados[["2024-01"]] %>%
slice(1:10),
extensions = "Scroller",
options = list(
deferRender = TRUE,
scrollX = TRUE,
scrollY = 300,
scroller = TRUE
),
rownames = FALSE
)
colSums(is.na(lista_meses_combinados_tratados[["2024-01"]]))
## DATA_EXIBICAO SESSAO TITULO_ORIGINAL TITULO_BRASIL
## 0 0 0 0
## CPB_ROE PAIS_OBRA REGISTRO_SALA PUBLICO
## 0 0 0 0
## UF_SALA_COMPLEXO
## 0
Aqui apresentamos as colunas que apresentam NA’s e suas quantidades.
df_salas_na <- df_salas %>%
summarise(across(everything(), ~ sum(is.na(.)))) %>%
pivot_longer(everything(),
names_to = "variavel",
values_to = "n_na") %>%
filter(n_na > 0) # << filtra só colunas com NA
ggplot(df_salas_na, aes(x = reorder(variavel, n_na), y = n_na)) +
geom_col(fill = "#1E88E5") +
coord_flip() +
labs(
title = "Quantidade de valores ausentes por variável — df_salas",
x = "Variável",
y = "Nº de valores ausentes"
) +
theme_minimal(base_size = 12)
As colunas ASSENTOS_MOBILIDADE_REDUZIDA, ASSENTOS_OBESIDADE e ASSENTOS_CADEIRANTES apresentam valores ausentes representando ausência de assentos, sendo preenchidas com NA em vez de 0. Portanto, substituímos os NA por 0 nessas variáveis.
df_salas_filtrado <- df_salas %>%
mutate(
across(
c(ASSENTOS_CADEIRANTES, ASSENTOS_MOBILIDADE_REDUZIDA, ASSENTOS_OBESIDADE),
~replace_na(.x, 0)
)
)
Para os demais casos de valores ausentes, não identificamos uma relação direta — tratam-se simplesmente de informações que não foram fornecidas. Além disso, as linhas que apresentam esses NAs são, em grande parte, as mesmas, o que impede a obtenção de informações relevantes a partir delas.
datatable(
df_salas_filtrado %>%
filter(is.na(REGISTRO_SALA)) %>%
slice(6:10),
extensions = "Scroller",
options = list(
deferRender = TRUE,
scrollX = TRUE,
scrollY = 300,
scroller = TRUE
),
rownames = FALSE
)
Por esse motivo, optamos por excluir essas observações do conjunto de dados.
df_salas_filtrado <- df_salas_filtrado %>%
filter(!is.na(REGISTRO_SALA))
O código abaixo realiza dois tipos distintos de conversão:
Variáveis categóricas → Factor As colunas
UF_COMPLEXO e OPERACAO_USUAL . Convertê-las
para factor garante consistência no tratamento dessas
informações e facilita análises, sumarizações e visualizações baseadas
em categorias.
Variáveis SIM/NÃO → lógicas (TRUE/FALSE) Já as variáveis de acessibilidade não são categorias, mas indicadores binários. Assim, elas são convertidas para valores lógicos:
"SIM" → TRUEFALSEIsso torna cálculos como proporções, somas e filtros muito mais diretos e confiáveis.
df_salas_filtrado <- df_salas_filtrado %>%
mutate(
across(
c(UF_COMPLEXO, OPERACAO_USUAL),
factor
),
ACESSO_ASSENTOS_COM_RAMPA = ACESSO_ASSENTOS_COM_RAMPA == "SIM",
ACESSO_SALA_COM_RAMPA = ACESSO_SALA_COM_RAMPA == "SIM",
BANHEIROS_ACESSIVEIS = BANHEIROS_ACESSIVEIS == "SIM"
)
Após os tratamentos realizados:
| Variável | Tipo | Descrição |
|---|---|---|
| NOME_SALA | chr |
Nome da sala individual dentro do complexo. |
| REGISTRO_SALA | num |
Código numérico da sala registrado na ANCINE. |
| ASSENTOS_SALA | num |
Quantidade total de assentos disponíveis na sala. |
| ASSENTOS_CADEIRANTES | num |
Número de assentos reservados para pessoas cadeirantes. |
| ASSENTOS_MOBILIDADE_REDUZIDA | num |
Número de assentos destinados a pessoas com mobilidade reduzida. |
| ASSENTOS_OBESIDADE | num |
Número de assentos adaptados para pessoas com obesidade. |
| ACESSO_ASSENTOS_COM_RAMPA | logi |
Indica se há rampa para acesso aos assentos (TRUE =
sim). |
| ACESSO_SALA_COM_RAMPA | logi |
Indica se a sala possui acesso por rampa (TRUE =
sim). |
| BANHEIROS_ACESSIVEIS | logi |
Indica se o complexo possui banheiros acessíveis (TRUE
= sim). |
| NOME_COMPLEXO | chr |
Nome do complexo de cinemas (shopping, centro cultural etc.). |
| UF_COMPLEXO | factor |
Sigla da Unidade Federativa onde o complexo está localizado. |
| OPERACAO_USUAL | factor |
Tipo de operação do complexo: comercial, não comercial etc. |
datatable(
df_salas_filtrado,
extensions = "Scroller",
options = list(
deferRender = TRUE,
scrollX = TRUE,
scrollY = 300,
scroller = TRUE
),
rownames = FALSE
)
colSums(is.na(df_salas_filtrado))
## NOME_SALA REGISTRO_SALA
## 0 0
## ASSENTOS_SALA ASSENTOS_CADEIRANTES
## 0 0
## ASSENTOS_MOBILIDADE_REDUZIDA ASSENTOS_OBESIDADE
## 0 0
## ACESSO_ASSENTOS_COM_RAMPA ACESSO_SALA_COM_RAMPA
## 0 0
## BANHEIROS_ACESSIVEIS NOME_COMPLEXO
## 0 0
## REGISTRO_COMPLEXO UF_COMPLEXO
## 0 0
## OPERACAO_USUAL
## 0
Um aspecto importante do cinema brasileiro é a distribuição de salas e de público. Segundo estimativas de população (IBGE 2024), em 2024 o Sudeste representava aproximadamente 41.7% da população do país, sendo que São Paulo concentrava cerca de 51.9% da população da região. Naturalmente, isso nos leva a supor que o público cinematográfico paulista seja maior simplesmente devido à sua densidade populacional, o que pode ser visualizado no mapa abaixo:
# Público por estado em cada mês
publico_mensal_por_estado <- lista_meses_combinados_tratados %>%
imap_dfr(~ .x %>%
group_by(UF_SALA_COMPLEXO) %>%
summarise(publico_estado = sum(PUBLICO, na.rm = TRUE),
.groups = "drop") %>%
mutate(Mes = .y))
# Público total do mês
publico_total_mes <- publico_mensal_por_estado %>%
group_by(Mes) %>%
summarise(publico_total = sum(publico_estado), .groups = "drop")
# Juntar e calcular percentual
percentual_estado_mes <- publico_mensal_por_estado %>%
left_join(publico_total_mes, by = "Mes") %>%
mutate(percentual = publico_estado / publico_total)
# Média percentual anual por estado
media_percentual_por_estado <- percentual_estado_mes %>%
group_by(UF_SALA_COMPLEXO) %>%
summarise(media_percentual = mean(percentual), .groups = "drop")
# 1. Obter o mapa do Brasil com os estados
brasil <- read_state(year = 2020)
# 2. Juntar com os dados de participação média
mapa_publico <- brasil %>%
left_join(media_percentual_por_estado, by = c("abbrev_state" = "UF_SALA_COMPLEXO"))
# 3. Plotar mapa
ggplot(mapa_publico) +
geom_sf(aes(fill = media_percentual), color = "white") +
scale_fill_gradient(low = "lightblue", high = "darkblue", labels = percent_format(accuracy = 0.1)) +
labs(
title = "Participação Média Anual do Público por Estado",
fill = "Participação (%)"
) +
theme_minimal()
Ao analisar os dados, observa-se que o público de cinema concentra-se majoritariamente e de maneira demasiada no estado de São Paulo. Esse fenômeno é influenciado pela elevada densidade populacional da metrópole, mas também se reflete na concentração de salas de cinema na região Sudeste, conforme ilustrado na tabela abaixo.
# Contar salas por UF
salas_por_uf <- df_salas_filtrado %>%
count(UF_COMPLEXO)
# Obter UFs com a região já incluída
ufs <- brasil %>%
select(abbrev_state, name_region) %>%
distinct()
# Renomear colunas para bater com seu df
ufs <- ufs %>%
rename(UF_COMPLEXO = abbrev_state, REGIAO = name_region)
# Juntar com seu df
df_salas_regiao <- df_salas_filtrado %>%
left_join(ufs, by = "UF_COMPLEXO")
# Contar salas por região
salas_por_regiao <- df_salas_regiao %>%
count(REGIAO) %>%
arrange(desc(n))
salas_por_regiao_perc <- salas_por_regiao %>%
mutate(pct = n / sum(n) * 100)
salas_outras <- salas_por_regiao %>% filter(REGIAO != "Sudeste") %>% summarise(total_salas = sum(n)) %>% pull(total_salas)
datatable(
salas_por_regiao,
rownames = FALSE,
options = list(pageLength = 5),
colnames = c("Região", "Número de Salas")
)
Observa-se que a região Sudeste concentra 51% das salas de cinema do país. Somando-se todas as salas das demais regiões, o total é 3080, valor que ainda é inferior à quantidade de salas existentes apenas no Sudeste (3187).
total_sudeste <- df_salas_filtrado %>%
left_join(ufs, by = "UF_COMPLEXO") %>%
filter(REGIAO == "Sudeste") %>%
nrow() # número de salas no Sudeste
salas_sp <- df_salas_filtrado %>%
filter(UF_COMPLEXO == "SP") %>%
nrow() # número de salas em SP
salas_mg <- df_salas_filtrado %>%
filter(UF_COMPLEXO == "MG") %>%
nrow() # número de salas em ES
pct_sp_sudeste <- round(salas_sp / total_sudeste * 100)
pct_mg_sudeste <- round(salas_mg/ total_sudeste * 100)
Além disso, o estado de São Paulo possui 1885 salas, representando 59% das salas da região Sudeste. Isso é aproximadamente 7 pontos percentuais acima de sua participação na população da região. Em contraste, Minas Gerais possui 17% das salas, enquanto corresponde a 24% da população, resultando em uma diferença de -7 pontos percentuais.
Para comparação fora da região Sudeste, observa-se que, por exemplo, o estado do Pará, com 8.664306^{6} habitantes, possui apenas 126 salas de cinema. Em contraste, o Espírito Santo, com aproximadamente metade da população do Pará (4.102129^{6}), abriga praticamente o mesmo número de salas (125).
Ainda que consideremos a soma das salas de cinema de Bahia, Pernambuco, Ceará, Maranhão e Paraíba (760), mesmo com uma população próxima à de São Paulo, o total de salas ainda representa apenas cerca de metade das existentes em São Paulo.
# Plotly horizontal bar
plot_ly(
salas_por_uf,
x = ~n,
y = ~reorder(UF_COMPLEXO, n),
type = "bar",
orientation = "h",
marker = list(color = "#4C72B0")
) %>%
layout(
title = "Quantidade de Salas por Estado",
xaxis = list(title = "Salas"),
yaxis = list(title = "Estado")
)
Além da distribuição de salas, nota-se que a região Sudeste também concentra mais títulos lançados nos cinemas. A tabela abaixo apresenta a média de títulos por estado em cada região, evidenciando que os estados do Sudeste têm, em média, mais lançamentos que estados de outras regiões.
# Juntando todos os meses da lista em um único df
titulos_por_estado <- lista_meses_combinados_tratados %>%
bind_rows() %>%
group_by(UF_SALA_COMPLEXO) %>%
summarise(num_titulos = n_distinct(TITULO_BRASIL)) %>%
arrange(desc(num_titulos)) %>%
select(UF_SALA_COMPLEXO, num_titulos) # mantém só as colunas importantes
# Calcular média de títulos por região com base nos estados
media_titulos_por_regiao <- titulos_por_estado %>%
left_join(ufs, by = c("UF_SALA_COMPLEXO" = "UF_COMPLEXO")) %>% # adiciona REGIAO
group_by(REGIAO) %>%
summarise(media_titulos = round(mean(num_titulos))) %>%
arrange(desc(media_titulos))
datatable(
media_titulos_por_regiao,
rownames = FALSE,
colnames = c("Região", "Média de Títulos por Estado"),
caption = htmltools::tags$caption(
style = 'caption-side: top; text-align: center; font-weight: bold; font-size: 16px;',
"Média da Quantidade de Títulos Disponíveis por Região"
),
options = list(pageLength = 5, autoWidth = TRUE)
) %>%
formatStyle(
columns = names(media_titulos_por_regiao),
'text-align' = 'center'
)
Isso reforça o padrão observado anteriormente: não apenas o público e as salas estão concentrados, mas a própria oferta de filmes tende a privilegiar essa região, deixando Norte e Nordeste com menos diversidade de títulos exibidos. Essa disparidade entre oferta de títulos e distribuição populacional sugere que o cinema brasileiro ainda tem forte concentração geográfica e não reflete de forma equilibrada o panorama nacional.
O cinema brasileiro apresenta um panorama interessante: apesar de haver uma grande quantidade de títulos nacionais disponíveis nas salas, o público tende a consumir mais produções estrangeiras.
# 1. Juntar todos os meses
todos_filmes <- lista_meses_combinados_tratados %>%
bind_rows() %>%
select(TITULO_BRASIL, PAIS_OBRA, ) %>%
distinct() # garante que cada filme conte apenas uma vez
# 2. Contar filmes por país (Top 5)
filmes_por_pais_top5 <- todos_filmes %>%
group_by(PAIS_OBRA) %>%
summarise(num_filmes = n(), .groups = "drop") %>%
arrange(desc(num_filmes)) %>%
slice_head(n = 5) # pega apenas o top 5
O gráfico abaixo mostra os 5 países com maior número de títulos em cartaz. Observa-se que o Brasil lidera em quantidade de títulos (358), seguido por outros países, como os Estados Unidos.
# 3. Gráfico de barras mostrando a quantidade absoluta de filmes por país
p <- ggplot(filmes_por_pais_top5,
aes(x = fct_reorder(PAIS_OBRA, num_filmes), y = num_filmes, fill = PAIS_OBRA,
text = paste("País:", PAIS_OBRA,
"<br>Número de Filmes:", num_filmes))) +
geom_col() +
geom_text(aes(label = num_filmes), hjust = -0.2, size = 4) +
coord_flip() +
labs(
title = "Top 5 Países por Quantidade de Filmes",
x = "País",
y = "Número de Filmes",
fill = "País"
) +
theme_minimal() +
theme(plot.title = element_text(face = "bold", size = 14))
# Transformar em plotly
ggplotly(p, tooltip = "text") %>%
layout(
autosize = TRUE,
margin = list(l = 150, r = 50, t = 80, b = 50), # aumenta margens para labels e título
yaxis = list(tickformat = ","),
xaxis = list(tickangle = 0)
)
No entanto, a predominância de títulos nacionais disponíveis não se traduz automaticamente em maior público, indicando que fatores como marketing, distribuição e preferência do público influenciam significativamente a audiência.
A seguir, analisamos os 100 filmes mais assistidos do ano:
O gráfico a seguir mostra a distribuição de nacionalidades entre os 100 filmes mais assistidos, reforçando o predomínio do cinema americano.
top_100_mais_assistidos <- lista_meses_combinados_tratados %>%
bind_rows() %>%
group_by(TITULO_BRASIL, PAIS_OBRA) %>%
summarise(publico_total = sum(PUBLICO, na.rm = TRUE), .groups = "drop") %>%
filter(publico_total > 0) %>%
arrange(desc(publico_total))%>%
slice_head(n = 100)
contagem_paises <- top_100_mais_assistidos %>%
count(PAIS_OBRA) %>%
mutate(percentual = n / sum(n) * 100) %>%
filter(!(PAIS_OBRA %in% c("Não se aplica", "null")))
plot_ly(
contagem_paises,
labels = ~PAIS_OBRA,
values = ~percentual,
type = "pie",
textinfo = "label+percent",
insidetextorientation = "radial"
) %>%
layout(
title = "Distribuição dos Países entre os 100 Filmes Mais Assistidos",
showlegend = TRUE
)
Em contraste, ao observar os 100 filmes menos assistidos percebemos que o Brasil ainda lidera em número de títulos, representando uma parcela significativa dos filmes menos assistidos. Isso sugere que muitos filmes nacionais não conseguem grande repercussão de público, possivelmente devido à distribuição limitada, marketing ou apelo comercial menor.
O gráfico abaixo apresenta a distribuição de nacionalidades entre os 100 filmes menos assistidos, destacando novamente a predominância de produções nacionais nessa faixa.
top_100_menos_assistidos <- lista_meses_combinados_tratados %>%
bind_rows() %>%
group_by(TITULO_BRASIL, PAIS_OBRA) %>%
summarise(publico_total = sum(PUBLICO, na.rm = TRUE), .groups = "drop") %>%
filter(publico_total > 0) %>%
arrange(publico_total)%>%
slice_head(n = 100)
contagem_paises <- top_100_menos_assistidos %>%
count(PAIS_OBRA) %>%
mutate(percentual = n / sum(n) * 100)
plot_ly(
contagem_paises,
labels = ~PAIS_OBRA,
values = ~percentual,
type = "pie",
textinfo = "label+percent",
insidetextorientation = "radial"
) %>%
layout(
title = "Distribuição dos Países entre os 100 Filmes Menos Assistidos",
showlegend = TRUE
)
Além disso, ao analisar o padrão de consumo ao longo do ano em todos os estados, percebemos que os filmes mais assistidos tendem a ser estrangeiros. O heatmap abaixo ilustra essa tendência, mostrando a origem dos filmes mais populares em cada estado mês a mês.
Mesmo com a presença significativa de títulos nacionais, o público costuma se concentrar nas produções internacionais, evidenciando que a quantidade de títulos disponíveis não garante necessariamente maior audiência para filmes brasileiros.
# 1. Iterar sobre cada mês e juntar os dados
filmes_mais_assistidos <- lista_meses_combinados_tratados %>%
imap_dfr(~ .x %>%
group_by(UF_SALA_COMPLEXO, TITULO_BRASIL, PAIS_OBRA) %>%
summarise(publico_total = sum(PUBLICO, na.rm = TRUE), .groups = "drop") %>%
group_by(UF_SALA_COMPLEXO) %>%
slice_max(order_by = publico_total, n = 1) %>% # pega o filme mais assistido por estado
ungroup() %>%
mutate(Mes = .y))
# Pivot para heatmap
origem_filmes_estado <- filmes_mais_assistidos %>%
select(Mes, UF_SALA_COMPLEXO, PAIS_OBRA)
ggplot(origem_filmes_estado, aes(x = Mes, y = UF_SALA_COMPLEXO, fill = PAIS_OBRA)) +
geom_tile(color = "white") +
labs(
title = "Origem dos Filmes Mais Assistidos por Estado e Mes",
x = "Mes",
y = "Estado",
fill = "Pais do Filme"
) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Os únicos meses em que essa tendência é quebrada são novembro e dezembro, o que coincide, respectivamente, com o lançamento dos filmes Ainda Estou Aqui e Moana no Brasil, que se destacaram como os mais assistidos de seus respectivos meses, como mostra a tabela abaixo:
# Iterar sobre cada mês e pegar o filme mais assistido no país
filmes_mais_assistidos_mes <- lista_meses_combinados_tratados %>%
imap_dfr(~ .x %>%
group_by(UF_SALA_COMPLEXO, TITULO_BRASIL, PAIS_OBRA) %>%
summarise(publico_total = sum(PUBLICO, na.rm = TRUE), .groups = "drop") %>%
slice_max(order_by = publico_total, n = 1) %>% # pega o filme mais assistido do mês
ungroup() %>%
mutate(Mes = .y)) %>%
select(Mes, TITULO_BRASIL, PAIS_OBRA, publico_total, UF_SALA_COMPLEXO) # mantém só as colunas relevantes
# Visualizar em tabela
datatable(
filmes_mais_assistidos_mes,
rownames = FALSE,
colnames = c("Mês", "Título", "Origem", "Público Total"),
caption = htmltools::tags$caption(
style = 'caption-side: top; text-align: center; font-weight: bold; font-size: 16px;',
"Filmes mais Assistidos por Mês"
),
options = list(pageLength = 6, autoWidth = TRUE)
) %>%
formatStyle(
columns = names(filmes_mais_assistidos_mes),
'text-align' = 'center'
)
Na tabela acima, podemos também ver que os títulos estadunidenses tendem a atrair consistentemente mais público do que os filmes de outros países ao longo do ano.
O gráfico de evolução do público por estado reforça essas tendências já discutidas, mostrando que São Paulo concentra naturalmente a maior parte da audiência. Além disso, nota-se um pico de público nos meses de junho, julho e dezembro, coincidindo com o lançamento de grandes produções estrangeiras, como Divertidamente 2 e Moana, evidenciando que filmes dos Estados Unidos não só são mais numerosos entre os mais assistidos, mas também geram maior engajamento do público.
# Certificando que Mes é fator para manter a ordem correta
publico_mensal_por_estado <- publico_mensal_por_estado %>%
mutate(Mes = factor(Mes, levels = unique(Mes)))
# Gráfico ggplot
p <- ggplot(publico_mensal_por_estado,
aes(x = Mes,
y = publico_estado,
color = UF_SALA_COMPLEXO,
group = UF_SALA_COMPLEXO,
text = paste("Estado:", UF_SALA_COMPLEXO,
"<br>Mês:", Mes,
"<br>Público:", format(publico_estado, big.mark = ",")))) +
geom_line(size = 1.2) +
geom_point(size = 2) +
scale_y_continuous(labels = scales::label_number(scale = 1e-6, suffix = "M")) +
labs(
title = "Evolução do Público por Estado",
x = "Mês",
y = "Público (em milhões)"
) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# Transformando em plotly
ggplotly(p, tooltip = "text") %>%
layout(
autosize = TRUE, # faz o gráfico tentar ocupar todo o espaço disponível
margin = list(l = 150), # aumenta margem esquerda para labels longos
yaxis = list(tickformat = ",") # formata eixo Y com milhares
)
Adicionalmente, o gráfico abaixo evidencia a disparidade de público entre os filmes mais assistidos de diferentes países. Nele, apresentamos os títulos de maior bilheteria de cada origem, ordenados pelo público total.
filmes_mais_assistidos_por_pais <- lista_meses_combinados_tratados %>%
bind_rows() %>%
select(TITULO_BRASIL, PAIS_OBRA, PUBLICO) %>%
group_by(PAIS_OBRA, TITULO_BRASIL) %>%
summarise(publico_total = sum(PUBLICO, na.rm = TRUE), .groups = "drop") %>%
group_by(PAIS_OBRA) %>%
slice_max(order_by = publico_total, n = 1) %>%
ungroup() %>%
filter(PAIS_OBRA != "Não se aplica") %>%
arrange(desc(publico_total)) %>%
slice_head(n = 5)
# Extrair público
publico_brasil <- filmes_mais_assistidos_por_pais %>% filter(PAIS_OBRA == "BRASIL") %>% pull(publico_total)
publico_eua <- filmes_mais_assistidos_por_pais %>% filter(PAIS_OBRA == "ESTADOS UNIDOS") %>% pull(publico_total)
# Diferença absoluta e percentual
diferenca_absoluta <- publico_eua - publico_brasil
diferenca_percentual <- (publico_eua - publico_brasil) / publico_brasil * 100
plot_ly(
filmes_mais_assistidos_por_pais,
x = ~reorder(TITULO_BRASIL, publico_total), # ordena barras
y = ~publico_total,
type = 'bar',
color = ~PAIS_OBRA,
text = ~paste("País:", PAIS_OBRA,
"<br>Público total:"),
hoverinfo = 'text'
) %>%
layout(
title = "Top 5 Títulos Mais Populares por Nacionalidade no Brasil",
xaxis = list(title = "Filme"),
yaxis = list(title = "Público Total", tickformat = ","),
margin = list(l = 80, r = 50, t = 80, b = 150)
)
Dessa forma, observa-se que, mesmo entre os cinco filmes de maior sucesso por nacionalidade, os títulos estadunidenses atraíram cerca de 647 mais público do que os nacionais, sendo também consideravelmente superiores aos títulos de outros países. Essa diferença reforça a tendência já observada nas seções anteriores: embora haja muitos filmes brasileiros em cartaz, o público tende a se concentrar nas produções internacionais, evidenciando o maior prestígio e apelo das obras estrangeiras no mercado cinematográfico brasileiro.
As observações das sessões anteriores podem nos levar a refletir sobre por que, mesmo estando em maioria absoluta em quantidade de títulos — e apesar de iniciativas de incentivo, como a Cota de Telas — o público de filmes nacionais permanece tão reduzido.
Uma primeira hipótese poderia ser a de que os filmes brasileiros recebem horários desfavoráveis, algo frequentemente apontado como reclamação. No entanto, o gráfico abaixo mostra que isso não é necessariamente verdade: a grande maioria dos filmes, incluindo os nacionais, é exibida no período da tarde, justamente o horário de maior movimento nos cinemas.
df <- lista_meses_combinados_tratados %>%
bind_rows() %>%
select(SESSAO, PUBLICO, TITULO_BRASIL, PAIS_OBRA, REGISTRO_SALA, DATA_EXIBICAO) %>%
mutate(
Hora = hour(SESSAO),
Faixa = case_when(
Hora >= 6 & Hora < 12 ~ "Manhã",
Hora >= 12 & Hora < 18 ~ "Tarde",
Hora >= 18 & Hora < 24 ~ "Noite",
TRUE ~ "Madrugada"
),
Pais = ifelse(PAIS_OBRA == "BRASIL", "Brasil",
ifelse(PAIS_OBRA == "ESTADOS UNIDOS", "EUA", NA))
) %>%
filter(!is.na(Pais))
# Resumir dados por país e faixa
df_resumo <- df %>%
group_by(Pais, Faixa) %>%
summarise(
qtd_sessoes = n(),
publico_total = sum(PUBLICO, na.rm = TRUE),
.groups = "drop"
)
# Extrair público
publico_brasil <- filmes_mais_assistidos_por_pais %>%
filter(PAIS_OBRA %in% c("BRASIL", "ESTADOS UNIDOS")) %>% filter(PAIS_OBRA == "BRASIL") %>% pull(publico_total)
publico_eua <- filmes_mais_assistidos_por_pais %>%
filter(PAIS_OBRA %in% c("BRASIL", "ESTADOS UNIDOS")) %>% filter(PAIS_OBRA == "ESTADOS UNIDOS") %>% pull(publico_total)
# Diferença absoluta e percentual
diferenca_absoluta <- publico_eua - publico_brasil
diferenca_percentual <- (publico_eua - publico_brasil) / publico_brasil * 100
# Gráfico interativo com plotly (Número de sessões)
plot_sessoes <- plot_ly(df_resumo,
x = ~Faixa,
y = ~qtd_sessoes,
color = ~Pais,
type = 'bar',
text = ~paste("País:", Pais,
"<br>Faixa:", Faixa,
"<br>Sessões:", scales::comma(qtd_sessoes))) %>%
layout(title = "Número de Sessões por Faixa Horária: Brasil vs EUA",
yaxis = list(title = "Número de Sessões", tickformat = ","),
barmode = 'group')
# Exibir
plot_sessoes
Ainda assim, o que observamos é uma quantidade muito maior de sessões dedicadas a filmes estadunidenses em todas as faixas horárias, chegando a uma diferença percentual de 646.7% em relação aos filmes brasileiros.
Ou seja, podemos então supor que a menor audiência dos filmes nacionais não é consequência direta de falta de interesse imediato do público, mas sim de uma distribuição desequilibrada de sessões. Com uma quantidade significativamente inferior de exibições, é natural que o público acumulado seja também menor — como apresentado na seção anterior.
# Calcular duração em cartaz por título
duracao_por_filme <- df %>%
group_by(Pais, TITULO_BRASIL) %>%
summarise(
primeira_data = min(DATA_EXIBICAO, na.rm = TRUE),
ultima_data = max(DATA_EXIBICAO, na.rm = TRUE),
duracao_dias = as.numeric(ultima_data - primeira_data + 1), # +1 para contar inclusive o primeiro dia
.groups = "drop"
)
# Calcular duração média e mediana por país (se ainda não tiver rodado)
duracao_media_pais <- duracao_por_filme %>%
group_by(Pais) %>%
summarise(
duracao_media = mean(duracao_dias, na.rm = TRUE),
duracao_mediana = median(duracao_dias, na.rm = TRUE),
.groups = "drop"
)
media_BR <- duracao_media_pais$duracao_media[duracao_media_pais$Pais == "Brasil"]
media_EUA <- duracao_media_pais$duracao_media[duracao_media_pais$Pais == "EUA"]
dif_absoluta <- media_EUA - media_BR
dif_percentual <- (dif_absoluta / media_BR) * 100
Além do tratado na sessão anterior, podemos investigar uma outra dimensão importante para entender o desempenho comercial: por quanto tempo os filmes permanecem em cartaz.
Como mostrado no gráfico abaixo, filmes dos Estados Unidos têm uma duração média em cartaz 14.5 dias maior do que os filmes brasileiros — o que representa aproximadamente 26.8% de tempo adicional nos cinemas.
# Gráfico interativo
fig <- plot_ly(
duracao_media_pais,
x = ~Pais,
y = ~duracao_media,
type = "bar",
text = ~paste0(
"Média: ", round(duracao_media, 1), " dias<br>",
"Mediana: ", round(duracao_mediana, 1), " dias"
),
hoverinfo = "text"
)
fig <- fig %>%
layout(
title = "Duração média em cartaz: Brasil vs EUA",
yaxis = list(title = "Dias em cartaz"),
xaxis = list(title = ""),
showlegend = FALSE
)
fig
Essa diferença reforça ainda mais o desequilíbrio observado: com mais sessões e mais semanas de exibição, filmes estadunidenses acumulam naturalmente mais público, independentemente de preferência intrínseca. O cenário indica, assim, que parte significativa do desempenho inferior dos filmes brasileiros se explica pelo menor acesso aos espaços de exibição, e não apenas pela demanda do público.
Uma hipótese adicional para explicar possíveis diferenças na distribuição de público seria a variação na acessibilidade das salas de cinema entre estados ou regiões. Em teoria, limitações de acesso — como ausência de rampas, assentos reservados ou banheiros acessíveis — poderiam afetar a frequência de determinados grupos, impactando a demanda e, potencialmente, o desempenho de filmes exibidos em diferentes localidades.
No entanto, os resultados mostram que, embora exista alguma variação, não há discrepâncias significativas entre os estados. A proporção média de salas acessíveis por região também permanece relativamente homogênea, sem concentração extrema em uma região específica.
Em outras palavras, os dados não indicam que a acessibilidade seja um fator determinante para as diferenças de público entre estados ou regiões. A infraestrutura básica de acessibilidade tende a ser distribuída de forma relativamente equilibrada pelo país, não sustentando a hipótese de que disparidades nesse aspecto expliquem diferenças relevantes na audiência.
Assim, este aspecto reforça o entendimento de que a variação no público entre regiões está associada a outros elementos — como distribuição de sessões, oferta cinematográfica ou presença de grandes centros urbanos — e não a limitações de acesso físico às salas.
acessibilidade_estado <- df_salas_filtrado %>%
group_by(UF_COMPLEXO) %>%
summarise(
total_salas = n(),
total_assentos = sum(ASSENTOS_SALA, na.rm = TRUE),
# total de assentos acessíveis por estado
assentos_cadeirantes = sum(ASSENTOS_CADEIRANTES, na.rm = TRUE),
assentos_mob_reduzida = sum(ASSENTOS_MOBILIDADE_REDUZIDA, na.rm = TRUE)
) %>%
mutate(
perc_cadeirantes = round(assentos_cadeirantes / total_assentos * 100, 1),
perc_mobilidade_reduzida = round(assentos_mob_reduzida / total_assentos * 100, 1)
)
acessibilidade_regiao_resumo <- acessibilidade_estado %>%
left_join(ufs, by = "UF_COMPLEXO") %>%
filter(!is.na(REGIAO)) %>%
group_by(REGIAO) %>%
summarise(
perc_cadeirantes = round(mean(perc_cadeirantes, na.rm = TRUE), 1),
perc_mobilidade_reduzida = round(mean(perc_mobilidade_reduzida, na.rm = TRUE), 1)
) %>%
arrange(desc(perc_cadeirantes))
datatable(
acessibilidade_regiao_resumo,
rownames = FALSE,
colnames = c(
"Região",
"% Assentos Cadeirantes",
"% Assentos Mobilidade Reduzida"
),
caption = htmltools::tags$caption(
style = "caption-side: top; text-align: center; font-size: 18px; font-weight: bold;",
"Acessibilidade por Região (Percentual de Assentos Acessíveis)"
),
options = list(
pageLength = 10,
autoWidth = TRUE,
dom = "ftip"
)
)
Apesar disso, ao comparar os resultados observados com o que estabelece o “Decreto Nº 9.404” (2018), nota-se que, mesmo que não haja grande variação entre regiões, os percentuais médios de assentos acessíveis ficam em geral abaixo do mínimo recomendado.
A legislação determina que, nos teatros, cinemas, auditórios, estádios, ginásios de esporte, locais de espetáculos e de conferências e similares, devem ser reservados, no mínimo:
Entretanto, os percentuais calculados mostram que a maioria das regiões apresenta valores inferiores a 2% tanto para assentos destinados a cadeirantes quanto para assentos destinados a pessoas com mobilidade reduzida.
Isso indica que, embora a acessibilidade não seja um fator que explique diferenças de público entre regiões, ela ainda está aquém do patamar previsto pela legislação, evidenciando uma carência estrutural generalizada no país. Em síntese:
A análise exploratória da indústria cinematográfica brasileira em 2024, confrontando a infraestrutura de exibição com os padrões de consumo, solidifica a percepção de um mercado marcado por profunda concentração geográfica e uma acentuada disparidade na sustentação da produção nacional.
O principal desafio estrutural do cinema no Brasil não é apenas a baixa cobertura geral (apenas 8% dos municípios com cinemas), mas a hiperconcentração da infraestrutura na região Sudeste.
A Região Sudeste detém aproximadamente 51% das salas e, consequentemente, concentra a maior parte do público e a maior média de títulos por estado. Esta disparidade de infraestrutura cria um ciclo vicioso de acesso: o público nas demais regiões, notadamente Norte e Nordeste, tem uma oferta cinematográfica e diversidade de títulos significativamente limitada, o que perpetua a desigualdade regional no consumo.
Apesar de o restabelecimento da Cota de Tela ter reforçado a presença de filmes nacionais em número de títulos, a audiência é esmagadoramente dominada por produções estrangeiras, especialmente as estadunidenses.
A causa central da menor audiência nacional não reside na falta de interesse do público em si, mas sim no acesso desigual ao espaço de exibição. Filmes dos Estados Unidos se beneficiam de um volume de sessões significativamente maior e de um tempo de permanência em cartaz cerca de 26.8% superior ao das produções brasileiras. A concentração de público em grandes blockbusters internacionais, especialmente nos picos anuais, sugere que o maior apelo comercial é potencializado por uma distribuição mais robusta e sustentada, relegando grande parte da produção nacional para as listas dos filmes com menor repercussão.
A análise da acessibilidade física das salas não se mostrou um fator explicativo para as diferenças de público entre as regiões, pois a distribuição de assentos acessíveis é relativamente homogênea no país.
No entanto, a infraestrutura de acessibilidade opera, em média, abaixo do patamar de 2% exigido pelo “Decreto Nº 9.404” (2018) em grande parte do território nacional.
Isso indica uma carência estrutural generalizada que exige melhorias em âmbito nacional, mas que não sustenta a hipótese de que a falta de público em regiões específicas se deva a barreiras de acesso físico mais acentuadas do que em outras.
Para o cinema brasileiro alcançar um patamar mais equilibrado de sustentabilidade e representatividade, a política pública e as estratégias de mercado devem focar em superar dois obstáculos cruciais:
Em resumo, a indústria no Brasil está em recuperação, mas o desempenho da produção nacional é severamente limitado pela desigualdade no acesso ao espaço de exibição, um reflexo direto da concentração geográfica da infraestrutura de salas.