github-as-market-device
Codebase for the paper ...
Science Score: 44.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (13.6%) to scientific vocabulary
Repository
Codebase for the paper ...
Basic Info
Statistics
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
- Releases: 0
Metadata Files
README.md
📄 Github as Market Device
Authors: Asger Balsby Kromand, Eva Iris Otto & Anders Blok
Journal: Consumption Markets & Culture
[TO-DO] DOI: doi.org/xxxx
[TO-DO]
📚 Abstract
[Abstract]
📂 Repository Structure
├── appendix/ # Datasets or download scripts
├── notebooks/ # Jupyter notebooks for scraping and analysis
├── outputs/ # Output files: datasets, plots and log
├── resources/ # Codebase - functions, scripts, and config.ini
├── results/ # Figures and tables from the paper
├── .python-version
├── CITATION.cff
├── github_terminology.txt # Describing star, follow, follow
├── LICENSE
├── pyproject.toml # Configuration file for uv environment
├── README.md
├── requirements.txt # Dependency file using pip
└── uv.lock # Dependency file for using uv sync
🛠 Installation & Environment
In general we recommend using the package manager uv for creating an uv virtual environment (venv) by using the uv.lock file.
For other environment options, we have also included a requirements.txt file, which in general can be combined with pip install using pip install -r requirements.txt.
Step 1: Cloning the repository using git
Using your terminal, move to the desired location and run:
```bash
Clone repository
git clone https://github.com/asgerkromand/github-as-market-device.git cd github-as-market-device ```
Step 2: Create the environment
Option 1: Using pip
```bash
Create uv virtual environment from file
uv venv # Creates a fresh .venv in your working directory source venv/bin/activate # On Windows: venv\Scripts\activate uv sync # Installs dependencies into virtual environment ```
Option 2: Using pip
bash
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
Step 3: Required: Create additional files
\texttt{config.ini}
Create a configuration (config.ini) file at "resources/config.ini".
The config.ini file will contatin your github token, which you can generate by following this guide.
The config.file should be written as:
bash
[github]
access_token = <your-token>
Be aware, that
\texttt{filepaths.py}
To follow our example, we recommend creating a filepath system using the pathlib library. The file should be called filepaths.py and created at "resources/filepaths.py".
NB. For our filepaths, we created to sets, as the personal data had to be stored on a secure drive, where it was not feasible to put the codebase.
▶️ Usage
Notebooks
The scraping, sorting, vizualising and analysis is performed in the notebooks, and the notebooks come in chronological order representing the pipeline for our paper.
In the notebooks 1-5, the scraping and sorting of data happens. In notebook 6 the networks i visualized, and in notebook 7 the edges are explored more qualitatively. Lastly, the descriptive tables for both the analysis part and the additional tables for the appendix are produced.
These notebooks represent the methodological pipeline use in our paper. Running them now, will not reproduce the original dataset used to produce the networks and tables in our paper.
IMPORTANT: In order to run the pipeline, you need to manually input to files:* An initial company list (.csv) to input for the notebook "1. Collecting first-tier users.ipynb", and a second-tier company list (also .csv) as input for the notebook "2. Creating first-tier dataset.ipynb". For examples: See "output/secondtiercompanies.csv" and "output/initial_list.csv".
Generation of appendix
The appendix -- located at "appendix/appendix.pdf" -- is generated using Overleaf. You can view the Overleaf document here.
The tables in the overleaf document are based on the data columns located in "appendix/appendix_files".
📌 Notes
Note on reproducibility of code
The data files in this repository are not the original datasets used to produce the tables and networks presented in the paper. The original data was collected at an earlier stage, but running the code now would generate similar data using the same methodological steps, and is therefore reproducible in this sense. Some output files are dummy files included to protect personal data.
📜 Citation
If you use this code or data, please cite:
[TO-DO]
bibtex
@article{lastname2025title,
title={Title of the Paper},
author={Last, First and Others},
journal={Journal Name},
year={2025},
doi={10.xxxx/xxxxx}
}
📄 License
MIT License. For specification see file "LICENSE".
🙌 Acknowledgments
This paper is part of the DISTRACT project. DISTRACT is funded by an Advanced Grant from the European Research Council. Period: 1 January 2020 to 31 December 2024.
Views and opinions expressed are however those of the author(s) only and do not necessarily reflect those of the European Union or the European Research Council Executive Agency. Neither the European Union nor the granting authority can be held responsible for them.

Owner
- Name: Asger
- Login: asgerkromand
- Kind: user
- Location: Copenhagen
- Company: @SODAS-KU
- Repositories: 1
- Profile: https://github.com/asgerkromand
Working at SODAS-UCPH
Citation (CITATION.cff)
cff-version: 1.2.0
message: "If you use this codebase, please cite it as below."
title: "GitHub as Market Device: Attention and Collaboration Networks in a Local Proprietary App Ecosystem"
authors:
- family-names: "Kromand"
given-names: "Asger Balsby"
affiliation: "Center for Social Data Science, University of Copenhagen, Copenhagen, Denmark"
- family-names: "Blok"
given-names: "Anders"
affiliation: "Department of Food and Resource Economics and Center for Social Data Science, University of Copenhagen, Copenhagen, Denmark"
orcid: "https://orcid.org/0000-0002-3403-698X"
- family-names: "Otto"
given-names: "Eva Iris"
affiliation: "Department of Communication, University of Copenhagen, Copenhagen, Denmark"
orcid: "https://orcid.org/0000-0002-1060-1219"
date-released: 2025-01-01
version: "0.1.0"
license: MIT
type: software
repository-code: https://github.com/asgerkromand/github-as-market-device
preferred-citation:
type: journal-article
title: "GitHub as Market Device: Attention and Collaboration Networks in a Local Proprietary App Ecosystem"
authors:
- family-names: "Kromand"
given-names: "Asger Balsby"
affiliation: "Center for Social Data Science, University of Copenhagen, Copenhagen, Denmark"
- family-names: "Blok"
given-names: "Anders"
affiliation: "Department of Food and Resource Economics and Center for Social Data Science, University of Copenhagen, Copenhagen, Denmark"
orcid: "https://orcid.org/0000-0002-3403-698X"
- family-names: "Otto"
given-names: "Eva Iris"
affiliation: "Department of Communication, University of Copenhagen, Copenhagen, Denmark"
orcid: "https://orcid.org/0000-0002-1060-1219"
journal: "Consumption Markets & Culture"
year: 2025
doi: 10.xxxx/your-paper-doi
GitHub Events
Total
- Delete event: 16
- Push event: 24
- Create event: 13
Last Year
- Delete event: 16
- Push event: 24
- Create event: 13
Dependencies
- beautifulsoup4 >=0.0.2
- dataclasses >=0.8
- ipykernel >=6.29.5
- ipython >=8.12.3
- jupyter >=1.1.1
- lxml >=5.4.0
- matplotlib *
- networkx >=3.1
- numpy *
- openpyxl >=3.1.5
- pandas *
- pyarrow >=17.0.0
- pygithub >=2.6.1
- regex >=2024.11.6
- scikit-learn *
- seaborn >=0.13.2
- tabulate >=0.9.0
- tqdm *
- beautifulsoup4 >=0.0.2
- dataclasses >=0.8
- ipykernel >=6.29.5
- ipython >=8.12.3
- jupyter >=1.1.1
- lxml >=5.4.0
- matplotlib *
- networkx >=3.1
- numpy *
- openpyxl >=3.1.5
- pandas *
- pyarrow >=17.0.0
- pygithub >=2.6.1
- regex >=2024.11.6
- scikit-learn *
- seaborn >=0.13.2
- tabulate >=0.9.0
- tqdm *
- anyio ==4.5.2
- appnope ==0.1.4
- argon2-cffi ==23.1.0
- argon2-cffi-bindings ==21.2.0
- arrow ==1.3.0
- asttokens ==3.0.0
- async-lru ==2.0.4
- attrs ==25.3.0
- babel ==2.17.0
- backcall ==0.2.0
- beautifulsoup4 ==4.13.4
- bleach ==6.1.0
- certifi ==2025.1.31
- cffi ==1.17.1
- charset-normalizer ==3.4.1
- colorama ==0.4.6
- comm ==0.2.2
- contourpy ==1.1.1
- contourpy ==1.3.2
- cryptography ==44.0.2
- cycler ==0.12.1
- dataclasses ==0.8
- debugpy ==1.8.14
- decorator ==5.2.1
- defusedxml ==0.7.1
- deprecated ==1.2.18
- et-xmlfile ==2.0.0
- exceptiongroup ==1.2.2
- executing ==2.2.0
- fastjsonschema ==2.21.1
- fonttools ==4.57.0
- fqdn ==1.5.1
- h11 ==0.16.0
- httpcore ==1.0.9
- httpx ==0.28.1
- idna ==3.10
- importlib-metadata ==8.5.0
- importlib-resources ==6.4.5
- ipykernel ==6.29.5
- ipython ==8.12.3
- ipywidgets ==8.1.6
- isoduration ==20.11.0
- jedi ==0.19.2
- jinja2 ==3.1.6
- joblib ==1.4.2
- json5 ==0.12.0
- jsonpointer ==3.0.0
- jsonschema ==4.23.0
- jsonschema-specifications ==2023.12.1
- jupyter ==1.1.1
- jupyter-client ==8.6.3
- jupyter-console ==6.6.3
- jupyter-core ==5.7.2
- jupyter-events ==0.10.0
- jupyter-lsp ==2.2.5
- jupyter-server ==2.14.2
- jupyter-server-terminals ==0.5.3
- jupyterlab ==4.3.6
- jupyterlab-pygments ==0.3.0
- jupyterlab-server ==2.27.3
- jupyterlab-widgets ==3.0.14
- kiwisolver ==1.4.7
- markupsafe ==2.1.5
- matplotlib ==3.7.5
- matplotlib-inline ==0.1.7
- mistune ==3.1.3
- nbclient ==0.10.1
- nbconvert ==7.16.6
- nbformat ==5.10.4
- nest-asyncio ==1.6.0
- networkx ==3.1
- notebook ==7.3.3
- notebook-shim ==0.2.4
- numpy ==1.24.4
- openpyxl ==3.1.5
- overrides ==7.7.0
- packaging ==25.0
- pandas ==2.0.3
- pandocfilters ==1.5.1
- parso ==0.8.4
- pexpect ==4.9.0
- pickleshare ==0.7.5
- pillow ==10.4.0
- pkgutil-resolve-name ==1.3.10
- platformdirs ==4.3.6
- prometheus-client ==0.21.1
- prompt-toolkit ==3.0.51
- psutil ==7.0.0
- ptyprocess ==0.7.0
- pure-eval ==0.2.3
- pyarrow ==17.0.0
- pycparser ==2.22
- pygithub ==2.6.1
- pygments ==2.19.1
- pyjwt ==2.9.0
- pynacl ==1.5.0
- pyparsing ==3.1.4
- python-dateutil ==2.9.0.post0
- python-json-logger ==3.3.0
- pytz ==2025.2
- pywin32 ==310
- pywinpty ==2.0.14
- pyyaml ==6.0.2
- pyzmq ==26.4.0
- referencing ==0.35.1
- regex ==2024.11.6
- requests ==2.32.3
- rfc3339-validator ==0.1.4
- rfc3986-validator ==0.1.1
- rpds-py ==0.20.1
- scikit-learn ==1.3.2
- scipy ==1.10.1
- send2trash ==1.8.3
- setuptools ==75.3.2
- six ==1.17.0
- sniffio ==1.3.1
- soupsieve ==2.7
- stack-data ==0.6.3
- terminado ==0.18.1
- threadpoolctl ==3.5.0
- tinycss2 ==1.2.1
- tomli ==2.2.1
- tornado ==6.4.2
- tqdm ==4.67.1
- traitlets ==5.14.3
- types-python-dateutil ==2.9.0.20241206
- typing-extensions ==4.13.2
- tzdata ==2025.2
- uri-template ==1.3.0
- urllib3 ==2.2.3
- wcwidth ==0.2.13
- webcolors ==24.8.0
- webencodings ==0.5.1
- websocket-client ==1.8.0
- widgetsnbextension ==4.0.14
- wrapt ==1.17.2
- zipp ==3.20.2
- 141 dependencies