Home 탄소중립을 위한 기후기술 정보 시각화 및 EDA
Post
Cancel

탄소중립을 위한 기후기술 정보 시각화 및 EDA

탄소중립을 위한 기후기술 정보 시각화

(Visualizationof Climate Technology Information for Carbon Neutrality)

1. 소개

기후기술이란?

탄소중립 달성을 위해 온실가스를 감축하고 기후변화에 적응하기 위한 기술을 의미합니다.
해당 프로젝트에서는, 기후기술과 관련하여 다양한 정보를 수집하고 시각화를 해본 프로젝트입니다.

기후기술 분류 체계

기후기술은 감축, 적응, 융복합의 3개 분야의 45개 기술분류로 구분되어 활용되고 있습니다.

1
2
3
4
5
6
7
8
sys_type = pd.read_html("https://www.ctis.re.kr/ko/techClass/classification.do?key=1141")
sys_type = sys_type[0]
sys_type.columns = ["대분류", "중분류", "중분류1", "중분류2", "분야", "소분류"]
sys_type["중분류"][20:] = sys_type["중분류"][20:].str.split(")", expand=True)[1]
sys_type["중분류1"][17:] = sys_type["중분류1"][17:].str.split(")", expand=True)[1]
sys_type["중분류2"][17:] = sys_type["중분류2"][17:].str.split(")", expand=True)[1]
sys_type["분야"] = sys_type["분야"].str.split(")", expand=True)[1]
sys_type["소분류"] = sys_type["소분류"].str.split(".", expand=True)[1]
1
sys_type["대분류"].value_counts()
1
2
3
4
감축              22
적응              18
감축/  적응  융복합     5
Name: 대분류, dtype: int64
1
sys_type.describe()
대분류중분류중분류1중분류2분야소분류
count454545454545
unique3911111445
top감축온실가스 저감에너지 생산 & 공급발전 & 전환재생 에너지원자력 발전
freq2220131381
1
2
plt.figure(figsize=(16, 12))
_ = sns.histplot(data=sys_type, x="대분류", hue="분야", multiple="stack").set_title("분야별 기후 기술")

png

1
px.bar(sys_type, x="대분류", color="분야", title="기후 기술 분류별 분야")
1
px.bar(sys_type[sys_type["대분류"]=="감축"], x="분야", color="소분류", title="분야별 소분류 (감축)")
1
px.bar(sys_type[sys_type["대분류"]=="적응"], x="분야", color="소분류", title="분야별 소분류 (적응)")

2. 목표

해당 프로젝트의 목적은 기후기술과 관련하여 다양한 정보를 수집하고 시각화하는 것입니다.

3. 사용 데이터 셋

KOSIS 국가통계포털에 등록되어있는 기후 기술 영역 데이터를 이용했습니다.

생각보다 방대한 양의 데이터가 있어, 비슷한 분류끼리 나눠봤습니다.


  • 기후기술 부문별·기업규모별 매출액 현황 기후기술 부문별·기업규모별 매출액 현황 (2012~2018) -> sale1218
  • 기후기술 영역별 기관규모별 매출액 기후기술 영역별 기관규모별 매출액 (2019~2020) -> sale1920
  • 기후기술 부문별·기업규모별 연구개발비 현황 기후기술 부문별·기업규모별 연구개발비 현황 (2012~2018) -> rnd1218
  • 기후기술 영역별 기관규모별 연구개발비 기후기술 영역별 기관규모별 연구개발비 (2019~2020) -> rnd1920

  • 기후기술 부문별·기업규모별 종사자수 현황 기후기술 부문별·기업규모별 종사자수 현황 (2012~2018) -> nemp1218
  • 기후기술 영역별 기관규모별 종사자 수 기후기술 영역별 기관규모별 종사자 수 (2019~2020) -> nemp1920
  • 기후기술 영역별 기관규모별 연구원 수 기후기술 영역별 기관규모별 연구원 수 (2019~2020) -> nrsc1920

  • 기후기술 영역별 기관규모별 수출액 기후기술 영역별 기관규모별 수출액 (2019~2020) -> per_sale1920
  • 기후기술 영역별 기술수명주기 단계 기후기술 영역별 기술수명주기 단계 (2019~2020) -> life_cycle1920
  • 기후기술 영역별 기업 및 기관의 누적 특허 건수 기후기술 영역별 기업 및 기관의 누적 특허 건수 (2019~2020) -> 누적특허건수
  • 기후기술 영역별 기술이전 수행 및 기술료 징수 실적 기후기술 영역별 기술이전 수행 및 기술료 징수 실적 (2019~2019) -> 기술이전실적2019
  • 기후기술 영역별 기술이전 수행 및 기술료 징수 실적 기후기술 영역별 기술이전 수행 및 기술료 징수 실적 (2020~2020) -> 기술이전실적2020
  • 기후기술 영역별 해외진출지역(복수응답) 기후기술 영역별 해외진출지역(복수응답) (2019~2020) -> 해외진출지역
  • 기후기술 영역별 국내/해외 기술이전 방식 기후기술 영역별 국내/해외 기술이전 방식 (2019~2019) -> 기술이전방식2019
  • 기후기술 영역별 국내 기술이전 선호 항목(복수응답) 기후기술 영역별 국내 기술이전 선호 항목(복수응답) (2020~2020) -> 기술이전선호항목2020

  • 기후기술 영역별 정부지원 사업 수혜 여부 및 정책수단 종류(복수응답) 기후기술 영역별 정부지원 사업 수혜 여부 및 정책수단 종류(복수응답) (2019~2020) -> 정책

4. 구현

라이브러리 로드

1
2
3
4
5
6
7
8
9
10
11
# For Scraping
import requests
from bs4 import BeautifulSoup as bs
# For data analysis and visualization
import pandas as pd
import numpy as np
import seaborn as sns
import plotly.express as px
from plotly.subplots import make_subplots
import plotly.graph_objects as go 
import matplotlib.pyplot as plt
1
2
3
4
5
6
# For convert plotly to iframe
import chart_studio
import chart_studio.tools as ct
import chart_studio.plotly as cp
# convert plotly to iframe
# ct.get_embed(cp.plot(fig, filename= , auto_open=Fasle))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 윈도우 : "Malgun Gothic"
# 맥 : "AppleGothic"
def get_font_family():
    """
    시스템 환경에 따른 기본 폰트명을 반환하는 함수
    """
    import platform
    system_name = platform.system()
    # colab 사용자는 system_name이 'Linux'로 확인

    if system_name == "Darwin" :
        font_family = "AppleGothic"
    elif system_name == "Windows":
        font_family = "Malgun Gothic"
    else:
        !apt-get install fonts-nanum -qq  > /dev/null
        !fc-cache -fv

        import matplotlib as mpl
        mpl.font_manager._rebuild()
        findfont = mpl.font_manager.fontManager.findfont
        mpl.font_manager.findfont = findfont
        mpl.backends.backend_agg.findfont = findfont
        
        font_family = "NanumBarunGothic"
    return font_family


plt.style.use("seaborn-whitegrid")

# 폰트설정
plt.rc("font", family=get_font_family())
# 마이너스폰트 설정
plt.rc("axes", unicode_minus=False)

# 그래프에 retina display 적용
from IPython.display import set_matplotlib_formats

%config InlineBackend.figure_format = "retina"

1. Data Load

1
2
3
4
5
6
7
8
9
# 기후기술 인력 관련
'''
- 기후기술 부문별·기업규모별 종사자수 현황 기후기술 부문별·기업규모별 종사자수 현황 (2012~2018) -> `nemp1218`
- 기후기술 영역별 기관규모별 종사자 수 기후기술 영역별 기관규모별 종사자 수 (2019~2020) -> `nemp1920`
- 기후기술 영역별 기관규모별 연구원 수 기후기술 영역별 기관규모별 연구원 수 (2019~2020) -> `nrsc1920`
'''
df_nemp1218 = pd.read_csv("data/nemp1218.csv", encoding="cp949")
df_nemp1920 = pd.read_csv("data/nemp1920.csv", encoding="cp949")
df_nrsc1920 = pd.read_csv("data/nrsc1920.csv", encoding="cp949")
1
2
3
4
5
6
7
8
9
10
11
# 기후기술 매출 & 개발 비용 관련
'''
- 기후기술 부문별·기업규모별 매출액 현황 기후기술 부문별·기업규모별 매출액 현황 (2012~2018) -> `sale1218`
- 기후기술 영역별 기관규모별 매출액 기후기술 영역별 기관규모별 매출액 (2019~2020) -> `sale1920`
- 기후기술 부문별·기업규모별 연구개발비 현황 기후기술 부문별·기업규모별 연구개발비 현황 (2012~2018) -> `rnd1218`
- 기후기술 영역별 기관규모별 연구개발비 기후기술 영역별 기관규모별 연구개발비 (2019~2020) -> `rnd1920`
'''
df_sale1218_corp = pd.read_csv("data/sale1218.csv", encoding="cp949")
df_rnd1218_corp = pd.read_csv("data/rnd1218.csv", encoding="cp949")
df_sale1920_inst = pd.read_csv("data/sale1920.csv", encoding="cp949")
df_rnd1920_inst = pd.read_csv("data/rnd1920.csv", encoding="cp949")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 기후기술 수출 관련
'''
- 기후기술 영역별 기관규모별 수출액 기후기술 영역별 기관규모별 수출액 (2019~2020) -> `per_sale1920`
- 기후기술 영역별 기술수명주기 단계 기후기술 영역별 기술수명주기 단계 (2019~2020) -> `life_cycle1920`
- 기후기술 영역별 기업 및 기관의 누적 특허 건수 기후기술 영역별 기업 및 기관의 누적 특허 건수 (2019~2020) -> `누적특허건수`
- 기후기술 영역별 기술이전 수행 및 기술료 징수 실적 기후기술 영역별 기술이전 수행 및 기술료 징수 실적 (2019~2019) -> `기술이전실적2019`
- 기후기술 영역별 기술이전 수행 및 기술료 징수 실적 기후기술 영역별 기술이전 수행 및 기술료 징수 실적 (2020~2020) -> `기술이전실적2020`
- 기후기술 영역별 해외진출지역(복수응답) 기후기술 영역별 해외진출지역(복수응답) (2019~2020) -> `해외진출지역`
- 기후기술 영역별 국내/해외 기술이전 방식 기후기술 영역별 국내/해외 기술이전 방식 (2019~2019) -> `기술이전방식2019`
- 기후기술 영역별 국내 기술이전 선호 항목(복수응답) 기후기술 영역별 국내 기술이전 선호 항목(복수응답) (2020~2020) -> `기술이전선호항목2020`
'''
# 기후기술 지원 정부 정책
'''
- 기후기술 영역별 정부지원 사업 수혜 여부 및 정책수단 종류(복수응답) 기후기술 영역별 정부지원 사업 수혜 여부 및 정책수단 종류(복수응답) (2019~2020) -> `정책`
'''
pass

2. Data Preprocessing & EDA

1. 기후기술 인력

  • df_nemp1218: 2012 ~ 2018년, 종사자 현황
  • df_nemp1920: 2019 ~ 2020년, 종사자 현황
  • df_nrsc1920: 2019 ~ 2020년, 연구원 현황
1
print(f"df_nemp1218: {df_nemp1218.shape}\ndf_nemp1920: {df_nemp1920.shape}\ndf_nrsc1920: {df_nrsc1920.shape}")
1
2
3
df_nemp1218: (490, 5)
df_nemp1920: (210, 5)
df_nrsc1920: (209, 5)
1. 초기 데이터 맞추기

기후기술 인력과 관련된 데이터의 컬럼명과 순서를 맞춰줬습니다.
매출액의 경우, 기업 규모와 연관 지을 수 있는 부분이라 기업 규모로 일치 시켰습니다.

1
2
# 컬럼명 변경
df_nemp1218.columns = ["기업규모", "대분류", "분야", "연도", "종사자"]
1
df_nemp1218.sample(10)
기업규모대분류분야연도종사자
337중소기업감축송배전 및 에너지관리20131838
472연구소 등 비영리기관적응201572
261중견기업적응소계2014436
186대기업감축 및 적응 융복합소계20161209
253중견기업감축온실가스 고정201380
158대기업감축온실가스 고정201613
476연구소 등 비영리기관감축 및 적응 융복합소계201292
184대기업감축 및 적응 융복합소계20141192
49전체감축에너지수요201278091
432연구소 등 비영리기관감축에너지저장201775
1
2
3
# 컬럼명 변경
df_nemp1920.columns = ["대분류", "분야", "기업규모", "연도", "종사자"]
df_nemp1920 = df_nemp1920[["기업규모", "대분류", "분야", "연도", "종사자"]]
1
df_nemp1920.sample(10)
기업규모대분류분야연도종사자
191100억 원 이상 600억 원 미만융복합소계2019 p)220
184전체융복합소계2019 p)4482
106100억 원 미만감축온실가스 고정2019 p)177
60600억 원 이상 2,000억 원 미만감축신에너지2019 p)308
173500억 원 이상 1,000억 원 미만적응건강2020181
7100억 원 이상 600억 원 미만합계소계2019 p)18877
66전체감축에너지저장202022934
39전체감축재생에너지2019 p)24425
117전체적응소계2019 p)20922
26전체감축비재생에너지2019 p)7414
1
2
3
# 컬럼명 변경
df_nrsc1920.columns = ["대분류", "분야", "기업규모", "연도", "종사자"]
df_nrsc1920 = df_nrsc1920[["기업규모", "대분류", "분야", "연도", "종사자"]]
1
df_nrsc1920.sample(10)
기업규모대분류분야연도종사자
105전체감축온실가스 고정2020113
1672,000억 원 이상적응해양수산연안2020-
55100억 원 미만감축신에너지2020474
188500억원 이상 1,000억 원 미만융복합소계202034
78전체감축송배전&전력IT2019 p)2832
183전체융복합소계2019 p)1582
1812,000억 원 이상적응산림육상2020-
116전체적응소계2019 p)5953
86600억 원 이상 2,000억 원 미만감축송배전&전력IT2019 p)804
104전체감축온실가스 고정2019 p)104
2. 데이터 확인

결측치, 데이터 타입 등 확인

1
df_nemp1218.info()
1
2
3
4
5
6
7
8
9
10
11
12
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 490 entries, 0 to 489
Data columns (total 5 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   기업규모    490 non-null    object
 1   대분류     490 non-null    object
 2   분야      490 non-null    object
 3   연도      490 non-null    int64 
 4   종사자     490 non-null    object
dtypes: int64(1), object(4)
memory usage: 19.3+ KB
1
df_nemp1920.info()
1
2
3
4
5
6
7
8
9
10
11
12
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 210 entries, 0 to 209
Data columns (total 5 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   기업규모    210 non-null    object
 1   대분류     210 non-null    object
 2   분야      210 non-null    object
 3   연도      210 non-null    object
 4   종사자     210 non-null    object
dtypes: object(5)
memory usage: 8.3+ KB
1
df_nrsc1920.info()
1
2
3
4
5
6
7
8
9
10
11
12
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 209 entries, 0 to 208
Data columns (total 5 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   기업규모    209 non-null    object
 1   대분류     209 non-null    object
 2   분야      209 non-null    object
 3   연도      209 non-null    object
 4   종사자     209 non-null    object
dtypes: object(5)
memory usage: 8.3+ KB

df_nemp1218(2012~2018년도 종사자) 데이터에서는 종사자object 타입으로 들어있고,
df_nemp1920(2019~2020년도 종사자)와 df_nrsc1920(2019~2020년도 연구원)에서는 연도종사자object 타입으로 들어있습니다.
해당 부분의 타입을 통일해줘야할꺼 같습니다.

1
2
3
df_nemp1218["종사자"] = pd.to_numeric(df_nemp1218["종사자"], errors="coerce")
df_nemp1920["종사자"] = pd.to_numeric(df_nemp1920["종사자"], errors="coerce")
df_nrsc1920["종사자"] = pd.to_numeric(df_nrsc1920["종사자"], errors="coerce")
1
set(df_nemp1920["연도"]), set(df_nrsc1920["연도"])
1
({'2019 p)', '2020'}, {'2019 p)', '2020'})

연도 컬럼의 경우, 2019 p)식으로 문자가 존재합니다.

1
2
df_nemp1920["연도"] = df_nemp1920["연도"].str.strip("p)").astype(int)
df_nrsc1920["연도"] = df_nrsc1920["연도"].str.strip("p)").astype(int)
1
df_nemp1218.info()
1
2
3
4
5
6
7
8
9
10
11
12
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 490 entries, 0 to 489
Data columns (total 5 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   기업규모    490 non-null    object 
 1   대분류     490 non-null    object 
 2   분야      490 non-null    object 
 3   연도      490 non-null    int64  
 4   종사자     487 non-null    float64
dtypes: float64(1), int64(1), object(3)
memory usage: 19.3+ KB
1
df_nemp1920.info()
1
2
3
4
5
6
7
8
9
10
11
12
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 210 entries, 0 to 209
Data columns (total 5 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   기업규모    210 non-null    object 
 1   대분류     210 non-null    object 
 2   분야      210 non-null    object 
 3   연도      210 non-null    int32  
 4   종사자     199 non-null    float64
dtypes: float64(1), int32(1), object(3)
memory usage: 7.5+ KB
1
df_nrsc1920.info()
1
2
3
4
5
6
7
8
9
10
11
12
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 209 entries, 0 to 208
Data columns (total 5 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   기업규모    209 non-null    object 
 1   대분류     209 non-null    object 
 2   분야      209 non-null    object 
 3   연도      209 non-null    int32  
 4   종사자     199 non-null    float64
dtypes: float64(1), int32(1), object(3)
memory usage: 7.5+ KB

데이터 타입이 통일된 모습을 확인할 수 있습니다.

1
df_nemp1218 = df_nemp1218.fillna(0)
1
df_nemp1920 = df_nemp1920.fillna(0)
1
df_nrsc1920 = df_nrsc1920.fillna(0)

결측치가 해당하는 컬럼이 종사자이므로, 모두 0으로 대체해줍니다.

3. 필요없는 행 버리기

기업규모=전체, 대분류=합계, 분야=소계인 행들은, 특정 섹터를 종합한 내용이므로 버려줬습니다.

1
2
df_nemp1218 = df_nemp1218.drop(df_nemp1218[(df_nemp1218["기업규모"]=="전체") | (df_nemp1218['대분류']=="합계") | (df_nemp1218["분야"]=="소계")].index).reset_index(drop=True)
df_nemp1218.shape
1
(280, 5)
1
2
df_nemp1920 = df_nemp1920.drop(df_nemp1920[(df_nemp1920["기업규모"]=="전체") | (df_nemp1920['대분류']=="합계") | (df_nemp1920["분야"]=="소계")].index).reset_index(drop=True)
df_nemp1920.shape
1
(134, 5)
1
2
df_nrsc1920 = df_nrsc1920.drop(df_nrsc1920[(df_nrsc1920["기업규모"]=="전체") | (df_nrsc1920['대분류']=="합계") | (df_nrsc1920["분야"]=="소계")].index).reset_index(drop=True)
df_nrsc1920.shape
1
(133, 5)
의문점) 종사자와 연구원의 차이?

2012년도부터 2018년도까지는 종사자라는 명칭을 사용하고 있지만, 2019년도부터 2020년도 데이터에서는 종사자연구원으로 분리되어 있습니다.
제가가진 지식선에서는, 종사자는 해당 분야에 종사하는 모든 사람들이고, 연구원도 종사자에 포함되어있는거라고 생각했습니다.
인력의 수가 1~2년 사이에 큰 변화가 없다면, 종사자와 연구자를 종사자로 통일해 사용해도 될꺼 같다는 생각이 들어 이를 확인해봤습니다.

1
df_nemp1218["종사자"].sum(), df_nemp1920["종사자"].sum(), df_nrsc1920["종사자"].sum()
1
(1350109.0, 351264.0, 114833.0)
1
2
3
4
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(16,12))
_ = df_nemp1218.groupby("연도")["종사자"].sum().plot(kind="bar", rot=30, ax=axes[0,0], title="2012~2018 종사자 수")
_ = df_nemp1920.groupby("연도")["종사자"].sum().plot(kind="bar", rot=30, ax=axes[0,1], title="2019~2020 종사자 수")
_ = df_nrsc1920.groupby("연도")["종사자"].sum().plot(kind="bar", rot=30, ax=axes[1,1], title="2019~2020 연구자 수")

png

1
2
3
4
5
6
7
8
9
10
fig = make_subplots(rows=2, cols=2, start_cell="top-left", shared_xaxes=True, shared_yaxes=True, subplot_titles=["2012~2018 종사자 수", "2019~2020 종사자 수", " ", "2019~2020 연구자 수"])

fig.add_bar(x=df_nemp1218["연도"], y=df_nemp1218["종사자"], name="2012~2018 종사자 수", row=1, col=1)
fig.add_bar(x=df_nemp1920["연도"], y=df_nemp1920["종사자"], name="2019~2020 종사자 수", row=1, col=2)
fig.add_bar(x=df_nrsc1920["연도"], y=df_nrsc1920["종사자"], name="2019~2020 연구자 수", row=2, col=2)

fig.update_layout(title="<b>연도별 종사자 및 연구자 수</b>")
fig.show()

ct.get_embed(cp.plot(fig, filename="연도별 종사자 및 연구자 수", auto_open=False))

2012~2018 종사자 수와, 2019~2020 연구자/종사자 수를보면, 종사자와 연구자는 별개의 데이터라는걸 알 수 있었습니다.

4. 데이터 합치기

기관과 기업은 다르지만, 기후기술 관련 기술 소유 여부와, 종사자/연구원의 수에 대한 데이터이므로 같은 개념으로 사용했습니다.
분류 기준은 통계청과 기관/기업 분류를 참고했습니다. 기관은 기업의 연구소 등 비영리기관으로 묶었습니다.

df_nemp1920df_nrsc1920은 기후기술 영역별 기관규모별 종사자와 연구자 수에 대한 데이터이므로 쉽게 합칠 수 있엇습니다.

1
df_nemp1920["연구자"] = df_nrsc1920["종사자"]
1
df_nemp1218["기업규모"].value_counts()
1
2
3
4
5
대기업            70
중견기업           70
중소기업           70
연구소 등 비영리기관    70
Name: 기업규모, dtype: int64
1
df_nemp1920["기업규모"].value_counts()
1
2
3
4
5
6
7
8
9
100억 원 미만                  24
2,000억 원 이상                24
기타(공공기관)                   24
100억 원 이상 500억 원 미만        14
500억 원 이상  1,000억 원 미만     14
1,000억 원 이상 2,000억 원 미만    14
100억 원 이상 600억 원 미만        10
600억 원 이상 2,000억 원 미만      10
Name: 기업규모, dtype: int64
1
df_nemp = pd.concat([df_nemp1218, df_nemp1920], axis=0)
1
df_nemp["대분류"] = df_nemp["대분류"].str.replace("감축 및 적응 융복합", "융복합")
1
df_nemp.to_csv("data/nemp.csv", index=False)
5. 시각화
1
2
3
4
5
# 기후기술 분류별 종사자 수 (기업)
fig = px.bar(data_frame=df_nemp1218, x="연도", y="종사자", facet_col="대분류", color="기업규모", title="연도별 대분류별 종사자 수(기업)")
fig.show()

ct.get_embed(cp.plot(fig, filename="연도별 대분류별 종사자 수(기업)", auto_open=False))
1
2
3
4
5
# 기후기술 분류별 종사자 수 (기관)
fig = px.bar(data_frame=df_nemp1920, x="연도", y="종사자", facet_col="대분류", color="기업규모", title="연도별 대분류별 종사자 수(기관)")
fig.show()

ct.get_embed(cp.plot(fig, filename="연도별 대분류별 종사자 수(기관)", auto_open=False))
1
2
# 기후기술 연간 종사자 수
_ = df_nemp.groupby("연도")["종사자"].sum().plot(kind="line").set_title("기후기술 연간 종사자 수")

png

1
2
# 감축 분야 연간 종사자 수
_ = df_nemp[df_nemp["대분류"]=="감축"].groupby("연도")["종사자"].sum().plot(kind="line").set_title("감축 분야 연간 종사자 수")

png

1
2
# 적응 분야 연간 종사자 수
_ = df_nemp[df_nemp["대분류"]=="적응"].groupby("연도")["종사자"].sum().plot(kind="line").set_title("적응 분야 연간 종사자 수")

png

1
2
# 융복합 분야 연간 종사자 수
_ = df_nemp[df_nemp["대분류"]=="융복합"].groupby("연도")["종사자"].sum().plot(kind="line").set_title("융복합 분야 연간 종사자 수")

png

1
2
3
4
5
# 기후기술 분류별 종사자 수
fig = px.bar(data_frame=df_nemp, x="연도", y="종사자", facet_col="대분류", color="분야", title="연도별 대분류별 종사자 수")
fig.show()

ct.get_embed(cp.plot(fig, filename="연도별 대분류별 종사자 수", auto_open=False))

종사자들이 주로 종사하는 분야는 감축 분야이고, 감축분야는 연간 종사자가 감소하는 추세입니다.
적응과 융복합 분야는 종사자가 증가하고 있습니다.

2. 매출액과 연구개발비

1. 초기 데이터 맞추기
1
print(f"df_sale1218_corp: {df_sale1218_corp.shape}\ndf_rnd1218_corp: {df_rnd1218_corp.shape}\ndf_sale1920_inst: {df_sale1920_inst.shape}\ndf_rnd1920_inst: {df_rnd1920_inst.shape}")
1
2
3
4
df_sale1218_corp: (490, 5)
df_rnd1218_corp: (490, 5)
df_sale1920_inst: (210, 5)
df_rnd1920_inst: (210, 5)
기업 매출액/연구개발비
1
2
3
4
5
# 2012 ~ 2018 기업별 매출/연구투자
df_corp_sr = pd.concat([df_sale1218_corp, df_rnd1218_corp["데이터"]], axis=1)
df_corp_sr.columns = ["대분류", "소분류", "기업규모", "연도", "매출액", "연구개발비"]
df_corp_sr = df_corp_sr[["기업규모", "대분류", "소분류", "연도", "매출액", "연구개발비"]]
df_corp_sr = df_corp_sr.replace("감축 및 적응 융복합", "융복합").copy()
1
df_corp_sr.sample(5)
기업규모대분류소분류연도매출액연구개발비
116대기업감축재생에너지20162562622411320
89중견기업감축비재생에너지2017308911013
230중견기업감축송배전 및 에너지관리201837837377925
226중견기업감축송배전 및 에너지관리201445401099509
293대기업감축온실가스 고정20184513872-
기관 매출액/연구개발비
1
2
3
df_inst_sr = pd.concat([df_sale1920_inst, df_rnd1920_inst["데이터"]], axis=1)
df_inst_sr.columns = ["대분류", "소분류", "기관규모", "연도", "매출액", "연구개발비"]
df_inst_sr = df_inst_sr[["기관규모", "대분류", "소분류", "연도", "매출액", "연구개발비"]]
1
df_inst_sr.sample(5)
기관규모대분류소분류연도매출액연구개발비
83500억 원 이상 1,000억 원 미만감축송배전&전력IT2020750664217448
141기타(공공기관)적응농업&축산2019 p)73252123239
142기타(공공기관)적응농업&축산2020741266600
178100억 원 미만적응산림육상2020331032209632
200100억 원 미만융복합감축 및 적응 융복합2020139878172400
2. 데이터 확인

결측치 및 데이터 타입 확인

1
df_corp_sr.isnull().sum()
1
2
3
4
5
6
7
기업규모     0
대분류      0
소분류      0
연도       0
매출액      0
연구개발비    0
dtype: int64
1
df_corp_sr.info()
1
2
3
4
5
6
7
8
9
10
11
12
13
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 490 entries, 0 to 489
Data columns (total 6 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   기업규모    490 non-null    object
 1   대분류     490 non-null    object
 2   소분류     490 non-null    object
 3   연도      490 non-null    int64 
 4   매출액     490 non-null    object
 5   연구개발비   490 non-null    object
dtypes: int64(1), object(5)
memory usage: 23.1+ KB
1
df_inst_sr.isnull().sum()
1
2
3
4
5
6
7
기관규모     0
대분류      0
소분류      0
연도       0
매출액      0
연구개발비    0
dtype: int64
1
df_inst_sr.info()
1
2
3
4
5
6
7
8
9
10
11
12
13
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 210 entries, 0 to 209
Data columns (total 6 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   기관규모    210 non-null    object
 1   대분류     210 non-null    object
 2   소분류     210 non-null    object
 3   연도      210 non-null    object
 4   매출액     210 non-null    object
 5   연구개발비   210 non-null    object
dtypes: object(6)
memory usage: 10.0+ KB

매출액과 연구개발비의 데이터 타입을 맞춰줍니다.

1
2
3
4
df_corp_sr["매출액"] = pd.to_numeric(df_corp_sr["매출액"], errors="coerce")
df_corp_sr["연구개발비"] = pd.to_numeric(df_corp_sr["연구개발비"], errors="coerce")
df_inst_sr["매출액"] = pd.to_numeric(df_inst_sr["매출액"], errors="coerce")
df_inst_sr["연구개발비"] = pd.to_numeric(df_inst_sr["연구개발비"], errors="coerce")
1
df_inst_sr["연도"] = df_inst_sr["연도"].str.split("p", expand=True)[0]
3. 필요없는 행버리기

기업(기관)규모 = 전체, 대분류 = 합계, 소분류 = 소계인 행들은 필요없는 행이므로 버려줍니다.

1
2
df_corp_sr = df_corp_sr.drop(df_corp_sr[(df_corp_sr["기업규모"]=="전체") | (df_corp_sr["대분류"]=="합계") | (df_corp_sr["소분류"]=="소계")].index).reset_index(drop=True)
df_corp_sr.shape
1
(280, 6)
1
2
df_inst_sr = df_inst_sr.drop(df_inst_sr[(df_inst_sr["기관규모"]=="전체") | (df_inst_sr["대분류"]=="합계") | (df_inst_sr["소분류"]=="소계")].index).reset_index(drop=True)
df_inst_sr.shape
1
(134, 6)

기관 규모의 인덱스를 정리합니다.

1
df_inst_sr["기관규모"].value_counts()
1
2
3
4
5
6
7
8
9
100억 원 미만                  24
2,000억 원 이상                24
기타(공공기관)                   24
100억 원 이상 500억 원 미만        14
500억 원 이상 1,000억 원 미만      14
1,000억 원 이상 2,000억 원 미만    14
100억 원 이상 600억 원 미만        10
600억 원 이상 2,000억 원 미만      10
Name: 기관규모, dtype: int64
1
2
3
4
5
6
7
8
def parshing_text(t):
    _ = t.split(" ")
    if len(_)==1:
        return "기타(공공기관)"
    elif len(_)==3:
        return "~"+_[0]
    else:
        return _[0]+"~"+_[3]
1
df_inst_sr["기관규모"] = df_inst_sr["기관규모"].apply(parshing_text)

~2,000억 범주는 1,000억~2,000억로 전환했습니다.

1
df_inst_sr["기관규모"] = df_inst_sr["기관규모"].replace("~2,000억", "1,000억~2,000억")
1
df_inst_sr["기관규모"].value_counts()
1
2
3
4
5
6
7
8
1,000억~2,000억    38
~100억            24
기타(공공기관)         24
100억~500억        14
500억~1,000억      14
100억~600억        10
600억~2,000억      10
Name: 기관규모, dtype: int64

전처리된 데이터를 저장합니다.

1
2
df_corp_sr.to_csv("data/corp_sr.csv", index=False)
df_inst_sr.to_csv("data/inst_sr.csv", index=False)

전처리된 데이터를 불러옵니다.

1
2
df_corp_sr = pd.read_csv("data/corp_sr.csv")
df_inst_sr = pd.read_csv("data/inst_sr.csv")
4. 시각화
기업
1
2
3
4
5
6
7
fig = make_subplots(rows=1, cols=2, start_cell="top-left", shared_xaxes=True, shared_yaxes=False)

fig.add_bar(x=df_corp_sr[df_corp_sr["기업규모"]=="대기업"]["연도"], y=df_corp_sr[df_corp_sr["기업규모"]=="대기업"]["매출액"], name="매출액", row=1, col=1)
fig.add_bar(x=df_corp_sr[df_corp_sr["기업규모"]=="대기업"]["연도"], y=df_corp_sr[df_corp_sr["기업규모"]=="대기업"]["연구개발비"], name="연구개발비", row=1, col=2)

fig.update_layout(title="대기업 매출액/연구개발비")
fig.show()
1
2
3
# 대기업 연간 매출액
fig = px.bar(data_frame=df_corp_sr[df_corp_sr["기업규모"]=="대기업"], x="연도", y="매출액", facet_col="대분류", color="소분류", title="대분류 별 대기업 매출액")
fig.show()
1
2
3
# 대기업 연간 연구개발비
fig = px.bar(data_frame=df_corp_sr[df_corp_sr["기업규모"]=="대기업"], x="연도", y="연구개발비", facet_col="대분류", color="소분류", title="대분류 별 대기업 연구개발비")
fig.show()

대기업의 경우, 감축 분야에서 가장 많은 매출이 발생하고 그에 따른 연구개발에도 많은 투자를하고 있습니다.
감축 분야의 재생 에너지 파트는 많은 매출을 담당하고있는 기술임에도, 연구개발에는 적은 비용이 투자되고 있습니다.
온실가스 고정 분야에서는 연구개발 투자가 이뤄지고 있지 않았는데, 매출이 발생하고 있습니다.


1
2
3
4
5
6
7
fig = make_subplots(rows=1, cols=2, start_cell="top-left", shared_xaxes=True, shared_yaxes=False)

fig.add_bar(x=df_corp_sr[df_corp_sr["기업규모"]=="중견기업"]["연도"], y=df_corp_sr[df_corp_sr["기업규모"]=="중견기업"]["매출액"], name="매출액", row=1, col=1)
fig.add_bar(x=df_corp_sr[df_corp_sr["기업규모"]=="중견기업"]["연도"], y=df_corp_sr[df_corp_sr["기업규모"]=="중견기업"]["연구개발비"], name="연구개발비", row=1, col=2)

fig.update_layout(title="중견기업 매출액/연구개발비")
fig.show()
1
2
3
# 중견기업 연간 매출액
fig = px.bar(data_frame=df_corp_sr[df_corp_sr["기업규모"]=="중견기업"], x="연도", y="매출액", facet_col="대분류", color="소분류", title="대분류 별 중견기업 매출액")
fig.show()
1
2
3
# 중견기업 연간 연구개발비
fig = px.bar(data_frame=df_corp_sr[df_corp_sr["기업규모"]=="중견기업"], x="연도", y="연구개발비", facet_col="대분류", color="소분류", title="대분류 별 중견기업 연구개발비")
fig.show()

중견 기업의 경우, 매출액은 감소하고있지만 연구개발비는 증가하고 있었습니다.


1
2
3
4
5
6
7
fig = make_subplots(rows=1, cols=2, start_cell="top-left", shared_xaxes=True, shared_yaxes=False)

fig.add_bar(x=df_corp_sr[df_corp_sr["기업규모"]=="중소기업"]["연도"], y=df_corp_sr[df_corp_sr["기업규모"]=="중소기업"]["매출액"], name="매출액", row=1, col=1)
fig.add_bar(x=df_corp_sr[df_corp_sr["기업규모"]=="중소기업"]["연도"], y=df_corp_sr[df_corp_sr["기업규모"]=="중소기업"]["연구개발비"], name="연구개발비", row=1, col=2)

fig.update_layout(title="중소기업 매출액/연구개발비")
fig.show()
1
2
3
# 중소기업 연간 매출액
fig = px.bar(data_frame=df_corp_sr[df_corp_sr["기업규모"]=="중소기업"], x="연도", y="매출액", facet_col="대분류", color="소분류", title="대분류 별 중소기업 매출액")
fig.show()
1
2
3
# 중소기업 연구개발비
fig = px.bar(data_frame=df_corp_sr[df_corp_sr["기업규모"]=="중소기업"], x="연도", y="연구개발비", facet_col="대분류", color="소분류", title="대분류 별 중소기업 연구개발비")
fig.show()

중소기업의 경우, 매출액과 연구개발비가 모두 증가하고 있습니다.


1
2
3
4
5
6
7
fig = make_subplots(rows=1, cols=2, start_cell="top-left", shared_xaxes=True, shared_yaxes=False)

fig.add_bar(x=df_corp_sr[df_corp_sr["기업규모"]=="연구소 등 비영리기관"]["연도"], y=df_corp_sr[df_corp_sr["기업규모"]=="연구소 등 비영리기관"]["매출액"], name="매출액", row=1, col=1)
fig.add_bar(x=df_corp_sr[df_corp_sr["기업규모"]=="연구소 등 비영리기관"]["연도"], y=df_corp_sr[df_corp_sr["기업규모"]=="연구소 등 비영리기관"]["연구개발비"], name="연구개발비", row=1, col=2)

fig.update_layout(title="연구소 등 비영리기관 매출액/연구개발비")
fig.show()
1
2
3
# 연구소 등 비영리기관 매출액
fig = px.bar(data_frame=df_corp_sr[df_corp_sr["기업규모"]=="연구소 등 비영리기관"], x="연도", y="매출액", facet_col="대분류", color="소분류", title="대분류 별 연구소 등 비영리기관 매출액")
fig.show()
1
2
3
# 대분류 별 연구소 등 비영리기관 연구개발비
fig = px.bar(data_frame=df_corp_sr[df_corp_sr["기업규모"]=="연구소 등 비영리기관"], x="연도", y="연구개발비", facet_col="대분류", color="소분류", title="대분류 별 연구소 등 비영리기관 연구개발비")
fig.show()

연구소 등 비영리 기관에서는 매출이 발생하지는 않지만, 감축 분야에서 활발한 연구개발이 진행되고 있습니다.


기관
1
2
3
4
5
6
7
fig = make_subplots(rows=1, cols=2, start_cell="top-left", shared_xaxes=True, shared_yaxes=True)

fig.add_bar(x=df_inst_sr[df_inst_sr["기관규모"]=="~100억"]["연도"], y=df_inst_sr[df_inst_sr["기관규모"]=="~100억"]["매출액"], name="매출액", row=1, col=1)
fig.add_bar(x=df_inst_sr[df_inst_sr["기관규모"]=="~100억"]["연도"], y=df_inst_sr[df_inst_sr["기관규모"]=="~100억"]["연구개발비"], name="연구개발비", row=1, col=2)

fig.update_layout(title="~100억 미만 기관 매출액/연구개발비")
fig.show()
1
2
3
# 100억 미만 매출액
fig = px.bar(data_frame=df_inst_sr[df_inst_sr["기관규모"]=="~100억"], x="연도", y="매출액", facet_col="대분류", color="소분류", title="100억 미만 기관 매출액")
fig.show()
1
2
3
# 100억 미만 연구개발비
fig = px.bar(data_frame=df_inst_sr[df_inst_sr["기관규모"]=="~100억"], x="연도", y="연구개발비", facet_col="대분류", color="소분류", title="100억 미만 기관 연구개발비")
fig.show()

1
2
3
4
5
6
7
fig = make_subplots(rows=1, cols=2, start_cell="top-left", shared_xaxes=True, shared_yaxes=True)

fig.add_bar(x=df_inst_sr[df_inst_sr["기관규모"]=="100억~500억"]["연도"], y=df_inst_sr[df_inst_sr["기관규모"]=="100억~500억"]["매출액"], name="매출액", row=1, col=1)
fig.add_bar(x=df_inst_sr[df_inst_sr["기관규모"]=="100억~500억"]["연도"], y=df_inst_sr[df_inst_sr["기관규모"]=="100억~500억"]["연구개발비"], name="연구개발비", row=1, col=2)

fig.update_layout(title="100억~500억 기관 매출액/연구개발비")
fig.show()
1
2
3
# 100억~500억 매출액
fig = px.bar(data_frame=df_inst_sr[df_inst_sr["기관규모"]=="100억~500억"], x="연도", y="매출액", facet_col="대분류", color="소분류", title="100억~500억 기관 매출액")
fig.show()
1
2
3
# 100억~500억 연구개발비
fig = px.bar(data_frame=df_inst_sr[df_inst_sr["기관규모"]=="100억~500억"], x="연도", y="연구개발비", facet_col="대분류", color="소분류", title="100억~500억 기관 연구개발비")
fig.show()

1
2
3
4
5
6
7
fig = make_subplots(rows=1, cols=2, start_cell="top-left", shared_xaxes=True, shared_yaxes=True)

fig.add_bar(x=df_inst_sr[df_inst_sr["기관규모"]=="100억~600억"]["연도"], y=df_inst_sr[df_inst_sr["기관규모"]=="100억~600억"]["매출액"], name="매출액", row=1, col=1)
fig.add_bar(x=df_inst_sr[df_inst_sr["기관규모"]=="100억~600억"]["연도"], y=df_inst_sr[df_inst_sr["기관규모"]=="100억~600억"]["연구개발비"], name="연구개발비", row=1, col=2)

fig.update_layout(title="100억~600억 기관 매출액/연구개발비")
fig.show()
1
2
3
# 100억~600억 매출액
fig = px.bar(data_frame=df_inst_sr[df_inst_sr["기관규모"]=="100억~600억"], x="연도", y="매출액", facet_col="대분류", color="소분류", title="100억~600억 기관 매출액")
fig.show()
1
2
3
# 100억~600억 연구개발비
fig = px.bar(data_frame=df_inst_sr[df_inst_sr["기관규모"]=="100억~600억"], x="연도", y="연구개발비", facet_col="대분류", color="소분류", title="100억~600억 기관 연구개발비")
fig.show()

1
2
3
4
5
6
7
fig = make_subplots(rows=1, cols=2, start_cell="top-left", shared_xaxes=True, shared_yaxes=True)

fig.add_bar(x=df_inst_sr[df_inst_sr["기관규모"]=="500억~1,000억"]["연도"], y=df_inst_sr[df_inst_sr["기관규모"]=="500억~1,000억"]["매출액"], name="매출액", row=1, col=1)
fig.add_bar(x=df_inst_sr[df_inst_sr["기관규모"]=="500억~1,000억"]["연도"], y=df_inst_sr[df_inst_sr["기관규모"]=="500억~1,000억"]["연구개발비"], name="연구개발비", row=1, col=2)

fig.update_layout(title="500억~1,000억 기관 매출액/연구개발비")
fig.show()
1
2
3
# 500억~1,000억 매출액
fig = px.bar(data_frame=df_inst_sr[df_inst_sr["기관규모"]=="500억~1,000억"], x="연도", y="매출액", facet_col="대분류", color="소분류", title="500억~1,000억 기관 매출액")
fig.show()
1
2
3
# 500억~1,000억 연구개발비
fig = px.bar(data_frame=df_inst_sr[df_inst_sr["기관규모"]=="500억~1,000억"], x="연도", y="연구개발비", facet_col="대분류", color="소분류", title="500억~1,000억 기관 연구개발비")
fig.show()

1
2
3
4
5
6
7
fig = make_subplots(rows=1, cols=2, start_cell="top-left", shared_xaxes=True, shared_yaxes=True)

fig.add_bar(x=df_inst_sr[df_inst_sr["기관규모"]=="1,000억~2,000억"]["연도"], y=df_inst_sr[df_inst_sr["기관규모"]=="1,000억~2,000억"]["매출액"], name="매출액", row=1, col=1)
fig.add_bar(x=df_inst_sr[df_inst_sr["기관규모"]=="1,000억~2,000억"]["연도"], y=df_inst_sr[df_inst_sr["기관규모"]=="1,000억~2,000억"]["연구개발비"], name="연구개발비", row=1, col=2)

fig.update_layout(title="1,000억~2,000억 기관 매출액/연구개발비")
fig.show()
1
2
3
# 1,000억~2,000억 매출액
fig = px.bar(data_frame=df_inst_sr[df_inst_sr["기관규모"]=="1,000억~2,000억"], x="연도", y="매출액", facet_col="대분류", color="소분류", title="1,000억~2,000억 기관 매출액")
fig.show()
1
2
3
# 1,000억~2,000억 연구개발비
fig = px.bar(data_frame=df_inst_sr[df_inst_sr["기관규모"]=="1,000억~2,000억"], x="연도", y="연구개발비", facet_col="대분류", color="소분류", title="1,000억~2,000억 미만 기관 연구개발비")
fig.show()

1
2
3
4
5
6
7
fig = make_subplots(rows=1, cols=2, start_cell="top-left", shared_xaxes=True, shared_yaxes=True)

fig.add_bar(x=df_inst_sr[df_inst_sr["기관규모"]=="600억~2,000억"]["연도"], y=df_inst_sr[df_inst_sr["기관규모"]=="600억~2,000억"]["매출액"], name="매출액", row=1, col=1)
fig.add_bar(x=df_inst_sr[df_inst_sr["기관규모"]=="600억~2,000억"]["연도"], y=df_inst_sr[df_inst_sr["기관규모"]=="600억~2,000억"]["연구개발비"], name="연구개발비", row=1, col=2)

fig.update_layout(title="600억~2,000억 기관 매출액/연구개발비")
fig.show()
1
2
3
# 600억~2,000억 매출액
fig = px.bar(data_frame=df_inst_sr[df_inst_sr["기관규모"]=="600억~2,000억"], x="연도", y="매출액", facet_col="대분류", color="소분류", title="600억~2,000억 기관 매출액")
fig.show()
1
2
3
# 600억~2,000억 연구개발비
fig = px.bar(data_frame=df_inst_sr[df_inst_sr["기관규모"]=="600억~2,000억"], x="연도", y="연구개발비", facet_col="대분류", color="소분류", title="600억~2,000억 기관 연구개발비")
fig.show()

1
2
3
4
5
6
7
fig = make_subplots(rows=1, cols=2, start_cell="top-left", shared_xaxes=True, shared_yaxes=True)

fig.add_bar(x=df_inst_sr[df_inst_sr["기관규모"]=="기타(공공기관)"]["연도"], y=df_inst_sr[df_inst_sr["기관규모"]=="기타(공공기관)"]["매출액"], name="매출액", row=1, col=1)
fig.add_bar(x=df_inst_sr[df_inst_sr["기관규모"]=="기타(공공기관)"]["연도"], y=df_inst_sr[df_inst_sr["기관규모"]=="기타(공공기관)"]["연구개발비"], name="연구개발비", row=1, col=2)

fig.update_layout(title="기타(공공기관) 매출액/연구개발비")
fig.show()
1
2
3
# 기타(공공기관) 매출액
fig = px.bar(data_frame=df_inst_sr[df_inst_sr["기관규모"]=="기타(공공기관)"], x="연도", y="매출액", facet_col="대분류", color="소분류", title="기타(공공기관) 매출액")
fig.show()
1
2
3
# 기타(공공기관) 연구개발비
fig = px.bar(data_frame=df_inst_sr[df_inst_sr["기관규모"]=="기타(공공기관)"], x="연도", y="연구개발비", facet_col="대분류", color="소분류", title="기타(공공기관) 연구개발비")
fig.show()
5. 상관관계
기업
1
2
corp_corr = df_corp_sr.corr()
corp_corr
연도매출액연구개발비
연도1.0000000.0088370.053478
매출액0.0088371.0000000.414435
연구개발비0.0534780.4144351.000000
1
_ = sns.heatmap(corp_corr, annot=True, cmap="BuGn")

png

기관
1
2
inst_corr = df_inst_sr.corr()
inst_corr
연도매출액연구개발비
연도1.000000-0.0720580.183231
매출액-0.0720581.000000-0.064034
연구개발비0.183231-0.0640341.000000
1
_ = sns.heatmap(inst_corr, annot=True, cmap="BuGn")

png

기업의 경우, 매출과 연구개발비가 양의 상관 관계이므로 서로 영향이 있다고 생각할 수 있지만,
기관의 경우, 매출이 발생하지 않고 연구개발만 이뤄지므로 매출과 연구개발비가 음의 상관 관계를 가졌습니다.


5. 결론 및 한계

  1. 기술 변경을 생각하지 못함
  2. 기업과 기관의 분류 기준이 어떻게 이뤄져있는지 파악하지 못함
  3. 다른 데이터는 사용하지 못해봄
This post is licensed under CC BY 4.0 by the author.

통계 기초

LaTex 사용하기

Comments powered by Disqus.