数据总大小是 9506×162,即 9506 行 162 列,上图是前 5 行,每行代表一个样本,即一个参与调查的开发者。可以看到已经将一道选择题的答案拆分成多列,这一般是用于处理多选题,例如上图中的「What other language(s) do you use?」,而单选题则不用拆分,可以直接写答案,例如上图第一列。
散点图 go.Scatter
此图用于说明 Python 2 和 3 在开发者们中的使用比例。
我先说下 plotly 的绘图逻辑(下同):
定义 trace,类似于 matplotlib 中的坐标轴和图形(例如折线),只管画图
定义 layout,就是布局,标题、margin 等
定义 data,就是一个 trace 列表,因为可能会同时绘制多个图形,例如多条折线
使用 go.Figure 或者 go.FigureWidget 绘图,传入 data 和 layout 参数。
1 2 3 4 5 6 7 8 9 10
colors = [rgb2hex(i) for i in sns.color_palette('rainbow')[:2]]
data = [trace] layout = go.Layout(title="The developers' age VS The use ratio of Python 3") # go.FigureWidget(data=data, layout=layout) fig = go.Figure(data=data, layout=layout) py.iplot(fig)
import plotly.graph_objs as go from plotly.offline import init_notebook_mode import plotly.offline as offline
python_version = survey_df['which version of python do you use the most?'] counts = python_version.value_counts() labels = counts.index values = counts.values colors = [rgb2hex(i) for i in sns.color_palette('rainbow')[:2]]
data = [trace] layout = go.Layout(title='Top 10 countries of # of the developers') # go.FigureWidget(data=data, layout=layout) fig = go.Figure(data=data, layout=layout) py.iplot(fig)
横向分组柱形图 go.Bar
此图用于说明开发者人数最多的三个国家(美国、印度和中国)的开发者年龄构成。
1 2 3 4 5 6 7 8
colors = [rgb2hex(i) for i in sns.color_palette('rainbow', 7)]
data = [go.Bar(x=three_countries.index, y=three_countries[c], marker={'color': colors[i]}, name=c) for i, c inenumerate(three_countries.columns)] layout = go.Layout(title="Age distribution of the developers who're from USA, India and China") # go.FigureWidget(data=data, layout=layout) fig = go.Figure(data=data, layout=layout) py.iplot(fig)
纵向柱形图 go.Bar
此图用于说明常用框架中使用 Python 2 和 Python 3 的比例。
1 2 3 4 5 6 7 8 9 10 11 12
colors = [rgb2hex(i) for i in sns.color_palette('rainbow', len(count_df))] trace = go.Bar(y=count_df.index[::-1], x=count_df.values[::-1], marker={'color': colors[::-1]}, orientation='h')
此图用于说明 Python 2 和 3 在开发者们中的使用比例,类似于 sns.distplot,是直方图和 KDE 的混合,用于展示一个单变量的分布。
1 2 3 4 5
import plotly.figure_factory as ff colors = [rgb2hex(i) for i in sns.color_palette('rainbow')[:2]] fig = ff.create_distplot(hist_data=[frameworks_pyver.loc['Python 2'], frameworks_pyver.loc['Python 3']], group_labels=['Python 2', 'Python 3'], bin_size=0.05, colors=colors) # go.FigureWidget(fig) py.iplot(fig)
面积图 go.Scatter
此图用于说明做数据分析和机器学习的人常用的框架。
1 2 3 4 5 6 7 8 9 10 11
sorted_da_ml_frameworks_uses = da_ml_frameworks_uses.sort_values(by='Data analysis', axis=1, ascending=True) colors = [rgb2hex(i) for i in sns.color_palette('rainbow')[:2]]
da = go.Scatter(x=sorted_da_ml_frameworks_uses.columns, y=sorted_da_ml_frameworks_uses.loc['Data analysis'], fill='tozeroy', marker={'color': colors[0]}, name='Python 2') ml = go.Scatter(x=sorted_da_ml_frameworks_uses.columns, y=sorted_da_ml_frameworks_uses.loc['Machine learning'], fill='tozeroy', marker={'color': colors[1]}, name='Python 3')
data = [da, ml] layout = go.Layout(title='Frameworks Usage among Data Analysis and Machine Learning Developers') # go.FigureWidget(data=data, layout=layout) fig = go.Figure(data=data, layout=layout) py.iplot(fig)
Violin 图 go.Violin
此图是用于说明每个国家的开发者中使用 Python 3 的比例。
1 2 3 4 5 6 7 8 9
colors = [rgb2hex(i) for i in sns.color_palette('rainbow')[:2]]
trace = go.Violin(x=countries_pyver_ratio['Python 3'], meanline={'visible': True}, box={'visible': True}, fillcolor=colors[0], opacity=0.6, line={'color': 'black'}) layout = go.Layout(title="Use ratio of Python 3 in the world", xaxis={'zeroline': False})