1, 2 학년 동안 약 10개월 정도를 MATLAB만 Main Language로 돌리다가 이제 막 Python에 도전하려고 하니, Python이 너무 어렵게 느껴진다. MATALB은 이것저것 사소한 문제는 자체적으로 다 해결을 해줘서 디게 편했는데, Python 이놈은 너무 손이 많이 가는 거 같다.
Python을 기초부터 공부해보려고 몇몇 책을 붙들고 읽어봤는데 도저히 흥미도 안 생기고, 머릿속에도 내용이 안 들어왔다. 그래서 MATLAB MATLAB 으로 만들었던 그림들을 Python으로 그대로 만들어보는 식으로 일단 부딪혀 보기로 했다. 일단 맨 첫 번째 과제는 조위 데이터를 시계열로 만드는 것이다.
옛날에 포항조위관측소 데이터를 사용했던 적이 있어서, 그 데이터를 그대로 사용했는데... 다시 다운받은 source site를 찾으려했더니 도저히 찾을 수가 없었다. (내가 이 데이터를 어떻게 얻었지??) 아무튼 raw data는 dat 파일이다. dat 파일은 txt, csv를 읽어들이는 방식이랑 거의 비슷하기 때문에, (MATLAB 기준.) 다루기 만만한 데이터 중 하나라고 볼 수 있다.
참고로 가장 깔끔하게 읽어들일 수 있는 데이터는 NC 파일이고, txt, csv, dat은 중간 정도고, 엑셀 파일이 사실 제일 난감하다. 맨날 table로 읽어들여서... 개인적으로는 엑셀 데이터 쓸 때마다 좀 아니꼽다.
각설하고, 아무튼 pandas랑 matplotlib를 import하는 것까지는 책에 나온대로 어찌 했는데, 그 이후에 데이터를 읽어들이는 것부터 문제가 생겼다. 그래서 인터넷 열심히 뒤진 결과 알아낸 점은 다음과 같다.
< Python을 하고 싶은 MATLAB 빠돌이의 메모 >
1. Python에서 파일 경로 쓸 때는 / 하나가 아니라 // 이렇게 2개를 써야 한다.
그러니까 예를 들면, 다른 폴더에 있는 파일을 읽어들일 때, 파일 이름 앞에 파일이 있는 폴더경로를 적어놓아야 한다.
그러면 MATLAB에서는 위 그림처럼, 폴더 경로를 Ctrl + C, Ctrl + V 해서 코드에 붙여넣기 하면 바로 실행이 되는데, 파이썬은 이렇게 하면 문제가 생긴다. 그래서 다음과 같이 슬러시(/)를 두개 사용해서 코드를 짜야 한다. (귀찮....)
import pandas as pd
import matplotlib.pyplot as plt
fnm = 'C:\\Users\\User\\OneDrive - pusan.ac.kr\\MATLAB\\2021_2_Comp_Science\\Comp_science_Sequel\\Pohang.dat'
그리고 그 다음부터 Raw data를 읽어들이고 plot하는 코드를 짜면 되는데, 솔직히 말해서 진짜 많이 헤맸다.
나는 x축에 시간축을 두고, y축에는 tide 값을 나타내는 시계열을 만들고 싶은데, MATLAB에서 했던 것처럼
plt.plot(users['time'], users['tide'])
이렇게 코드를 짜면 실행도 하아아안참 걸리고, 결과물에도 x축에 시간 값이 안 나온다.
(이거 블로그에 사진 올리려고 다시 실패한 코드 실행해보고 있는데, 시계열 하나 그리는데 1분 넘게 걸린다.
진짜 기다리고 있으면 속에 열불이 난다.)
아무튼 이걸 어떻게 해결해야 할지.... 이것저것 찾다가 도저히 모르겠어서 Chat GPT에게 물어봤다.
그리고 그 밑에 Chat GPT가 알려준 코드는 다음과 같다.
import pandas as pd
import matplotlib.pyplot as plt
# Load the data
df = pd.read_csv('your_data_file.csv')
# Convert the time column to a datetime object
df['time'] = pd.to_datetime(df['time'])
# Set the time column as the index of the DataFrame
df = df.set_index('time')
# Plot the data
plt.plot(df.index, df['data'])
plt.xlabel('Time')
plt.ylabel('Data')
plt.show()
그래서 Chat GPT한테 그랜절박고 바로 Spyder 열어서 변수이름 살짝 바꾸고 실행해봤다.
(아래는 전체 코드)
import pandas as pd
import matplotlib.pyplot as plt
fnm = 'C:\\Users\\User\\OneDrive - pusan.ac.kr\\MATLAB\\2021_2_Comp_Science\\Comp_science_Sequel\\Pohang.dat'
unames = ['time', 'tide', 'temp', 'sali', 'ws', 'wd', 'airtemp', 'airpres']
users = pd.read_table(fnm, sep=',', header = 1, names=unames)
users['time'] = pd.to_datetime(users['time'])
users = users.set_index('time')
plt.plot(users.index, users['tide'])
plt.xlabel('Time')
plt.ylabel('Data')
plt.show()
찬양하라.... Chat GPT는 그는 신이야....
< Python을 하고 싶은 MATLAB 빠돌이의 메모 >
2. 모르는 게 생기면 Chat GPT한테 물어라.
3. 시계열 만들 때, 시간축은 pd.to_datetime, set_index() 함수를 활용해서 처리한다.
아, 그리고 궁금해져서 다른 코드는 그대로 냅두고 plt.plot(users.index, users['tide']) 에서 user.index 제외하고 users['tide'].plot() 만 실행해봤다.
이렇게 해도 x축에 알아서 시간 값이 나온다.
users['tide'].plot()
아무튼 결과물이 나와서 무지 좋았다.
이상.
'Python' 카테고리의 다른 글
Python - plot에서 제목에 한글 넣기 (0) | 2023.03.23 |
---|---|
Python에서 처음 해보는 Indexing 인덱싱 (0) | 2023.03.23 |