상세 컨텐츠

본문 제목

과학자 연대표, 과학자 타임라인

과학 나누기/과학(자) 역사

by 인국이 2022. 5. 26. 13:19

본문

과학을 공부할 때,

역사처럼 시간 순으로 학습하지 않기 때문에

수 많은 과학 법칙, 이론, 내용들이 별개인 것으로 생각된다. 

과학은 그렇게 발전하지 않았고, 

대개는 지식적 교류를 통해 과학이 정립되어 왔다. 

 

문득, 같은 시대를 살았던 과학자들은 누가 있을까 라는 생각을 하게 되었고,

과학자 연대표 같은 것을 찾아 보게 되었다. 

하지만, 과학적 발견, 법칙 등의 사건을 중심으로 역사가 기술되기에

만들어진 표들도 사건 위주로 연대표가 작성되어 있다. 

 

그래서 과학자들의 출생과 죽음을 하나의 표에 만들어 놓으면

같은 시대를 살았던 과학자들을 알아 보기 쉽겠다는 생각이 들었다.

 

#python #matplotlib 을 이용해 데이터를 그래프로 표현해보기로 했다.  

 

아직 20명 정도의 과학자만 기록을 해 놓았다. 

엑셀에 과학자를 추가하고 실행을 시키면 새로운 도표가 작성된다. 

 

만들어 놓고 보니, 

유명한 과학자가 갑자기 늘어나는 시점이 보인다.

역시 시작은 코페르니쿠스, 갈릴레이 이고

1700년대를 넘어서면서 과학자들의 수가 갑자기 많아진다. 

데카르트, 루소 같은 철학자들도 들어 있는 이유는

이들도 과학적인 부분에서 세운 공이 있기에 넣어 보았다. 

 

추후에

1. 한국인 과학자

2. 과학자들의 업적별 기록

을 해보고,

 

이것들을 토대로 '과학자 네트워크' 지도를 만들어 보고자 한다. 

 

아래는 작성한 코딩

# 한글 과학자 연대표, 엑셀에 채우면 연도표를 작성함.

import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.font_manager

fig, ax = plt.subplots()

# 엑셀 파일을 불러오기
sci_1 = pd.read_excel('scientist_korean.xlsx')
list_1 = sci_1.values.tolist()

#matplotlib 한글 폰트 오류 문제 해결
from matplotlib import font_manager, rc
font_path = './nanum.ttf'     #폰트 파일 위치
font_name = font_manager.FontProperties(fname=font_path).get_name()
font_size = 0
rc('font', family=font_name)

#내장된 폰트를 사용할 때
#plt.rc('font', family ='DejaVu Sans Mono')

# 막대의 색깔 지정
list_color = ['tab:Grey', 'tab:Purple', 'tab:Blue', 'tab:Green', 'tab:Orange', 
              'tab:Red','tab:pink', 'tab:olive', 'tab:cyan']
# tb = 'tab:grey'
# to = 'tab:orange'


#막대 그래프 위치, 크기([x 시작점, 길이], (y 축 위치, 두께), facecolor = 'tab:blue')
def bar(x_start, x_ren, y_point,  color):
    ax.broken_barh([(x_start, x_ren)], (y_point*3,1), facecolors = color)
    
#def ystick(n_1):
#    d = [list_1[n_1][1]]
#    ax.set_yticklabels([d])

for i, value in enumerate(list_1):
    x = i%8
    text_x_point = list_1[i][3]
    text_y_point = 3*list_1[i][0]
    name = str(list_1[i][1])
    bar(list_1[i][2], list_1[i][4], list_1[i][0],list_color[x])
    plt.text(text_x_point, text_y_point , name)   
#name = str(list_1[1][1])
#plt.text(1800, 2 , name)    
#plt.text(1800, 2 , 'einstein')
#plt.text(1800, 2 , 'einstein', fontdict=font)


# 막대 그래프의 위치 설정
# ax.broken_barh([(1800, 100)], (16, 1),facecolors=list_color[0])

#표 영역의 크기 설정

ax.set_ylim(0, i*3)
ax.set_xlim(1400, 2100)
ax.set_xlabel('Scientist Timeline')

#ax.grid(True) # x, y 축의 그리드 생성
ax.grid(axis = 'x')

#그래프를 pdf로 출력, 확장자를 png, jpeg, tif, pdf 등으로 변경 가능
plt.savefig('Scientist_Timeline_korean.pdf')

plt.show()

 

 

관련글 더보기

댓글 영역