From 75e3b8c1feabb91219f98ddc92e60ee2c17ec3cb Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Sat, 11 Sep 2021 13:55:27 -0400 Subject: [PATCH 01/26] Update README.me --- sotorrent/README.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/sotorrent/README.md b/sotorrent/README.md index 2824898..82b6827 100644 --- a/sotorrent/README.md +++ b/sotorrent/README.md @@ -1,3 +1,10 @@ +## Dataset + +The Stack Overflow data has been extracted from the official [Stack Exchange data dump](https://archive.org/details/stackexchange) released 2021-09-07. + +The GitHub references have been retrieved from the [Google BigQuery GitHub data set](https://cloud.google.com/bigquery/public-data/github) on 2021-01-04 (last updated 2020-12-31 according to table info). + + ## Importing the SOTorrent dataset 1. Unzip all CSV and XML files. @@ -18,11 +25,7 @@ 4. Run the `load_sotorrent.sh` script. -## Data - -The Stack Overflow data has been extracted from the official [Stack Exchange data dump](https://archive.org/details/stackexchange) released 2020-12-08. -The GitHub references have been retrieved from the [Google BigQuery GitHub data set](https://cloud.google.com/bigquery/public-data/github) on 2021-01-04 (last updated 2020-12-31 according to table info). ## MySQL Troubleshooting From ca018d66af4f1c091856cd4a705460ccf3a6a403 Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Sat, 11 Sep 2021 16:51:47 -0400 Subject: [PATCH 02/26] Update 1_download_so-dump.sh --- sotorrent/so-dump/1_download_so-dump.sh | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/sotorrent/so-dump/1_download_so-dump.sh b/sotorrent/so-dump/1_download_so-dump.sh index 3f5c866..bf1521d 100755 --- a/sotorrent/so-dump/1_download_so-dump.sh +++ b/sotorrent/so-dump/1_download_so-dump.sh @@ -1,6 +1,29 @@ -#!/bin/bash +# The env command wrapping +#!/usr/bin/env bash +DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd) set -Eeuo pipefail +# POSIX sh and especially bash have a number of settings that can help write safe shell scripts. +# NAME +# set - allows us to change the values of shell option +# COMMAND-LINE OPTIONS +# -E +# Allow error traps on function calls, subshell environment, and command substitutions. +# -e +# If a command fails, this switch will make the whole script exit. +# -u +# Treat unset variables as an error, and immediately exit. +# -o option-name +# pipefail +# If set, the return value of a pipeline is the value of the last (rightmost) command to +# exit with a non-zero status, or zero if all commands in the pipeline exit successfully. +# This option is disabled by default. +# +# Reference: +# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html +# https://transang.me/best-practice-to-make-a-shell-script/ +# https://sipb.mit.edu/doc/safe-shell/ + wget https://archive.org/download/stackexchange/stackoverflow.com-Badges.7z wget https://archive.org/download/stackexchange/stackoverflow.com-Comments.7z wget https://archive.org/download/stackexchange/stackoverflow.com-PostHistory.7z From 0aa046b140fc58f8019087e5e58514714776b5ba Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Sat, 11 Sep 2021 20:51:41 -0400 Subject: [PATCH 03/26] Update load_sotorrent.sh --- sotorrent/load_sotorrent.sh | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/sotorrent/load_sotorrent.sh b/sotorrent/load_sotorrent.sh index b03b799..4479e71 100644 --- a/sotorrent/load_sotorrent.sh +++ b/sotorrent/load_sotorrent.sh @@ -1,8 +1,14 @@ #!/bin/sh set -Eeuo pipefail -root_password="_AqUjvtv68E\$N!r]" # update this according to your local configuration -sotorrent_password="4ar7JKS2mfgGHiDA" # update this according to your local configuration +# Update this part according to your local configuration +root_password="_AqUjvtv68E\$N!r]" +sotorrent_password="4ar7JKS2mfgGHiDA" + +# Absolute path to SQL dump files (consider MySQL's secure-file-priv option) +data_path="/tmp" # For ~~> Linux and OSX +# data_path="E:/Temp" # Cygwin ~~> For Windows OS + log_file="sotorrent.log" sotorrent_db="sotorrent20_12" db_init=false @@ -10,10 +16,6 @@ load_so=false load_gh=false load_sotorrent=false -# absolute path to SQL dump files (consider MySQL's secure-file-priv option) -data_path="E:/Temp" # Cygwin -#data_path="/tmp" # Linux - sql_import_prefix="SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0;" sql_import_suffix="SET unique_checks=1; SET foreign_key_checks=1; COMMIT; SET autocommit=1;"; From f3ca9dd34850e8160e0dcc58b753be0665979df6 Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Sat, 11 Sep 2021 21:15:32 -0400 Subject: [PATCH 04/26] Update README.md increase the clarity and enable the Offline mode --- sotorrent/README.md | 59 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 56 insertions(+), 3 deletions(-) diff --git a/sotorrent/README.md b/sotorrent/README.md index 82b6827..a80468b 100644 --- a/sotorrent/README.md +++ b/sotorrent/README.md @@ -1,11 +1,63 @@ +# About The SO and SOTorrent +Stack Overflow (SO) is the most popular question-and-answer (Q&A) website for software developers, providing a large amount of copyable code snippets. SOTorrent, an open dataset based on the official SO data dump. SOTorrent provides access to the version history of SO content at the level of whole posts and individual text and code blocks. +[Reference](https://arxiv.org/pdf/1809.02814.pdf) + + ## Dataset -The Stack Overflow data has been extracted from the official [Stack Exchange data dump](https://archive.org/details/stackexchange) released 2021-09-07. +The Stack Overflow data has been extracted from the official [Stack Exchange data dump](https://archive.org/details/stackexchange) released 2021-09-07. The GitHub references have been retrieved from the [Google BigQuery GitHub data set](https://cloud.google.com/bigquery/public-data/github) on 2021-01-04 (last updated 2020-12-31 according to table info). + + + +## Stack Exchange Vs. Stack Overflow + +Stack Exchange is a network of sites, of which Stack Overflow is one. [This website](https://stackexchange.com/sites) indicates the coverage of the Stack Exchange website. In addition, Stack Overflow is a question and answer site for professional and enthusiast programmers. It's built and run by you as part of the Stack Exchange network of Q&A sites. +[Reference](https://meta.stackexchange.com/questions/79593/what-is-the-difference-between-stack-overflow-and-stack-exchange) + + +## Offline Working - For OSX and Linux OSs + +### 1. Import the SOTorrent dataset to PC + +As I mentioned before, on the [Stack Exchange data dump](https://archive.org/details/stackexchange) page we can find all data dumps that Stack Exchange covers inside itself. However, we currently need just datasets related to the Stack Overflow website. + + 0. Change the current directory to the working directory. + ```sh + cd + ``` + 1. Run the [`1_download_so-dump.sh`](so-dump/1_download_so-dump.sh) script. This script download files related to Stack Overflow + ```sh + source 1_download_so-dump.sh + ``` + 2. Run the [`2_process_7z_files.sh`](so-dump/2_process_7z_files.sh) script. This script unzips all CSV and XML files. + ```sh + source 2_process_7z_files.sh + ``` + +### 2. Install MySQL +In this step, we have to create a SQL database for inserting dataset into our local database. + +> Set password for `root` and `sotorrent` MySQL users + +* For OSX 11.5.2: + - [This doc](https://flaviocopes.com/mysql-how-to-install/) helps us to create and start this service on our OSX. +* For Ubuntu Distribution 20.04: + - [This doc](https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-18-04) aids to establish and prepare MySQL service on Ubuntu OS. + +### 3. Prepare and Load SOTorrent Dataset + +Edit the SQL script [`load_sotorrent.sh`](load_sotorrent.sh) to change: +- The passwords for the `root` and `sotorrent` MySQL users +- The path where the MySQL dump files are located. + +For loading the SOTorrent dataset to created database, we should run [`load_sotorrent.sh`](load_sotorrent.sh) script. +```sh +source load_sotorrent.sh +``` -The GitHub references have been retrieved from the [Google BigQuery GitHub data set](https://cloud.google.com/bigquery/public-data/github) on 2021-01-04 (last updated 2020-12-31 according to table info). -## Importing the SOTorrent dataset +---- 1. Unzip all CSV and XML files. @@ -25,6 +77,7 @@ The GitHub references have been retrieved from the [Google BigQuery GitHub data 4. Run the `load_sotorrent.sh` script. +---- ## MySQL Troubleshooting From 98c466b4bd5524a51dc3d4e815136b442008fc2a Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Sat, 11 Sep 2021 21:18:04 -0400 Subject: [PATCH 05/26] Update README.md --- sotorrent/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sotorrent/README.md b/sotorrent/README.md index a80468b..1280b9c 100644 --- a/sotorrent/README.md +++ b/sotorrent/README.md @@ -5,7 +5,9 @@ Stack Overflow (SO) is the most popular question-and-answer (Q&A) website for so ## Dataset -The Stack Overflow data has been extracted from the official [Stack Exchange data dump](https://archive.org/details/stackexchange) released 2021-09-07. The GitHub references have been retrieved from the [Google BigQuery GitHub data set](https://cloud.google.com/bigquery/public-data/github) on 2021-01-04 (last updated 2020-12-31 according to table info). +The Stack Overflow data has been extracted from the official [Stack Exchange data dump](https://archive.org/details/stackexchange) released 2021-09-07. + +The GitHub references have been retrieved from the [Google BigQuery GitHub data set](https://cloud.google.com/bigquery/public-data/github) on 2021-01-04 (last updated 2020-12-31 according to table info). From ed77cb285186c4924d11daadc63d41da9865b078 Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Sat, 11 Sep 2021 21:21:24 -0400 Subject: [PATCH 06/26] Update README.md --- sotorrent/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sotorrent/README.md b/sotorrent/README.md index 1280b9c..cd12dc0 100644 --- a/sotorrent/README.md +++ b/sotorrent/README.md @@ -26,8 +26,9 @@ As I mentioned before, on the [Stack Exchange data dump](https://archive.org/det 0. Change the current directory to the working directory. ```sh cd + mkdir sotorrent ``` - 1. Run the [`1_download_so-dump.sh`](so-dump/1_download_so-dump.sh) script. This script download files related to Stack Overflow + 1. Run the [`1_download_so-dump.sh`](so-dump/1_download_so-dump.sh) script. This script download files related to Stack Overflow. ```sh source 1_download_so-dump.sh ``` From bb4ec88a2ebf28d2f53bfae3cba85aeb0b0f3330 Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Sat, 11 Sep 2021 21:25:26 -0400 Subject: [PATCH 07/26] Update README.md --- sotorrent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sotorrent/README.md b/sotorrent/README.md index cd12dc0..dc72447 100644 --- a/sotorrent/README.md +++ b/sotorrent/README.md @@ -26,7 +26,7 @@ As I mentioned before, on the [Stack Exchange data dump](https://archive.org/det 0. Change the current directory to the working directory. ```sh cd - mkdir sotorrent + mkdir sotorrent && cd ./sotorrent ``` 1. Run the [`1_download_so-dump.sh`](so-dump/1_download_so-dump.sh) script. This script download files related to Stack Overflow. ```sh From c87abb018f2bfd9efdefa672e7c2f3b9d52d0100 Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Sat, 11 Sep 2021 22:16:36 -0400 Subject: [PATCH 08/26] Update README.md insert Database schema --- sotorrent/README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sotorrent/README.md b/sotorrent/README.md index dc72447..7a0017e 100644 --- a/sotorrent/README.md +++ b/sotorrent/README.md @@ -58,7 +58,10 @@ For loading the SOTorrent dataset to created database, we should run [`load_soto source load_sotorrent.sh ``` - + +## Database schema of SOTorrent +Then below photo indicates the tables and their relations from the offical SO dump that are marked gray. +![DB_scheme](database-model/sotorrent_2018-12-09_model.png) ---- From 0924e33a1244b90af54271efb6323421ff1f3e85 Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Sat, 11 Sep 2021 22:17:06 -0400 Subject: [PATCH 09/26] Update README.md --- sotorrent/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/sotorrent/README.md b/sotorrent/README.md index 7a0017e..a497f91 100644 --- a/sotorrent/README.md +++ b/sotorrent/README.md @@ -61,6 +61,7 @@ source load_sotorrent.sh ## Database schema of SOTorrent Then below photo indicates the tables and their relations from the offical SO dump that are marked gray. + ![DB_scheme](database-model/sotorrent_2018-12-09_model.png) ---- From 781b2506a0d53fa87ef5b181f287e3ad03577dec Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Sat, 11 Sep 2021 22:33:53 -0400 Subject: [PATCH 10/26] Update README.md insert Related Papers section --- sotorrent/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sotorrent/README.md b/sotorrent/README.md index a497f91..a923da6 100644 --- a/sotorrent/README.md +++ b/sotorrent/README.md @@ -1,7 +1,12 @@ # About The SO and SOTorrent + Stack Overflow (SO) is the most popular question-and-answer (Q&A) website for software developers, providing a large amount of copyable code snippets. SOTorrent, an open dataset based on the official SO data dump. SOTorrent provides access to the version history of SO content at the level of whole posts and individual text and code blocks. [Reference](https://arxiv.org/pdf/1809.02814.pdf) +## Related Papers + +1. [SOTorrent: Studying the Origin, Evolution, and Usage of Stack Overflow Code Snippets](https://arxiv.org/abs/1809.02814) +2. [SOTorrent: Reconstructing and Analyzing the Evolution of Stack Overflow Posts](https://arxiv.org/abs/1803.07311) ## Dataset From 02b06a899fccbd231e499a846a97fa460d1ad3c7 Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Sun, 12 Sep 2021 16:18:53 -0400 Subject: [PATCH 11/26] Update README.md Modified paths --- sotorrent/README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/sotorrent/README.md b/sotorrent/README.md index a923da6..31c896c 100644 --- a/sotorrent/README.md +++ b/sotorrent/README.md @@ -31,15 +31,17 @@ As I mentioned before, on the [Stack Exchange data dump](https://archive.org/det 0. Change the current directory to the working directory. ```sh cd + wget https://github.com/ghadesi/db-scripts/archive/refs/heads/master.zip + unzip master.zip mkdir sotorrent && cd ./sotorrent ``` 1. Run the [`1_download_so-dump.sh`](so-dump/1_download_so-dump.sh) script. This script download files related to Stack Overflow. ```sh - source 1_download_so-dump.sh - ``` +source ../db-scripts-master/sotorrent/so-dump/1_download_so-dump.sh +``` 2. Run the [`2_process_7z_files.sh`](so-dump/2_process_7z_files.sh) script. This script unzips all CSV and XML files. ```sh - source 2_process_7z_files.sh + source ../db-scripts-master/sotorrent/so-dump/2_process_7z_files.sh ``` ### 2. Install MySQL From 3cf843d599c8264e4e6d41d74ea17387be993b65 Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Sun, 12 Sep 2021 17:16:02 -0400 Subject: [PATCH 12/26] Update README.md insert background running and monitoring --- sotorrent/README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/sotorrent/README.md b/sotorrent/README.md index 31c896c..461f12e 100644 --- a/sotorrent/README.md +++ b/sotorrent/README.md @@ -37,7 +37,16 @@ As I mentioned before, on the [Stack Exchange data dump](https://archive.org/det ``` 1. Run the [`1_download_so-dump.sh`](so-dump/1_download_so-dump.sh) script. This script download files related to Stack Overflow. ```sh -source ../db-scripts-master/sotorrent/so-dump/1_download_so-dump.sh +chmod +x ../db-scripts-master/sotorrent/so-dump/1_download_so-dump.sh +sh ../db-scripts-master/sotorrent/so-dump/1_download_so-dump.sh + ``` +If you are using SSH, it's better to run the task at background. + ```sh +nohup sh ../db-scripts-master/sotorrent/so-dump/1_download_so-dump.sh & +``` +By the bellow command we can check the status of download. + ```sh +watch tail -2 nohup.out ``` 2. Run the [`2_process_7z_files.sh`](so-dump/2_process_7z_files.sh) script. This script unzips all CSV and XML files. ```sh From b14187aaf00990453ce2fbc70a9730e9b974d6ae Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Sun, 12 Sep 2021 17:45:31 -0400 Subject: [PATCH 13/26] Update README.md update the style of console commands --- sotorrent/README.md | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/sotorrent/README.md b/sotorrent/README.md index 461f12e..e5761a7 100644 --- a/sotorrent/README.md +++ b/sotorrent/README.md @@ -15,7 +15,6 @@ The Stack Overflow data has been extracted from the official [Stack Exchange dat The GitHub references have been retrieved from the [Google BigQuery GitHub data set](https://cloud.google.com/bigquery/public-data/github) on 2021-01-04 (last updated 2020-12-31 according to table info). - ## Stack Exchange Vs. Stack Overflow Stack Exchange is a network of sites, of which Stack Overflow is one. [This website](https://stackexchange.com/sites) indicates the coverage of the Stack Exchange website. In addition, Stack Overflow is a question and answer site for professional and enthusiast programmers. It's built and run by you as part of the Stack Exchange network of Q&A sites. @@ -29,28 +28,28 @@ Stack Exchange is a network of sites, of which Stack Overflow is one. [This webs As I mentioned before, on the [Stack Exchange data dump](https://archive.org/details/stackexchange) page we can find all data dumps that Stack Exchange covers inside itself. However, we currently need just datasets related to the Stack Overflow website. 0. Change the current directory to the working directory. - ```sh - cd - wget https://github.com/ghadesi/db-scripts/archive/refs/heads/master.zip - unzip master.zip - mkdir sotorrent && cd ./sotorrent + ```console + aminghadesi@MOOSELab$ cd + aminghadesi@MOOSELab$ wget https://github.com/ghadesi/db-scripts/archive/refs/heads/master.zip + aminghadesi@MOOSELab$ unzip master.zip + aminghadesi@MOOSELab$ mkdir sotorrent && cd ./sotorrent ``` 1. Run the [`1_download_so-dump.sh`](so-dump/1_download_so-dump.sh) script. This script download files related to Stack Overflow. - ```sh -chmod +x ../db-scripts-master/sotorrent/so-dump/1_download_so-dump.sh -sh ../db-scripts-master/sotorrent/so-dump/1_download_so-dump.sh + ```console + aminghadesi@MOOSELab$ chmod +x ../db-scripts-master/sotorrent/so-dump/1_download_so-dump.sh + aminghadesi@MOOSELab$ sh ../db-scripts-master/sotorrent/so-dump/1_download_so-dump.sh ``` If you are using SSH, it's better to run the task at background. - ```sh -nohup sh ../db-scripts-master/sotorrent/so-dump/1_download_so-dump.sh & + ```console + aminghadesi@MOOSELab$ nohup sh ../db-scripts-master/sotorrent/so-dump/1_download_so-dump.sh & ``` By the bellow command we can check the status of download. - ```sh -watch tail -2 nohup.out + ```console + aminghadesi@MOOSELab$ watch tail -2 nohup.out ``` 2. Run the [`2_process_7z_files.sh`](so-dump/2_process_7z_files.sh) script. This script unzips all CSV and XML files. - ```sh - source ../db-scripts-master/sotorrent/so-dump/2_process_7z_files.sh + ```console + aminghadesi@MOOSELab$ source ../db-scripts-master/sotorrent/so-dump/2_process_7z_files.sh ``` ### 2. Install MySQL @@ -70,8 +69,8 @@ Edit the SQL script [`load_sotorrent.sh`](load_sotorrent.sh) to change: - The path where the MySQL dump files are located. For loading the SOTorrent dataset to created database, we should run [`load_sotorrent.sh`](load_sotorrent.sh) script. -```sh -source load_sotorrent.sh +```console + aminghadesi@MOOSELab$ source load_sotorrent.sh ``` From 87e7eb427bd6c9191b31dc9a881396eb58f8f7d9 Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Fri, 17 Sep 2021 13:32:34 -0400 Subject: [PATCH 14/26] Update 1_download_so-dump.sh change the option of wget, it will solve the interrupt downloading issues. --- sotorrent/so-dump/1_download_so-dump.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/sotorrent/so-dump/1_download_so-dump.sh b/sotorrent/so-dump/1_download_so-dump.sh index bf1521d..90f1b8c 100755 --- a/sotorrent/so-dump/1_download_so-dump.sh +++ b/sotorrent/so-dump/1_download_so-dump.sh @@ -1,7 +1,7 @@ # The env command wrapping #!/usr/bin/env bash DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd) -set -Eeuo pipefail +#set -Eeuo pipefail # POSIX sh and especially bash have a number of settings that can help write safe shell scripts. # NAME @@ -24,11 +24,11 @@ set -Eeuo pipefail # https://transang.me/best-practice-to-make-a-shell-script/ # https://sipb.mit.edu/doc/safe-shell/ -wget https://archive.org/download/stackexchange/stackoverflow.com-Badges.7z -wget https://archive.org/download/stackexchange/stackoverflow.com-Comments.7z -wget https://archive.org/download/stackexchange/stackoverflow.com-PostHistory.7z -wget https://archive.org/download/stackexchange/stackoverflow.com-PostLinks.7z -wget https://archive.org/download/stackexchange/stackoverflow.com-Posts.7z -wget https://archive.org/download/stackexchange/stackoverflow.com-Tags.7z -wget https://archive.org/download/stackexchange/stackoverflow.com-Users.7z -wget https://archive.org/download/stackexchange/stackoverflow.com-Votes.7z +wget -c https://archive.org/download/stackexchange/stackoverflow.com-Badges.7z +wget -c https://archive.org/download/stackexchange/stackoverflow.com-Comments.7z +wget -c https://archive.org/download/stackexchange/stackoverflow.com-PostHistory.7z +wget -c https://archive.org/download/stackexchange/stackoverflow.com-PostLinks.7z +wget -c https://archive.org/download/stackexchange/stackoverflow.com-Posts.7z +wget -c https://archive.org/download/stackexchange/stackoverflow.com-Tags.7z +wget -c https://archive.org/download/stackexchange/stackoverflow.com-Users.7z +wget -c https://archive.org/download/stackexchange/stackoverflow.com-Votes.7z From e0146cb38f7daf93148b805803c9a10fc7ba63c0 Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Fri, 17 Sep 2021 14:39:43 -0400 Subject: [PATCH 15/26] Update README.md --- sotorrent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sotorrent/README.md b/sotorrent/README.md index e5761a7..a4f15f8 100644 --- a/sotorrent/README.md +++ b/sotorrent/README.md @@ -23,7 +23,7 @@ Stack Exchange is a network of sites, of which Stack Overflow is one. [This webs ## Offline Working - For OSX and Linux OSs -### 1. Import the SOTorrent dataset to PC +### 1. Import the Stack Exchange data dump to PC As I mentioned before, on the [Stack Exchange data dump](https://archive.org/details/stackexchange) page we can find all data dumps that Stack Exchange covers inside itself. However, we currently need just datasets related to the Stack Overflow website. From 48afc6802683e6742e517ee17156e6c199b26fb9 Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Sat, 25 Sep 2021 17:25:03 -0400 Subject: [PATCH 16/26] Add tags --- sotorrent/README.md | 49 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/sotorrent/README.md b/sotorrent/README.md index a4f15f8..21dd6c9 100644 --- a/sotorrent/README.md +++ b/sotorrent/README.md @@ -79,6 +79,55 @@ Then below photo indicates the tables and their relations from the offical SO du ![DB_scheme](database-model/sotorrent_2018-12-09_model.png) + +## Phase 0: Create Tags based on Stackoverflow (SO) + +### We defined the major ML frameworks based on the Python language, including: + +- TensorFlow: (https://www.tensorflow.org/) TensorFlow was developed at Google Brain and an open-source project. TF can: Perform regression, classification, neural networks, etc., and run on both CPUs and GPUs. + +- PyTorch: (https://pytorch.org/) PyTorch was developed by FAIR, Facebook AI Research. It is the leading competitor to TensorFlow. In addition, it provides almost the same TensorFlow services. + +- Sikit-learn: (https://scikit-learn.org/stable/#) Scikit-learn provides a range of supervised and unsupervised learning algorithms via a consistent interface in Python. + +- Keras: (https://keras.io/) Keras is a neural network library and a deep learning API written in Python, running on top of the machine learning platform TensorFlow. It was developed with a focus on enabling fast experimentation. + +- NLTK: (https://www.nltk.org/) The Natural Language Toolkit, more commonly NLTK, is a suite of libraries and programs for symbolic and statistical natural language processing for English written in the Python programming language. + +- Huggingface: (https://huggingface.co/) Hugging Face is an open-source provider of natural language processing (NLP) technologies. + +- Spark ML: (https://spark.apache.org/docs/1.2.2/ml-guide.html) aims to provide a uniform set of high-level APIs that help users create and tune practical machine learning pipelines. + +- Torch: (http://torch.ch/) We ignore this framework due to the Lua programming language. + +### Find ML tags on the section of Stackoverflow (https://stackoverflow.com/tags): + +This [website](https://data.stackexchange.com/stackoverflow/queries) aids us in extracting tags from SO DB; also, we can use pattern matching for our queries. The LIKE keyword searches specific patterns based on the regular expression to contain the pattern. Besides that, this [link](https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/ms187489(v=sql.105)?redirectedfrom=MSDN) helps us to work with LIKE statement properly. In the end, we can find many quarry examples on this [page](https://data.stackexchange.com/stackoverflow/queries). + +[Example](https://data.stackexchange.com/stackoverflow/query/1468684/identify-the-tensorflow-tags): +``` sql +-- Identify the Tensorflow tags related to ML +Select +CASE + WHEN TagName LIKE '%tensorflow%' THEN 'tensorflow' + WHEN TagName LIKE '%pytorch%' THEN 'pytorch' + WHEN TagName LIKE '%scikit-learn%' THEN 'scikit-learn' + WHEN TagName LIKE '%keras%' THEN 'keras' + WHEN TagName LIKE '%nltk%' THEN 'nltk' + WHEN TagName LIKE '%huggingface%' THEN 'huggingface' + WHEN TagName LIKE '%spark-ml%' THEN 'spark-ml' +END As Framework, TagName, [Count] +From Tags +Where (TagName LIKE '%tensorflow%' OR + TagName LIKE '%pytorch%' OR + TagName LIKE '%scikit-learn%' OR + TagName LIKE '%keras%' OR + TagName LIKE '%nltk%' OR + TagName LIKE '%huggingface%' OR + TagName LIKE '%spark-ml%') AND + [Count] > 0 -- We can ignore small tags numbers +ORDER BY [Count] DESC +``` ---- 1. Unzip all CSV and XML files. From 5d8a42359dcbe3dafde823fca2061338f83f6dea Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Sat, 25 Sep 2021 17:30:52 -0400 Subject: [PATCH 17/26] Update README.md --- sotorrent/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sotorrent/README.md b/sotorrent/README.md index 21dd6c9..f4a21eb 100644 --- a/sotorrent/README.md +++ b/sotorrent/README.md @@ -79,7 +79,7 @@ Then below photo indicates the tables and their relations from the offical SO du ![DB_scheme](database-model/sotorrent_2018-12-09_model.png) - +# Project ## Phase 0: Create Tags based on Stackoverflow (SO) ### We defined the major ML frameworks based on the Python language, including: @@ -105,7 +105,7 @@ Then below photo indicates the tables and their relations from the offical SO du This [website](https://data.stackexchange.com/stackoverflow/queries) aids us in extracting tags from SO DB; also, we can use pattern matching for our queries. The LIKE keyword searches specific patterns based on the regular expression to contain the pattern. Besides that, this [link](https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/ms187489(v=sql.105)?redirectedfrom=MSDN) helps us to work with LIKE statement properly. In the end, we can find many quarry examples on this [page](https://data.stackexchange.com/stackoverflow/queries). [Example](https://data.stackexchange.com/stackoverflow/query/1468684/identify-the-tensorflow-tags): -``` sql +```sql -- Identify the Tensorflow tags related to ML Select CASE From 095ac920277536be4bf5b7fed0fe21816daebb4b Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Tue, 28 Sep 2021 19:26:11 -0400 Subject: [PATCH 18/26] add phase 1 --- sotorrent/README.md | 131 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 129 insertions(+), 2 deletions(-) diff --git a/sotorrent/README.md b/sotorrent/README.md index f4a21eb..c958c2b 100644 --- a/sotorrent/README.md +++ b/sotorrent/README.md @@ -79,7 +79,6 @@ Then below photo indicates the tables and their relations from the offical SO du ![DB_scheme](database-model/sotorrent_2018-12-09_model.png) -# Project ## Phase 0: Create Tags based on Stackoverflow (SO) ### We defined the major ML frameworks based on the Python language, including: @@ -105,7 +104,7 @@ Then below photo indicates the tables and their relations from the offical SO du This [website](https://data.stackexchange.com/stackoverflow/queries) aids us in extracting tags from SO DB; also, we can use pattern matching for our queries. The LIKE keyword searches specific patterns based on the regular expression to contain the pattern. Besides that, this [link](https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/ms187489(v=sql.105)?redirectedfrom=MSDN) helps us to work with LIKE statement properly. In the end, we can find many quarry examples on this [page](https://data.stackexchange.com/stackoverflow/queries). [Example](https://data.stackexchange.com/stackoverflow/query/1468684/identify-the-tensorflow-tags): -```sql +``` sql -- Identify the Tensorflow tags related to ML Select CASE @@ -128,6 +127,134 @@ Where (TagName LIKE '%tensorflow%' OR [Count] > 0 -- We can ignore small tags numbers ORDER BY [Count] DESC ``` + +The result is here. + +## Phase 1: Exteract Q/A posts on Stackoverflow (SO) Based on the favorit tags from SOTorrent +### Informattion about SOTorrent DB: +1. The `sotorrent-org.2020_12_31.Posts` table: For each question post we select these informaion. +- question_id +- title +- body +- creation date +- view count +- answer count +- comment count +- score of question +- with accepted answer or not +- time to get accepted answer +- time to get first answer + +2. The `PostType` table: + + | Id | Type | + |----|----------| + | 1 | Question | + | 2 | Answer | + +### Prepare the BigQuary environment for our project: +We did this part of the project by the BigQuary service. We added the SOTorrent DB from this [website](https://empirical-software.engineering/sotorrent/). We have to make sure that we signed in to the Gmail account, and by clicking on the left blue button, Online Access (BigQuary), we redirected to the Google Cloud Platform service. Then, we can see two projects in the "Explorer" section, including `sotorrent` and `bigquary-public-data`. The "+ COMPOSE NEW QUARY" button on the top right of the window aids us in implementing our SQL queries inside this environment. I have to mention that clicking on the `sotorrent` project indicates entire tables. If we want to see the schema and data on tables, we can see all of them just by double-clicking on a table. + +At the first time, we usually receive the below error: + +> Access Denied: Project sotorrent-org: User does not have bigquery.jobs.create permission in project sotorrent-org. + +First of all, we should create a project by clicking on "Select a project", close to the Google Cloud Platform name on the top left, and then click on the "NEW PROJECT" button. We have to choose a name for our new project at the next step; we set "Project 37413" and also accepted `bamboo-creek-327421` name for Project ID. In the end, we have to select this project in the "Select a project" section. + +### Upload the CSV of the favorite tags to : + +In the next step, we have to insert our favorite tags, the Phase 0 result, into this environment. We can press three points on the right of the `bamboo-creek-327421` and click on the "Create dataset" option after that. We defined the `Tags` name for our Dataset ID and pressed the "CREATE DATASET" button. Then, we have to open the Tags dataset and choose the "+ CREATE TABLE" button and configure the below setups: + +PUT setup photo + +### Find Q/A based on the ML framework tags on Stackoverflow (https://stackoverflow.com/tags): + +By the below command, we can reach our goal on this step: + +```sql +SELECT posts.Id, posts.PostTypeId, + posts.AcceptedAnswerId, + posts.CreationDate, + posts.ViewCount, + posts.AnswerCount, + posts.CommentCount, + posts.Score, + posts.Title, + posts.Body, + posts.Tags +FROM `sotorrent-org.2020_12_31.Posts` As posts +LEFT JOIN `smooth-zenith-326513.Tags.DesireTags` As tags On TRUE +WHERE posts.PostTypeId=2 OR (posts.PostTypeId=1 AND posts.Tags like '%' || tags.TagName || '%') +``` +Unfortunately, because of the numbers of answer rows, 30,680,111, and limitations on BigQuery: + +```sql +SELECT COUNT(Id) +FROM `sotorrent-org.2020_12_31.Posts` AS posts +WHERE posts.PostTypeId=2 +``` + +We cannot aggregate top conditions with together, So we decided to separate the conditions: + +#### Query 1 +```sql +SELECT posts.Id, posts.PostTypeId, + posts.AcceptedAnswerId, + posts.CreationDate, + posts.ViewCount, + posts.AnswerCount, + posts.CommentCount, + posts.Score, + posts.Title, + posts.Body, + posts.Tags +FROM `sotorrent-org.2020_12_31.Posts` As posts +LEFT JOIN `smooth-zenith-326513.Tags.DesireTags` As tags On TRUE +WHERE posts.PostTypeId=1 AND posts.Tags like '%' || tags.TagName || '%' +``` +#### Query 2 +```sql +SELECT posts.Id, posts.PostTypeId, + posts.AcceptedAnswerId, + posts.CreationDate, + posts.ViewCount, + posts.AnswerCount, + posts.CommentCount, + posts.Score, + posts.Title, + posts.Body, + posts.Tags +FROM `sotorrent-org.2020_12_31.Posts` As posts +WHERE posts.PostTypeId=2 +``` + +### Phase 1 results: + +Email Test: yutyuy6urt@gmail.com + +#### Result of Query 1 + +|Job Parameter|Description| +| ------------- |-------------| +|Job ID|`bamboo-creek-327421:US.bquxjob_20dcde75_17c2e80008b`| +|User|`amin[dot]ghadesi[at]gmail[dot]com`| +|Location|`United States (US)`| +|Creation time|`Sep 28, 2021, 6:21:53 PM`| +|Start time|`Sep 28, 2021, 6:21:53 PM`| +|End time|`Sep 28, 2021, 6:22:14 PM`| +|Duration|**20.9 sec**| +|Bytes processed|**56.49 GB**| +|Bytes billed|**56.49 GB**| +|Job priority|`INTERACTIVE`| +|Destination table|`bamboo-creek-327421:Tags.results-tag-1`| +|Use legacy SQL|`false`| +|Write preference|`Overwrite table`| +|Slot time consumed|`27 min 43.396 sec`| +|Bytes shuffled|`723.07 MB`| +|Bytes spilled to disk|`0 B`| +|Size|**359.3 MB**| +|Number of rows|**163,194**| + ---- 1. Unzip all CSV and XML files. From 8c625a72d770ede0deeae16e5d538040971db33e Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Tue, 28 Sep 2021 19:36:28 -0400 Subject: [PATCH 19/26] Add files via upload --- sotorrent/TF_ML_Tags.csv | 64 ++++++++++++++++++++++++++++++++++++ sotorrent/quarySettings.png | Bin 0 -> 61718 bytes sotorrent/tableSettings.png | Bin 0 -> 59760 bytes 3 files changed, 64 insertions(+) create mode 100644 sotorrent/TF_ML_Tags.csv create mode 100644 sotorrent/quarySettings.png create mode 100644 sotorrent/tableSettings.png diff --git a/sotorrent/TF_ML_Tags.csv b/sotorrent/TF_ML_Tags.csv new file mode 100644 index 0000000..718435b --- /dev/null +++ b/sotorrent/TF_ML_Tags.csv @@ -0,0 +1,64 @@ +Framework,TagName,Count +"tensorflow","tensorflow","71931" +"keras","keras","36808" +"scikit-learn","scikit-learn","24215" +"pytorch","pytorch","13942" +"nltk","nltk","6649" +"tensorflow","tensorflow2.0","4780" +"spark-ml","apache-spark-mllib","2197" +"tensorflow","tensorflow-lite","1738" +"tensorflow","tensorflow-datasets","1703" +"keras","tf.keras","1621" +"keras","keras-layer","1444" +"tensorflow","tensorflow.js","1313" +"tensorflow","tensorflow-serving","1204" +"huggingface","huggingface-transformers","1091" +"spark-ml","apache-spark-ml","888" +"tensorflow","tensorflow-estimator","670" +"tensorflow","tensorflow-gpu","429" +"tensorflow","tensorflow-probability","284" +"tensorflow","tensorflow-hub","270" +"keras","keras-2","268" +"tensorflow","tensorflow2.x","254" +"tensorflow","tensorflow-federated","241" +"huggingface","huggingface-tokenizers","173" +"pytorch","pytorch-lightning","159" +"tensorflow","tensorflowjs-converter","124" +"pytorch","pytorch-dataloader","113" +"keras","keras-tuner","100" +"tensorflow","tensorflow-slim","87" +"tensorflow","tensorflow-model-garden","79" +"tensorflow","tensorflow1.15","71" +"tensorflow","tensorflow-transform","70" +"keras","keras-rl","68" +"keras","auto-keras","62" +"tensorflow","tensorflow-xla","61" +"tensorflow","tensorflow2","56" +"pytorch","spacy-pytorch-transformers","41" +"nltk","nltk-trainer","41" +"nltk","nltk-book","40" +"tensorflow","tensorflow-agents","37" +"tensorflow","tensorflow-data-validation","36" +"huggingface","huggingface-datasets","28" +"tensorflow","tensorflow-model-analysis","26" +"tensorflow","tensorflow-gradient","23" +"tensorflow","distributed-tensorflow","22" +"tensorflow","tensorflow-ssd","22" +"tensorflow","tensorflowsharp","21" +"tensorflow","tensorflowjs","19" +"pytorch","gpytorch","18" +"tensorflow","tensorflow-android","16" +"tensorflow","swift-for-tensorflow","15" +"tensorflow","tensorflow-quantum","15" +"tensorflow","tensorflow-c++","14" +"scikit-learn","scikit-learn-pipeline","12" +"tensorflow","tensorflow-layers","12" +"keras","keras-vggface","10" +"keras","keras-metrics","10" +"pytorch","pytorch-ignite","9" +"tensorflow","intel-tensorflow","6" +"pytorch","pytorch3d","5" +"pytorch","intel-pytorch","3" +"keras","keras-lambda","3" +"tensorflow","tensorflow1.12","1" +"tensorflow","tensorflow-addons","1" \ No newline at end of file diff --git a/sotorrent/quarySettings.png b/sotorrent/quarySettings.png new file mode 100644 index 0000000000000000000000000000000000000000..3e2e0bc0c1f90cc3f210a5cf1ac649fa3da817ea GIT binary patch literal 61718 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 dyQ;URM;-+vCg(l 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\CXJjY+}Gu37)ZkU4;G4@tg0{a3n*O&tjL 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 Lbg`u>mVy5VMJC)> literal 0 HcmV?d00001 From c85cb6cf93f17203cbf668756a30d703709d8254 Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Tue, 28 Sep 2021 19:47:30 -0400 Subject: [PATCH 20/26] add photos --- sotorrent/README.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/sotorrent/README.md b/sotorrent/README.md index c958c2b..c7e84b5 100644 --- a/sotorrent/README.md +++ b/sotorrent/README.md @@ -128,7 +128,7 @@ Where (TagName LIKE '%tensorflow%' OR ORDER BY [Count] DESC ``` -The result is here. +The result is [here](TF_ML_Tags.csv). ## Phase 1: Exteract Q/A posts on Stackoverflow (SO) Based on the favorit tags from SOTorrent ### Informattion about SOTorrent DB: @@ -165,9 +165,9 @@ First of all, we should create a project by clicking on "Select a project", clos In the next step, we have to insert our favorite tags, the Phase 0 result, into this environment. We can press three points on the right of the `bamboo-creek-327421` and click on the "Create dataset" option after that. We defined the `Tags` name for our Dataset ID and pressed the "CREATE DATASET" button. Then, we have to open the Tags dataset and choose the "+ CREATE TABLE" button and configure the below setups: -PUT setup photo +![Setup_photo](tableSettings.png) -### Find Q/A based on the ML framework tags on Stackoverflow (https://stackoverflow.com/tags): +### Find Q/A based on the ML framework tags on Stackoverflow: By the below command, we can reach our goal on this step: @@ -227,6 +227,9 @@ SELECT posts.Id, posts.PostTypeId, FROM `sotorrent-org.2020_12_31.Posts` As posts WHERE posts.PostTypeId=2 ``` +We change the query configuration to the below parameters: + +![query_photo](quarySettings.png) ### Phase 1 results: From 586ee0354b1726e91abced8fb6b50d861fee6091 Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Mon, 29 Nov 2021 16:24:35 -0500 Subject: [PATCH 21/26] Update README.md --- sotorrent/README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sotorrent/README.md b/sotorrent/README.md index c7e84b5..77b940b 100644 --- a/sotorrent/README.md +++ b/sotorrent/README.md @@ -196,7 +196,7 @@ WHERE posts.PostTypeId=2 We cannot aggregate top conditions with together, So we decided to separate the conditions: -#### Query 1 +#### Query 1 (Questions) ```sql SELECT posts.Id, posts.PostTypeId, posts.AcceptedAnswerId, @@ -212,7 +212,7 @@ FROM `sotorrent-org.2020_12_31.Posts` As posts LEFT JOIN `smooth-zenith-326513.Tags.DesireTags` As tags On TRUE WHERE posts.PostTypeId=1 AND posts.Tags like '%' || tags.TagName || '%' ``` -#### Query 2 +#### Query 2 (Answers) ```sql SELECT posts.Id, posts.PostTypeId, posts.AcceptedAnswerId, @@ -220,6 +220,7 @@ SELECT posts.Id, posts.PostTypeId, posts.ViewCount, posts.AnswerCount, posts.CommentCount, + posts.ParentId posts.Score, posts.Title, posts.Body, From 653d6865f12813b035ed4cbf382ad17e46a4201b Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Mon, 29 Nov 2021 16:25:41 -0500 Subject: [PATCH 22/26] Update README.md --- sotorrent/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sotorrent/README.md b/sotorrent/README.md index 77b940b..ba52e65 100644 --- a/sotorrent/README.md +++ b/sotorrent/README.md @@ -220,7 +220,7 @@ SELECT posts.Id, posts.PostTypeId, posts.ViewCount, posts.AnswerCount, posts.CommentCount, - posts.ParentId + posts.ParentId, posts.Score, posts.Title, posts.Body, From b5007e53af6171ca1c16fcf9c4f43cfe8b6e248a Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Tue, 28 Jun 2022 15:23:41 -0400 Subject: [PATCH 23/26] Add median query --- sotorrent/README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/sotorrent/README.md b/sotorrent/README.md index ba52e65..86ebef2 100644 --- a/sotorrent/README.md +++ b/sotorrent/README.md @@ -228,6 +228,20 @@ SELECT posts.Id, posts.PostTypeId, FROM `sotorrent-org.2020_12_31.Posts` As posts WHERE posts.PostTypeId=2 ``` +#### Query 3: Find the median of numberical values +```sql +SELECT + PERCENTILE_CONT(posts.ViewCount, 0.5) OVER () AS View_median, + PERCENTILE_CONT(posts.AnswerCount, 0.5) OVER () AS Ans_count_median, + PERCENTILE_CONT(posts.CommentCount, 0.5) OVER () AS Com_count_median, + PERCENTILE_CONT(posts.Score, 0.5) OVER () AS Score_median +FROM + `sotorrent-org.2020_12_31.Posts` As posts +LIMIT + 1 + ``` + + We change the query configuration to the below parameters: ![query_photo](quarySettings.png) From 34c0a13ae8254816ad798181aa7fd34712ee748e Mon Sep 17 00:00:00 2001 From: Amin Ghadesi Date: Fri, 7 Oct 2022 12:26:36 -0400 Subject: [PATCH 24/26] Update sql query for the lates update --- sotorrent/README.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/sotorrent/README.md b/sotorrent/README.md index 86ebef2..8eb9ae9 100644 --- a/sotorrent/README.md +++ b/sotorrent/README.md @@ -273,6 +273,31 @@ Email Test: yutyuy6urt@gmail.com |Size|**359.3 MB**| |Number of rows|**163,194**| +#### Update Query: Find updated posts +```sql +SELECT p.Id, p.PostTypeId, + p.AcceptedAnswerId, + p.CreationDate, + p.ViewCount, + p.AnswerCount, + p.CommentCount, + p.Score, + p.Title, + p.Body, + p.Tags +FROM Posts as p +inner join posts q + on q.id = coalesce(p.parentid, p.id) -- only questions have tags +WHERE p.CreationDate > '2020-12-31' AND -- After this time + p.PostTypeId=1 AND -- Just questions + (p.Tags LIKE '%tensorflow%' OR + p.Tags LIKE '%pytorch%' OR + p.Tags LIKE '%scikit-learn%' OR + p.Tags LIKE '%keras%' OR + p.Tags LIKE '%nltk%' OR + p.Tags LIKE '%huggingface%' OR + p.Tags LIKE '%spark-ml%') +``` ---- 1. Unzip all CSV and XML files. From 60bad151510377ac881f87e6c66ea1558bd1ca22 Mon Sep 17 00:00:00 2001 From: Amin Ghadesi <6564410+ghadesi@users.noreply.github.com> Date: Thu, 16 Mar 2023 11:55:47 -0400 Subject: [PATCH 25/26] Added update answer query --- sotorrent/README.md | 57 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/sotorrent/README.md b/sotorrent/README.md index 8eb9ae9..fc064ea 100644 --- a/sotorrent/README.md +++ b/sotorrent/README.md @@ -298,6 +298,63 @@ WHERE p.CreationDate > '2020-12-31' AND -- After this time p.Tags LIKE '%huggingface%' OR p.Tags LIKE '%spark-ml%') ``` + +#### Update Query: Find updated answers +```sql +with cte1 as ( +SELECT + p.Id, + p.PostTypeId, + p.AcceptedAnswerId, + p.CreationDate, + p.ViewCount, + p.AnswerCount, + p.CommentCount, + p.Score, + p.Title, + p.Body, + p.Tags, + p.parentid + +FROM Posts as p +inner join posts q + on q.id = coalesce(p.parentid, p.id) -- only questions have tags + +WHERE p.CreationDate > '2020-12-31' AND -- After this time + p.PostTypeId=1 AND -- Just answers + (p.Tags LIKE '%tensorflow%' OR + p.Tags LIKE '%pytorch%' OR + p.Tags LIKE '%scikit-learn%' OR + p.Tags LIKE '%keras%' OR + p.Tags LIKE '%nltk%' OR + p.Tags LIKE '%huggingface%' OR + p.Tags LIKE '%spark-ml%') +) +select + r.Id, + --r.AcceptedAnswerId, + --r.PostTypeId, + r.parentid, + --cte1.Id, + --cte1.PostTypeId, + cte1.AcceptedAnswerId, + cte1.CreationDate, + cte1.ViewCount, + cte1.AnswerCount, + cte1.CommentCount, + cte1.Score, + cte1.Title, + cte1.Body, + cte1.Tags, + cte1.parentid + +from posts r +inner join cte1 + on cte1.id = r.parentid +where + r.PostTypeId=2 +``` + ---- 1. Unzip all CSV and XML files. From 89fc97bbd9ee4de97d691b669bfa297c75f36c23 Mon Sep 17 00:00:00 2001 From: Amin Ghadesi <6564410+ghadesi@users.noreply.github.com> Date: Wed, 12 Jul 2023 21:47:32 -0400 Subject: [PATCH 26/26] Update README.md Find the accepted answer metadata for each library --- sotorrent/README.md | 53 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/sotorrent/README.md b/sotorrent/README.md index fc064ea..d8a48d9 100644 --- a/sotorrent/README.md +++ b/sotorrent/README.md @@ -353,7 +353,58 @@ inner join cte1 on cte1.id = r.parentid where r.PostTypeId=2 -``` +``` + +#### Update Query: Find the accepted answer metadata for each library + +```sql +with cte1 as ( +SELECT + p.Id, + p.PostTypeId, + p.AcceptedAnswerId, + p.CreationDate, + p.ViewCount, + p.AnswerCount, + p.CommentCount, + p.Score, + p.Title, + p.Body, + p.Tags, + p.parentid + +FROM Posts as p +inner join posts q + on q.id = coalesce(p.parentid, p.id) -- only questions have tags + +WHERE + p.PostTypeId=1 AND -- Just answers + p.AcceptedAnswerId IS NOT NULL AND -- Has acc answer + p.Tags LIKE '%tensorflow%' + --(p.Tags LIKE '%tensorflow%' OR + -- p.Tags LIKE '%pytorch%' OR + -- p.Tags LIKE '%scikit-learn%' OR + -- p.Tags LIKE '%keras%' OR + -- p.Tags LIKE '%nltk%' OR + -- p.Tags LIKE '%huggingface%' OR + -- p.Tags LIKE '%spark-ml%') +) +select + r.Id, + r.parentid, + r.PostTypeId, + r.parentid, + r.CreationDate, + r.Score, + r.Body, + r.LastActivityDate + +from posts r +inner join cte1 + on cte1.id = r.parentid +where + r.PostTypeId=2 +``` ----