[내일배움캠프] DAY17

채은·2025년 12월 19일

1. 라이브세션 코드필사
2. 시각화 심화 라이브 세션
3. 파이썬 개인 과제 피드백
4. 코드 스터디
5. 코드카타

.
.
.

1. 라이브세션 코드필사

sort_values

df_sorted = df.sort_values(by=['부서','연봉'], ascending=[True, False])

2개 이상이면 대괄호 씌우기. 컬럼명이랑 정렬조건 둘다!

groupby

집계함수 여러개 쓰고 싶으면 그냥 쭈루룩 적으면 됨.

transform

groupby+transform-> 기존 테이블의 행 유지

Concat

axis=1 ---> 좌우연결 , axis=1 ---> 상하
상하 연결에서 ignore_index=True 하면? concat된 테이블에서 다시 인덱스 매김

종합실습

dates=pd.date_range(start='2024-01-01',periods=len(df), freq='D')
ㄴ freq='D' -> 하루간격(D=Day)


df['month']=df['order_date'].dt.month_name()
                      month 말고도 되는 거 많음
                      
                      
report=df_final.groupby('day')[['total_bill','tip']].agg(['mean','max'])
                day에 따라 묶고  요 두가지 컬럼이 정렬기준이며  평균,최대값을 볼 거다

value_counts

열의 각 값(value)에 대한 모든 횟수를 반환
value_counts의 활용 방법들 ->
일단 NaN 값 확인도 가능함

Pyplot

plt.figure(figsize=(6, 4))             # 1. 캔버스 크기 설정 (생략 가능)
plt.bar(day_counts.index, day_counts.values) # 2. 그래프 그리기
plt.title("요일별 손님 수 (plt 방식)")  # 3. 제목 달기
plt.xlabel("요일")                     # 4. 축 이름
plt.ylabel("빈도")
plt.show() 


여기서 사실 
plt.bar(day_counts.index, day_counts.values)
이것만 입력해도 그래프는 나옴

fig, ax

그래프 여러개 그릴 때

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 4))
 나 여러개 할거야        배치는 한줄에 두개 해줘
 
 nrows=1, ncols=2 -> 가로로 배치 ㅁㅁ
 
nrows=2, ncols=1 -> 세로로 배치 ㅁ
                               ㅁ

첫번째 그래프에 대한 설정을 하고 싶다? axes[0]
인덱스 쓰던 개념 그대로 적용하면 됨.

df[’column’].plot() 스타일

df.plot(kind='그래프종류') 혹은 df.plot.그래프종류() 하면 알아서 해줌

예시
tips['day'].value_counts().plot(kind='bar', figsize=(6, 4), color='orange', rot=0)

plt.title("요일별 데이터 개수 (Pandas Plot)")

matplotlib 그래프 종류 보러가기

plt.show()

갑자기 든 의문. plt.show() 안해도 그래프 나오는데 굳이 왜 입력해줘야 하지?
그래서 gpt한테 물어봄

알고보니 코랩이 알아서 센스있게 출력해주고 있었던 거였다...! 따봉코랩아 고마워~
사실 거의 코랩을 쓸 것 같긴한데 그래두 알아두기. plt.show()는 입력해주자~

그리고 새로 알게 된 사실. 함수에 괄호를 빼고 코랩에 입력하면 해당 함수에 대해서 설명해줌. 그리고 실수로 괄호를 빼먹고 plt.show만 입력했다가 알게 됨.


2. 시각화 심화 라이브 세션

docs 가볍게 훑어보면서 어떤 형식의 그래프들 있는지 파악하기


3. 파이썬 개인 과제 피드백

3-2

def equipment_code_decoder(code_list):
    num_code = {'영':0,'일':1,'이':2,'삼':3,'사':4,
               '오':5,'육':6,'칠':7,'팔':8,'구':9}
    for code in code_list:
      for char in code:    
        if char in num_code.keys():    
         code = code.replace(char,str(num_code[char]))
        else:
         code = code
      print(code)


# 설비 코드 목록
code_list = [
    "삼5이사",
    "0오6칠",
    "48삼구",
    "이74팔",
    "9일이삼"
]

# 코드 변환 함수 실행
equipment_code_decoder(code_list)

이번에는 replace랑 딕셔너리 사용해서 풀이해ㅐ봤다

3-3

import math
# 장비별 이동 거리 계산 함수

def calculate_single_distance(machine_positions):
    for machine, position in machine_positions.items():
      x1, y1 =position[0]      
      x2, y2 =position[1]      
      distance = math.sqrt((x2-x1)**2 + (y2-y1)**2)

      print(f"{machine}의 이동 거리: {distance:.2f} 미터")

 # 장비별 위치 데이터
machine_positions = {
    "Machine A": [(0, 0), (5, 5)],
    "Machine B": [(2, 2), (6, 8)],
    "Machine C": [(0, 0), (3, 4)]
}

# 이동 거리 계산 실행
calculate_single_distance(machine_positions)

사실 과제할 당시엔 전혀 이해 못하고 답안을 작성했었다.
어디 블로그에 비슷한 연습문제가 있어서 그걸 거의 베끼듯이 코드를 작성했었는데 그걸 지금 다시 읽어보니 이 문제에 적용하기엔 꽤나 비효율적인 코드였다..
이번에 좀 더 생각을 하고 풀어서 그런지 그것보단 짤막해졌다(물론 더 짧은 코드도 있겠지만...! ^^7)


4. 코드 스터디

५✍(。_。*)


5. 코드카타

def solution(num):
    repeat = 0
    while num != 1 and repeat<=500:
        if num%2 == 0:
            num=num/2    
        else:
            num=num*3+1
    
        repeat += 1

    if num == 1:
        return repeat
    else:
        return -1

오랜만에 while을 사용하는 문제. 문제를 보면서 while을 써야할 것 같다는 생각은 들었는데 어떻게 쓰는지는 완전히 까먹어서 다시 찾아보고 풀었다. 다른 사람들 풀이도 봤는데 이 문제는 다들 비슷하게 풀었다.


오늘의 소감
오늘 역대급으로 코드많이 본 날인것 같다. 코드 필사하고, 문제풀고, 함수 검색하고...
그리고 정말 눈꺼풀이 정말 무거웠다. 손가락을 쉬면 자꾸 눈이 감겨서 정신이 없었다...ㅋㅋ큐ㅜ
하지만 그렇다면 손가락을 안 쉬면 됨~

새롭게 알게된 점 & 어려웠던 점
오늘 코드카타 문제가 어려웠다. 조건 자체가 여태까지 푼 문제 중에 제일 복잡한 느낌이었다. 그래도 while문 적용해서 차근차근 해보니까 어떻게든 풀려서 뿌듯하기도 했다~

내일의 목표
zep 한번 들어가기
과제 끝내기
팀원들이 추천해준 자료 읽기
이거 다 주말에 끝내기

profile
내일배움캠프 사전교육 수강중

0개의 댓글