요즘 친환경, RE100이 대세다.
RE100을 선언하는 기업이 하나 둘씩 늘어나고 있다.
RE100 은 Renewable Energy 100%의 약자로, 그 기업이 사업활동을 수행하는 데 사용하는 모든 에너지를 재생에너지로 사용하겠다는 약속이다.
'21.6월 기준으로 전 세계 약 300여개 기업들이 RE100과 관련된 자발적 공약을 선언하였다.
예를 들어 '2025년까지 70%, 2026까지 100% 달성할거다' 식이다.
무엇을 왜 만들었는가?
RE100 선언한 기업의 현황을 체계적으로 파악하고 싶었다.
오늘 기준으로 몇개의 기업이 RE100을 선언했으면,
3개월 뒤 시점 기준으로는 기업이 몇 개 추가되었는지 궁금하다.
그럴러면 특정 시점 기준으로 RE100 기업 리스트를 정리하고, 저장해 두어야 한다.
하지만 사이트에서는 별도로 목록 다운로드 기능을 제공하고 있지 않다.
그냥 정리한다고 하면, 수동을 하나씩 리스트를 가져오고 정리할 수 밖에 없다.
그런데 귀찮다.
그리고 비효율적이다.
그래서 특정 시점 기준으로 리스트를 자동으로 생성해주는 크롤링+전처리 스크립트를 만들어 보았다.
코드
import pandas as pd
import requests
try:
url = 'https://www.there100.org/views/ajax?_wrapper_format=drupal_ajax'
headers = {
'User=Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36',
'Content-type':'application/x-www-form-urlencoded; charset=UTF-8',
'Accept':'application/json, text/javascript, */*; q=0.01',
'Origin':'https://www.there100.org',
'Referer':'https://www.there100.org/re100-members'}
dfs = []
for page in range(0,100):
data = f'view_name=members&view_display_id=block&view_args=&view_path=%2Fnode%2F149&view_base_path=&view_dom_id=8b3713037a4a73a1f9a879e8e9111c1563aabaf492a051edafedc4d8b646835b&pager_element=0&page={page}&_drupal_ajax=1&ajax_page_state%5Btheme%5D=re100&ajax_page_state%5Btheme_token%5D=&ajax_page_state%5Blibraries%5D=climate_group%2Fcta-button%2Cclimate_group%2Fcta-text%2Cclimate_group%2Ffooter%2Cclimate_group%2Fglobal-styles%2Cclimate_group%2Fheader%2Cclimate_group%2Fhero-pages%2Cclimate_group%2Fmembers-js%2Cclimate_group%2Fnews%2Ccore%2Fpicturefill%2Ceu_cookie_compliance%2Feu_cookie_compliance_default%2Cparagraphs%2Fdrupal.paragraphs.unpublished%2Cre100%2Fglobal-styles%2Csystem%2Fbase%2Cviews%2Fviews.ajax%2Cviews%2Fviews.module'
response = requests.post(url=url, headers=headers, data=data,allow_redirects=True).json()
myhtml = response[2]["data"]
df2 = pd.read_html(myhtml)[0]
# get only even number of rows
df2 = df2.iloc[::2,:]
# website 뒤에 이상한거 없애기
df2['Website'] = df2['Website'].str.replace(r'\.a.{*', '', regex=True)
# commitment에서 ~%로 되어있는거 뽑기
p1 = r'(\d+(\.\d+)?%)'
p2 = r'(\d+(\.\d+)?%).*?(\d+(\.\d+)?%)'
y1 = r'(\d{4})'
y2 = r'(\d{4}).*?(\d{4})'
df2['percentage_1']= df2['Commitment'].str.extract(p1)[0]
df2['target_year_1']= df2['Commitment'].str.extract(y1)[0]
df2['percentage_2']= df2['Commitment'].str.extract(p2)[2]
df2['target_year_2']= df2['Commitment'].str.extract(y2)[1]
dfs.append(df2)
mydf = pd.concat(dfs, ignore_index=True)
except:
mydf = pd.concat(dfs, ignore_index=True)
Comments
- 정규표현식(Regular Expression)은 Pandas와 함께 활용하면 정말 강력하다. 퍼센트만 뽑아내거나, 연도 (4자리 숫자)만 뽑아내거나 하는 작업은 정규표현식으로 간단하게 수행할 수 있다.
결과물
To be updated...?
- 시점이 다른 2개의 dataframe이 있을 때, 어떤 항목이 어떻게 달라졌는지, 어떤 기업이 추가되었는지 알려주는 함수를 만들면 좋겠다. 오늘 코드를 작성하였기 때문에 몇개월 뒤에 코드를 실행해서 2개의 dataframe을 확보한 후 작업을 해봐야겠다.
- 상호를 이용해 1) 기업의 소재국가와 2) 분야(산업)을 확인할 수 있는 API나 사이트가 있는지 찾아봐야겠다. 있으면 국가별로, 산업별로 RE100의 진행 현황을 분류할 수 있다.
'Projects > Renewable Energy' 카테고리의 다른 글
구글 스프레드시트로 RE100 대시보드 만들기 (4. Overview 대시보드 만들기) (0) | 2022.03.01 |
---|---|
구글 스프레드시트로 RE100 대시보드 만들기 (3. 트리거 설정 및 업데이트 자동화) (0) | 2022.02.28 |
구글 스프레드시트로 RE100 대시보드 만들기 (2. 데이터 수집) (0) | 2022.02.15 |
구글 스프레드시트로 RE100 대시보드 만들기 (1. 대시보드 소개) (1) | 2022.02.14 |
[파이썬] 일본 종목토론방 살펴보기 (ft. 전력회사 이렉스) (0) | 2021.07.03 |