인사말

오늘은 1시간 일찍 와서 시작했답니당!

그리고

어제부터 Pandas를 통해서 문제를 풀어보았어요!

갈수록 많은 것들을 머리에 집어넣고

복잡한 코드를 짜게 되니까 머리가 아프네요 😖

그래도 해야죠 어떡하겠어요 🤪

오늘도 파이팅입니다!

감기 조심하세요 ㅠㅠ


오전 ( 08 : 00 ~ 13 : 00)

<pivot_table 생성 후 Index 변경하기>

import pandas as pd

# 데이터프레임 예시
data = {
    '날짜': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02'],
    '제품': ['A', 'B', 'A', 'B'],
    '판매': [10, 20, 30, 40]
}

df = pd.DataFrame(data)

# 피벗 테이블 생성
pivot = df.pivot_table(
    values='판매',         # 집계할 값
    index='날짜',          # 행으로 사용할 컬럼
    columns='제품',        # 열로 사용할 컬럼
    aggfunc='sum',         # 집계 함수 (기본값: 'mean' 또는 'sum' 가능)
    fill_value=0           # 결측값을 채울 값
)

print(pivot)

pivot_table을 gpt한테 물어보았어요

피벗 테이블이 저렇게 구성되었군요..!

집계할 때 쓰나봐요!

3번 문제 내용

드래그를 옆으로 하면

소계(검거), 소계(발생)을 하라고 돼 있더라구요

그래서

pivot_table = df.pivot_table(
    values = '' # 집계할 값
    index = '구 별' # 행으로 사용할 컬럼
    columns = '' # 열로 사용할 컬럼
    aggfunc = 'sum' # 집계 함수
    fill_value = '집계할 값 없음'
)

여기까지는 작성하였으나,,

values에 넣을 값이랑 columns에 넣을 값을 모르겠더라구요

pvt = pd.pivot_table(
    dataframe,
    index = '구 별', # 행으로 사용할 컬럼
    aggfunc = 'sum', # 집계 함수
    fill_value = 0, # 결측 값
    #margins = True # 총 계가 생김
)
print(pvt)

그래서

넣지 않았습니다! 🤣

어차피 다 할 건데 굳이 계산하려는 값이랑

열을 정할 필요가 없더라구요

그래서 깔끔하게 없애버리고!

불러올 값들이 있는 파일명인 "dataframe"을 기입해주었습니다

그리고!

굳이 해보았는데 margins = True으로 기입해주면 총 계가 생기게 됩니다

margins는 기본값이 False기 때문에 True로 바꿔줘야 합니다!

 

<Quiz 4_drop 써서 삭제하기>

데이터프레임명.drop([row])

퀴즈 자체에서 코드를 주셨길래

그대로 따라써보았습니다

근데 "구 없음"만 지워야 하잖아요? 🧐

KeyError: "['구 없음'] not found in axis"

엥??

dataframe에는 "구 없음"이 존재한단 말이죠? 🤨

그래서 dataframe 파일 말고,

pivot_table을 끌고 와보았습니다

pvt2 = pvt2.drop(['구 없음'])

원래의 pvt 파일에는 "광진구"와 "구로구" 사이에 "구 없음"이 존재했거든요!

짜잔 - ✨

없애버렸습니다 😎

pivot_table을 기준으로 해야 하는 이유가

저희가 강남서 -> 강남구 이런 식으로 바꾸었잖아요

그 파일을 기준으로 pivot_table을 만들었구요

그래서 데이터의 이 되는 게 "pivot_table"이 된다고 생각합니다!

그래서 pivot_table로 drop 해주니까 변경되네요! 🤪

 

<Quiz 5_각 범죄별 검거율 구하기 및 Columns 추가>

일단은 컬럼을 먼저 추가 해주었어요

검거율은 평균값을 구하고 나눠야 한다 생각을 해서

간단한 컬럼부터 추가해주었습니다

# 컬럼 추가하기
파일명['추가할 컬럼명'] = 시리즈 객체
ex) data['강도 검거율'] = data['강도(발생)'] / dataf['강도(검거)'] * 100
# Quiz 5_컬럼 추가하기 및 검거율 계산
## 리스트로 시도해보려 했으나, 실패

add_value_name = ['강간 검거율','강도 검거율','살인 검거율', '절도 검거율','폭력 검거율', '검거율']
add_value_happen = []
pvt2['강도 검거율'] = pvt2['강도(발생)'] / pvt2['강도(검거)'] * 100
print(pvt2['강도 검거율'])

생성해야 할 컬럼들이 많이 때문에

한 번에 처리하고 싶어서 이리저리 머리를 굴려봤습니다

처음에는 리스트로 시도해보았는데

생각해보니까,, 데이터 파일 자체가 큰 애였다면

리스트로 하기엔 무리라고 생각이 들더라구요 🫠

다른 방법을 생각해보았습니다,,

data['강도 검거율'] = data['강도(발생)'] / data['강도(검거)'] * 100

어쨌거나 이 문장이 반복되어야 한단 말이죠? 🧐

반복..?

반복..!?!?

for문을 가져와보았습니다

for crime in ['강간', '강도', '살인', '절도', '폭력']:

일단 이렇게 만들고 밑에는

for crime in ['강간', '강도', '살인', '절도', '폭력']:
        pvt2[f'{crime} 검거율'] = pvt2[f'{crime}(발생)'] / pvt2[f'{crime}(검거)'] * 100

이렇게 해서 넣어주었어요 (파일 이름 : pvt2)

crime이라는 이름의 리스트를 만들어주었구요

f{} 이렇게 써서 편하게 쓸 수 있어요!

이걸 포매팅이라고 하거든요! 종류가 다양한데,

포매팅은 내일 공부할 겁니다 😎

결과물 아 ~ 주 예뻐서 맘에 들어용 ㅎㅎㅎ


오후 ( 14 : 00 ~ 18 : 00 )

정신없이 찾아보고 물어보고

팀원 분들이랑 소통도 하니까 점심 시간이더라구요

그래서 후다닥 밥 챙겨 먹고,

매니저 님께 git hub 꿀팁 얘기도 듣고 난 후에

남은 문제들 풀어보았습니다!

 

<Quiz 6_필요없는 column을 del을 써서 삭제하기>

삭제 해봅시다 😎

# Quiz 6_del 사용해서 필요없는 컬럼 삭제하기

for delete_columns in ['강간(검거)','강도(검거)','살인(검거)','절도(검거)','폭력(검거)','소계(발생)','소계(검거)']:
    if delete_columns in pvt2:
        del pvt2[f'{delete_columns}']
print(pvt2)

앞서 컬럼을 한 번에 생성했듯이

삭제도 같은 방식으로 해보았어요

되네요..?

됐다고 나오니까 오히려 불안했어요,, 👀

그래서 확인 받으러 튜터 님께 갔죠?

# Quiz 6_del 사용해서 필요없는 컬럼 삭제하기

for delete_columns in ['강간(검거)','강도(검거)','살인(검거)','절도(검거)','폭력(검거)','소계(발생)','소계(검거)']:
    if delete_columns in pvt2:
        del pvt2[delete_columns]
print(pvt2)

수정된 코드입니다

뭐가 달라졌냐구요?

포매팅 중에서 f{}가 있잖아요

그게 print할 때만 쓰는 거라고 하셨어요

그래서 포매팅에 대해서 공부하였습니다..

(내일 제대로 각 잡고 하려고 했는데,, 쩝 👀)

 

< f{}(f-string) 쓰는 방식>

When :  Python에서 문자열을 조작할 때

How : print(f"{}")

Ways :

1. 기본형

  • f를 문자열 앞에 추가
  • {} 안에 변수를 넣으면, 해당 변수의 값이 문자열 안에 삽입됨
# 예시
name = "민경"
score = 95
print(f"이름: {name}, 점수: {score}")
이름: 민경, 점수: 95

 

2. 표현식

x = 5
y = 10
print(f"두 수의 합은 {x + y}입니다.")
두 수의 합은 15입니다.

 

3. 숫자 포매팅 (소수점)

pi = 3.141592653589793
print(f"원주율은 {pi:.2f}입니다.")  # 소수점 2자리로 출력
원주율은 3.14입니다.

.2f는 f는 실수를 의미, 2는 소수점 2자리까지를 의미

 

4. 중첩 변수

name = "Alice"
greeting = f"Hello, {name}!"
message = f"Message: {greeting}"
print(message)

greeting에서 {name}에 들어가는 값을 쓸 거고

message에서 {greeting}의 문장을 쓸 구조로 돼 있어요

Message: Hello, Alice!

 

5. 함수 호출

word = "Python"
print(f"단어 '{word}'의 길이는 {len(word)}입니다.")

함수 len()이 들어가서도 작동이 가능해요!

대신 {len()} 구조로 들어가야 하네요!

단어 'Python'의 길이는 6입니다.

 

6. 할당하기 (=)

x = "배"
y = "민경"
print(f"{x=}, {y=}")  # 변수명과 값 출력

오,, ㅋㅋㅋㅋㅋㅋㅋㅋ

재밌네요! 되게 유용하네요

다양하게 많이 쓰이니까, 신기한 거 같아요

한 번 더 파일명을 언급하지 않아도 된다는 것도 너무 좋구요!

 

<Quiz 7_ rename>

드디어 마지막 문제입니다!!

rename을 해볼게요!

이번에도 for문으로 해결할 겁니다!

# Quiz 7. rename하기

# 1트
for rename_columns in {'강간(발생)':'강간','강도(발생)':'강도','살인(발생)':'살인','절도(발생)':'절도','폭력(발생)':'폭력'}:
     if rename_columns in pvt2:
         pvt2.rename(rename_columns)

될 줄 알았는데 안 되더라구요

# 오류 내용
TypeError: Index(...) must be called with a collection of some kind, '강간(발생)' was passed

타입이 다르대요,,

고칠 줄 아는 정도였으면 좋았을 텐데

도저히 뭐라는지 모르겠어서 그냥 .rename()으로 했습니다.

# 2트
rename_columns_on = pvt2.rename(columns = {'강간(발생)':'강간','강도(발생)':'강도','살인(발생)':'살인','절도(발생)':'절도','폭력(발생)':'폭력'})

print(rename_columns_on)

이게 의문점이 들었던게요

중괄호{}면 딕셔너리란 말이죠?

근데 왜 key가 먼저 들어가지 않고, value가 먼저 들어갔는지

그게 너무 궁금했습니다

일단 결과는 잘 나왔어요 👀

제가 생각하기에는 이미 기존 파일에

key 문자 그대로 잘 들어가 있어서 바로 value로 들어간 거 같아요 🧐

그리고 문제의 문장을 보면 "컬럼명을 rename으로 변경하세요" 잖아요

그래서 앞전에 피벗 테이블을 작성했듯이

'columns도 그대로 집어넣으면 "열로 사용한 컬럼"의 뜻이니까 그대로 되겠지 뭐'

라는 생각으로 그대로 rename 뒤에 집어넣었거든요

근데,, 되네요? 🙄

알다가도 모르겠어요

일단 저렇게도 넣을 수 있구나를 깨달았습니당!


저녁 ( 18 : 00 ~ 19 : 00)

숙제도 이제 다 끝냈기 때문에!

git에 대해서 공부 좀 하고, 생성 하려구요!

git을 어떻게 해야 하는지 전혀 몰라서

팀원 분들이랑 얘기 나눴습니다!

homework라는 공간 속에

숙제한 파일을 넣을 거라서, 팀원 분께 물어봤어요

이렇게 파일을 업로드 하였는데,

폴더를 생성해서 하는 게 어떻냐고 하시더라구요

저기 파란색 칸 보이시나용?

저기에서 슬래시(/)를 쓰면 폴더로 생성되고, 그 뒤로는 파일명으로 되나봐요!

이렇게 생성하면 됩니다!

제출은 내일 하려구요 ㅎㅎ


마무리

오늘 뭔가 휘익 휘익 지나간 거 같아요

이리 치이고 저리 치여서 체력 소모가 컸지만

팀원 분들과 막힐 때마다 소통하고,

튜터 님께 가서 힌트 얻고, 다시 해보고

이걸 반복하니까 너무 재밌었습니당 ㅎㅎㅎ

 

아직 안개가 사라지지 않아서 앞이 잘 보이진 않지만

희미하게라도 앞이 보이는 느낌이에요!

적극적으로 배움을 이어 나가려 해서 제가 너무 좋아요 🥰

주변 분들도 너무 좋구요 히히 🥰

 

한 번 할 거면 제대로 해야죠 히히

내일도 파이팅!!

감사합니당

🐾Recent posts