Chapter 12: 데이터 수집과 저장의 기초¶
🎯 이 장에서 배우는 것¶
- [ ] 여러 번 측정한 데이터를 리스트에 저장할 수 있다
- [ ] 반복문으로 일정 간격 자동 측정을 구현할 수 있다
- [ ] 수집한 데이터를 CSV 파일로 저장할 수 있다
⏱️ 예상 학습 시간: 약 45분
📚 미리 알아야 할 것¶
지난 장에서 센서로 온습도를 한 번 측정하는 법을 배웠어요.
sensor.temperature # 온도 한 번 읽기
sensor.humidity # 습도 한 번 읽기
이번에는 자동으로 여러 번 측정해서 저장하는 방법을 배워볼게요!
📚 핵심 개념¶
개념: 리스트 (List)¶
비유: 리스트는 "칸이 나뉜 서랍장" 이에요! 📦
flowchart LR
subgraph 리스트["temperatures 리스트"]
A["0번 칸<br/>25.1"]
B["1번 칸<br/>25.3"]
C["2번 칸<br/>25.2"]
end
style 리스트 fill:#e3f2fd,stroke:#1976d2
- 서랍장 각 칸에 데이터를 순서대로 넣어요
- 칸 번호(인덱스)는 0번부터 시작해요
- 나중에 꺼내서 분석할 수 있어요!
코드로 보면:
temperatures = [] # 빈 서랍장 준비
temperatures.append(25.1) # 첫 번째 칸에 넣기
temperatures.append(25.3) # 두 번째 칸에 넣기
🔨 따라하기¶
Step 1: 자동 측정 프로그램 만들기¶
목표: 10초 간격으로 6번 측정 (총 1분)
코드:
import time
import board
import adafruit_dht
# 센서 준비
sensor = adafruit_dht.DHT11(board.D4)
# 빈 리스트(서랍장) 준비
temperatures = []
humidities = []
# 6번 반복 측정
for i in range(6):
temp = sensor.temperature
hum = sensor.humidity
# 리스트에 추가
temperatures.append(temp)
humidities.append(hum)
print(f"{i+1}번째: {temp}°C, {hum}%")
time.sleep(10) # 10초 대기
print("측정 완료!")
print(f"온도 데이터: {temperatures}")
실행 결과:
1번째: 25°C, 60%
2번째: 25°C, 61%
3번째: 26°C, 59%
...
측정 완료!
온도 데이터: [25, 25, 26, 25, 26, 25]
✅ 체크포인트: 10초마다 측정값이 출력되나요?
Step 2: CSV 파일로 저장하기¶
CSV란? 엑셀에서 열 수 있는 데이터 파일이에요!
flowchart LR
A["🌡️ 센서 측정"] --> B["📋 리스트 저장"]
B --> C["💾 CSV 파일"]
C --> D["📊 엑셀로 분석"]
style A fill:#fff3e0,stroke:#f57c00
style C fill:#e8f5e9,stroke:#388e3c
코드:
# 파일로 저장
with open('sensor_data.csv', 'w') as file:
file.write('번호,온도,습도\n') # 헤더
for i in range(len(temperatures)):
line = f'{i+1},{temperatures[i]},{humidities[i]}\n'
file.write(line)
print("sensor_data.csv 저장 완료!")
생성된 CSV 파일 내용:
번호,온도,습도
1,25,60
2,25,61
3,26,59
...
📝 전체 코드¶
import time
import board
import adafruit_dht
# 센서 설정
sensor = adafruit_dht.DHT11(board.D4)
# 데이터 저장용 리스트
temperatures = []
humidities = []
# 6번 측정 (10초 간격, 총 1분)
print("데이터 수집 시작!")
for i in range(6):
temp = sensor.temperature
hum = sensor.humidity
temperatures.append(temp)
humidities.append(hum)
print(f"{i+1}번째: {temp}°C, {hum}%")
if i < 5: # 마지막엔 대기 안 함
time.sleep(10)
# CSV 파일로 저장
with open('sensor_data.csv', 'w') as file:
file.write('번호,온도,습도\n')
for i in range(len(temperatures)):
file.write(f'{i+1},{temperatures[i]},{humidities[i]}\n')
print("sensor_data.csv 저장 완료!")
⚠️ 주의할 점¶
| 실수 | 해결법 |
|---|---|
temperatures = [] 빠뜨림 |
반복문 전에 빈 리스트 선언 필수! |
| 파일 내용이 안 보임 | 파일 탐색기에서 sensor_data.csv 찾기 |
✅ 점검하기¶
- 리스트에 데이터를 추가하는 명령어는?
정답 확인
`리스트이름.append(값)`- CSV 파일을 열어볼 수 있는 프로그램은?
정답 확인
엑셀, 구글 스프레드시트, 메모장- for i in range(6)은 몇 번 반복하나요?
정답 확인
6번 (i = 0, 1, 2, 3, 4, 5)🚀 다음 장 미리보기¶
데이터를 모았으니, 다음 장에서는 평균, 최댓값, 최솟값을 계산해서 의미 있는 정보로 바꿔볼 거예요! 📊