반응형
모더나 2차 백신을 맞고 아픈 와중에도 체온 변화를 기록했고 이를 파이썬으로 선 그래프를 그려보았다. (코로나 XX!) 대충 엑셀로 아래와 같은 시간과 체온을 기록했다. 그리고 csv로 저장했다. xlsx 같은 엑셀 파일도 파이썬으로 작업 가능하나 속도가 더 느리다.
hours temperature
0 0 36.5
1 10 37.5
2 11 37.8
3 14 38.3
4 19 38.9
5 21 38.5
6 25 38.0
7 27 38.0
8 33 38.0
9 34 37.4
10 36 37.1
11 37 37.0
12 39 36.6
13 45 36.5
위와 같은 csv파일이 있을때
아래와 같은 코드를 실행하면
# -*- coding: utf-8 -*-
import pandas as pd
import matplotlib.pyplot as plt
import os
# import csv
folderPath = r'D:\posting' # 폴더 경로
attributeTable = 'ear_temp.csv' # 파일 이름
os.chdir(folderPath)
df = pd.read_csv(attributeTable)
df = df[['hours', 'temperature']]
# plot
plt.figure(figsize=(15, 8))
plt.rcParams.update({'font.size': 22})
ax = df.set_index('hours')['temperature'].plot(kind='line', marker='d')
ax.set_ylabel("Ear temperature (°C)")
ax.set_xlabel("Hours since Moderna second dose")
plt.show()
이런 라인 그래프가 나온다.
라인을 smooth 하게 하고 싶다면 아래의 코드를 실행해보자.
# -*- coding: utf-8 -*-
import pandas as pd
import matplotlib.pyplot as plt
import os
import numpy as np
from scipy.interpolate import interp1d
# import csv
folderPath = r'D:\posting' # 폴더 경로
attributeTable = 'ear_temp.csv' # 파일 이름
os.chdir(folderPath)
df = pd.read_csv(attributeTable)
df = df[['hours', 'temperature']]
# plot2
x = df['hours']
y = df['temperature']
x_new = np.linspace(x.min(), x.max(),1000)
f = interp1d(x, y, kind='quadratic')
y_smooth=f(x_new)
plt.figure(figsize=(15, 8))
plt.rcParams.update({'font.size': 22})
plt.plot (x_new,y_smooth)
plt.scatter (x, y)
그럼 아래와 같은 그래프가 나온다. 좀 더 smooth 해졌다. 하지만 10시간까지 그리고 30시간 전후를 살펴보면 체온은 올라간 적 없지만 interp1d 기능에서 interpolate를 하는 과정에서 데이터 값의 왜곡이 생긴다. 조심히 사용하자.
이렇게 겹쳐서 보면 interpolate로 인해 생긴 왜곡이 잘 보인다.
관련 글:
파이썬으로 박스플롯 (box plot - 상자그림) 그리기
반응형
댓글