[250323일122H][자습] 하루종일 문제만 풀었다

윤승호·2025년 3월 23일

몇 문제 풀지 않은 것 같은데 시간이 빨리 지나갔다. 그래도 코드를 한 자씩 적어가며 문제를 푸니 내 것이 된 느낌이다! 호텔 데이터 전처리 할 때는 구글링 하면서 코드를 복붙 했기에 뭔가 기억에서 날아가는 느낌이었는데 말이지... 기초를 다시 한번 잡고 넘어간 하루였다. 뭐든 기초가 중요해 기초가. 결국 후반으로 넘어가면 기초가 잘 잡힌 사람이 이긴다. 코딩 시간은 갈수록 빨라질 것이라 믿는다. 다음 주도 화이팅 해보자!! seaborn만 다루다 보니 matplotlib 문법이 익숙하지 않다. 음식도 편식하면 안 되듯 라이브러리도 편식하면 안 된다는 것을 느낀 하루였다. 하지만 어려운 걸요 ㅠㅠ

학습시간 18:00~00:00(당일6H/누적122H)

1. 오늘 깨달은 것

  • numpy 조건식은 대괄호 안에 넣으면 된다!
numbers_array[numbers_array % 2 == 0]
  • matplotlib 기본 명령어를 외우자 ㅠㅠ
plt.scatter(x=age_array, y=salary_array, c='red', marker='s')
plt.title('Age and Salary')
plt.xlabel('Age')
plt.ylabel('Salary($)')
  • 그냥 df만 볼 때도 원하는 열로 정렬해서 볼 수 있다!
df.sort_values(by=df.columns[0], ascending=False)
  • 여러 조건을 걸어서 행 하나를 찾을 수 있다!
# 수학은 85점, 과학은 56점, 영어는 90점 데이터 찾기
filtered_data = exam_df[(exam_df['math_score'] == 85) & 
                        (exam_df['science_score'] == 56) & 
                        (exam_df['english_score'] == 90)]
  • 히트맵 그리기 전에도 상관관계를 볼 수 있다!
df.corr()
  • annot을 False로 하면 히트맵에서 숫자가 안 보인다!
sns.heatmap(df.corr(), annot=True)

2. 문제풀이

문제 1.

첫 번째 로우에는 가격 정보, 두 번째 로우에는 거래량(천만 기준). 여기서 7월 정보?

import numpy as np

bitcoin_array = np.array([[970, 1180, 1072, 1348, 2286, 2481,
						   2875, 4703, 4339, 6468, 10234, 14156],
						  [514, 428, 1087, 976, 3426, 4448,
						   3262, 6355, 5570, 5801, 14074, 41034]])


# 정답
bitcoin_array[1, 6]

틀렸다. 아 numpy는 대괄호 갯수가 넘 헷갈린다 ㅠ 심지어 이것도 한 번 틀렸다. [[1, 6]]랑 [[1], [6]] 이 둘 중 하나인 줄 알았는데,,,

문제 2.

짝수!

import numpy as np

numbers_array = np.arange(1, 101)


# 정답
numbers_array[numbers_array % 2 == 0]

틀렸다 ㅋㅋㅋㅋㅋㅋㅋㅋ for문으로 돌리는 건 줄 알았는데 아니었음. 힌트 하나 보고 알았다. 대괄호 안에 조건식이 들어가는 거구만!

문제 3.

각 상품별 매출액을 한번 계산해!

import numpy as np

price_array = np.array([30000, 25000, 40000, 60000, 95000, 35000, 50000])
quantity_array = np.array([10, 13, 7, 20, 6, 19, 9])


# 정답
price_array * quantity_array

드디어 하나 맞았네 ㅋㅋㅋㅋㅋㅋㅋ

문제 4.

막대 그래프를 그려!

import numpy as np
import matplotlib.pyplot as plt

sales_array = np.array([10, 13, 8, 15, 6, 11, 4])
category_array = ['skirt', 't-shirt', 'dress', 'sweater', 'coat', 'jeans', 'shoes']


# 정답
plt.bar(category_array, sales_array)

틀림 ㅡㅡ 막대 그래프 하나 못 그리는 나... 계속 seaborn만 써서 그런가 바로 까먹어버렸다.

문제 5.

시각화해!

그래프 제목: Age and Salary
x축 제목: Age
y축 제목: Salary($)
점의 색깔: 빨간색(red)
점의 모양: 네모

import numpy as np
import matplotlib.pyplot as plt

age_array = np.array([
	27, 25, 29, 22, 26, 28, 40, 42, 34, 31,
	37, 36, 40, 32, 41, 47, 52, 49, 51, 50,
	49, 46, 47, 46, 47, 45, 57, 58, 60, 56
])

salary_array = np.array([
	44009, 83450, 95025, 63748, 78652,
	58977, 114733, 126353, 121904, 125083,
	143739, 140754, 144346, 114899, 125806,
	180252, 153374, 171057, 161305, 193786,
	167238, 150157, 179843, 195326, 165849,
	164887, 131372, 135876, 113796, 143050
])


# 정답
plt.scatter(x=age_array, y=salary_array, c='red', marker='s')
plt.title('Age and Salary')
plt.xlabel('Age')
plt.ylabel('Salary($)')
plt.show()

틀림. 진짜 기본적인 건데 생각이 안 난다 ㅋㅋㅋㅋㅋ

문제 6.

손흥민('Son Heung-Min') 선수가 몇 골을 넣었는지?

import pandas as pd

players_df = pd.read_csv('data/tottenham_2021.csv', index_col='name')


# 정답
players_df.loc['Son Heung-Min', 'goals']

틀림 ㅠㅠ 그새 loc함수를 까먹어버림,, 다시 외웠으니까 됐지 뭐!

문제 7.

골을 한 개 이상 넣은 선수들의 데이터?

import pandas as pd

players_df = pd.read_csv('data/tottenham_2021.csv', index_col='name')


# 정답
players_df[players_df['goals'] >= 1]

틀림 ^^ 위에서 배웠는데 그새 까먹음 후,,, 미치겠다

문제 8.

Ben Davies 결측값 29로! team 컬럼 생성 후 Tottenham 값 입력! 손흥민 데이터 추가!
(경기: 35회, 경기 시간: 3051분, 골: 23골, 어시스트: 7회)

import pandas as pd

players_df = pd.read_csv('data/tottenham_2122.csv', index_col='name')


# 정답
players_df.loc['Son Heung-Min'] = [35, 3051, 23, 7]
players_df.loc['Ben Davies', 'matches'] = 29
players_df['team'] = 'Tottenham'
players_df

틀림^^!! 별것 아닌 것 같은데도 은근 헷갈리네...

문제 9.

칼로리 분포를 박스 플롯으로 그려!

import pandas as pd

starbucks_df = pd.read_csv('data/starbucks.csv')


# 정답
starbucks_df['calories'].plot(kind='box')

틀림~ plt.boxplot() 뭐시기인 줄 알았는데 전혀 아니네 ^^...

문제 10.

현대자동차의 가격대 분포!

import pandas as pd

car_df = pd.read_csv('data/car.csv')


# 정답
car_df[car_df['manufacturer'] == 'HYUNDAI']['price'].plot(kind='hist')

틀림!그래도 얼추 맞춤! car_df = car_df['manufacturer' == 'HYUNDAI']['price'].plot(kind='hist') 이렇게 적었는데 ㅠㅠ

문제 11.

net_user_cumsum 그래프 생성!
컬럼: day, register, unregister

import pandas as pd

user_df = pd.read_csv('data/user.csv')


# 정답
user_df['net_user_cumsum'] = user_df['register'] - user_df['unregister']
user_df['net_user_cumsum'] = user_df['net_user_cumsum'].cumsum()
user_df.plot(x='day', y='net_user_cumsum', kind='bar')

틀림 ㅎㅎ 그래도 거의 다 맞췄다. 마지막에 플롯을 그리는데 user_df['net_user_cumsum'].plot 이렇게 넣음ㅠㅠ 이게 은근 헷갈리네...

문제 12.

분기별 정기권 막대 그래프 그려! 영업일 비영업일 나눠서!

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

bike_df = pd.read_csv('data/bike.csv')
sns.set_theme(rc={'figure.figsize': (10, 5)}, style='white')


# 정답
sns.barplot(data=bike_df, x='quarter', y='registered', hue='workingday', errorbar=None)

와 씨!! 나 이거 맞춤!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 난 역시 seaborn에 강함 ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ

문제 13.

월별 기온 정보를 한눈에 볼 수 있는 stripplot을 그려!

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

bike_df = pd.read_csv('data/bike.csv')
sns.set_theme(rc={'figure.figsize': (10, 5)}, style='white')


# 정답
sns.stripplot(data=bike_df, x='month', y='temperature')

또 맞춰버렸죠!?

문제 14.

좌석 클래스별로 항공권의 금액대 분포를 확인할 수 있는 바이올린 플롯 그려!

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

flight_df = pd.read_csv('data/flight.csv')
sns.set_theme(rc={'figure.figsize': (6, 6)}, style='white')


# 정답
sns.violinplot(data=flight_df, x='class', y='price')

이것도 정답! 근데 답지와 코드가 똑같은데 왜 내껀 바이올릿 플롯이 둘 다 파란색이지? seaborn 버전이 달라서 그런가?

문제 15.

흡연자와 비흡연자 insurance_df를 가지고 히스토그램을 그려!

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

insurance_df = pd.read_csv('data/insurance_charge.csv')
sns.set_theme(rc={'figure.figsize': (10, 5)}, style='white')


# 정답
sns.histplot(data=insurance_df, x='charge', hue='smoking', multiple='stack')

정답! 와 멀티플 스택 까먹을 뻔했다...

문제 16.

와인 가격과 평점의 관계를 볼 수 있는 선형회귀 그래프 그려!

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

wine_df = pd.read_csv('data/wine.csv')
sns.set_theme(rc={'figure.figsize': (6, 6)}, style='white')


# 정답
sns.regplot(data=wine_df, x='price', y='points')

이것도 정답! 확실히 seaborn은 무난하다...

문제 17.

insurance_df를 가지고 히트맵 그려!

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

insurance_df = pd.read_csv('data/insurance_premium.csv')
sns.set_theme(rc={'figure.figsize': (8, 6)}, style='white')


# 정답
sns.heatmap(data=insurance_df.corr(), annot=True)

오랜만에 틀렸다. 히트맵 함수 안에 넣는 명령어가 생각이 안 나더라... 히트맵은 반드시 (df.corr(), annot=True) 형식으로 와야한다! 외우자!!

기초통계와 데이터 시각화 문제까지 학습 완료! 알찬 일요일이었다!

profile
나는 AI 엔지니어가 된다.

0개의 댓글