Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
MongoDBchevron-right

O guia de 5 minutos para trabalhar com dados ESG no MongoDB

OZ
Ola Zieminska11 min read • Published Mar 07, 2023 • Updated Aug 24, 2023
MongoDB
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
O MongoDB torna incrivelmente fácil trabalhar com dados ambientais, sociais e de administração corporativa (ESG) de vários fornecedores, analisar esses dados e visualizá-los.
Neste guia rápido, mostraremos como o MongoDB pode:
  • Mova dados ESG de diferentes fontes de dados para o document model.
  • Incorpore facilmente novos feeds de origem ESG ao modelo de dados de documentos.
  • Execute queries avançadas e agregadas em dados ESG.
  • Visualizar dados ESG.
  • Gerencie diferentes tipos de dados em um único documento.
  • Integrar dados geoespaciais.
Ao longo deste guia, fornecemos dados ESG de MSCI.
NOTA: são necessários uma conta e um login MSCI para baixar os conjuntos de dados vinculados a este artigo. A disponibilidade do conjunto de dados depende da disponibilidade do produto MSCI.
Nossos exemplos são retirados do trabalho da vida real com clientes MongoDB no setor de serviços financeiros.As capturas de tela (além de trechos de código) são retiradas doMongoDB Compass, A GUI do MongoDB para consulta, otimização e análise de dados.

Importando dados para o MongoDB

A primeira etapa é baixar o conjunto de dados MSCI e importar o arquivo MSCI .csv (figura 1) para o MongoDB.
Embora os dados do MSCI estejam em formato tabular, o modelo de dados de documentosdo MongoDB permite importar os dados diretamente para uma collection de banco de dados e aplicar os tipos de dados conforme necessário.
Importando os dados usando a GUI do Compass do MongoDB Imagem 1. Importando os dados usando a GUI do Compass do MongoDB
Com os dados MSCI importados para o MongoDB, podemos começar a descobrir, consultar e visualizar.

Cenário 1: Coleta e query básicas de dados ESG usando agregações básicas

Conjuntode dados de origem :collection MSCI ESG Accounting Governance Risk (AGR): accounting_governance_risk_agr_ratings
Do MSCI - "ESG AGR uses a quantitative approach to identify risks in the financial reporting practices and accounting governance of publicly listed companies. Metrics contributing to the score include traditional fundamental ratios used to evaluate corporate strength and profitability, as well as forensic ratios."
Campos/Informações de dados:
  • A Classificação ADR (Accounting & Govenance Credit) consiste em quatro agrupamentos com base no Percentil ARG: Muito Agressivo (1-10), Agressivo (11-35), Médio (36-85), Conservador (86-100).
  • O Percentil AGR (Accounting & Governance Risk) varia de 1a100, sendo que os valores mais baixos representam riscos maiores.

Etapa 1: Combine e agrupe classificações de ADR por país de interesse

Neste exemplo, contaremos o número de empresas com classificação ADR no Japão pertencentes a cada grupo de classificação ADR (ou seja, Muito Agressivo, Agressivo, Médio e Conservador). Para fazer isso, usaremos o pipeline de agregaçãodo MongoDB para processar vários documentos e retornar os resultados que buscamos.
O pipeline de agregação apresenta uma abstração poderosa para trabalhar e analisar dados armazenados no MongoDB database. A compostabilidade do aggregation pipeline é uma das chaves para o seu poder. Na verdade, o design foi modelado no pipeline Unix, que permite aos desenvolvedores string uma série de processos que funcionam juntos. Isso ajuda a simplificar o código do aplicativo, reduzindo a lógica e, quando aplicado adequadamente, um único aggregation pipeline pode substituir muitas queries e seus tempos de viagem de ida e volta de rede associados.
Quais estágios de agregação usaremos?
  • O operador$match no MongoDB funciona como um filtro. Ele filtra os documentos para passar apenas os documentos que correspondem às condições especificadas.
  • O estágio$group separa os documentos em grupos de acordo com uma chave de grupo "," que, nesse caso, é o valor de Agr_Rating.
  • Além disso, nesse estágio, podemos resumir a contagem total dessas entidades.
Combinando os dois primeiros estágios de agregação, podemos filtrar o campo Issuer_Cntry_Domicile para que seja igual ao Japão — ou seja, “JP” — e agrupar as classificações AGR.
Como etapa final, também classificaremos a saída do total_count em ordem decrescente (daí o -1) e mesclaremos os resultados em outra coleção no banco de dados de nossa escolha, com o operador$merge .
1[{
2 $match: {
3 Issuer_Cntry_Domicile: 'JP'
4 }
5}, {
6 $group: {
7 _id: '$Agr_Rating',
8 total_count: {
9 $sum: 1
10 },
11 country: {
12 $first: '$Issuer_Cntry_Domicile'
13 }
14 }
15}, {
16 $sort: {
17 total_count: -1
18 }
19}, {
20 $merge: {
21 into: {
22 db: 'JP_DB',
23 coll: 'jp_agr_risk_ratings'
24 },
25 on: '_id',
26 whenMatched: 'merge',
27 whenNotMatched: 'insert'
28 }
29}]
O resultado e a coleção de saída 'jp_agr_risk_ratings' podem ser vistos abaixo.
collection de resultado e saída

Etapa 2: visualizar a saída com MongoDB Charts

Em seguida, vamos visualizar os resultados da etapa 1 com MongoDB Charts, que está integrado ao MongoDB. Com o Charts, os desenvolvedores não precisam se preocupar em encontrar uma ferramenta de visualização de dados compatível, em lidar com movimentação de dados ou duplicação de dados ao criar ou compartilhar visualizações de dados.
Utilizando MongoDB Charts, em poucos cliques podemos visualizar os resultados dos nossos dados na Figura 2.
Distribuição da classificação AGR no Japão Figura 2. Distribuição da classificação ADR no Japão

Etapa 3: visualizar a saída de vários países

Go dar um passo além e agrupar os resultados de vários países. Podemos adicionar mais países - por exemplo, Japão e Hong Kong - e depois $group e $count os resultados para eles na Figura 3.
$match execução do estágio no MongoDB Compass Figura 3. Estágio $match executado no MongoDB Compass
Voltando aos gráficos, podemos exibir facilmente os resultados comparando os riscos de governança em Hong Kong e no Japão, conforme mostrado na Figura 4.
Distribuição comparada de classificações AGR - Japão x Hong Kong Figura 4. Distribuição comparada das classificações AGR - Japão vs Hong Kong

Cenário 2: Associações e análise de dados usando um aggregation pipeline

Conjunto dedados de origem: ColeçãoAGR Ratings :
accounting_governance_risk_agr_ratings
Conjunto de dados :Indicadores de risco fundamentais do país Coleta : focus_risk_scores
De MSCI - Os indicadores de risco fundamental do país da GeoQuant fundem a ciência política e a computação para medir e prever o risco política. O software de aprendizado de máquina da GeoQuant raspa a web em busca de grandes volumes de dados respeitáveis, notícias e conteúdo de mídia social. “
Campos/Informações de dados:
  • Saúde (Risco à Saúde) - Qualidade/acesso aos cuidados de saúde, resiliência à doença
  • IR (Risco de Relações Internacionais) - Prevalência/probabilidade de conflito diplomático, militar e econômicocom outros países
  • PolViol (risco de violência política) - Prevalência/probabilidade de guerra civil, insurgência, terrorismo
Com os fundamentos da estrutura de query do MongoDB entendidos, vamos para queries mais complexas, novamente usando os recursos de pipeline de agregaçãodo MongoDB.
Com o modelo de dados de documentos do MongoDB, podemos agrupar documentos em um documento pai. Além disso, podemos realizar operações de consulta nesses campos aninhados.
Imagine um cenário em que temos duas collection separadas de dados ESG e queremos combinar informações de uma collection em outra, buscar esses dados na array de resultados e filtrar e transformar ainda mais os dados.
Podemos fazer isso usando um pipeline de agregação.
Digamos que queremos resultados mais detalhados para empresas localizadas em um determinado país — por exemplo, combinando dados de focus_risk_scores com nossa collection principal: accounting_governance_risk_agr_ratings.
coleção account_administrance_risco_agr_ratings no MongoDB Compass Figura 5. collection account_administrance_risco_agr_ratings no MongoDB Compass
coleção focus_risk_scores no MongoDB Compass Imagem 6. coleção foco_risco_scores no MongoDB Compass
Para fazer isso, usamos o estágio$lookup, que adiciona um novo campo de matriz a cada documento de entrada. Ele contém os documentos correspondentes da coleção "unida". Isso é semelhante às junções usadas em bancos de dados relacionais. Você pode perguntar: "Qual é $lookup sintaxe?"
Para realizar uma correspondência de igualdade entre um campo dos documentos de entrada com um campo dos documentos da coleção "associada", o estágio$lookup possui esta sintaxe:
1{
2 $lookup:
3 {
4 from: <collection to join>,
5 localField: <field from the input documents>,
6 foreignField: <field from the documents of the "from" collection>,
7 as: <output array field>
8 }
9}
Em nosso caso, queremos unir e corresponder o valor de Writer_Cntry_Domicile da coleção account_security_agr_ratings ao valor do campoCountry da coleção foco_risco_scores, conforme mostrado na figura 7.
$lookup estágio executado no MongoDB Compass Figura 7. Estágio $lookup executado no MongoDB Compass
Após executar a operação $lookup, passamos os dados no campo de array "resultado".
Imagine que, neste ponto, decidimos exibir apenas Issuer_Name e Issuer_Cntry_Domicle da primeira collection. Podemos fazer isso com o operador $project e definir os campos que queremos que fiquem visíveis para nós na Figura 8.
estágio $project executado no MongoDB Compass Imagem 8. estágio $project executado no MongoDB Compass
Além disso, removemos o camporesult_.id que vem do documento original da outra coleção, pois não precisamos dele neste estágio. Aqui vem o prático estágio$unset.
Estágio $unset executado no MongoDB Compass Figura 9. Estágio $unset executado no MongoDB Compass
Com nossos dados agora limpos e visíveis em uma coleção, podemos Go além e editar o conjunto de dados com novos campos e categorias personalizados.
Atualizando campos
Digamos que gostaria de configurar novos campos que categorizam as listas Health, ir e PolViol separadamente.
Para fazer isso, podemos usar o operador$set . Usamos para criar novos campos — health_risco, politcial_violance_risco, internacional_relations_risco — onde cada um dos respectivos campos consistirá em uma array com apenas os elementos que correspondem à condição especificada no operador $filter.
$filter tem a seguinte sintaxe:
1{
2 $filter:
3 {
4 input: <array>,
5 as: <string>,
6 cond: <expression>
7 }
8}
input — Uma expressão que é resolvida para uma matriz.
** como ** — Um nome para a variável que representa cada elemento individual da matriz de entrada.
** cond ** — Uma expressão que se resolve em um valor booleano usado para determinar se um elemento deve ser incluído na matriz de saída. A expressão referencia cada elemento da matriz de entrada individualmente com o nome da variável especificado em as.
No nosso caso, realizamos o estágio $filter onde a entrada que especificamos como "$result" array.
Por que o cifrão e o nome do campo?
Esse nome de campo prefixado com um cifrão $ é usado em expressões de agregação para acessar campos nos documentos de entrada (os da etapa anterior e seu campo de resultado).
Além disso, nomeamos cada elemento individual desse campo $result como “metric”.
Para resolver o booleano que definimos expressão condicional; em nosso caso, queremos executar uma correspondência de igualdade para uma métrica específica "$$metric.Risk" (seguindo o "$$
.
" que acessa um campo específico no objeto de métrica).
E defina e filtre esses elementos para o valor apropriado ("Health ", "PolViol ", "IR ").
1 cond: {
2 $eq: ["$$metric.Risk", "Health"],
3 }
A query completa pode ser vista abaixo na figura 10.
Estágio $set e operador $filter executados no MongoDB Compass Figura 10. Estágio $set e operador $filter executados no MongoDB Compass
Depois de consolidarmos os campos que são do nosso interesse, podemos remover a array de resultados redundante e usar o operador$unset mais uma vez para remover o campo deresultado.
Estágio $unset executado no MongoDB Compass Figura 11. Estágio $unset executado no MongoDB Compass
A próxima etapa é calcular o risco médio de cada categoria (Saúde, Relações internacionais, Violência política) entre o país de origem onde a Empresa reside (campo "Country ") e outros países (campo "Primary_Countries ") com $avg operador no estágio $set (como visto na figura 12).
$set estágio executado no MongoDB Compass Figura 12. $set estágio executado no MongoDB Compass
E exiba apenas as empresas cujos valores médios são maiores que 0, com uma simples operação $match 13.
$match execução do estágio no MongoDB Compass Figura 13. Estágio $match executado no MongoDB Compass
Salve os dados (mestre em) e exiba os resultados no gráfico.
Mais uma vez, podemos usar o operador $merge para salvar o resultado da aggregation e, em seguida, visualizá-lo usando a figura 14 do MongoDB Charts .
Estágio $merge executado no MongoDB Compass Imagem 14. $merge execução do estágio no MongoDB Compass
Vamos pegar nosso conjunto de dados e criar um gráfico do risco política média para cada empresa, conforme exibido na figura 15.
Risco política média por empresa no MongoDB Atlas Charts Figura 15. Risco política média por empresa no MongoDB Atlas Charts
Também podemos criar gráficos de risco por categoria de risco, conforme mostrado na Figura 16.
Risco internacional médio por empresa no MongoDB Atlas Charts Figura 16. risco internacional médio por empresa no MongoDB Atlas Charts
Risco médio de saúde por empresa no MongoDB Atlas Charts Imagem 17. risco médio de saúde por empresa no MongoDB Atlas Charts
Abaixo está um trecho com todos os operadores de agregação mencionados no Cenário 2:
1[
2 {
3 $lookup: {
4 from: "focus_risk_scores",
5 localField: "Issuer_Cntry_Domicile",
6 foreignField: "Country",
7 as: "result",
8 },
9 },
10 {
11 $project: {
12 _id: 1,
13 Issuer_Cntry_Domicile: 1,
14 result: 1,
15 Issuer_Name: 1,
16 },
17 },
18 {
19 $unset: "result._id",
20 },
21 {
22 $set: {
23 health_risk: {
24 $filter: {
25 input: "$result",
26 as: "metric",
27 cond: {
28 $eq: ["$$metric.Risk", "Health"],
29 },
30 },
31 },
32 political_violence_risk: {
33 $filter: {
34 input: "$result",
35 as: "metric",
36 cond: {
37 $eq: ["$$metric.Risk", "PolViol"],
38 },
39 },
40 },
41 international_relations_risk: {
42 $filter: {
43 input: "$result",
44 as: "metric",
45 cond: {
46 $eq: ["$$metric.Risk", "IR"],
47 },
48 },
49 },
50 },
51 },
52 {
53 $unset: "result",
54 },
55 {
56 $set: {
57 health_risk_avg: {
58 $avg: "$health_risk.risk_values",
59 },
60 political_risk_avg: {
61 $avg: "$political_violence_risk.risk_values",
62 },
63 international_risk_avg: {
64 $avg: "$international_relations_risk.risk_values",
65 },
66 },
67 },
68 {
69 $match: {
70 health_risk_avg: {
71 $gt: 0,
72 },
73 political_risk_avg: {
74 $gt: 0,
75 },
76 international_risk_avg: {
77 $gt: 0,
78 },
79 },
80 },
81 {
82 $merge: {
83 into: {
84 db: "testDB",
85 coll: "agr_avg_risks",
86 },
87 on: "_id",
88 },
89 },
90]

Cenário 3: Índices ambientais — integrando dados ESG geoespaciais

Conjunto de dados: riscos da cadeia de suprimentos collection: supply_chain_risk_metrics
Do MSCI - "Elevate’s Supply Chain ESG Risk Ratings aggregates data from its verified audit database to the country level. The country risk assessment includes an overall score as well as 38 sub-scores organized under labor, health and safety, environment, business ethics, and management systems."
O processamento de dados ESG requer o tratamento de uma variedade de dados estruturados e não estruturados, consistindo em dados geográficos financeiros, não financeiros e até mesmo dados geográficos relacionados ao aquecimento global. Nesse cenário final, combinaremos dados relacionados à pontuação ambiental — especialmente esgotos, ar, índices ambientais e dados de localização geográfica — e os apresentaremos em um formato geoespacial para ajudar os usuários empresariais a identificar rapidamente os riscos.
O MongoDB fornece uma abordagem de gerenciamento de dados multimodelo flexível e poderosa e inclui suporte para armazenar e consultar dados geoespaciais usando objetos GeoJSON ou como legacy coordinate pairs. Veremos neste exemplo como isso pode ser aproveitado para lidar com os dados ESG, muitas vezes complexos.
Primeiro, vamos filtrar e agrupar os dados. Usando os operadores $match e $group, podemos filtrar e agrupar o país por país e província, conforme mostrado na Figura 15 e na Figura 16.
$match execução do estágio no MongoDB Compass Figura 18. Estágio $match executado no MongoDB Compass
Estágio $group executado no MongoDB Compass Figura 19. Estágio $group executado no MongoDB Compass
Agora que temos os dados discriminados por região e país, neste caso o Vietname, vamos exibir as informações num mapa.
Não importa que os dados ESG originais não incluam dados geoespaciais abrangentes ou dados no formatoGeoJSON, pois podemos simplesmente aumentar nosso conjunto de dados com a latitude e a longitude para cada região.
Usando o operador $set, podemos aplicar a lógica para todas as regiões dos dados, conforme mostrado na Figura 20.
Utilizando o operador$switch, avaliamos uma série de expressões de caso e definimos as coordenadas de longitude e latitude para a província específica no Vietname.
O estágio $set e o operador $switch são executados no MongoDB Compass Imagem 20. O estágio $set e o operador $switch são executados no MongoDB Compass
Usando o recurso de mapa de calor integrado do MongoDB Charts, agora podemos exibir os dados máximos de emissão atmosférica, gerenciamento de ambiente e métricas de lixo das regiões do Vietname como um mapa de calor codificado por cores.
Mapa de calor do Vietnã
Mapas de calor de índices de meio ambiente, emissão de ar e esgoto no Vietname no MongoDB Atlas Charts Figura 21. mapas de calor de Índices de meio ambiente, emissão de ar e esgoto no Vietname no MongoDB Atlas Charts
Abaixo está um trecho com todos os operadores de agregação mencionados no Cenário 3:
1[{
2 $match: {
3 Country: {
4 $ne: 'null'
5 },
6 Province: {
7 $ne: 'All'
8 }
9 }
10}, {
11 $group: {
12 _id: {
13 country: '$Country',
14 province: '$Province'
15 },
16 environment_management: {
17 $max: '$Environment_Management_Index_Elevate'
18 },
19 air_emssion_index: {
20 $max: '$Air_Emissions_Index_Elevate'
21 },
22 water_waste_index: {
23 $max: '$Waste_Management_Index_Elevate'
24 }
25 }
26}, {
27 $project: {
28 country: '$_id.country',
29 province: '$_id.province',
30 environment_management: 1,
31 air_emssion_index: 1,
32 water_waste_index: 1,
33 _id: 0
34 }
35}, {
36 $set: {
37 loc: {
38 $switch: {
39 branches: [
40 {
41 'case': {
42 $eq: [
43 '$province',
44 'Southeast'
45 ]
46 },
47 then: {
48 type: 'Point',
49 coordinates: [
50 105.8,
51 21.02
52 ]
53 }
54 },
55 {
56 'case': {
57 $eq: [
58 '$province',
59 'North Central Coast'
60 ]
61 },
62 then: {
63 type: 'Point',
64 coordinates: [
65 105.54,
66 18.2
67 ]
68 }
69 },
70 {
71 'case': {
72 $eq: [
73 '$province',
74 'Northeast'
75 ]
76 },
77 then: {
78 type: 'Point',
79 coordinates: [
80 105.51,
81 21.01
82 ]
83 }
84 },
85 {
86 'case': {
87 $eq: [
88 '$province',
89 'Mekong Delta'
90 ]
91 },
92 then: {
93 type: 'Point',
94 coordinates: [
95 105.47,
96 10.02
97 ]
98 }
99 },
100 {
101 'case': {
102 $eq: [
103 '$province',
104 'Central Highlands'
105 ]
106 },
107 then: {
108 type: 'Point',
109 coordinates: [
110 108.3,
111 12.4
112 ]
113 }
114 },
115 {
116 'case': {
117 $eq: [
118 '$province',
119 'Northwest'
120 ]
121 },
122 then: {
123 type: 'Point',
124 coordinates: [
125 103.1,
126 21.23
127 ]
128 }
129 },
130 {
131 'case': {
132 $eq: [
133 '$province',
134 'South Central Coast'
135 ]
136 },
137 then: {
138 type: 'Point',
139 coordinates: [
140 109.14,
141 13.46
142 ]
143 }
144 },
145 {
146 'case': {
147 $eq: [
148 '$province',
149 'Red River Delta'
150 ]
151 },
152 then: {
153 type: 'Point',
154 coordinates: [
155 106.3,
156 21.11
157 ]
158 }
159 }
160 ],
161 'default': null
162 }
163 }
164 }
165}]

Velocidade, desempenho e flexibilidade

Como podemos ver nos cenários acima, as ferramentas e os recursos prontos para uso do MongoDB - incluindo uma poderosa estrutura de pipeline de agregação para processamento de dados simples ou complexo, Atlas Charts para visualização de dados, gerenciamento de dados geoespaciais e drivers nativos - podem fácil e rapidamente combine diferentes recursos relacionados a ESG e produza insights aplicáveis.
O MongoDB tem uma vantagem distinta sobre os relational database quando se trata de lidar com dados ESG, negando a necessidade de produzir o mapeamento ORM para cada conjunto de dados.
Importe qualquer tipo de dados ESG, modele os dados para se adequar ao seu caso de uso específico e execute testes e análises nesses dados com apenas alguns comandos.
Para saber mais sobre como o MongoDB pode ajudar com suas necessidades ESG, visite nossa página de soluções dedicada.

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Exemplo de código

Filme: exemplo de aplicativo de microsserviços Go


Sep 11, 2024 | 0 min read
Tutorial

Criar um pipeline de dados para o fluxo de alterações do MongoDB usando a assinatura Pub/Sub do BigQuery


Apr 02, 2024 | 5 min read
Tutorial

Uma leve introdução às listas vinculadas com o MongoDB


Apr 02, 2024 | 13 min read
Início rápido

Início rápido: tipos de dados BSON - Decimal128


Sep 23, 2022 | 2 min read
Sumário