고2 · 소프트웨어와 생활 · 2026학년도 2학기

1차시 개념 안내 · 표와 인덱스

데이터를 모으고 → 표로 정리하고 → 분석하고 → 시각화하고 → 근거를 들어 해석합니다.

지난 아두이노 수업과 연결하기

1. 센서 측정에서 데이터 분석으로

지난 시간에는 아두이노 센서로 거리·밝기·가변저항 값을 읽고 Serial 통신으로 컴퓨터에 보냈습니다. 오늘부터는 그 값을 CSV 파일로 저장한 뒤 pandas로 분석하고, 이미 배운 Matplotlib으로 그래프를 그려 현상을 해석합니다.

아두이노 센서
Serial 통신
CSV 저장
pandas 분석
Matplotlib 시각화
단계우리가 하는 일예시
① 센서 측정초음파·조도·가변저항의 값을 읽음거리 25cm
② Serial 전송측정값을 컴퓨터로 전달Serial.println(distance);
③ CSV 저장시간과 측정값을 표로 기록time,distance
④ pandas 분석평균·최댓값·변화 추세를 계산df['distance'].mean()
⑤ Matplotlib 시각화시간에 따른 거리 변화를 그래프로 표현plt.plot(...)

왜 배우나요? 센서가 숫자를 측정하는 것에서 끝나는 것이 아니라, 데이터를 모아 어떤 현상이 일어났는지 증거를 찾아 설명하기 위해서입니다. 예를 들어 사람이 초음파 센서에 가까워질수록 측정 거리가 어떻게 달라지는지 확인할 수 있습니다.

※ 센서값을 Serial 모니터로 출력하는 것과 CSV 파일로 저장하는 것은 별도 단계입니다. CSV 저장은 시리얼 로그를 파일로 기록하거나 PC 프로그램을 이용해 수행합니다. 위 표의 수치는 설명용 예시입니다.

2. 이번 차시의 학습 목표

  1. pandas를 불러와 작은 DataFrame을 만든다.
  2. 데이터 행·열과 인덱스·열 이름을 구별한다.
  3. 인덱스를 바꿔도 표의 크기는 그대로임을 설명한다.

첫 수업에서는 CSV 파일 읽기와 조건 검색까지 서두르지 않습니다. 다음 차시에서 차근차근 이어갑니다.

3. 판다스와 데이터프레임

CSV
pandas
DataFrame
시각화·해석

pandas는 표 데이터를 읽고 정리·분석하는 파이썬 라이브러리입니다.

import pandas as pd

data = {
    'item': ['juice', 'bread', 'milk'],
    'sales': [12, 20, 16]
}
df = pd.DataFrame(data)
print(df)

import: 라이브러리 불러오기 · pd: 별칭 · DataFrame: 2차원 표 · print: 출력

3-1. 행·열·인덱스 구분

중요! DataFrame의 열 이름(item, sales)은 데이터 행에 포함되지 않고, 왼쪽 인덱스(0, 1, 2)는 데이터 열에 포함되지 않습니다.

인덱스(Index)열 개수에 포함 안 됨itemsales
0juice12
1bread20
2milk16

행(Row) = 3개 (juice, bread, milk) · 열(Column) = 2개 (item, sales) · 인덱스 = 0, 1, 2

1. 행과 열의 개수 확인하기

print(df.shape)      # (3, 2)
print(df.index)      # RangeIndex(start=0, stop=3, step=1)
print(df.columns)    # Index(['item', 'sales'], dtype='object')

shape는 (행 개수, 열 개수), index는 행의 이름표, columns는 열 이름입니다.

2. 인덱스를 1, 2, 3으로 바꾸는 두 가지 방법

방법 1 — 처음 DataFrame을 만들 때 지정

df = pd.DataFrame({
    'item': ['juice', 'bread', 'milk'],
    'sales': [12, 20, 16]
}, index=[1, 2, 3])
print(df)

방법 2 — 이미 만든 DataFrame의 인덱스를 변경

df.index = range(1, len(df) + 1)
print(df)

두 방법 모두 출력되는 인덱스는 1, 2, 3입니다. 그래도 df.shape는 계속 (3, 2)입니다.

다음 차시에서 이어보기 · loc/iloc와 인덱스를 열로 바꾸기

3. 인덱스 이름과 실제 행 위치는 다릅니다

print(df.loc[1])    # 인덱스 이름이 1인 행
print(df.iloc[0])   # 첫 번째 위치의 행

위 두 코드는 현재 예제에서 모두 juice 행을 선택합니다. loc은 이름, iloc은 0부터 시작하는 위치를 기준으로 합니다.

4. 인덱스를 실제 열로 추가한다면?

df2 = df.reset_index()
print(df2.shape)    # (3, 3)

reset_index()를 사용하면 기존 인덱스가 index라는 일반 데이터 열로 들어가므로 3행 3열이 됩니다.

개념 확인 — 인덱스를 1부터 시작하면 DataFrame의 열 개수도 늘어날까요?

정답: 아닙니다. 인덱스 번호만 바뀌면 3행 2열 그대로입니다. reset_index()로 일반 열로 변환할 때 열이 하나 늘어납니다.

3-2. 표의 구조 정리

표의 가로 한 줄은 상품 하나의 기록이고, 세로 한 열은 같은 종류의 항목입니다.

행은 상품 하나의 기록, 열은 item 또는 sales 같은 항목, 인덱스는 행의 이름표입니다.

4. 다음 차시 예고 · 시리즈와 데이터프레임

df['sales']는 한 열을 담은 1차원 Series입니다. df[['sales']]는 열 하나를 가진 2차원 DataFrame입니다.

표의 크기와 자료구조의 차원은 다릅니다. 3행 2열도, 100행 5열도 DataFrame은 2차원입니다.

선택 참고 · 다차원 배열과 pandas 이름의 유래

선택 참고 1. 자료구조의 차원

1차원 Series = 한 방향의 목록 → [65, 78, 90]

2차원 DataFrame = 행 × 열의 표 → 학생 × 과목

3차원 이상 ndarray / Tensor = 여러 표를 층처럼 쌓은 배열 → 학급 × 학생 × 과목

import numpy as np
scores = np.array([
    [[80, 90], [70, 85]],
    [[95, 88], [75, 92]]
])
print(scores.shape)  # (2, 2, 2)

참고: pandas의 DataFrame 자체는 2차원입니다. NumPy는 다차원 수치 배열에 적합하고, 딥러닝에서는 텐서를 활용합니다. 과거 pandas의 Panel은 현재 제거되었습니다.

선택 참고 2. 판다스 이름의 유래

Panel Data(패널 데이터)라는 통계 용어에서 유래했습니다. 패널 데이터는 같은 대상을 여러 시점에 걸쳐 반복 관찰한 자료입니다. 동물 판다에서 직접 따온 이름은 아닙니다.

예: 학생 A의 2024년 점수와 2025년 점수를 함께 분석하는 자료. 패널 데이터도 2차원 DataFrame으로 표현할 수 있습니다.

5. 개념 확인 문제

1. pd는 무엇인가요?

pandas를 짧게 부르기 위한 별칭입니다.

2. 세 상품의 item과 sales를 담은 표는 몇 행 몇 열인가요?

3행 2열입니다. 인덱스는 데이터 열이 아니고, 열 이름은 데이터 행이 아닙니다.

3. 인덱스를 1, 2, 3으로 바꾸면 shape는?

(3, 2) 그대로입니다. 행의 이름표만 바뀌었습니다.

4. shape와 print의 괄호는 어떻게 다른가요?

shape는 속성이므로 df.shape이고, print는 함수이므로 print(df.shape)입니다.

6. 1차시 실습 시작

코드를 직접 입력하고 실행 결과를 확인하세요. 웹 실습은 별도 설치 없이 실행하도록 구성되어 있지만, import 문은 직접 작성해야 합니다.

▶ 1차시 단계별 Python 실습 시작← 01. 수업 안내

※ 이 페이지는 학습용 개념·시험 대비 안내입니다. 학교의 공식 시험 범위는 교사의 확정 공지를 우선합니다.

1차시 실습을 마쳤다면

다음 수업에서는 하나의 CSV를 읽고 전처리·그래프·해석까지 끝내 봅니다. 그다음 기존 2차시부터 깊이 있게 배웁니다.

전체 과정 따라 하기 · 축제 간식 분석 →