kaggle in Korea(data둘러보기)

#How popular is kaggle in South Korea?



data 정제하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
df21_Ko = df21[df21['Q3'] == 'South Korea']
df21_Wo = df21[~(df21['Q3'] == 'South Korea')]
df21['region']=["Korea" if x == 'South Korea' else "World" for x in df21['Q3']]
df21['region'].value_counts()

df20_Ko = df20[df20['Q3'] == 'South Korea']
df20_Wo = df20[~(df20['Q3'] == 'South Korea')]
df20['region']=["Korea" if x == 'South Korea' else "World" for x in df20['Q3']]
df20['region'].value_counts()

df19_Ko = df19[df19['Q3'] == 'South Korea']
df19_Wo = df19[~(df19['Q3'] == 'South Korea')]
df19['region']=["Korea" if x == 'South Korea' else "World" for x in df19['Q3']]
df19['region'].value_counts()

df18_Ko = df18[df18['Q3'] == 'South Korea']
df18_Wo = df18[~(df18['Q3'] == 'South Korea')]
df18['region']=["Korea" if x == 'South Korea' else "World" for x in df18['Q3']]
df18['region'].value_counts()

df17_Ko = df17[df17['Country'] == 'South Korea']
df17_Wo = df17[~(df17['Country'] == 'South Korea')]
df17['region']=["Korea" if x == 'South Korea' else "World" for x in df17['Country']]
df17['region'].value_counts()

<<<<<<< HEAD

World 25615
Korea 359
Name: region, dtype: int64

World 19847
Korea 190
Name: region, dtype: int64

World 19536
Korea 182
Name: region, dtype: int64

World 23672
Korea 188
Name: region, dtype: int64

World 16522
Korea 194
Name: region, dtype: int64
=======


2021

  • World 25615
  • Korea 359
  • Name: region, dtype: int64

2020

  • World 19847
  • Korea 190
  • Name: region, dtype: int64

2019

  • World 19536
  • Korea 182
  • Name: region, dtype: int64

2018

  • World 23672
  • Korea 188
  • Name: region, dtype: int64

2017

  • World 16522
  • Korea 194
  • Name: region, dtype: int64

trouble shooting

data 정제를 하다 보니 전체 data에서 korea가 1% 밖에 되지 않아 data set을 더 추가 하기로 했다.

##동아시아
East Asia

Ref. East Asia

동아시아

  • East Asia에는 대한민국, 일본, 중국, 타이완, 몽골, 북조선 총 6개의 국가가 속해 있다.
  • 알 수 없지만, 18년도엔 타이완이 없다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
## East Asia에는 대한민국, 일본, 중국, 타이완, 몽골, 북조선 총 6개의 국가가 속해 있다. 
## 알 수 없지만, 18년도엔 타이완이 없다.

EastAsia17 = ['China',"People 's Republic of China", 'Taiwan', 'South Korea', 'Japan']
EastAsia18= ['China', 'South Korea', 'Japan', 'Republic of Korea']
EastAsia19 = ['China','Taiwan', 'South Korea', 'Japan', 'Republic of Korea']
EastAsia20 = ['China','Taiwan', 'South Korea','Republic of Korea', 'Japan']
EastAsia21 = ['China','Taiwan', 'South Korea', 'Japan']


EastAsia = ['Republic of Korea','China','Taiwan', 'South Korea', 'Japan', "People 's Republic of China" ]

df21_Ea = df21[df21['Q3'].isin(EastAsia)]
df21_Wo = df21[~df21['Q3'].isin(EastAsia )]
df21['region']=["EastAsia" if x in EastAsia else "World" for x in df21['Q3']]

df20_Ea = df20[df20['Q3'].isin(EastAsia)]
df20_Wo = df20[~df20['Q3'].isin(EastAsia )]
df20['region']=["EastAsia" if x in EastAsia else "World" for x in df20['Q3']]

df19_Ea = df19[df19['Q3'].isin(EastAsia)]
df19_Wo = df19[~df19['Q3'].isin(EastAsia )]
df19['region']=["EastAsia" if x in EastAsia else "World" for x in df19['Q3']]

df18_Ea = df18[df18['Q3'].isin(EastAsia)]
df18_Wo = df18[~df18['Q3'].isin(EastAsia )]
df18['region']=["EastAsia" if x in EastAsia else "World" for x in df18['Q3']]

df17_Ea = df17[df17['Country'].isin(EastAsia)]
df17_Wo = df17[~df17['Country'].isin(EastAsia )]
df17['region']=["EastAsia" if x in EastAsia else "World" for x in df17['Country']]


#df21['region'].to_frame().value_counts().to_frame().rename(columns={'region': '21y', '' : 'count'})

21년도 를 .value_counts()로 뽑아 냈다.

region_df21

1%대는 아니지만, 이제 10%대 data를 뽑아 냈다.

이것이 어떤 의미가 있을지 모르겠지만, 일단 주말동안 이 data로 궁금한 것을 Graph로 만들어 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# % 계산을 위해 len() 을 통해 data 생성.

Ea21 = len(df21_Ea)
Wo21 = len(df21) - len(df21_Ea)

Ea20 = len(df20_Ea)
Wo20 = len(df20) - len(df20_Ea)

Ea19 = len(df19_Ea)
Wo19 = len(df19) - len(df19_Ea)

Ea18 = len(df18_Ea)
Wo18 = len(df18) - len(df18_Ea)

Ea17 = len(df17_Ea)
Wo17 = len(df17) - len(df17_Ea)


def percent (a, b):
result =a/(a+b)*100
return result

def percentR (b, a):
result =a/(a+b)*100
return result

country = ['East Asia', 'Rest of the World']

years = ['2017', '2018', '2019', '2020', '2021']

fig = go.Figure(data=[
go.Bar(name='Rest of the World', x=years, y=[percentR(Ea17, Wo17), percentR(Ea18, Wo18), percentR(Ea19, Wo19),
percentR(Ea20, Wo20), percentR(Ea21, Wo21)]),
go.Bar(name='East Asia', x=years, y=[percent(Ea17, Wo17), percent(Ea18, Wo18), percent(Ea19, Wo19),
percent(Ea20, Wo20), percent(Ea21, Wo21)])
])

fig.update_layout(barmode='stack')
fig.show()

일단, plot은 뽑아 보았는데 이래도 되나 싶다 ^^ 하하

노동력을 더해서 대륙 별로 뽑던지 해야겠다 ㅂㄷㅂㄷ

SrackFig1

072bc76c34c0f369e5fe7e814291408da6a83ffc

kaggle in Africa_Fig

1. Introduction

Helper functions


1.1 horizontal bar graphs

Graph의 code 의 경우 해당 data와 연동해서 한꺼번에 보기로 한다.

< plot의 종류 >

  1. plotly_hBar (df, q, title, height=400,l=250,r=50,b=50,t=100,)
  2. plotly_vBar(df, q, title, l=50,r=50,b=50,t=100)
  3. head_count(df, question_num, parts):
    1. head_count function copied from
  4. df_with_percentages(df, q, n, region)
  5. plot_barH_percent(df1, df2, title, l=150, r=50, b=50, t=100)
  6. annotated_heatmap(df_w, df_a, title, width=850)
  7. categorical_scatter(df1, df2, title, l=150, r=50, b=50, t=100)
  8. annotated_heatmap_Trans(df_w, df_a, title, width=850, height=750, l=150)
  9. head_count_suf(df, question_num, part, n)
  10. df_with_percentages_suf(df, q, part, n, region)




위의 코드의 경우 쓰여지지 않은 코드도 있는 것 같지만, 일단 List UP 해 놓음.





1.2 grouping african countries

1.2.1 연도 별 Africa 국가 이름 df

1
2
3
4
5
6
africa17 = ['Nigeria','Kenya', 'South Africa', 'Egypt']
africa18 = ['Nigeria','Kenya', 'South Africa', 'Egypt', 'Tunisia', 'Morocco']
africa19 = ['Nigeria','Kenya', 'South Africa', 'Egypt', 'Tunisia', 'Morocco', 'Algeria']
africa20 = ['Nigeria','Kenya', 'South Africa', 'Egypt', 'Tunisia', 'Morocco', 'Ghana']
africa21 = ['Nigeria','Kenya', 'South Africa', 'Egypt', 'Tunisia', 'Morocco', 'Algeria', 'Ghana', 'Uganda', 'Ethiopia']

  • 아마도 직접 수기로 찾은 것 같다.

1.2.2 국가 이름 확인

  • pd.isin(): List에 존재하는 요소가 대상 dataFrame, series에 존재 여부를 Boolean type으로 반환.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
africa = ['Nigeria', 'Egypt', 'South Africa', 'Algeria', 'Tunisia', 'Morocco', 'Kenya', 'Uganda', 'Ghana', 'Ethiopia']

df21_africa = df21[df21['Q3'].isin(africa)]
df21_world = df21[~df21['Q3'].isin(africa )]
df21['region']=["Africa" if x in africa else "World" for x in df21['Q3']]

df20_africa = df20[df20['Q3'].isin(africa)]
df20_world = df20[~df20['Q3'].isin(africa )]
df20['region']=["Africa" if x in africa else "World" for x in df20['Q3']]

df19_africa = df19[df19['Q3'].isin(africa)]
df19_world = df19[~df19['Q3'].isin(africa)]
df19['region']=["Africa" if x in africa else "World" for x in df19['Q3']]

df18_africa = df18[df18['Q3'].isin(africa)]
df18_world = df18[~df18['Q3'].isin(africa)]
df18['region']=["Africa" if x in africa else "World" for x in df18['Q3']]

df17_africa = df17[df17['Country'].isin(africa)]
df17_world = df17[~df17['Country'].isin(africa )]
df17['region']=["Africa" if x in africa else "World" for x in df17['Country']]

‘africa’라는 배열을 만들어 df를 새로 정의

  • 17’~21’까지 같은 내용이므로 21’의 내용만으로 정리

0> df21 data 확인

df21

1> df21[‘Q3’]의 내용은 당신의 나라는 어디 입니까?

df21_Q3

2> 따라서 “ df21[‘Q3’].isin(africa) “ 코드의 의미는 Q3의 대답이 africa 이면 True 반환.

3> 결론적으로 Q3의 대답이 Africa[]인 모든 대답을 추출 하게 된다.

4> 반대로 dfworld의 경우 ~ ( not )을 사용하여 Q3이 false인 data frame을 추출 할 수 있는것.

1.2.3 region column을 추가

1
df21['region']=["Africa" if x in africa else "World" for x in df21['Q3']]

df21 dataframe에 Region이라는 column 을 추가해 보자.

region 컬럼에 들어갈 값은

  1. List의 끝까지 반복하되, 만약 df21[‘Q3’]의 값이 africa에 해당하면 “Africa”, 그 밖의 경우는 world를 입력해라.

df21_Q3

Africa_Region

data science를 잘 하려면, python 문법도 잘 알아야 할 듯.