爬取 Stackoverflow 100 万条问答并简单分析

2023-12-29 05:18

本文主要是介绍爬取 Stackoverflow 100 万条问答并简单分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

打开 stackoverflow 主页,在 questions 页面下选择按 vote 排序,爬取前 20000 页,每页将问题数量设置为 50,共 1m 条,(实际上本来是想爬完 13m 条的,但 1m 条后面问题基本上都只有 1 个或 0 个回答,那就选取前 1m 就好吧)

实际上用数据库去重后只有 999654 条问答信息

对爬取数据进行简单分析  

votes 分析

降序排列了 votes 数,生成折线图

 

Votes折线图

2k 后的问题的 votes 数基本上就已经在 400 以下了,接着后面的就基本上是贴地飞行了

votes 数最多 : Why is it faster to process a sorted array than an unsorted array?

votes 数的连续分布情况 

 

votes甘特图

可见最多的还是集中在 1-2K 之间,从 6k 开始基本上就断层了

具体数据

 

如果以 100 为分界线的话,会得到这样的一个饼图

 

大于 100 的连 %2 都不到

再来看看底层的数据

 

可见 votes 小于 20 的,数量高达 84m

看看总体的比例吧

 

answer分析

降序排列了 answers 数,生成折线图

 

很明显 3k 之后的 answers 数基本上就小于 20 了

answers 数最多: What is the best comment in source code you have ever encountered?

answer数的连续分布情况

 

answers甘特图

150 后也就断层了,实际上能达到这样的回答数极少

具体数据

 

大于 30 的确实少的可怜,看看总体情况

 

views 分析

降序排列了 views 数,生成折线图

 

views折线图

最高达到了 4.5m,100000 以后的基本上就不足 28000 了

views 数最多: How to undo last commit(s) in Git?

views 数的连续分布情况

 

views甘特图

具体数据

 

大部分问答的 views 数还是集中在 20000 以内

还是得看看总体分布

 

再看看 votes,views,answers 三者的散点图对应情况

votes - views

 

votes - answers

 

views - answers

 

views-answers散点图

总的来说,这三者对应关系类似于一个金字塔。三个图基本上都是左下角靠近原点的区域被填满,也就是说绝对大部分的问题的 votes,answers 和 views 都是属于最下层的。高质量活跃的问题是处于金字塔顶端的。三者的最高数好像也没特别明显的对应关系,且三者的最高数都不是同一个问题。

根据所有问题的 tags 提取出总量前 200 的关键词(前 50 条如下),第 1 名是 c#,python 排在第 5

 

 

这样看好像不太直观,所以就把它根据词频生成了词云

 

因为是用 Python 写的爬虫,所以重点来分析下 Python 类的问答

votes 数前 10

6162 : What does the “yield” keyword do in Python?

3529 : What is a metaclass in Python?

3098 : How do I check whether a file exists using Python?

3035 : Does Python have a ternary conditional operator?

2620 : Calling an external command in Python

2605 : What does ifname== “main”: do?

2194 : How to merge two Python dictionaries in a single expression?

2123 : Sort a Python dictionary by value

2058 : How to make a chain of function decorators?

1984 : How to check if a directory exists and create it if necessary?

answers 数前 10

191 : Hidden features of Python [closed]

87 : Best ways to teach a beginner to program? [closed]

55 : Favorite Django Tips & Features?

50 : How do you split a list into evenly sized chunks?

44 : Calling an external command in Python

43 : How can I represent an 'Enum' in Python?

38 : How to merge two Python dictionaries in a single expressions

38 : Finding local IP addresses using Python's stdlib

37 : Reverse a string in python without using reversed or [::-1]

37 : How do I check whether a file exists using Python?

views 数前 10

2121621 : Parse String to Float or Int

1905938 : Using global variables in a function other than the one that created them

1888666 : How do I check whether a file exists using Python?

1827126 : Calling an external command in Python

1699574 : Converting integer to string in Python?

1686230 : How do I read a file line-by-line into a list?

1682307 : Iterating over dictionaries using 'for' loops in Python

1569205 : How to get the size of a list

1554755 : How do I install pip on Windows?

1515505 : Finding the index of an item given a list containing it in Python

三者的前 10 中有 2 个问题是完全重叠的,分别是

How do I check whether a file exists using Python?

Calling an external command in Python

 

这篇关于爬取 Stackoverflow 100 万条问答并简单分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/548438

相关文章

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制