kaggle in Africa_barH(1-1)

1. Figure


Helper functions

Kgg_Africa 에서는 python 문법 중에서 함수를 만드는 def 을 이용하여 plot들을 정의 해 놓았다.

def 함수명(매개변수):
  <수행할 문장1>
  <수행할 문장2>
  ...

ref. python_Function/Ko.

1.1 horizontal bar graphs

다음 results plot 을 뜯어보며 bar-H를 해석 해 보자.

  1. How does Africa compares with rest of the world?
    1. (Region(Q3)) 응답자 수(Africa/전체, 2021): bar-H

먼저, hBar는 다음과 같이 정의 되었다.

그동암 bar-H에대한 많은 부분을 공부 했으므로 간단히 함수를 중심으로 뜯어 보자.

plotly.express.histogram

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
41
42
43
44
def plotly_hBar(df, q, title, height=400,l=250,r=50,b=50,t=100,):   
fig = px.histogram(df.iloc[1:],
y=q,
orientation='h',
width=700,
height=height,
histnorm='percent',
color='region',
color_discrete_map={
"Africa": "gold", "World": "salmon"
},
opacity=0.6
)

fig.update_layout(title=title,
font_family="San Serif",
bargap=0.2,
barmode='group',
titlefont={'size': 28},
paper_bgcolor='#F5F5F5',
plot_bgcolor='#F5F5F5',
legend=dict(
orientation="v",
y=1,
yanchor="top",
x=1.250,
xanchor="right",)
).update_yaxes(categoryorder='total ascending')

fig.update_traces(marker_line_color='black',
marker_line_width=1.5)
fig.update_layout(yaxis_title=None,yaxis_linewidth=2.5,
autosize=False,
margin=dict(
l=l,
r=r,
b=b,
t=t,
),
)
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)
fig.show()

  1. def plotly_hBar(df, q, title, height=400,l=250,r=50,b=50,t=100,)
    • 함수 plotly_hBar의 정의
    • df, q, title등의 변수를 선언하고 값을 정해줌.
  2. fig 정의
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    fig = px.histogram(df.iloc[1:], 
    y=q,
    orientation='h',
    width=700,
    height=height,
    histnorm='percent',
    color='region',
    color_discrete_map={
    "Africa": "gold", "World": "salmon"
    },
    opacity=0.6
    )
  • plotly.express.histogram()
    • plotly의 express Library를 이용하여 histogram을 그려본다.
      • df.iloc[1:]
        • dataframe으로 iloc을 이용하여 컬럼을 가져옴 1행에서부터 끝까지
      • y= q,
        • 나중에 q변수만 정해서 넣어주면 G가 그려진다.
      • orientation= ‘h’,
        • orientation이 h일땐, x
        • orientation이 v일땐, y
        • 를 하라고 공식문서에 써있는데 왜 얘는 이랬는지 알 수 없음 + Histogram plot ???.
      • height = ‘height’,
        • plot의 높이 지정 height=400이라고 함수 정의때 이미 지정 됨.
      • color = ‘region’,
        • 색은 region이라는 변수가 어떤것이냐에 따라 달라짐
      • color_discrete_map={“Africa”: “gold”, “World”: “salmon”},
        • dictionary처럼 Indexing 해 줌.
      • opacity = 0.6
        • 불 투명함의 정도 (0~1, flot)

color_discrete_map
color_discrete_sequence 의 차이
dict with str keys and str values (default {}) ,
(list of str)

plotly.express

  1. fig.update_layout()
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    fig.update_layout(title=title, 
    font_family="San Serif",
    bargap=0.2,
    barmode='group',
    titlefont={'size': 28},
    paper_bgcolor='#F5F5F5',
    plot_bgcolor='#F5F5F5',
    legend=dict(
    orientation="v",
    y=1,
    yanchor="top",
    x=1.250,
    xanchor="right",)
    ).update_yaxes(categoryorder='total ascending')

fig.update_layout() :

kaggle :HorizontalBar (Q7)

kaggle dictation (06)




plotly.graph_objects as go: 를 이용한 bar graph

HorizontalBar plot /가로 막대 차트

0. data set

https://www.kaggle.com/miguelfzzz/the-typical-kaggle-data-scientist-in-2021



Subject : 가장 많이쓰는 programming 언어_Horizontal bar

1. data 읽어오기


Q7에는 sub가 많기 때문에 python 구문을 이용하여
‘Q7’ 이 붙어있는 컬럼 불러오기.


languages_cols = [col for col in df if col.startswith(‘Q7’)]

col 1부터 df 끝까지

Q7로 시작하는지 확인하여 true 일 때만 데이터 가져오기

1
languages_cols = [col for col in df if col.startswith('Q7')]



2. data Frame 만들어 주기

algorithms 에 data frame을 씌워서 표를 만들고, 이름을 다음과같이 바꿔줌.

1
2
3
4
5
languages = df[languages_cols]

languages.columns = ['Python', 'R', 'SQL', 'C', 'C++', 'Java',
'Javascript', 'Julia', 'Swift', 'Bash',
'MATLAB', 'None', 'Other']

languages.columns



3.표 설정.
1
2
3
4
5
6
7
8
languages = (
languages
.count()
.to_frame()
.reset_index()
.rename(columns={'index':'Languages', 0:'Count'})
.sort_values(by=['Count'], ascending=False)
)

languages


  1. .count() :coulumn 수 세기
  2. .to_frame() : frame 생성
  3. .reset_index() : 원본과 상관없는 Index 생성
  4. .rename()
    1. columns의 이름을 지정 : ‘index’:’Languages’, 0:’Count’
  5. .sort_values()
    1. by=[‘Count’], ascending=False
    2. Count 기준으로 내림차순으로 정렬


3. percent 추가

1
languages['percent'] = ((languages['Count'] / len(df))*100).round(2).astype(str) + '%'


표에 ‘percent’를 추가
algorithms의 count에 df의 length로 나누고 *100을 하는 전형적인 % 나타내기

값자체에 %를 입력하여 나중에 %를 추가 입력하지 않아도 됨

소숫점 자리 2까지 반영(반올림).
type 자체를 String으로 하여 추가 계산은 불가능.



4. 색 지정

1
2
3
4
5
6
7
8
9
10
11
colors = ['#033351',] * 13
colors[0] = '#5abbf9'
colors[1] = '#5abbf9'
colors[2] = '#0779c3'
colors[3] = '#0779c3'
colors[4] = '#0779c3'
colors[5] = '#0779c3'
colors[6] = '#0779c3'
colors[7] = '#05568a'
colors[8] = '#05568a'
colors[9] = '#05568a'


5. bar Graph 만들기

1
2
3
4
5
6
7
fig = go.Figure(go.Bar(
x=algorithms['Count'],
y=algorithms['Algorithms'],
text=algorithms['percent'],
orientation='h',
marker_color=colors
))

horizontal과 vertical Graph의 차이는 x, y axis를 바꾸어 주는 것과

orientation=’h’ 을 넣어 주는 것의 차이.

Leng_go.Bar




6. update_traces()

traces() 수정 : Trace에 대한 설정

1
2
3
4
5
6
fig.update_traces(texttemplate='%{text}', 
textposition='outside',
cliponaxis = False,
hovertemplate='<b>Lenguage</b>: %{y}<br><extra></extra>'+
'<b>Count</b>: %{x}',
textfont_size=12)
  1. texttemplate : text type
  2. textposition : ‘outside’ _ 설정 해 주지 않은 경우 칸에 따라 적당히 들어감.
  3. cliponaxis = False : text가 칸이 작아서 짤리는 경우를 막아주는 기능 (off)
  4. hovertemplate :
    1. 마우스 On하면 (커서를 위에 대면) 나오는 Hovert에대한 설정.
  5. textfont_size : 폰트 size



7. Design

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)

fig.update_layout(showlegend=False,
plot_bgcolor='#F7F7F7',
margin=dict(pad=20),
paper_bgcolor='#F7F7F7',
height=700,
xaxis={'showticklabels': False},
yaxis_title=None,
xaxis_title=None,
yaxis={'categoryorder':'total ascending'},
title_text="Most Commonly Used <b>Programming Languages</b>",
title_x=0.5,
font=dict(family="Hiragino Kaku Gothic Pro, sans-serif", size=17, color='#000000'),
title_font_size=35)
  1. Grid Delete

  1. update_layout
    1. showlegend=False,
    2. plot_bgcolor=’#F7F7F7’
    3. margin=dict(pad=20),
      1. padding20
    4. paper_bgcolor=’#F7F7F7’,
    5. xaxis={‘showticklabels’: False},
      1. x 축 labels을 삭제.
    6. yaxis_title=None,
    7. xaxis_title=None, yaxis={‘categoryorder’:’total ascending’},
      1. y 축 title을 categoryorder : 정렬
    8. title_text=”Most Commonly Used Algorithms“,
    9. title_x=0.5,
    10. font=dict(family=”Hiragino Kaku Gothic Pro, sans-serif”, size=15, color=’#000000’),
             title_font_size=35)
      


8. Annotation

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
fig.add_annotation(dict(font=dict(size=14),
x=0.98,
y=-0.13,
showarrow=False,
text="@miguelfzzz",
xanchor='left',
xref="paper",
yref="paper"))

fig.add_annotation(dict(font=dict(size=12),
x=0,
y=-0.13,
showarrow=False,
text="Source: 2021 Kaggle Machine Learning & Data Science Survey",
xanchor='left',
xref="paper",
yref="paper"))

fig.show()

Leng_Final_HB

kaggle :HorizontalBar (Q9)

kaggle dictation (04)




plotly.graph_objects as go: 를 이용한 bar graph

HorizontalBar plot /가로 막대 차트

0. data set

https://www.kaggle.com/miguelfzzz/the-typical-kaggle-data-scientist-in-2021



Subject : 어떤알고리즘을 선호 하는 지 알아보는 Horizontal bar

1. data 읽어오기

1
2
3
4
5
6
# Features that start with Q7
ide_cols = [col for col in df if col.startswith('Q9')]

ide = df[ide_cols]

print(ide)

print(ide)

list comprehension
for문으로 돌린 data값을 전부 col로 받아와서
그 값을 또 ide_cols에 싣는 한줄로 이루어진 코드.

2. data Frame 만들어 주기

ide를 dataframe화 완료.

1
2
3
ide.columns = ['JupyterLab', 'RStudio', 'Visual Studio', 'VSCode', 
'PyCharm', 'Spyder', 'Notepad++', 'Sublime Text', 'Vim, Emacs, or similar',
'MATLAB', 'Jupyter Notebook', 'None', 'Other']

Q9의 column이름 재 설정.



3.표 설정.
1
2
3
4
5
6
7
8
ide = (
ide
.count()
.to_frame()
.reset_index()
.rename(columns={'index':'IDE', 0:'Count'})
.sort_values(by=['Count'], ascending=False)
)


3. percent 추가

1
ide['percent'] = ((ide['Count'] / len(df))*100).round(2).astype(str) + '%'


4. 색 지정

1
2
3
4
5
6
7
8
9
colors = ['#033351',] * 13
colors[0] = '#5abbf9'
colors[1] = '#5abbf9'
colors[2] = '#0779c3'
colors[3] = '#0779c3'
colors[4] = '#0779c3'
colors[5] = '#0779c3'
colors[6] = '#0779c3'
colors[7] = '#0779c3'


5. bar Graph 만들기

1
2
3
4
5
6
7
fig = go.Figure(go.Bar(
x=ide['Count'],
y=ide['IDE'],
text=ide['percent'],
orientation='h',
marker_color=colors
))


6. update_traces()

1
2
3
4
5
6
fig.update_traces(texttemplate='%{text}', 
textposition='outside',
cliponaxis = False,
hovertemplate='<b>IDE</b>: %{y}<br><extra></extra>'+
'<b>Count</b>: %{x}',
textfont_size=12)


7. Design

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)

fig.update_layout(showlegend=False,
plot_bgcolor='#F7F7F7',
margin=dict(pad=20),
paper_bgcolor='#F7F7F7',
xaxis={'showticklabels': False},
yaxis_title=None,
height = 600,
xaxis_title=None,
yaxis={'categoryorder':'total ascending'},
title_text="Most Commonly Used <b>IDE's</b>",
title_x=0.5,
font=dict(family="Hiragino Kaku Gothic Pro, sans-serif", size=15, color='#000000'),
title_font_size=35)


8. Annotation

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
fig.add_annotation(dict(font=dict(size=14),
x=0.98,
y=-0.17,
showarrow=False,
text="@miguelfzzz",
xanchor='left',
xref="paper",
yref="paper"))

fig.add_annotation(dict(font=dict(size=12),
x=0,
y=-0.17,
showarrow=False,
text="Source: 2021 Kaggle Machine Learning & Data Science Survey",
xanchor='left',
xref="paper",
yref="paper"))


fig.show()


kaggle :HorizontalBar (Q17)

kaggle dictation (03)




plotly.graph_objects as go: 를 이용한 bar graph

HorizontalBar plot /가로 막대 차트

0. data set

https://www.kaggle.com/miguelfzzz/the-typical-kaggle-data-scientist-in-2021



Subject : 어떤알고리즘을 선호 하는 지 알아보는 Horizontal bar

1. data 읽어오기

algorithms_cols에 data frame을 먼저 만들고 시작.
잘 모르겠지만 아마도 Q17이 붙은 data를 선택 하기 위한 code

algorithms_cols = [col for col in df if col.startswith(‘Q17’)]

col 1부터 df 끝까지

Q17로 시작하는지 확인하여 true일때만 데이터 가져오기

ref.

How to select dataframe columns that start with *** using pandas in python ?

1
2
algorithms_cols = [col for col in df if col.startswith('Q17')]



2. data Frame 만들어 주기

algorithms 에 data frame을 씌워서 표를 만들고, 이름을 다음과같이 바꿔줌.

1
2
3
4
5
6
7
8

algorithms = df[algorithms_cols]

algorithms.columns = ['Linear or Logistic Regression', 'Decision Trees or Random Forests',
'Gradient Boosting Machines', 'Bayesian Approaches', 'Evolutionary Approaches',
'Dense Neural Networks', 'Convolutional Neural Networks', 'Generative Adversarial Networks',
'Recurrent Neural Networks', 'Transformer Networks', 'None', 'Other']


algorithms


3.표 설정.
1
2
3
4
5
6
7
8
algorithms = (
algorithms
.count()
.to_frame()
.reset_index()
.rename(columns={'index':'Algorithms', 0:'Count'})
.sort_values(by=['Count'], ascending=False)
)


  1. .count() :coulumn 수 세기
  2. .to_frame() : frame 생성
  3. .reset_index() : 원본과 상관없는 Index 생성
  4. .rename()
    1. columns의 이름을 지정 : ‘index’:’Algorithms’, 0:’Count’
  5. .sort_values()
    1. by=[‘Count’], ascending=False
    2. Count 기준으로 내림차순으로 정렬


3. percent 추가

1
2
algorithms['percent'] = ((algorithms['Count'] / len(df))*100).round(2).astype(str) + '%'



표에 ‘percent’를 추가
algorithms의 count에 df의 length로 나누고 *100을 하는 전형적인 % 나타내기

값자체에 %를 입력하여 나중에 %를 추가 입력하지 않아도 됨

소숫점 자리 2까지 반영(반올림).
type 자체를 String으로 하여 추가 계산은 불가능.



4. 색 지정

1
2
3
4
5
6
7
8
colors = ['#033351',] * 12
colors[0] = '#5abbf9'
colors[1] = '#5abbf9'
colors[2] = '#066eb0'
colors[3] = '#066eb0'
colors[4] = '#044a77'
colors[5] = '#044a77'
colors[6] = '#044a77'

colors


색 깊이는 12단계, 0~6까지는 정해주고 나머지 5개는 #033351을 default로 한 것을 알 수 있다.


5. bar Graph 만들기

1
2
3
4
5
6
7
fig = go.Figure(go.Bar(
x=algorithms['Count'],
y=algorithms['Algorithms'],
text=algorithms['percent'],
orientation='h',
marker_color=colors
))

horizontal과 vertical Graph의 차이는 x, y axis를 바꾸어 주는 것과

orientation=’h’ 을 넣어 주는 것의 차이.


<orientation 없음>

orientationH


<orientation H 있음>

orientationH_


6. update_traces()

traces() 수정 : Trace에 대한 설정

1
2
3
4
5
6
fig.update_traces(texttemplate='%{text}', 
textposition='outside',
cliponaxis = False,
hovertemplate='<b>Algorithm</b>: %{y}<br><extra></extra>'+
'<b>Count</b>: %{x}',
textfont_size=12)
  1. texttemplate : text type
  2. textposition : ‘outside’ _ 설정 해 주지 않은 경우 칸에 따라 적당히 들어감.
  3. cliponaxis = False : text가 칸이 작아서 짤리는 경우를 막아주는 기능 (off)
  4. hovertemplate :
    1. 마우스 On하면 (커서를 위에 대면) 나오는 Hovert에대한 설정.
  5. textfont_size : 폰트 size



7. Design

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False)

fig.update_layout(showlegend=False,
plot_bgcolor='#F7F7F7',
margin=dict(pad=20),
paper_bgcolor='#F7F7F7',
xaxis={'showticklabels': False},
yaxis_title=None,
height = 600,
xaxis_title=None,
yaxis={'categoryorder':'total ascending'},
title_text="Most Commonly Used <b>Algorithms</b>",
title_x=0.5,
font=dict(family="Hiragino Kaku Gothic Pro, sans-serif", size=15, color='#000000'),
title_font_size=35)
  1. Grid Delete

grid delete


  1. update_layout
    1. showlegend=False,
    2. plot_bgcolor=’#F7F7F7’
    3. margin=dict(pad=20),
    4. paper_bgcolor=’#F7F7F7’,
    5. xaxis={‘showticklabels’: False},
      1. x 축 labels을 삭제.
    6. yaxis_title=None,
    7. xaxis_title=None, yaxis={‘categoryorder’:’total ascending’},
      1. y 축 title을 categoryorder
      2. img.png
      3. Automatically Sorting Categories by Name or Total Value
      4. layout-xaxis-categoryorder
    8. title_text=”Most Commonly Used Algorithms“,
    9. title_x=0.5,
    10. font=dict(family=”Hiragino Kaku Gothic Pro, sans-serif”, size=15, color=’#000000’),
             title_font_size=35)
      

이미 앞서서 충분히 설명 했기 때문에 본 posting에서 설명되지 않은 부분은

basic bar Graph 에서 확인

8. Annotation

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
fig.add_annotation(dict(font=dict(size=14),
x=0.98,
y=-0.17,
showarrow=False,
text="@miguelfzzz",
xanchor='left',
xref="paper",
yref="paper"))

fig.add_annotation(dict(font=dict(size=12),
x=0,
y=-0.17,
showarrow=False,
text="Source: 2021 Kaggle Machine Learning & Data Science Survey",
xanchor='left',
xref="paper",
yref="paper"))


fig.show()