데이터분석 코드의 핵심은 기존 컬럼(col_2)의 이름을 새로운 규칙에 따라 변환하는 것이야. 하나씩 쉽게 설명해줄게.
prefixes = ['tot_', 'car_', 'bus_', 'truck_']
tot_, car_, bus_, truck_ 네 가지 접두사를 사용해.tot_) → 자동차(car_) → 버스(bus_) → 트럭(truck_)을 나타낸다고 보면 돼.ranges = [0, 25, 50, 75]
col_2 리스트에서 각 구간의 시작점을 지정했어.0~24까지는 tot_25~49까지는 car_50~74까지는 bus_75~끝까지는 truck_new_col_2 = []
for i in range(len(ranges)): # len(ranges) = 4
ranges에 설정한 4개의 구간을 돌면서 컬럼명을 바꿔.i = 0이면 tot_, i = 1이면 car_, 이런 식으로 접두사를 선택할 거야.start, end = ranges[i], ranges[i] + 25 if i < 3 else len(col_2)
start: 해당 구간의 시작점end: 시작점에서 25개 더한 값 (len(col_2)을 넘지 않도록 마지막 구간에서는 전체 길이로 설정)예를 들어, i=0이면:
start = 0end = 25col_2[0:25]만 처리new_col_2.extend([prefix + ('tot' if col == '전일' else 'h' + col[:-1]) for col in col_2[start:end]])
이 부분이 핵심 변환 로직이야!
각 컬럼(col_2의 요소)을 조건에 맞게 바꿔서 new_col_2에 추가하는 과정이야.
"전일"이면 → tot로 변환
'tot' if col == '전일'
'tot_' 접두사를 붙여 tot_tot이 돼.숫자로 끝나는 컬럼이면 → 앞에 h를 붙이고 마지막 숫자를 제거
'h' + col[:-1]
"12" → "h1"앞에서 정한 prefix(접두사)를 붙임
"tot_", "car_", "bus_", "truck_" 중 하나가 앞에 붙음.가정:
col_2 = ["전일", "12", "34", "56", "78"] * 20
출력 예시:
['tot_tot', 'tot_h1', 'tot_h3', 'tot_h5', 'tot_h7', # 0~24번
'car_tot', 'car_h1', 'car_h3', 'car_h5', 'car_h7', # 25~49번
'bus_tot', 'bus_h1', 'bus_h3', 'bus_h5', 'bus_h7', # 50~74번
'truck_tot', 'truck_h1', 'truck_h3', 'truck_h5', 'truck_h7'] # 75~끝까지
"전일"은 tot_ 접두사가 붙어서 "tot_tot", "car_tot", "bus_tot", "truck_tot"이 됨."h"를 붙이고 마지막 숫자를 삭제.col_2의 컬럼명을 4개 구간(tot_, car_, bus_, truck_)으로 나눈다."전일"은 "tot"으로 바꾼다."h"를 붙이고 마지막 숫자를 제거한다.prefix + 변환된 이름 형태로 new_col_2에 저장한다.이제 이해됐어? 😊
extend() 대신 append()를 사용하면 리스트 전체를 하나의 요소로 추가하므로 원하는 결과가 나오지 않아. 하지만 append()를 사용하면서도 원하는 리스트 형태를 유지하려면 반복문을 활용해야 해.
extend() → append()로 변경prefixes = ['tot_', 'car_', 'bus_', 'truck_'] # 접두사 리스트
ranges = [0, 25, 50, 75] # 구간 시작점
new_col_2 = [] # 변환된 컬럼명을 저장할 리스트
for i in range(len(ranges)):
start, end = ranges[i], ranges[i] + 25 if i < 3 else len(col_2)
prefix = prefixes[i]
# 리스트 내포 대신 개별적으로 append()
for col in col_2[start:end]:
new_col_2.append(prefix + ('tot' if col == '전일' else 'h' + col[:-1]))
print(new_col_2)
기존 코드 (extend())
new_col_2.extend([...])
→ extend()는 리스트의 요소를 개별적으로 추가함.
변경 코드 (append())
for col in col_2[start:end]:
new_col_2.append(...)
→ append()는 하나씩 추가하기 때문에 for 루프를 활용해야 함.
extend()와 append() 차이 예제list_a = [1, 2, 3]
list_b = [4, 5, 6]
list_a.extend(list_b) # 리스트 요소 개별 추가
print(list_a) # [1, 2, 3, 4, 5, 6]
list_c = [1, 2, 3]
list_c.append(list_b) # 리스트 자체를 하나의 요소로 추가
print(list_c) # [1, 2, 3, [4, 5, 6]] ❌ 원하는 결과 아님!
extend() → 요소를 풀어서 추가append() → 리스트 전체를 하나의 요소로 추가 (중첩 리스트됨)✅ extend() 대신 append()를 쓰려면 for 문을 사용해서 리스트에 개별적으로 추가해야 해.
이제 완벽히 이해됐어? 😊
이 코드를 더 짧고 간결하게 줄이면, 변수를 활용하여 조건을 줄이고 체이닝을 적용할 수 있어:
max_truck = dj_trafficvolume_y22.query("권역 == '대전광역시 유성구' and 도로등급 == '고속도로'")['트럭-평일_전일'].max()
.query() 사용 "권역 == '대전광역시 유성구' and 도로등급 == '고속도로'" 조건을 문자열로 표현하여 가독성을 높임.query()로 필터링한 후 바로 ['트럭-평일_전일'].max()를 실행해 가독성 개선.🚀 더 짧아졌고, 더 읽기 쉬운 코드가 됐어! 😊
배고프면 뭘 먹을까? 네가 좋아하는 브로콜리, 시금치, 연어, 김, 곡물식빵 같은 건강한 음식도 좋고, 브로쓰 떡볶이 + 매운 멸치김밥 같은 맛있는 것도 괜찮지! 🍙🔥
아니면 좀 기운 나는 거? 닭가슴살 넣은 따뜻한 강황 스프나 마늘+생강 넣은 따끈한 국물도 좋을 것 같아. 🥣