LSEG's SFI Climate Data in Workspace: A use-case evaluating public companies' Climate track record using Python

Authors

    Jonathan Legrand
    Developer Advocate

In this article, we will investigate Public Companies' Climate targets and whether they are on track to meet them. The data needed for such an investigation is not onboarded on LSEG's Data Platform yet; but, thankfully, it is on both (i) on LSEG's Sustainable Finance Investing (SFI) Snowflake and (ii) on Workspace. Thanks to the latter, we can call for this data on CodeBook. For more information on the Climate data we are collecting and the methodology, please refer to the article "LSEG's SFI Snowflake Datawarehouse: A use-case evaluating public companies' Climate track record using Python and SQL".

LSEG usually collects data from a number of vendors, but when it comes to climate data, we rely on our analysts to retrieve the information directly from companies disclosures. The most exciting data onboarded has, recently, related to ESG and Climate topics. In this article, we will directly source the data we are after using the Data Item Browser and CodeBook.

Importing libraries and Authentifying ourselves to LSEG's services

Calling and tidying our data

For more information on the reason why we are collecting this data, please refer to the article "LSEG's SFI Snowflake Datawarehouse: A use-case evaluating public companies' Climate track record using Python and SQL". With that said, it will be evident, during the article, why we collected this data.

 

First, let's put in place the primary parameters:

We need extra parameters for the logic we'll create below, I define them here:

Now, we can create the list of fields we're after from LSEG's services:

['TR.CO2EquivalentEmissionsTotalMarketbased', 'TR.CO2EmissionTotal', 'TR.CO2DirectScope1', 'TR.CO2IndirectScope1', 'TR.CO2DirectScope2', 'TR.CO2IndirectScope2', 'TR.CO2DirectScope3', 'TR.CO2IndirectScope3', 'TR.CO2EmissionTotal', 'TR.TotalCO2EquivalentEmissionsScope1and2and3', 'TR.TotalCO2EquivalentEmissionScope1and2and3Marketbased', 'TR.LTGHGEmissionPercentageReductionTargetedSet1', 'TR.LTPercentageofGHGEmissionCoveredbyTargetSet1', 'TR.LTGHGEmissionScopeSet1', 'TR.LTGHGEmissionBaseYearSet1', 'TR.LTGHGEmissionTargetYearSet1']

16

Now we're cooking:

MSFT.O TR.CO2EQUIVALENTEMISSIONSTOTALMARKETBASED|CO2 Equivalent Emissions Total Market-based TR.CO2EMISSIONTOTAL|CO2 Equivalent Emissions Total TR.CO2DIRECTSCOPE1|CO2 Equivalent Emissions Direct, Scope 1 TR.CO2INDIRECTSCOPE2|CO2 Equivalent Emissions Indirect, Scope 2 TR.CO2INDIRECTSCOPE3|CO2 Equivalent Emissions Indirect, Scope 3 TR.TOTALCO2EQUIVALENTEMISSIONSSCOPE1AND2AND3|Total CO2 Equivalent Emissions Scope 1, 2 and 3 TR.TOTALCO2EQUIVALENTEMISSIONSCOPE1AND2AND3MARKETBASED|Total CO2 Equivalent Emission Scope 1, 2 and 3 Market-based TR.LTGHGEMISSIONPERCENTAGEREDUCTIONTARGETEDSET1|LT GHG Emission Percentage Reduction Targeted Set1 TR.LTPERCENTAGEOFGHGEMISSIONCOVEREDBYTARGETSET1|LT Percentage of GHG Emission Covered by Target Set1 TR.LTGHGEMISSIONSCOPESET1|LT GHG Emission Scope Set1 TR.LTGHGEMISSIONBASEYEARSET1|LT GHG Emission Base Year Set1 TR.LTGHGEMISSIONTARGETYEARSET1|LT GHG Emission Target Year Set1
Date                        
30/06/2020 574219 <NA> <NA> <NA> <NA> <NA> 12227000 <NA> <NA>   <NA> <NA>
30/06/2021 553109 5134371 123704 5010667 13839000 18973371 14392000 75 100 Scope 1 and 2 2013 2045
30/06/2022 427442 6520663 139413 6381250 16111000 22631663 16538000 75 100 Scope 1 and 2 2013 2045

As it happens, "CO2 Equivalent Emissions Total" is "CO2 Equivalent Emissions Direct, Scope 1"; I don't want to overwright the column names, so let's just add a new one:

['TR.CO2EQUIVALENTEMISSIONSTOTALMARKETBASED|CO2 Equivalent Emissions Total Market-based', 'TR.CO2EMISSIONTOTAL|CO2 Equivalent Emissions Total', 'TR.CO2DIRECTSCOPE1|CO2 Equivalent Emissions Direct, Scope 1', 'TR.CO2INDIRECTSCOPE2|CO2 Equivalent Emissions Indirect, Scope 2', 'TR.CO2INDIRECTSCOPE3|CO2 Equivalent Emissions Indirect, Scope 3', 'TR.TOTALCO2EQUIVALENTEMISSIONSSCOPE1AND2AND3|Total CO2 Equivalent Emissions Scope 1, 2 and 3', 'TR.TOTALCO2EQUIVALENTEMISSIONSCOPE1AND2AND3MARKETBASED|Total CO2 Equivalent Emission Scope 1, 2 and 3 Market-based', 'TR.LTGHGEMISSIONPERCENTAGEREDUCTIONTARGETEDSET1|LT GHG Emission Percentage Reduction Targeted Set1', 'TR.LTPERCENTAGEOFGHGEMISSIONCOVEREDBYTARGETSET1|LT Percentage of GHG Emission Covered by Target Set1', 'TR.LTGHGEMISSIONSCOPESET1|LT GHG Emission Scope Set1', 'TR.LTGHGEMISSIONBASEYEARSET1|LT GHG Emission Base Year Set1', 'TR.LTGHGEMISSIONTARGETYEARSET1|LT GHG Emission Target Year Set1']

As you see, there are several Scopes and Sets we may be interested in. Scope can be "1", "2", "1+2", "3" or "1+2+3". Scope can be anything from 1 to 5 (inclusive).

8

['TR.CO2EQUIVALENTEMISSIONSTOTALMARKETBASED|CO2 Equivalent Emissions Total Market-based',
'TR.CO2EMISSIONTOTAL|CO2 Equivalent Emissions Total',
'TR.CO2DIRECTSCOPE1|CO2 Equivalent Emissions Direct, Scope 1',
'TR.LTGHGEMISSIONPERCENTAGEREDUCTIONTARGETEDSET1|LT GHG Emission Percentage Reduction Targeted Set1',
'TR.LTPERCENTAGEOFGHGEMISSIONCOVEREDBYTARGETSET1|LT Percentage of GHG Emission Covered by Target Set1',
'TR.LTGHGEMISSIONSCOPESET1|LT GHG Emission Scope Set1',
'TR.LTGHGEMISSIONBASEYEARSET1|LT GHG Emission Base Year Set1',
'TR.LTGHGEMISSIONTARGETYEARSET1|LT GHG Emission Target Year Set1']

MSFT.O TR.CO2EQUIVALENTEMISSIONSTOTALMARKETBASED|CO2 Equivalent Emissions Total Market-based TR.CO2EMISSIONTOTAL|CO2 Equivalent Emissions Total TR.CO2DIRECTSCOPE1|CO2 Equivalent Emissions Direct, Scope 1 TR.LTGHGEMISSIONPERCENTAGEREDUCTIONTARGETEDSET1|LT GHG Emission Percentage Reduction Targeted Set1 TR.LTPERCENTAGEOFGHGEMISSIONCOVEREDBYTARGETSET1|LT Percentage of GHG Emission Covered by Target Set1 TR.LTGHGEMISSIONSCOPESET1|LT GHG Emission Scope Set1 TR.LTGHGEMISSIONBASEYEARSET1|LT GHG Emission Base Year Set1 TR.LTGHGEMISSIONTARGETYEARSET1|LT GHG Emission Target Year Set1
Date                
30/06/2019 <NA> <NA> <NA> 75 100 Scope 1 and 2 2013 2045
30/06/2020 <NA> 4447016 118100 75 100 Scope 1 and 2 2013 2045
30/06/2020 574219 <NA> <NA> <NA> <NA>   <NA> <NA>
30/06/2021 553109 5134371 123704 75 100 Scope 1 and 2 2013 2045
30/06/2022 427442 6520663 139413 75 100 Scope 1 and 2 2013 2045
MSFT.O TR.CO2EQUIVALENTEMISSIONSTOTALMARKETBASED|CO2 Equivalent Emissions Total Market-based TR.CO2EMISSIONTOTAL|CO2 Equivalent Emissions Total TR.CO2DIRECTSCOPE1|CO2 Equivalent Emissions Direct, Scope 1 TR.LTGHGEMISSIONPERCENTAGEREDUCTIONTARGETEDSET1|LT GHG Emission Percentage Reduction Targeted Set1 TR.LTPERCENTAGEOFGHGEMISSIONCOVEREDBYTARGETSET1|LT Percentage of GHG Emission Covered by Target Set1 TR.LTGHGEMISSIONSCOPESET1|LT GHG Emission Scope Set1 TR.LTGHGEMISSIONBASEYEARSET1|LT GHG Emission Base Year Set1 TR.LTGHGEMISSIONTARGETYEARSET1|LT GHG Emission Target Year Set1
Date                
30/06/2020 574219 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
30/06/2021 553109 5134371 123704 75 100 Scope 1 and 2 2013 2045
30/06/2022 427442 6520663 139413 75 100 Scope 1 and 2 2013 2045

'GHGEmissionCoveredbyTarget' figures are above 80%. The higher this figure, the more reliable the results.
In this case, we consider them to be high enough to be reliable.

Plotting the results

baseEmissionYear = 2013 & targetEmissionReductionYear = 2045
baseEmission = 1355480 & targetReductionEmission = 1016610.0 & targetEmission = 338870.0

All together now

You can find the code for this function in the GitHub repo linked a the top right of this article.

'GHGEmissionCoveredbyTarget' figures are above 80%. The higher this figure, the more reliable the results.
In this case, we consider them to be high enough to be reliable.
baseEmissionYear = 2016 & targetEmissionReductionYear = 2025
baseEmission = 72000000 & targetReductionEmission = 6480000.0 & targetEmission = 65520000.0

 

 

Conclusion

As you can see, it is rather simple to make a target vs. actual emissions graph using both Snowflake and, in this case, Workspace/CodeBook!

Please note that this is not production code and is not to be used in production for investment tools, or used in investment decisions. It is only shown/published for educational purposes.