작업 1유형 : 전세계 행복도 지표 데이터

SOOYEON·2022년 5월 20일
0

빅데이터분석기사

목록 보기
11/36

전세계 행복도 지표 데이터

데이터 출처
(참고, 데이터 수정)
데이터 설명 : 전세계 행복도 지표 조사
data url

Q3.

2018년도 데이터들만 추출하여 행복점수와 부패에 대한 인식에 대한 상관계수를 구하여라

# s
df[df['년도'] == 2018]['점수'].corr(df[df['년도'] == 2018]['부패에 대한인식'])

#
df[df.년도==2018][['점수','부패에 대한인식']].corr()

Q4.

2018년도와 2019년도의 행복랭킹이 변화하지 않은 나라명의 수를 구하여라

# s 
df_cnt = df.value_counts(['행복랭킹', '나라명']).to_frame('cnt')
df_cnt[df_cnt['cnt'] ==2].count().values[0]

# len(df[''])
result = len(df[['행복랭킹','나라명']]) - len(df[['행복랭킹','나라명']].drop_duplicates())
print(result)


# .duplicated().sum()
df[['행복랭킹','나라명']].duplicated().sum()

Q5.🌟

2019년도 데이터들만 추출하여 각변수간 상관계수를 구하고 내림차순으로 정렬한 후 상위 5개를 데이터 프레임으로 출력하라. 컬럼명은 v1,v2,corr으로 표시하라

#
df19 = df[df.년도 ==2019].corr().unstack().to_frame().reset_index().dropna()

result = df19[df19[0] !=1].sort_values(0,ascending=False).drop_duplicates(0)
answer = result.head(5).reset_index(drop=True)
answer.columns = ['v1','v2','corr']
display(answer)

Q6.🌟

각 년도별 하위 행복점수의 하위 5개 국가의 평균 행복점수를 구하여라

#.groupby().tail().groupby()
df.groupby('년도').tail(5).groupby('년도')['점수'].mean()
# frame
df.groupby('년도').tail(5).groupby('년도').mean()[['점수']]

Q7.

2019년 데이터를 추출하고 해당데이터의 상대 GDP 평균 이상의 나라들과 평균 이하의 나라들의 행복점수 평균을 각각 구하고 그 차이값을 출력하라

more = df19[df19['상대GDP'] >= df19['상대GDP'].mean()]['점수'].mean()
less = df19[df19['상대GDP'] <= df19['상대GDP'].mean()]['점수'].mean()
res = more-less
res

Q8.

각년도 의 부패에 대한인식을 내림차순 정렬했을때 상위 20개 국가의 부패에 대한인식의 평균을 구하여라

# s
df.sort_values(['년도','부패에 대한인식'], ascending=False).groupby('년도').head(20).groupby('년도')['부패에 대한인식'].mean()

# 
result = df.sort_values(['년도','부패에 대한인식'],ascending=False).groupby('년도').head(20).groupby(['년도']).mean()[['부패에 대한인식']]
print(result)

Q9.🌟

2018년도 행복랭킹 50위 이내에 포함됐다가 2019년 50위 밖으로 밀려난 국가의 숫자를 구하여라

## total
country = df[(df['년도']==2018) & (df['행복랭킹'] < 50)]['나라명'].to_list()

df19_more50 = df[(df['년도']==2019)].sort_values('행복랭킹')[49:]
df19_more50[df19_more50['나라명'].isin(country)]['나라명'].count()

# set
result = set(df[(df.년도==2018) & (df.행복랭킹 <=50)].나라명)  -set(df[(df.년도==2019) & (df.행복랭킹 <=50)].나라명)
answer = len(result)
print(answer)

Q10.🌟

2018년,2019년 모두 기록이 있는 나라들 중 년도별 행복점수가 가장 증가한 나라와 그 증가 수치는?

## total
df1819 = df[df.duplicated('나라명',keep=False)].sort_values('나라명')

df18 = df1819[df1819['년도']==2018].reset_index(drop=True)
df19 = df1819[df1819['년도']==2019].reset_index(drop=True)

df19['diff'] = df19['점수']-df18['점수']
df19.sort_values('diff',ascending=False).iloc[0][['나라명','diff']]

# .index
count = df.나라명.value_counts()
target = count[count>=2].index

df2 =df.copy()
multiple = df2[df2.나라명.isin(target)].reset_index(drop=True)
multiple.loc[multiple['년도']==2018,'점수'] = multiple[multiple.년도 ==2018]['점수'].values * (-1)
result = multiple.groupby('나라명').sum()['점수'].sort_values().to_frame().iloc[-1]
result

0개의 댓글