2019 年 Stack Overflow 调查结果已经发布!数据集相当大;根据描述:
“Stack Overflow 的年度开发者调查是全球最大的、最全面的程序员调查。每年,我们都会进行一项调查,涵盖从开发者最喜欢的技术到他们的工作偏好等所有内容。今年是我们发布年度开发者调查结果的第九年,今年早些时候,近 90,000 名开发者参加了为期 20 分钟的调查。”
StackOverflow 的一些分析引起了我的兴趣,而另一些则没有。我决定挖掘这些数据(这些数据在 开放数据库许可证 (ODbL) 下可用),而不是浏览网站,看看我能学到什么!
我正在使用流行的 Pandas 库,根据该库的关于页面,它是一个“BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具。”
几乎每个教程都通过导入 Pandas 并为其分配数据变量来减少使用 Pandas 功能时必须键入的文本量,如下所示:
import pandas as pd
# Create a two-dimensional data-structure named df
df = pd.DataFrame([1,1])
为了公然违反数据科学的每一条规则,我不会将 Pandas 别名为 pd,也不会将我的数据帧别名为 df。 科学通过大胆的想象力向前发展。
配置 Pandas 进行分析
我将使用 iPython 交互式地探索这些数据,您可以在这里了解如何安装 iPython。您可以从命令行使用 python 打开 Python 解释器、启动 Jupyter Notebook 或使用 JupyterLab,然后继续操作。
我们将首先导入所需的库
In [1]: import pandas
接下来,将逗号分隔值 (CSV) 结果文件,在 Google Drive 上可用,下载到本地目录。下载并解压缩数据后,利用 Pandas 的原生能力来读取 CSV。
In [2]: data = pandas.read_csv("survey_results_public.csv")
现在是时候提出关于数据的问题了。
查询受访者人数
第一个有趣的事情是检查调查的受访者人数。 获取该数据的最简单方法是从数据帧的 *shape* 中获取。 第一个元素将是行数或受访者人数,而第二个元素是列数。
In [3]: data.shape
Out [3]: (88883, 85)
这令人印象深刻:88,883 个人(表示为行)对问题(表示为列)提供了 85 个回复。
筛选 Pythonista
作为一名 Python 程序员,我想知道我的同行在做什么。 我将筛选出使用过 Python 的人。 确切的方法不是那么直观,但在检查数据源后,我发现 **LanguageWorkedWith** 列可以用来筛选 Python 开发者
In [4]: pythonistas = data[data.LanguageWorkedWith.str.contains("Python", na=False)]
现在我可以提出 Python 特定的问题,例如:*Pythonista 占回复的百分比是多少?*
我可以使用 **shape** 作为每个数字的原始数量,并使用 f-string 语法格式化我的输出为两位数字
In [5]: f"{pythonistas.shape[0] / data.shape[0]:.2}"
Out [5]: '0.41'
哇。 41% 的调查回复者使用 Python。 *那是多少人?*
In [6]: pythonistas.Respondent.count()
Out [6]: 36443
开源 Python 开发者
现在,在这 36,443 名使用 Python 的人中,有多少人参与了开源?
有一个 **OpenSourcer** 列包含我正在寻找的数据(不是 **OpenSource**,它回答的是另一个问题)。
In [7]: open_source = pythonistas['OpenSourcer'].value_counts()
然后,我可以返回变量的值来打印数据
In [8]: open_source
Out [8]:
Never 11310
Less than once per year 10374
Less than once a month but more than once per year 9572
Once a month or more often 5187
Name: OpenSourcer, dtype: int64
这告诉我们关于开源 Python 贡献者的百分比是多少?
In [9]: f"{open_source['Once a month or more often'] / pythonistas.shape[0]:.2}"
Out [9]: '0.14'
只有 14% 的 36,443 名 Python 用户以任何常规的频率为开源做出贡献。 这看起来可能是一个很小的百分比。 或者是不是? 在考虑所有编程语言时,这是否高于或低于一般人群?
In [10]: general_opensource = data['OpenSourcer'].value_counts()
因为我问的是一般人群,所以我会查看所有受访者的百分比
In [11]: f"{general_opensource['Once a month or more often'] / data.shape[0]:.2}"
Out [11]: '0.12'
Python 开发者似乎比调查受访者的一般人群对开源的贡献略多。
DevOps 和 Python
作为 DevOps 工程师,为其他 Python DevOps 工程师编写书籍,我自然对有多少人感到好奇。
我可以在 **DevType** 列中搜索以找到答案
In [12]: devops = pythonistas[pythonistas.DevType.str.contains("DevOps specialist", na=False)]
因为我问的是一般人群,所以我会查看所有受访者
In [13]: f"{devops.shape[0] / data.shape[0]:.2}"
Out [13]: '0.052'
大约 5% 的受访者使用 Python 并且具有与 DevOps 相关的工作职责。
In [14]: devops.Respondent.count()
Out [14]: 4647
那是我的目标市场。 不错!
Python 开发者的经验
我在会议上的大多数演讲(例如,Boring Object Orientation)都是针对中级 Python 工程师的。 我会说那些具有一到五年开发经验的人是中级的,并且我可以将这些约束 **map** 到 **YearsCode** 列
In [15]: intermediate = pythonistas[pythonistas.YearsCode.isin(set(map(str, range(1, 6))))]
然后我可以计算所有调查回复的百分比
In [16]: f"{intermediate.shape[0] / data.shape[0]:.2}"
Out [16]: '0.11'
更好的是,11%。 那意味着
In [17]: intermediate.Respondent.count()
Out [17]: 10085
那是很多人。
总结
使用 StackOverflow 报告和一点 Python 可以完成很多出色的研究。 Pandas 允许任何人轻松有效地查询此类数据集。 此分析中没有任何 Python 循环。 令人难以置信的是,我可以使用这些高级库以简单的方式探索数据,而 Python 解释器提供对查询的低级操作,以优化的 C 代码完成,我可以从中受益!
您在 StackOverflow 数据集中发现了什么令人兴奋或有趣的事情吗? 在评论中分享!
1 条评论