O Stack overflow é uma plataforma gratuita de perguntas e respostas para programadores, estudantes e entusiastas em tecnologia e desenvolvimento. Nele, qualquer usuário pode publicar uma dúvida para ser respondida por outros membros do site. Além disso, a plataforma oferece classificados de empregos na área de tecnologia.
Trabalhar com desenvolvimento de software exige conhecimento multidisciplinar e estudo. É comum observar que pessoas novatas na área sintam-se frustradas pela quantidade de assuntos paralelos que estão envolvidos no aprendizado de uma “simples” linguagem de programação.
Para um programador Java, por exemplo, espera-se que ele tenha conhecimento de versionamento de código, Programação Orientada a Objetos (POO), modelagem de banco de dados, conexão a banco de dados, frameworks entre diversos outros assuntos que se fossemos citar aqui seria uma lista gigantesca.
É humanamente impossível, um indivíduo saber com perfeição todos os tópicos que envolvem um fluxo de desenvolvimento de software. Entramos na Universidade, achando que estamos 100% prontos para resolver qualquer problema complexo no mercado de trabalho, mas a realidade não é essa.
No dia-a-dia no mercado de trabalho, bem como na universidade, frequentemente desenvolvedores de todo o mundo recorrem à internet em busca de dúvidas e, hoje, um dos ambientes mais utilizados é o Stack Overflow, que serve como uma comunidade de programadores, um espaço em que os profissionais/estudantes podem trocar dicas, elencar soluções e esclarecer dúvidas sobre códigos.
Por ser uma das ferramentas mais utilizadas, com o propósito de troca de conhecimento em programação. Esperamos, inferir através da comunidade de usuários da plataforma, informações como: “Comparativo salarial dos desenvolvedores ao redor do mundo”, “Escolaridade dos profissionais”, “Gênero dos profissionais de desenvolvimento”.
Os dados são provenientes de uma plataforma que reúne diversas bases de dados disponíveis publicamente e de forma gratuita sendo suficiente realizar um cadastro na plataforma. A base de dados se encontra-se aqui: link do database stack-overflow 2022. Esse database possue diversas características relacionadas aos desenvolvedores que responderam a pesquisa do StackOverflow em 2022.
Os dados variam desde a educação do desenvolvedor até o hobby dele. Dessa maneira, iremos, neste projeto, realizar uma análise exploratória dos dados extraindo características dos desenvolvedores como sua educação, trabalho, salário entre outra(s) característica(s).
A partir disso iremos elencar os países desses desenvolvedores em um conjunto de análises de maneira a visualizar pontos como a mediana salarial dos desenvolvedores ao redor do mundo, educação dos desenvolvedores por país, experiência de trabalho baseada no sexo e densidade de profissionais em cada país.
Tais extrações possibilitam uma análise de mercado que pode auxiliar na tomada de decisão de profissionais iniciantes na carreira do desenvolvimento ou até mesmo quem pensa em fazer uma transição de carreira.
Os seguintes pacotes serão utilizados no projeto:
| Pacotes | Utilização |
|---|---|
| library(stringr) | Utilizada para manipulação de strings |
| library(rmdformats) | Customização do template gerado pelo rmarkdown |
| library(knitr) | Para geração de tabelas |
| library(rlang) | Resolução de dependencias |
| library(tidyverse) | Para manipulação avançada de DataFrames |
| library(kableExtra) | Customização de tabelas do knitr::kable() |
| library(dplyr) | Para manipulação avançada de DataFrames |
| library(quantmod) | Utilizado para processamento de dados financeiros |
| library(tidyr) | Para manipulação avançada de DataFrames |
Nessa seção você encontrará com detalhes as operações que foram realizadas para normalizar o dataset.
A leitura do dataset foi realizada utilizando o seguinte comando, com a base de dados baixada na máquina pessoal:
dataset_path = "dataset/survey_results_public/survey_results_public.csv"
dataset <- read.csv(dataset_path)Para realizar o download da base, assim como foi descrito na introdução, baixa acessar esse link.
O dataset possui 73268 linhas e 79 colunas. Inicialmente realizamos um tratamento para remover colunas que só pussuem valores na da seguinte forma:
dataset = dataset[colSums(!is.na(dataset)) > 0] %>% select(-ResponseId) %>% filter(MainBranch == "I am a developer by profession")Após o tratamento, onde filtramos apenas pelas pessoas que exercem a profissão de desenvolvedor, o dataset resultante ficou com 53507 linhas e 76 colunas. Para fim de visualização dos dados, fizemos uma limpeza nos NA presentes sendo dispostos da seguinte forma:
| MainBranch | Employment | RemoteWork | CodingActivities | EdLevel | LearnCode | LearnCodeOnline | LearnCodeCoursesCert | YearsCode | YearsCodePro | DevType | OrgSize | PurchaseInfluence | BuyNewTool | Country | Currency | CompTotal | CompFreq | LanguageHaveWorkedWith | LanguageWantToWorkWith | DatabaseHaveWorkedWith | DatabaseWantToWorkWith | PlatformHaveWorkedWith | PlatformWantToWorkWith | WebframeHaveWorkedWith | WebframeWantToWorkWith | MiscTechHaveWorkedWith | MiscTechWantToWorkWith | ToolsTechHaveWorkedWith | ToolsTechWantToWorkWith | NEWCollabToolsHaveWorkedWith | NEWCollabToolsWantToWorkWith | OpSysProfessional.use | OpSysPersonal.use | VersionControlSystem | VCInteraction | OfficeStackAsyncHaveWorkedWith | OfficeStackAsyncWantToWorkWith | OfficeStackSyncHaveWorkedWith | OfficeStackSyncWantToWorkWith | Blockchain | NEWSOSites | SOVisitFreq | SOAccount | SOPartFreq | SOComm | Age | Gender | Trans | Sexuality | Ethnicity | Accessibility | MentalHealth | TBranch | ICorPM | WorkExp | Knowledge_1 | Knowledge_2 | Knowledge_3 | Knowledge_4 | Knowledge_5 | Knowledge_6 | Knowledge_7 | Frequency_1 | Frequency_2 | Frequency_3 | TimeSearching | TimeAnswering | Onboarding | ProfessionalTech | TrueFalse_1 | TrueFalse_2 | TrueFalse_3 | SurveyLength | SurveyEase | ConvertedCompYearly | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 121 | I am a developer by profession | Employed, full-time | Full in-person | Hobby | Bachelor’s degree (B.A., B.S., B.Eng., etc.) | Other online resources (e.g., videos, blogs, forum);On the job training;Online Courses or Certification | Technical documentation;Blogs;Stack Overflow;Written-based Online Courses | Udemy;Pluralsight;Udacity | 12 | 12 | Developer, full-stack;Data or business analyst | 10,000 or more employees | I have some influence | Ask developers I know/work with;Research companies that have advertised on sites I visit | India | INR Indian rupee | 100000 | Monthly | Bash/Shell;HTML/CSS;Java;JavaScript;Python;SQL | Bash/Shell;HTML/CSS;Java;JavaScript;Python;SQL | Oracle;PostgreSQL;Redis;SQLite | Oracle;PostgreSQL;Redis;SQLite | Oracle Cloud Infrastructure | Oracle Cloud Infrastructure | Angular;Express;Flask;Next.js;Node.js;React.js | Angular;Express;Flask;Next.js;Node.js;React.js | NumPy;Pandas;Spring | NumPy;Pandas;Spring | Docker;Kubernetes;npm;Yarn | Docker;Kubernetes;npm;Yarn | Notepad++;Visual Studio Code | Notepad++;Visual Studio Code | Linux-based;Windows | Linux-based;Windows | Git;SVN | Command-line;Version control hosting service web GUI | Microsoft Lists | Microsoft Lists | Microsoft Teams | Microsoft Teams | Very favorable | Stack Overflow | Daily or almost daily | Yes | I have never participated in Q&A on Stack Overflow | Neutral | 25-34 years old | Man | No | Straight / Heterosexual | Indian;Asian | None of the above | None of the above | Yes | People manager | 12 | Strongly agree | Disagree | Agree | Agree | Agree | Agree | Agree | Never | Never | Never | 30-60 minutes a day | Less than 15 minutes a day | Somewhat long | None of these | Yes | Yes | Yes | Appropriate in length | Neither easy nor difficult | 15480 |
| 191 | I am a developer by profession | Employed, full-time | Hybrid (some remote, some in-person) | I don’t code outside of work | Bachelor’s degree (B.A., B.S., B.Eng., etc.) | Books / Physical media;Other online resources (e.g., videos, blogs, forum);School (i.e., University, College, etc);On the job training;Online Courses or Certification | Technical documentation;Blogs;Written Tutorials;Stack Overflow;Video-based Online Courses;Online forum;Written-based Online Courses;Auditory material (e.g., podcasts);Interactive tutorial | Coursera;Pluralsight | 26 | 22 | Senior Executive (C-Suite, VP, etc.) | 1,000 to 4,999 employees | I have some influence | Other (please specify):;Visit developer communities like Stack Overflow;Ask developers I know/work with | United States of America | USD United States dollar | 250000 | Yearly | C#;C++;HTML/CSS;JavaScript;SQL;Swift;TypeScript | C#;F#;HTML/CSS;JavaScript;PowerShell;SQL;Swift;TypeScript | Microsoft SQL Server | Elasticsearch;Microsoft SQL Server;MongoDB;PostgreSQL;Redis;SQLite | Colocation;Microsoft Azure;VMware | Microsoft Azure | ASP.NET;ASP.NET Core | Angular;ASP.NET Core ;Blazor;Node.js;React.js | .NET | .NET;NumPy;Pandas;React Native;Scikit-learn;TensorFlow | Docker;Kubernetes | Docker;Kubernetes;npm | Visual Studio;Visual Studio Code;Xcode | Visual Studio;Visual Studio Code;Xcode | Windows | macOS | Git | Code editor;Command-line;Version control hosting service web GUI;Dedicated version control GUI application | Stack Overflow for Teams;Smartsheet | Stack Overflow for Teams | Google Chat;Microsoft Teams;Slack | Google Chat;Microsoft Teams | Unfavorable | Stack Overflow for Teams (private knowledge sharing & collaboration platform for companies);Stack Overflow;Stack Exchange | Daily or almost daily | Yes | Less than once per month or monthly | No, not really | 35-44 years old | Man | No | Straight / Heterosexual | White | None of the above | None of the above | Yes | People manager | 27 | Strongly agree | Agree | Disagree | Disagree | Agree | Agree | Agree | 6-10 times a week | 10+ times a week | 6-10 times a week | 30-60 minutes a day | 60-120 minutes a day | Somewhat long | Microservices;Continuous integration (CI) and (more often) continuous delivery;Automated testing | Yes | Yes | Yes | Appropriate in length | Neither easy nor difficult | 250000 |
| 300 | I am a developer by profession | Employed, full-time | Fully remote | Hobby | Bachelor’s degree (B.A., B.S., B.Eng., etc.) | Books / Physical media;Other online resources (e.g., videos, blogs, forum);School (i.e., University, College, etc);On the job training;Online Courses or Certification | Technical documentation;Blogs;Written Tutorials;Stack Overflow;Video-based Online Courses;Online forum;How-to videos | Coursera | 21 | 19 | Developer, full-stack;Developer, back-end;Developer, desktop or enterprise applications | 10 to 19 employees | I have little or no influence | Start a free trial;Ask developers I know/work with | Brazil | BRL Brazilian real | 360000 | Yearly | C#;Java;Kotlin;SQL;TypeScript | C#;SQL;TypeScript | Microsoft SQL Server;Oracle | Microsoft SQL Server;Redis | Firebase | AWS | Angular;ASP.NET;ASP.NET Core ;jQuery | ASP.NET Core ;Blazor;React.js;Vue.js | .NET | .NET;Apache Kafka | Docker;npm | Docker;npm | Android Studio;Eclipse;Notepad++;Visual Studio;Visual Studio Code | Notepad++;Visual Studio;Visual Studio Code | Windows;Windows Subsystem for Linux (WSL) | Linux-based;Windows;Windows Subsystem for Linux (WSL) | Git | Code editor;Command-line;Version control hosting service web GUI;Dedicated version control GUI application | Jira Work Management | Jira Work Management | Microsoft Teams;Zoom | Microsoft Teams | Very favorable | Stack Overflow;Stack Exchange | A few times per month or weekly | Yes | I have never participated in Q&A on Stack Overflow | No, not at all | 25-34 years old | Man | No | Straight / Heterosexual | White;Hispanic or Latino/a;South American;Multiracial | None of the above | None of the above | Yes | Independent contributor | 19 | Agree | Agree | Disagree | Neither agree nor disagree | Disagree | Disagree | Strongly agree | Never | 1-2 times a week | 1-2 times a week | 30-60 minutes a day | Less than 15 minutes a day | Somewhat long | Microservices;Continuous integration (CI) and (more often) continuous delivery | Yes | No | Yes | Appropriate in length | Easy | 74784 |
| 380 | I am a developer by profession | Employed, full-time | Hybrid (some remote, some in-person) | Hobby;Contribute to open-source projects;Bootstrapping a business | Master’s degree (M.A., M.S., M.Eng., MBA, etc.) | Friend or family member;Other online resources (e.g., videos, blogs, forum);School (i.e., University, College, etc);On the job training;Online Courses or Certification;Colleague | Technical documentation;Blogs;Written Tutorials;Stack Overflow;Online forum;How-to videos;Interactive tutorial | Codecademy;Skillsoft | 8 | 6 | Data scientist or machine learning specialist;Engineer, data;Developer, back-end;Developer, desktop or enterprise applications;Project manager | 10,000 or more employees | I have little or no influence | Start a free trial;Visit developer communities like Stack Overflow;Ask developers I know/work with;Research companies that have advertised on sites I visit | United States of America | USD United States dollar | 140000 | Yearly | Bash/Shell;C#;C++;HTML/CSS;Perl;PHP;PowerShell;Python;Rust;SQL;VBA | Bash/Shell;C#;Go;Haskell;Kotlin;PowerShell;Python;Rust;SQL | Microsoft SQL Server;MongoDB;MySQL;Neo4j;PostgreSQL;Redis;SQLite | MongoDB;MySQL;Neo4j;PostgreSQL;Redis;SQLite | Google Cloud;Linode;Microsoft Azure | Linode;Microsoft Azure | Django;Flask;Node.js | Django;Flask | .NET;Hadoop;NumPy;Pandas;Qt;Scikit-learn | .NET;NumPy;Pandas;Qt;Scikit-learn;TensorFlow;Torch/PyTorch | Ansible;Docker;Kubernetes;npm | Ansible;Docker;Kubernetes;Unity 3D | IPython/Jupyter;Notepad++;PyCharm;Qt Creator;Visual Studio;Visual Studio Code | IPython/Jupyter;Notepad++;PyCharm;Qt Creator | Linux-based;Windows | Linux-based;Windows | Git | Code editor;Command-line;Version control hosting service web GUI | Confluence;Jira Work Management | Confluence | Cisco Webex Teams;Microsoft Teams;Zoom | Mattermost;Rocketchat | Very unfavorable | Stack Overflow;Stack Exchange | A few times per week | Yes | A few times per month or weekly | Yes, somewhat | 25-34 years old | Man | No | Straight / Heterosexual | White | None of the above | None of the above | Yes | People manager | 6 | Agree | Agree | Agree | Agree | Agree | Agree | Strongly agree | 6-10 times a week | 3-5 times a week | 3-5 times a week | 30-60 minutes a day | 30-60 minutes a day | Somewhat long | Innersource initiative;DevOps function;Developer portal or other central places to find tools/services;Continuous integration (CI) and (more often) continuous delivery;Automated testing;Observability tools | Yes | Yes | Yes | Appropriate in length | Neither easy nor difficult | 140000 |
| 460 | I am a developer by profession | Employed, full-time | Fully remote | Hobby;Contribute to open-source projects | Bachelor’s degree (B.A., B.S., B.Eng., etc.) | Books / Physical media;Other online resources (e.g., videos, blogs, forum);School (i.e., University, College, etc);Online Courses or Certification | Technical documentation;Blogs;Programming Games;Written Tutorials;Stack Overflow;Video-based Online Courses;Online forum;How-to videos | Pluralsight | 24 | 22 | Developer, full-stack;Developer, back-end | 100 to 499 employees | I have some influence | Visit developer communities like Stack Overflow;Ask developers I know/work with | United States of America | USD United States dollar | 187000 | Yearly | Bash/Shell;C#;Go;HTML/CSS;JavaScript;PowerShell;Ruby;SQL;TypeScript;VBA | Bash/Shell;C#;HTML/CSS;JavaScript;Ruby;SQL;TypeScript;VBA | Microsoft SQL Server;PostgreSQL;Redis;SQLite | Microsoft SQL Server;PostgreSQL;Redis;SQLite | AWS | AWS | ASP.NET;ASP.NET Core ;Express;jQuery;Node.js;React.js;Ruby on Rails | ASP.NET;ASP.NET Core ;Blazor;Deno;Express;jQuery;Node.js;React.js;Ruby on Rails | .NET;Apache Kafka | .NET | Docker;Homebrew;Kubernetes;npm;Yarn | Docker;Homebrew;Kubernetes;npm;Yarn | Notepad++;Rider;RubyMine;TextMate;Visual Studio;Visual Studio Code | Notepad++;Rider;RubyMine;TextMate;Visual Studio;Visual Studio Code | macOS | Windows | Git | Command-line;Version control hosting service web GUI;Dedicated version control GUI application | Confluence;Jira Work Management;Notion;Stack Overflow for Teams | Notion;Stack Overflow for Teams | Slack;Zoom | Slack;Zoom | Very unfavorable | Stack Overflow for Teams (private knowledge sharing & collaboration platform for companies);Stack Overflow;Stack Exchange | A few times per week | Yes | A few times per week | No, not really | 35-44 years old | Man | No | Straight / Heterosexual | White;North American | None of the above | None of the above | Yes | Independent contributor | 22 | Agree | Agree | Neither agree nor disagree | Agree | Agree | Agree | Strongly agree | 1-2 times a week | 1-2 times a week | 1-2 times a week | 30-60 minutes a day | 30-60 minutes a day | Somewhat long | Innersource initiative;DevOps function;Microservices;Developer portal or other central places to find tools/services;Continuous integration (CI) and (more often) continuous delivery;Automated testing;Observability tools | Yes | Yes | Yes | Appropriate in length | Easy | 187000 |
| 488 | I am a developer by profession | Employed, full-time | Fully remote | Hobby;Contribute to open-source projects;Bootstrapping a business;Freelance/contract work | Some college/university study without earning a degree | Books / Physical media;Friend or family member;Other online resources (e.g., videos, blogs, forum);School (i.e., University, College, etc);On the job training;Online Courses or Certification;Colleague;Other (please specify): | Technical documentation;Blogs;Written Tutorials;Stack Overflow;Online books;Video-based Online Courses;Online challenges (e.g., daily or weekly coding challenges);Online forum;How-to videos;Written-based Online Courses;Interactive tutorial | Coursera;Udemy;Codecademy;Pluralsight;edX;Udacity | 15 | 12 | Developer, front-end;Developer, back-end;Developer, QA or test;DevOps specialist;System administrator;Security professional | 100 to 499 employees | I have some influence | Start a free trial;Visit developer communities like Stack Overflow;Ask developers I know/work with;Read ratings or reviews on third party sites like G2Crowd | United States of America | USD United States dollar | 110000 | Yearly | Bash/Shell;Groovy;HTML/CSS;Java;JavaScript;PHP;Python;Rust;SQL | Bash/Shell;C;C++;Elixir;Erlang;HTML/CSS;PHP;Python;Rust;SQL | MariaDB;MySQL;Redis;SQLite | Elasticsearch;MariaDB;MySQL;Neo4j;PostgreSQL;Redis;SQLite | AWS;Linode | AWS;DigitalOcean;Linode | jQuery;Laravel;Vue.js | Laravel;Phoenix | NumPy;Pandas;Spring | NumPy;Pandas;Spring | Docker;npm;Yarn | Docker;Yarn | IntelliJ;Nano;PhpStorm;PyCharm;Sublime Text | IntelliJ;Nano;PhpStorm;PyCharm;Sublime Text | Linux-based | Linux-based;Windows | Git | Code editor;Command-line;Version control hosting service web GUI;Dedicated version control GUI application | Jira Work Management | Jira Work Management | Cisco Webex Teams;Slack | Slack | Very unfavorable | Collectives on Stack Overflow;Stack Overflow;Stack Exchange | Multiple times per day | Yes | Less than once per month or monthly | No, not really | 25-34 years old | Man | No | Straight / Heterosexual | White;European;Hispanic or Latino/a | None of the above | None of the above | Yes | Independent contributor | 12 | Agree | Strongly agree | Agree | Agree | Strongly agree | Agree | Agree | 1-2 times a week | 3-5 times a week | 1-2 times a week | 30-60 minutes a day | 15-30 minutes a day | Somewhat long | Continuous integration (CI) and (more often) continuous delivery;Automated testing | Yes | Yes | Yes | Appropriate in length | Easy | 110000 |
A partir da limpeza inicial dos dados, eliminando NAs criaremos subsets para facilitar a análise feita.
Nessa primeira análise, faremos um novo pré processamento na base inicialmente tratada. E criaremos um subset contendo as seguintes colunas:
Country -> País do usuário
ConvertedCompYearly -> Quanto o usuário recebe como pagamento anual total em USD
Levaremos em consideração valor de compensação anual para de no mínimo mil USD e no máximo 2 milhões USD
firstData <- select(dataset, Country, ConvertedCompYearly) %>% dplyr::filter(ConvertedCompYearly >= 1000 & ConvertedCompYearly <= 2000000) %>% drop_na()Após isso, temos o seguinte subset:
head(firstData, 10) %>% kable() %>% kableExtra::kable_styling(bootstrap_options = c("responsive", "striped", "hover", "condensed"))| Country | ConvertedCompYearly |
|---|---|
| Israel | 215232 |
| Netherlands | 49056 |
| United Kingdom of Great Britain and Northern Ireland | 60307 |
| United States of America | 65000 |
| United States of America | 110000 |
| Czech Republic | 19224 |
| Austria | 202623 |
| Austria | 51192 |
| Italy | 34126 |
| Canada | 97605 |
E então, tiraremos a mediana salarial dos dez países com mais respostas ao questionário do Stack Overflow. Vale salientar, que escolhemos a mediana pois,
df <- firstData %>%
group_by(Country) %>% mutate(median = median(ConvertedCompYearly), count = n()) %>% group_by(Country, median, count) %>% tally(sort = TRUE)
ggplot(data = head(df, 10), aes(x = median, y = Country, fill = "red")) +
geom_bar(stat='identity', show.legend = FALSE) +
theme_minimal() +
ggtitle("Mediana salarial anual em USD por Pais") +
ylab('Paises') + xlab('Mediana salarial') +
geom_text(aes(label=median),hjust = -0.2, color="black",
position = position_dodge(0.9), size=3.5) + xlim(c(0,200000))Notamos pelo gráfico acima, através do estudo da mediana que os desenvolvedores são melhores remunerados nos Estados Unidos, o que faz sentido, tendo em vista que é o local onde encontram-se as gigantes da tecnologia. No entanto, como o trabalho de desenvolvedor pode ser realizado de forma remota, é possível que desenvolvedores de outros países trabalhem em gigantes localizadas nos Estados Unidos, ou em países do primeiro mundo, o que com toda certeza influencia a remuneração anual.
Nessa seção iremos fazer um comparativo do nível educacional dos desenvolvedores baseado em seu país de nascença. Para isso teremos que coletar as colunas “EdLevel” e “Country” as quais correspondem, respectivamente, ao nível de educação e o país de origem do desenvolvedor. O seguinte código ira gerar um subset com a educação de cada desenvolvedor da base e uma correlação com seu país de origem:
education_country <- dataset %>% select(EdLevel, Country) %>% drop_na()Após isso, obtemos o seguinte subset:
head(education_country) %>%
kable() %>%
kableExtra::kable_styling(bootstrap_options = c("responsive", "striped", "hover", "condensed"))| EdLevel | Country |
|---|---|
| Bachelor’s degree (B.A., B.S., B.Eng., etc.) | Israel |
| Bachelor’s degree (B.A., B.S., B.Eng., etc.) | United States of America |
| Some college/university study without earning a degree | India |
| Master’s degree (M.A., M.S., M.Eng., MBA, etc.) | Netherlands |
| Some college/university study without earning a degree | Croatia |
| Bachelor’s degree (B.A., B.S., B.Eng., etc.) | United Kingdom of Great Britain and Northern Ireland |
De maneira a facilitar a construção dos dados de forma visual, criaremos um subset elencando apenas os 5 países com maior quantidade de desenvolvedores da seguinte forma:
education_country$EdLevel <- as.factor(education_country$EdLevel)
education_country$Country <- as.factor(education_country$Country)
countries <- as.list(levels(education_country$Country))
dev_by_country = data.frame()
for (row in 1:length(countries)) {
dev_by_country[row, "Devs"] <- nrow(education_country %>% filter(Country == countries[row]))
dev_by_country[row, "Country"] <- countries[row]
}
education_levels = as.list(levels(education_country$EdLevel))
dev_by_country = dev_by_country %>% arrange(desc(Devs)) %>% slice_head(n = 5)
data = data.frame()
for (education in education_levels) {
for (country in dev_by_country$Country) {
temp = data.frame(ed_level = education, country = country,
count = nrow(education_country %>%
filter(EdLevel == education,
Country == country)))
data = rbind(data, temp)
}
}
legend_names = c("1","2","3","4","5","6","7","8","9")
colors = rainbow(5)
barplot(matrix(data$count, nrow = 5, ncol = 9), main="Relação países x nível educacional", names.arg=legend_names, xlab="Nível educacional", ylab="Quantidade de desenvolvedores", col=colors, beside = T)
legend("topright",pch=15,col=colors,legend=dev_by_country$Country, cex = 0.65)
legend("right", pch=legend_names, legend=education_levels, cex = 0.55)Como forma de análise podemos visualizar que o gráfico nos mostra algumas informações importantes. A primeira é que o país que tem mais desenvolvedores é nos EUA, dado que consolida o posicionamento dos EUA como uma potência na área de tecnologia, entretanto, é importante visualizar que o StackOverflow é uma plataforma cuja linguagem é o inglês e, por essa razão, os dados podem ser inflados de forma tendenciosa para o país norte americano.
Um ponto que podemos, entretanto, inferir com segurança é que desenvolvedores em grande parte são aqueles que possuem um bacharelado o que demonstra uma relevância da academia para o profissional da área de TI.
Dessa maneira, podemos afirmar que, na atualidade, cursar faculdades de bacharelado pode impulsionar as pessoas que desejam ingressar na área de TI.
Nesta seção iremos fazer um comparativo entre homens e mulheres no mundo do desenvolvimento. Para isso iremos tratar o nosso dataset de maneira a remover todos as respostas inválidas (NA). Em seguida iremos extrair diversos dados como a quantidade total de pessoas que declararam seu sexo, a quantidade de homens e mulheres e analisar os seus efeitos na área da tecnologia ao redor do mundo assim como tentar identificar relações de causa e efeito nos cenários descobertos:
gender_dataset = dataset %>% filter(!is.na(Gender)) %>%
select(Gender, Trans, Sexuality, YearsCode, ConvertedCompYearly) %>%
filter(ConvertedCompYearly <= 2000000 & ConvertedCompYearly > 1000) %>%
drop_na()
gender_dataset = gender_dataset %>% filter(Gender == "Man" | Gender == "Woman")
gender = data.frame(count = (gender_dataset %>% summarise(n()))[1,1], man_count = (gender_dataset %>% summarise(sum(Gender == "Man")))[1,1], woman_count = (gender_dataset %>% summarise(sum(Gender == "Woman")))[1,1])Primeiramente podemos fazer uma análise básica a respeito do mercado de tecnologia: a distribuição de homens e mulheres que responderam à pesquisa. No gráfico a seguir podemos ver como se comporta esses dados:
library(ggplot2)
# Criação do data frame para o gráfico
data <- data.frame(
group=c("Homem", "Mulher"),
value=c(gender$man_count, gender$woman_count)
)
# Computação das posições dos labels no gráfico
data <- data %>%
arrange(desc(group)) %>%
mutate(prop = value / sum(data$value)*100) %>%
mutate(ypos = cumsum(prop)- 0.5*prop) %>%
mutate(percentage = paste(round((value / gender$count) * 100, 2), "%", sep = ""))
# Criação do gráfico de pizza
ggplot(data, aes(x="", y=prop, fill=group)) +
geom_bar(stat="identity", width=1, color="white") +
coord_polar("y", start=0) +
theme_void() +
theme(legend.position="right") +
labs(fill="Genero") +
geom_text(aes(y=ypos, label=percentage), color = "white", size=5) +
scale_fill_brewer(palette="Set1")É visível a discrepância entre homens e mulheres na área de tecnologia. Infelizmente isso se reflete na área em si onde é observável uma grande quantia de homens em detrimento das mulheres, fruto de uma ideologia de desigualdade de gênero ao redor do mundo como podemos observar nessa matéria.
Entretanto, para entendermos a razão desse cenário de desigualdade precisamos investigar as relações de causa e efeito que tornam isso uma realidade. Para isso irei analisar o tempo de experiência médio entre o público feminino e masculino assim como a média salarial anual em USD.
Vale salientar que para a análise desse gráfico na questão de média salarial anual os valores do eixo y devem ser multiplicados por 1000.
library(ggplot2)
# Criação do data frame para o gráfico
data <- data.frame(
group=c("Homem", "Mulher"),
value=c((gender_dataset %>% filter(Gender == "Man") %>% summarise(mean(ConvertedCompYearly)))[1,1], (gender_dataset %>% filter(Gender == "Woman") %>% summarise(mean(ConvertedCompYearly)))[1,1]),
exp_mean=c((gender_dataset %>% filter(Gender == "Man") %>% summarise(mean(as.integer(YearsCode), na.rm = T)))[1,1],
(gender_dataset %>% filter(Gender == "Woman") %>% summarise(mean(as.integer(YearsCode), na.rm = T)))[1,1]))
data$value = round(data$value / 1000, 2)
data$exp_mean = round(data$exp_mean, 2)
colors = rainbow(2)
barplot(as.matrix(data %>% select(-group)), main="Comparativo salário médio x experiência média",names.arg=c("Salario (x1000)", "Experiencia"), ylab="Quantidade", col=colors, beside = T)
legend("topright",pch = 15,col=colors,legend=data$group)Nos gráficos acima podemos visualizar que, enquanto temos uma grande quantia de homens na área de TI, as mulheres representam uma parcela quase inexistente. Ao vermos como se comporta o gráfico salarial médio podemos notar que as mulheres recebem anualmente bem menos que os homens no enquanto possuem um tempo de experiência média menor se comparado aos homens.
Claramente isso torna a área menos atrativa para as mulheres que, não só são desestimuladas no nível social a exercerem profissões relacionadas a TI assim como elas tendem a ganhar menos mesmo quando possuem um tempo de experiência igual ou próximo ao de um homem.
O presente trabalho teve como objetivo fazer uma análise exploratória referente ao Survey de 2022 realizado pelo Stack Overflow.
O dataset inicial contém várias informações a respeito dos usuários
da plataforma, no entanto, optamos por explorar detalhes voltados a
Remuneração Anual dos profissionais por países, Nível educacional
por países e por fim, buscamos identificar o comparativo entre
percentual entre Mulheres X Homens bem como a diferença
salarial entre os dois grupos usuários da plataforma.
A razão de se analisar a relação salário versus países, se deu por conta
do desejo bem difundido de vários estudantes e profissionais de TI, de
se aventurarem na área em outros países. Em geral, tem-se a ideia de que
países Europeus são melhor remunerados que o Brasil, buscamos ter mais
ou menos uma ideia do quanto isso é verdade. E identificamos, que sim,
que países como Estados Unidos, Canadá, que são os países dos sonhos
para muitos desenvolvedores, tem sim uma remuneração salarial melhor do
que os outros paises.
A partir da primeira análise, podemos ver os países mais bem remunerados. Em seguida, qual é o grau de escolaridade dos profissionais nesses países? Então, para os cinco países com mais respostas ao survey dentro do nosso Dataset, inferimos qual é o nível de escolaridade geral dos profissionais da área, para identificar o que se espera de um desenvolvedor nesses países. A ideia geral, que vende-se no Brasil é que precisa-se apenas de curiosidade, que diploma universitário não significa nada. Então, a partir dessa análise buscamos saber no mercado de trabalho estrangeiro, o quanto essa crença é verdadeira. A partir da análise gráfica, identificamos que sim, existem profissionais que não tem formação universitária completa e em casos extremos uma pequena parte tem apenas o ensino fundamental. Mas nos Estados Unidos, país com a melhor remuneração de acordo com a análise anterior, a grande maioria dos profissionais tem no mínimo um diploma universitário. Então, entende-se que o mercado em si anda preferindo profissionais com um diploma universitário.
E por fim, buscamos analisar a diferença se é que existe, entre a quantidade de profissionais Homens x Mulheres. Além disso, em termos de experiência profissional o quão diferente é o salário médio de ambos os grupos. A partir da análise, constatamos o que já esperávamos, a quantidade de Homens no como profissionais de desenvolvimento de Software ainda é superior às de mulheres. E o salário anual das mulheres acaba sendo menor que os dos homens, mesmo com um tempo de experiência parecido.
Com essa análise, conseguimos dados bastante interessantes sobre o mercado de TI, usando dados disponíveis publicamente sobre os usuários de um dos ambiente mais utilizados por programadores e programadoras em todo o mundo. No entanto, esse Dataset provê muito mais possibilidades de análise do que conseguimos inferir. Poderíamos também, analisar a porcentagem de profissionais LBGTs e/ou analisar linguagens de programação mais utilizadas e formas de aprendizado de programação. Enfim, São inúmeras as possibilidades de análise que não conseguimos cobrir e podem ser parte de um trabalho futuro.
Database do projeto: link para download.
Estatística sobre mulheres na tecnologia: matéria.