프로그래밍/파이썬

EDA - 2단계 : 실제 데이터 다루기 (4)

매 석 2023. 7. 31. 18:04
반응형

- 출처

 

빅데이터 연합 동아리 BITAmin : 네이버 카페

빅데이터 연합 동아리 비타민입니다.

cafe.naver.com

 

11기 멤버 코테 내용이다.

주피터 노트북을 환경으로 했다.

- 문제1

문제 1 - 20점

 

문제 [1-1] - 3점

2023년 1월 29일, 자신의 이름, MBTI, 핸드폰 번호 뒷자리를 리스트로 저장하고 그것을 Series의 형태로 변환하여 출력하세요

list=['2023-01-29','홍길동','ESFP',0123]
pd.Series(list)

 

문제 [1-2] - 3점

딕셔너리를 사용하여 다음의 DataFrame 모양을 만들어 출력하세요.(DataFrame은 df로 저장해주세요)

data={'사람1':[95,100,90,80],'사람2':[85,85,90,100],'사람3':[80,90,80,90]}
df=pd.DataFrame.from_dict(data, orient='index', columns=['국어','수학','영어','탐구'])
df

문제 [1-3] - 3점

위에서 만들어진 df에서 '탐구'열(column)을 삭제하고 출력하세요.

df=df.drop('탐구',axis=1)
df

문제 [1-4] - 4점

df에 국어, 수학, 영어 3과목의 평균 점수를 나타내는 '평균' 열(column)을 추가하여 출력하세요.(소수점 세번째 자리에서 반올림하여 소수점 둘째자리까지만 나타내세요)

df['평균']=round((df['국어']+df['수학']+df['영어'])/3,2)
df

문제 [1-5] - 7점

'평균'열에 나온 점수를 기준으로 등급으로 변환한 '등급'열을 추가하여 출력하세요(95점 이상 A+, 90점 이상 A, 85점 이상 B+, 80점 이상 B 입니다.)

df['등급']=np.where(df['평균']>=95, 'A+', np.where(df['평균']>=90,'A',np.where(df['평균']>=85,'B+',np.where(df['평균']>=80,'B',''))))
df

 

- 문제2

문제 2 - 25점

문제 [2-1] - 3점
spotify.csv 파일을 불러오고 data 변수에 저장하여 맨 위에 3개 행을 출력하세요.
data=pd.read_csv('spotify.csv')
data.head(3)

 

문제 [2-2] - 3점

data의 열(column) 중에서 'Artist'열에서 고유값의 종류와 갯수를 확인할 수 있는 함수를 사용하여, 다음과 같이 출력하세요.

data['Artist'].value_counts()

 

문제 [2-3] - 5점

'Artist'열에서 아티스트가 BTS인 행들을 찾아 출력하세요.

data.loc[data['Artist']=='BTS']

문제 [2-4] - 7점

'tempo' 열에 대한 히스토그램을 그려주세요.

import matplotlib.pyplot as plt
plt.figure(figsize=(10,5))
plt.hist(data['tempo'],bins=10)
plt.ylabel('frequency')
plt.show()

 

문제 [2-5] - 7점

'Artist'가 BTS이면서 'Tempo'가 평균 이상인 것들을 다음과 같이 출력하세요.

(열(column)은 Rank, Track Name, Artist, tempo만 나오도록 하세요)

a=data.loc[data['Artist']=='BTS']
b=a.loc[data['tempo']>=data['tempo'].mean()]
b=b[['Rank','Track Name','Artist','tempo']]
b

 

 

- 문제3

문제 3 - 20점

(아래 코드를 실행시켜 df1 변수에 저장 후, 시작해주세요)

df1 =pd.DataFrame({'Class': ['IoT','Network', 'Economy','Big Data', 'Cloud'],
                       'Year': [2018, 2017, 2018, 2018, 2019],
                       'Price': [100, 125, 132, 312, 250],
                       'limitStudent': [40, 40, 40, 40, 40],
                       'Location': ['Korea','Korea', 'Korea', 'US','Korea']},
                      index=['C01','C02','C03', 'C04', 'C05'])
df1

 

문제 [3-1] - 2점

C02, C03 강의의 Class, Year 열(column)을 출력하세요.

df1 =pd.DataFrame({'Class': ['IoT','Network', 'Economy','Big Data', 'Cloud'],
                       'Year': [2018, 2017, 2018, 2018, 2019],
                       'Price': [100, 125, 132, 312, 250],
                       'limitStudent': [40, 40, 40, 40, 40],
                       'Location': ['Korea','Korea', 'Korea', 'US','Korea']},
                      index=['C01','C02','C03', 'C04', 'C05'])
df1
df2=df1[['Class','Year']].loc[['C02','C03']]
df2

 

문제 [3-2] - 3점

Year 열(column)에서 년도가 2018년도 혹은 2019년도에 개설된 Class 를 출력하세요.

df3=df1.loc[(df1['Year']==2018) | (df1['Year']==2019)]
df3['Class']

 

문제 [3-3] - 5점

강의 별 price 에 대한 세로형 막대 그래프를 출력하세요.

plt.figure(figsize=(10,5))
plt.bar(df1.index,df1['Price'],width=0.5)
plt.xticks(rotation=90)
plt.show()

문제 [3-4] - 10점

priceLevel 열(column)을 추가하고 Price 열(column)의 값이 200보다 크거나 같으면 'High', 200 보다 작으면 'Low'를 할당하여 출력하세요.

이 때, get_priceLevel() 함수를 생성하여 priceLevel열의 값들을 추가하세요.

def get_priceLevel():
    df1['priceLevel']=np.where(df1['Price']>=200,'High','Low')
get_priceLevel()
df1

 

 

- 문제4

문제4 - 20점

문제 [4-1] - 2점

titanic.csv 를 titanic 변수에 저장하여 불러와주세요.

titanic=pd.read_csv('titanic.csv')
titanic

문제 [4-2] - 2점

결측값을 확인하세요.

titanic.isnull()

 

문제 [4-3] - 4점

변수 Ticket, Cabin을 제거하세요.

titanic.drop(['Ticket','Cabin'], axis=1)

 

문제 [4-4] - 6점

age 변수의 결측값을 중간값으로 채워넣으세요.

titanic['Age'].fillna(df.median(numeric_only=True))
titanic

 

문제 [4-5] - 6점

'Embarked' 변수의 결측값을 'S'로 채워넣으세요.

titanic['Embarked'].fillna('S')
titanic

 

 

- 문제5

 

문제 5 - 15점

문제 [5-1] - 3점
인구수예제.xlsx를 data_p로 불러온 후, 위에서부터 5행을 출력하세요.
data_p=pd.read_excel('인구수예제.xlsx')
data_p.head(5)

 

문제 [5-2] - 5점

연도별/도시별 총인구수를 구하세요.

data_p.groupby(['연도','도시'])['총인구'].sum()

 

문제 [5-3] - 7점

도시/자치구별 평균 남자인구수와 여자인구수를 구하세요.

data_p.groupby(['도시','자치구'])[['남자인구','여자인구']].mean()