Dataset-1: Original
# Função para carregar dados de um ano específico e armazenar em um dataframe
load_and_assign_survey_data <- function(year) {
caminho_arquivo <- paste0("./data/", year, ".csv")
data <- read_delim(caminho_arquivo, delim = ";")
assign(paste0("survey", year), data, envir = .GlobalEnv)
}
# Anos de interesse
years <- 2018:2020
# Carregar dados de todos os anos e armazenar em dataframes separados
for (year in years) {
load_and_assign_survey_data(year)
dataframe_name <- paste0("survey", year)
cat("Colunas do ano", year, ":\n")
print(colnames(get(dataframe_name)))
cat("\n")
cat("Conteúdo do dataframe para o ano", year, ":\n")
print(get(dataframe_name))
cat("\n")
}
## New names:
## • `` -> `...130`
## • `` -> `...131`
## • `` -> `...132`
## • `` -> `...133`
## • `` -> `...134`
## • `` -> `...135`
## • `` -> `...136`
## • `` -> `...137`
## • `` -> `...138`
## • `` -> `...139`
## • `` -> `...140`
## • `` -> `...141`
## • `` -> `...142`
## • `` -> `...143`
## • `` -> `...144`
## • `` -> `...145`
## • `` -> `...146`
## • `` -> `...147`
## • `` -> `...148`
## • `` -> `...149`
## • `` -> `...150`
## • `` -> `...151`
## • `` -> `...152`
## • `` -> `...153`
## • `` -> `...154`
## • `` -> `...155`
## • `` -> `...156`
## • `` -> `...157`
## • `` -> `...158`
## • `` -> `...159`
## • `` -> `...160`
## • `` -> `...161`
## • `` -> `...162`
## • `` -> `...163`
## • `` -> `...164`
## • `` -> `...165`
## • `` -> `...166`
## • `` -> `...167`
## • `` -> `...168`
## • `` -> `...169`
## • `` -> `...170`
## • `` -> `...171`
## • `` -> `...172`
## • `` -> `...173`
## • `` -> `...174`
## • `` -> `...175`
## • `` -> `...176`
## • `` -> `...177`
## • `` -> `...178`
## • `` -> `...179`
## • `` -> `...180`
## • `` -> `...181`
## • `` -> `...182`
## • `` -> `...183`
## • `` -> `...184`
## • `` -> `...185`
## • `` -> `...186`
## • `` -> `...187`
## • `` -> `...188`
## • `` -> `...189`
## • `` -> `...190`
## • `` -> `...191`
## • `` -> `...192`
## • `` -> `...193`
## • `` -> `...194`
## • `` -> `...195`
## • `` -> `...196`
## • `` -> `...197`
## • `` -> `...198`
## • `` -> `...199`
## • `` -> `...200`
## • `` -> `...201`
## • `` -> `...202`
## • `` -> `...203`
## • `` -> `...204`
## • `` -> `...205`
## • `` -> `...206`
## • `` -> `...207`
## • `` -> `...208`
## • `` -> `...209`
## • `` -> `...210`
## • `` -> `...211`
## • `` -> `...212`
## • `` -> `...213`
## • `` -> `...214`
## • `` -> `...215`
## • `` -> `...216`
## • `` -> `...217`
## • `` -> `...218`
## • `` -> `...219`
## • `` -> `...220`
## • `` -> `...221`
## • `` -> `...222`
## • `` -> `...223`
## • `` -> `...224`
## • `` -> `...225`
## • `` -> `...226`
## • `` -> `...227`
## • `` -> `...228`
## • `` -> `...229`
## • `` -> `...230`
## • `` -> `...231`
## • `` -> `...232`
## • `` -> `...233`
## • `` -> `...234`
## • `` -> `...235`
## • `` -> `...236`
## • `` -> `...237`
## • `` -> `...238`
## • `` -> `...239`
## • `` -> `...240`
## • `` -> `...241`
## • `` -> `...242`
## • `` -> `...243`
## • `` -> `...244`
## • `` -> `...245`
## • `` -> `...246`
## • `` -> `...247`
## • `` -> `...248`
## • `` -> `...249`
## • `` -> `...250`
## • `` -> `...251`
## • `` -> `...252`
## • `` -> `...253`
## • `` -> `...254`
## • `` -> `...255`
## • `` -> `...256`
## • `` -> `...257`
## • `` -> `...258`
## • `` -> `...259`
## • `` -> `...260`
## • `` -> `...261`
## • `` -> `...262`
## • `` -> `...263`
## • `` -> `...264`
## • `` -> `...265`
## • `` -> `...266`
## • `` -> `...267`
## • `` -> `...268`
## • `` -> `...269`
## • `` -> `...270`
## • `` -> `...271`
## • `` -> `...272`
## • `` -> `...273`
## • `` -> `...274`
## • `` -> `...275`
## • `` -> `...276`
## • `` -> `...277`
## • `` -> `...278`
## • `` -> `...279`
## • `` -> `...280`
## • `` -> `...281`
## • `` -> `...282`
## • `` -> `...283`
## • `` -> `...284`
## • `` -> `...285`
## • `` -> `...286`
## • `` -> `...287`
## Warning: One or more parsing issues, call `problems()` on your data frame for details,
## e.g.:
## dat <- vroom(...)
## problems(dat)
## Rows: 98855 Columns: 287
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (155): Hobby, OpenSource, Country, Student, Employment, FormalEducation,...
## dbl (43): Respondent, AssessJob1, AssessJob2, AssessJob3, AssessJob4, Asses...
## num (1): ConvertedSalary
## lgl (88): TimeAfterBootcamp, PlatformDesireNextYear, AdBlockerDisable, AdBl...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## Colunas do ano 2018 :
## [1] "Respondent" "Hobby"
## [3] "OpenSource" "Country"
## [5] "Student" "Employment"
## [7] "FormalEducation" "UndergradMajor"
## [9] "CompanySize" "DevType"
## [11] "YearsCoding" "YearsCodingProf"
## [13] "JobSatisfaction" "CareerSatisfaction"
## [15] "HopeFiveYears" "JobSearchStatus"
## [17] "LastNewJob" "AssessJob1"
## [19] "AssessJob2" "AssessJob3"
## [21] "AssessJob4" "AssessJob5"
## [23] "AssessJob6" "AssessJob7"
## [25] "AssessJob8" "AssessJob9"
## [27] "AssessJob10" "AssessBenefits1"
## [29] "AssessBenefits2" "AssessBenefits3"
## [31] "AssessBenefits4" "AssessBenefits5"
## [33] "AssessBenefits6" "AssessBenefits7"
## [35] "AssessBenefits8" "AssessBenefits9"
## [37] "AssessBenefits10" "AssessBenefits11"
## [39] "JobContactPriorities1" "JobContactPriorities2"
## [41] "JobContactPriorities3" "JobContactPriorities4"
## [43] "JobContactPriorities5" "JobEmailPriorities1"
## [45] "JobEmailPriorities2" "JobEmailPriorities3"
## [47] "JobEmailPriorities4" "JobEmailPriorities5"
## [49] "JobEmailPriorities6" "JobEmailPriorities7"
## [51] "UpdateCV" "Currency"
## [53] "Salary" "SalaryType"
## [55] "ConvertedSalary" "CurrencySymbol"
## [57] "CommunicationTools" "TimeFullyProductive"
## [59] "EducationTypes" "SelfTaughtTypes"
## [61] "TimeAfterBootcamp" "HackathonReasons"
## [63] "AgreeDisagree1" "AgreeDisagree2"
## [65] "AgreeDisagree3" "LanguageWorkedWith"
## [67] "LanguageDesireNextYear" "DatabaseWorkedWith"
## [69] "DatabaseDesireNextYear" "PlatformWorkedWith"
## [71] "PlatformDesireNextYear" "FrameworkWorkedWith"
## [73] "FrameworkDesireNextYear" "IDE"
## [75] "OperatingSystem" "NumberMonitors"
## [77] "Methodology" "VersionControl"
## [79] "CheckInCode" "AdBlocker"
## [81] "AdBlockerDisable" "AdBlockerReasons"
## [83] "AdsAgreeDisagree1" "AdsAgreeDisagree2"
## [85] "AdsAgreeDisagree3" "AdsActions"
## [87] "AdsPriorities1" "AdsPriorities2"
## [89] "AdsPriorities3" "AdsPriorities4"
## [91] "AdsPriorities5" "AdsPriorities6"
## [93] "AdsPriorities7" "AIDangerous"
## [95] "AIInteresting" "AIResponsible"
## [97] "AIFuture" "EthicsChoice"
## [99] "EthicsReport" "EthicsResponsible"
## [101] "EthicalImplications" "StackOverflowRecommend"
## [103] "StackOverflowVisit" "StackOverflowHasAccount"
## [105] "StackOverflowParticipate" "StackOverflowJobs"
## [107] "StackOverflowDevStory" "StackOverflowJobsRecommend"
## [109] "StackOverflowConsiderMember" "HypotheticalTools1"
## [111] "HypotheticalTools2" "HypotheticalTools3"
## [113] "HypotheticalTools4" "HypotheticalTools5"
## [115] "WakeTime" "HoursComputer"
## [117] "HoursOutside" "SkipMeals"
## [119] "ErgonomicDevices" "Exercise"
## [121] "Gender" "SexualOrientation"
## [123] "EducationParents" "RaceEthnicity"
## [125] "Age" "Dependents"
## [127] "MilitaryUS" "SurveyTooLong"
## [129] "SurveyEasy" "...130"
## [131] "...131" "...132"
## [133] "...133" "...134"
## [135] "...135" "...136"
## [137] "...137" "...138"
## [139] "...139" "...140"
## [141] "...141" "...142"
## [143] "...143" "...144"
## [145] "...145" "...146"
## [147] "...147" "...148"
## [149] "...149" "...150"
## [151] "...151" "...152"
## [153] "...153" "...154"
## [155] "...155" "...156"
## [157] "...157" "...158"
## [159] "...159" "...160"
## [161] "...161" "...162"
## [163] "...163" "...164"
## [165] "...165" "...166"
## [167] "...167" "...168"
## [169] "...169" "...170"
## [171] "...171" "...172"
## [173] "...173" "...174"
## [175] "...175" "...176"
## [177] "...177" "...178"
## [179] "...179" "...180"
## [181] "...181" "...182"
## [183] "...183" "...184"
## [185] "...185" "...186"
## [187] "...187" "...188"
## [189] "...189" "...190"
## [191] "...191" "...192"
## [193] "...193" "...194"
## [195] "...195" "...196"
## [197] "...197" "...198"
## [199] "...199" "...200"
## [201] "...201" "...202"
## [203] "...203" "...204"
## [205] "...205" "...206"
## [207] "...207" "...208"
## [209] "...209" "...210"
## [211] "...211" "...212"
## [213] "...213" "...214"
## [215] "...215" "...216"
## [217] "...217" "...218"
## [219] "...219" "...220"
## [221] "...221" "...222"
## [223] "...223" "...224"
## [225] "...225" "...226"
## [227] "...227" "...228"
## [229] "...229" "...230"
## [231] "...231" "...232"
## [233] "...233" "...234"
## [235] "...235" "...236"
## [237] "...237" "...238"
## [239] "...239" "...240"
## [241] "...241" "...242"
## [243] "...243" "...244"
## [245] "...245" "...246"
## [247] "...247" "...248"
## [249] "...249" "...250"
## [251] "...251" "...252"
## [253] "...253" "...254"
## [255] "...255" "...256"
## [257] "...257" "...258"
## [259] "...259" "...260"
## [261] "...261" "...262"
## [263] "...263" "...264"
## [265] "...265" "...266"
## [267] "...267" "...268"
## [269] "...269" "...270"
## [271] "...271" "...272"
## [273] "...273" "...274"
## [275] "...275" "...276"
## [277] "...277" "...278"
## [279] "...279" "...280"
## [281] "...281" "...282"
## [283] "...283" "...284"
## [285] "...285" "...286"
## [287] "...287"
##
## Conteúdo do dataframe para o ano 2018 :
## # A tibble: 98,855 × 287
## Respondent Hobby OpenSource Country Student Employment FormalEducation
## <dbl> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1 Yes No Kenya No Employed … Bachelor’s deg…
## 2 3 Yes Yes United Kingdom No Employed … Bachelor’s deg…
## 3 4 Yes Yes United States No Employed … Associate degr…
## 4 5 No No United States No Employed … Bachelor’s deg…
## 5 7 Yes No South Africa Yes, p… Employed … Some college/u…
## 6 8 Yes No United Kingdom No Employed … Bachelor’s deg…
## 7 9 Yes Yes United States No Employed … Some college/u…
## 8 10 Yes Yes Nigeria No Employed … Bachelor’s deg…
## 9 11 Yes Yes United States No Employed … Some college/u…
## 10 16 No Yes India No Employed … Bachelor’s deg…
## # ℹ 98,845 more rows
## # ℹ 280 more variables: UndergradMajor <chr>, CompanySize <chr>, DevType <chr>,
## # YearsCoding <chr>, YearsCodingProf <chr>, JobSatisfaction <chr>,
## # CareerSatisfaction <chr>, HopeFiveYears <chr>, JobSearchStatus <chr>,
## # LastNewJob <chr>, AssessJob1 <dbl>, AssessJob2 <dbl>, AssessJob3 <dbl>,
## # AssessJob4 <dbl>, AssessJob5 <dbl>, AssessJob6 <dbl>, AssessJob7 <dbl>,
## # AssessJob8 <dbl>, AssessJob9 <dbl>, AssessJob10 <dbl>, …
## New names:
## • `` -> `...86`
## • `` -> `...87`
## • `` -> `...88`
## • `` -> `...89`
## • `` -> `...90`
## • `` -> `...91`
## • `` -> `...92`
## • `` -> `...93`
## • `` -> `...94`
## • `` -> `...95`
## • `` -> `...96`
## • `` -> `...97`
## • `` -> `...98`
## • `` -> `...99`
## • `` -> `...100`
## • `` -> `...101`
## • `` -> `...102`
## • `` -> `...103`
## • `` -> `...104`
## • `` -> `...105`
## • `` -> `...106`
## • `` -> `...107`
## • `` -> `...108`
## • `` -> `...109`
## • `` -> `...110`
## • `` -> `...111`
## • `` -> `...112`
## • `` -> `...113`
## • `` -> `...114`
## • `` -> `...115`
## • `` -> `...116`
## • `` -> `...117`
## • `` -> `...118`
## • `` -> `...119`
## • `` -> `...120`
## • `` -> `...121`
## • `` -> `...122`
## • `` -> `...123`
## • `` -> `...124`
## • `` -> `...125`
## • `` -> `...126`
## • `` -> `...127`
## • `` -> `...128`
## • `` -> `...129`
## • `` -> `...130`
## • `` -> `...131`
## • `` -> `...132`
## • `` -> `...133`
## • `` -> `...134`
## • `` -> `...135`
## • `` -> `...136`
## • `` -> `...137`
## • `` -> `...138`
## • `` -> `...139`
## • `` -> `...140`
## • `` -> `...141`
## • `` -> `...142`
## • `` -> `...143`
## • `` -> `...144`
## • `` -> `...145`
## • `` -> `...146`
## • `` -> `...147`
## • `` -> `...148`
## • `` -> `...149`
## • `` -> `...150`
## • `` -> `...151`
## • `` -> `...152`
## • `` -> `...153`
## • `` -> `...154`
## • `` -> `...155`
## • `` -> `...156`
## • `` -> `...157`
## • `` -> `...158`
## • `` -> `...159`
## • `` -> `...160`
## • `` -> `...161`
## • `` -> `...162`
## • `` -> `...163`
## • `` -> `...164`
## • `` -> `...165`
## • `` -> `...166`
## • `` -> `...167`
## • `` -> `...168`
## • `` -> `...169`
## • `` -> `...170`
## • `` -> `...171`
## • `` -> `...172`
## • `` -> `...173`
## • `` -> `...174`
## • `` -> `...175`
## • `` -> `...176`
## • `` -> `...177`
## • `` -> `...178`
## • `` -> `...179`
## • `` -> `...180`
## • `` -> `...181`
## • `` -> `...182`
## • `` -> `...183`
## • `` -> `...184`
## • `` -> `...185`
## • `` -> `...186`
## • `` -> `...187`
## • `` -> `...188`
## • `` -> `...189`
## • `` -> `...190`
## • `` -> `...191`
## • `` -> `...192`
## • `` -> `...193`
## • `` -> `...194`
## • `` -> `...195`
## • `` -> `...196`
## • `` -> `...197`
## • `` -> `...198`
## • `` -> `...199`
## • `` -> `...200`
## • `` -> `...201`
## • `` -> `...202`
## • `` -> `...203`
## • `` -> `...204`
## • `` -> `...205`
## • `` -> `...206`
## • `` -> `...207`
## • `` -> `...208`
## • `` -> `...209`
## • `` -> `...210`
## • `` -> `...211`
## • `` -> `...212`
## • `` -> `...213`
## • `` -> `...214`
## • `` -> `...215`
## • `` -> `...216`
## • `` -> `...217`
## • `` -> `...218`
## • `` -> `...219`
## • `` -> `...220`
## • `` -> `...221`
## • `` -> `...222`
## • `` -> `...223`
## • `` -> `...224`
## • `` -> `...225`
## • `` -> `...226`
## • `` -> `...227`
## • `` -> `...228`
## • `` -> `...229`
## • `` -> `...230`
## • `` -> `...231`
## • `` -> `...232`
## • `` -> `...233`
## • `` -> `...234`
## • `` -> `...235`
## • `` -> `...236`
## • `` -> `...237`
## • `` -> `...238`
## • `` -> `...239`
## • `` -> `...240`
## • `` -> `...241`
## • `` -> `...242`
## • `` -> `...243`
## • `` -> `...244`
## • `` -> `...245`
## • `` -> `...246`
## • `` -> `...247`
## • `` -> `...248`
## • `` -> `...249`
## • `` -> `...250`
## Warning: One or more parsing issues, call `problems()` on your data frame for details,
## e.g.:
## dat <- vroom(...)
## problems(dat)
## Rows: 88883 Columns: 250
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (72): MainBranch, Hobbyist, OpenSourcer, OpenSource, Employment, Countr...
## dbl (4): Respondent, CompTotal, ConvertedComp, WorkWeekHrs
## lgl (174): WorkRemote, WorkLoc, ImpSyn, CodeRev, CodeRevHrs, UnitTests, Purc...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## Colunas do ano 2019 :
## [1] "Respondent" "MainBranch" "Hobbyist"
## [4] "OpenSourcer" "OpenSource" "Employment"
## [7] "Country" "Student" "EdLevel"
## [10] "UndergradMajor" "EduOther" "OrgSize"
## [13] "DevType" "YearsCode" "Age1stCode"
## [16] "YearsCodePro" "CareerSat" "JobSat"
## [19] "MgrIdiot" "MgrMoney" "MgrWant"
## [22] "JobSeek" "LastHireDate" "LastInt"
## [25] "FizzBuzz" "JobFactors" "ResumeUpdate"
## [28] "CurrencySymbol" "CurrencyDesc" "CompTotal"
## [31] "CompFreq" "ConvertedComp" "WorkWeekHrs"
## [34] "WorkPlan" "WorkChallenge" "WorkRemote"
## [37] "WorkLoc" "ImpSyn" "CodeRev"
## [40] "CodeRevHrs" "UnitTests" "PurchaseHow"
## [43] "PurchaseWhat" "LanguageWorkedWith" "LanguageDesireNextYear"
## [46] "DatabaseWorkedWith" "DatabaseDesireNextYear" "PlatformWorkedWith"
## [49] "PlatformDesireNextYear" "WebFrameWorkedWith" "WebFrameDesireNextYear"
## [52] "MiscTechWorkedWith" "MiscTechDesireNextYear" "DevEnviron"
## [55] "OpSys" "Containers" "BlockchainOrg"
## [58] "BlockchainIs" "BetterLife" "ITperson"
## [61] "OffOn" "SocialMedia" "Extraversion"
## [64] "ScreenName" "SOVisit1st" "SOVisitFreq"
## [67] "SOVisitTo" "SOFindAnswer" "SOTimeSaved"
## [70] "SOHowMuchTime" "SOAccount" "SOPartFreq"
## [73] "SOJobs" "EntTeams" "SOComm"
## [76] "WelcomeChange" "SONewContent" "Age"
## [79] "Gender" "Trans" "Sexuality"
## [82] "Ethnicity" "Dependents" "SurveyLength"
## [85] "SurveyEase" "...86" "...87"
## [88] "...88" "...89" "...90"
## [91] "...91" "...92" "...93"
## [94] "...94" "...95" "...96"
## [97] "...97" "...98" "...99"
## [100] "...100" "...101" "...102"
## [103] "...103" "...104" "...105"
## [106] "...106" "...107" "...108"
## [109] "...109" "...110" "...111"
## [112] "...112" "...113" "...114"
## [115] "...115" "...116" "...117"
## [118] "...118" "...119" "...120"
## [121] "...121" "...122" "...123"
## [124] "...124" "...125" "...126"
## [127] "...127" "...128" "...129"
## [130] "...130" "...131" "...132"
## [133] "...133" "...134" "...135"
## [136] "...136" "...137" "...138"
## [139] "...139" "...140" "...141"
## [142] "...142" "...143" "...144"
## [145] "...145" "...146" "...147"
## [148] "...148" "...149" "...150"
## [151] "...151" "...152" "...153"
## [154] "...154" "...155" "...156"
## [157] "...157" "...158" "...159"
## [160] "...160" "...161" "...162"
## [163] "...163" "...164" "...165"
## [166] "...166" "...167" "...168"
## [169] "...169" "...170" "...171"
## [172] "...172" "...173" "...174"
## [175] "...175" "...176" "...177"
## [178] "...178" "...179" "...180"
## [181] "...181" "...182" "...183"
## [184] "...184" "...185" "...186"
## [187] "...187" "...188" "...189"
## [190] "...190" "...191" "...192"
## [193] "...193" "...194" "...195"
## [196] "...196" "...197" "...198"
## [199] "...199" "...200" "...201"
## [202] "...202" "...203" "...204"
## [205] "...205" "...206" "...207"
## [208] "...208" "...209" "...210"
## [211] "...211" "...212" "...213"
## [214] "...214" "...215" "...216"
## [217] "...217" "...218" "...219"
## [220] "...220" "...221" "...222"
## [223] "...223" "...224" "...225"
## [226] "...226" "...227" "...228"
## [229] "...229" "...230" "...231"
## [232] "...232" "...233" "...234"
## [235] "...235" "...236" "...237"
## [238] "...238" "...239" "...240"
## [241] "...241" "...242" "...243"
## [244] "...244" "...245" "...246"
## [247] "...247" "...248" "...249"
## [250] "...250"
##
## Conteúdo do dataframe para o ano 2019 :
## # A tibble: 88,883 × 250
## Respondent MainBranch Hobbyist OpenSourcer OpenSource Employment Country
## <dbl> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1 I am a student… Yes Never The quali… Not emplo… United…
## 2 2 I am a student… No Less than … The quali… Not emplo… Bosnia…
## 3 3 I am not prima… Yes Never The quali… Employed … Thaila…
## 4 4 I am a develop… No Never The quali… Employed … United…
## 5 5 I am a develop… Yes Once a mon… OSS is, o… Employed … Ukraine
## 6 6 I am not prima… Yes Never The quali… Employed … Canada
## 7 7 I am a develop… No Never The quali… Independe… Ukraine
## 8 8 I code primari… Yes Less than … OSS is, o… Not emplo… India
## 9 9 I am a develop… Yes Once a mon… The quali… Employed … New Ze…
## 10 10 I am a develop… Yes Once a mon… OSS is, o… Employed … India
## # ℹ 88,873 more rows
## # ℹ 243 more variables: Student <chr>, EdLevel <chr>, UndergradMajor <chr>,
## # EduOther <chr>, OrgSize <chr>, DevType <chr>, YearsCode <chr>,
## # Age1stCode <chr>, YearsCodePro <chr>, CareerSat <chr>, JobSat <chr>,
## # MgrIdiot <chr>, MgrMoney <chr>, MgrWant <chr>, JobSeek <chr>,
## # LastHireDate <chr>, LastInt <chr>, FizzBuzz <chr>, JobFactors <chr>,
## # ResumeUpdate <chr>, CurrencySymbol <chr>, CurrencyDesc <chr>, …
## New names:
## • `` -> `...62`
## • `` -> `...63`
## • `` -> `...64`
## • `` -> `...65`
## • `` -> `...66`
## • `` -> `...67`
## • `` -> `...68`
## • `` -> `...69`
## • `` -> `...70`
## • `` -> `...71`
## • `` -> `...72`
## • `` -> `...73`
## • `` -> `...74`
## • `` -> `...75`
## • `` -> `...76`
## • `` -> `...77`
## • `` -> `...78`
## • `` -> `...79`
## • `` -> `...80`
## • `` -> `...81`
## • `` -> `...82`
## • `` -> `...83`
## • `` -> `...84`
## • `` -> `...85`
## • `` -> `...86`
## • `` -> `...87`
## • `` -> `...88`
## • `` -> `...89`
## • `` -> `...90`
## • `` -> `...91`
## • `` -> `...92`
## • `` -> `...93`
## • `` -> `...94`
## • `` -> `...95`
## • `` -> `...96`
## • `` -> `...97`
## • `` -> `...98`
## • `` -> `...99`
## • `` -> `...100`
## • `` -> `...101`
## • `` -> `...102`
## • `` -> `...103`
## • `` -> `...104`
## • `` -> `...105`
## • `` -> `...106`
## • `` -> `...107`
## • `` -> `...108`
## • `` -> `...109`
## • `` -> `...110`
## • `` -> `...111`
## • `` -> `...112`
## • `` -> `...113`
## • `` -> `...114`
## • `` -> `...115`
## • `` -> `...116`
## • `` -> `...117`
## • `` -> `...118`
## • `` -> `...119`
## • `` -> `...120`
## • `` -> `...121`
## • `` -> `...122`
## • `` -> `...123`
## • `` -> `...124`
## • `` -> `...125`
## • `` -> `...126`
## • `` -> `...127`
## • `` -> `...128`
## • `` -> `...129`
## • `` -> `...130`
## • `` -> `...131`
## • `` -> `...132`
## • `` -> `...133`
## • `` -> `...134`
## • `` -> `...135`
## • `` -> `...136`
## • `` -> `...137`
## • `` -> `...138`
## • `` -> `...139`
## • `` -> `...140`
## • `` -> `...141`
## • `` -> `...142`
## • `` -> `...143`
## • `` -> `...144`
## • `` -> `...145`
## • `` -> `...146`
## • `` -> `...147`
## • `` -> `...148`
## • `` -> `...149`
## • `` -> `...150`
## • `` -> `...151`
## • `` -> `...152`
## • `` -> `...153`
## • `` -> `...154`
## • `` -> `...155`
## • `` -> `...156`
## • `` -> `...157`
## • `` -> `...158`
## • `` -> `...159`
## • `` -> `...160`
## • `` -> `...161`
## • `` -> `...162`
## • `` -> `...163`
## • `` -> `...164`
## • `` -> `...165`
## • `` -> `...166`
## • `` -> `...167`
## • `` -> `...168`
## • `` -> `...169`
## • `` -> `...170`
## • `` -> `...171`
## • `` -> `...172`
## • `` -> `...173`
## • `` -> `...174`
## • `` -> `...175`
## • `` -> `...176`
## • `` -> `...177`
## • `` -> `...178`
## • `` -> `...179`
## • `` -> `...180`
## • `` -> `...181`
## • `` -> `...182`
## • `` -> `...183`
## • `` -> `...184`
## • `` -> `...185`
## • `` -> `...186`
## • `` -> `...187`
## • `` -> `...188`
## • `` -> `...189`
## • `` -> `...190`
## • `` -> `...191`
## • `` -> `...192`
## • `` -> `...193`
## • `` -> `...194`
## • `` -> `...195`
## • `` -> `...196`
## • `` -> `...197`
## • `` -> `...198`
## • `` -> `...199`
## • `` -> `...200`
## • `` -> `...201`
## • `` -> `...202`
## • `` -> `...203`
## • `` -> `...204`
## • `` -> `...205`
## • `` -> `...206`
## • `` -> `...207`
## • `` -> `...208`
## • `` -> `...209`
## • `` -> `...210`
## • `` -> `...211`
## • `` -> `...212`
## • `` -> `...213`
## • `` -> `...214`
## • `` -> `...215`
## • `` -> `...216`
## • `` -> `...217`
## • `` -> `...218`
## • `` -> `...219`
## • `` -> `...220`
## • `` -> `...221`
## • `` -> `...222`
## • `` -> `...223`
## • `` -> `...224`
## • `` -> `...225`
## • `` -> `...226`
## • `` -> `...227`
## • `` -> `...228`
## • `` -> `...229`
## • `` -> `...230`
## • `` -> `...231`
## • `` -> `...232`
## • `` -> `...233`
## • `` -> `...234`
## • `` -> `...235`
## • `` -> `...236`
## • `` -> `...237`
## • `` -> `...238`
## • `` -> `...239`
## • `` -> `...240`
## • `` -> `...241`
## • `` -> `...242`
## • `` -> `...243`
## • `` -> `...244`
## Warning: One or more parsing issues, call `problems()` on your data frame for details,
## e.g.:
## dat <- vroom(...)
## problems(dat)
## Rows: 64461 Columns: 244
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (108): MainBranch, Hobbyist, Age1stCode, CompFreq, Country, CurrencyDesc...
## dbl (4): Respondent, Age, WorkWeekHrs, YearsCode
## num (2): CompTotal, ConvertedComp
## lgl (130): MiscTechWorkedWith, NEWCollabToolsDesireNextYear, NEWJobHuntResea...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## Colunas do ano 2020 :
## [1] "Respondent" "MainBranch"
## [3] "Hobbyist" "Age"
## [5] "Age1stCode" "CompFreq"
## [7] "CompTotal" "ConvertedComp"
## [9] "Country" "CurrencyDesc"
## [11] "CurrencySymbol" "DatabaseDesireNextYear"
## [13] "DatabaseWorkedWith" "DevType"
## [15] "EdLevel" "Employment"
## [17] "Ethnicity" "Gender"
## [19] "JobFactors" "JobSat"
## [21] "JobSeek" "LanguageDesireNextYear"
## [23] "LanguageWorkedWith" "MiscTechDesireNextYear"
## [25] "MiscTechWorkedWith" "NEWCollabToolsDesireNextYear"
## [27] "NEWCollabToolsWorkedWith" "NEWDevOps"
## [29] "NEWDevOpsImpt" "NEWEdImpt"
## [31] "NEWJobHunt" "NEWJobHuntResearch"
## [33] "NEWLearn" "NEWOffTopic"
## [35] "NEWOnboardGood" "NEWOtherComms"
## [37] "NEWOvertime" "NEWPurchaseResearch"
## [39] "NEWPurpleLink" "NEWSOSites"
## [41] "NEWStuck" "OpSys"
## [43] "OrgSize" "PlatformDesireNextYear"
## [45] "PlatformWorkedWith" "PurchaseWhat"
## [47] "Sexuality" "SOAccount"
## [49] "SOComm" "SOPartFreq"
## [51] "SOVisitFreq" "SurveyEase"
## [53] "SurveyLength" "Trans"
## [55] "UndergradMajor" "WebframeDesireNextYear"
## [57] "WebframeWorkedWith" "WelcomeChange"
## [59] "WorkWeekHrs" "YearsCode"
## [61] "YearsCodePro" "...62"
## [63] "...63" "...64"
## [65] "...65" "...66"
## [67] "...67" "...68"
## [69] "...69" "...70"
## [71] "...71" "...72"
## [73] "...73" "...74"
## [75] "...75" "...76"
## [77] "...77" "...78"
## [79] "...79" "...80"
## [81] "...81" "...82"
## [83] "...83" "...84"
## [85] "...85" "...86"
## [87] "...87" "...88"
## [89] "...89" "...90"
## [91] "...91" "...92"
## [93] "...93" "...94"
## [95] "...95" "...96"
## [97] "...97" "...98"
## [99] "...99" "...100"
## [101] "...101" "...102"
## [103] "...103" "...104"
## [105] "...105" "...106"
## [107] "...107" "...108"
## [109] "...109" "...110"
## [111] "...111" "...112"
## [113] "...113" "...114"
## [115] "...115" "...116"
## [117] "...117" "...118"
## [119] "...119" "...120"
## [121] "...121" "...122"
## [123] "...123" "...124"
## [125] "...125" "...126"
## [127] "...127" "...128"
## [129] "...129" "...130"
## [131] "...131" "...132"
## [133] "...133" "...134"
## [135] "...135" "...136"
## [137] "...137" "...138"
## [139] "...139" "...140"
## [141] "...141" "...142"
## [143] "...143" "...144"
## [145] "...145" "...146"
## [147] "...147" "...148"
## [149] "...149" "...150"
## [151] "...151" "...152"
## [153] "...153" "...154"
## [155] "...155" "...156"
## [157] "...157" "...158"
## [159] "...159" "...160"
## [161] "...161" "...162"
## [163] "...163" "...164"
## [165] "...165" "...166"
## [167] "...167" "...168"
## [169] "...169" "...170"
## [171] "...171" "...172"
## [173] "...173" "...174"
## [175] "...175" "...176"
## [177] "...177" "...178"
## [179] "...179" "...180"
## [181] "...181" "...182"
## [183] "...183" "...184"
## [185] "...185" "...186"
## [187] "...187" "...188"
## [189] "...189" "...190"
## [191] "...191" "...192"
## [193] "...193" "...194"
## [195] "...195" "...196"
## [197] "...197" "...198"
## [199] "...199" "...200"
## [201] "...201" "...202"
## [203] "...203" "...204"
## [205] "...205" "...206"
## [207] "...207" "...208"
## [209] "...209" "...210"
## [211] "...211" "...212"
## [213] "...213" "...214"
## [215] "...215" "...216"
## [217] "...217" "...218"
## [219] "...219" "...220"
## [221] "...221" "...222"
## [223] "...223" "...224"
## [225] "...225" "...226"
## [227] "...227" "...228"
## [229] "...229" "...230"
## [231] "...231" "...232"
## [233] "...233" "...234"
## [235] "...235" "...236"
## [237] "...237" "...238"
## [239] "...239" "...240"
## [241] "...241" "...242"
## [243] "...243" "...244"
##
## Conteúdo do dataframe para o ano 2020 :
## # A tibble: 64,461 × 244
## Respondent MainBranch Hobbyist Age Age1stCode CompFreq CompTotal
## <dbl> <chr> <chr> <dbl> <chr> <chr> <dbl>
## 1 1 I am a developer by … Yes NA 13 Monthly NA
## 2 2 I am a developer by … No NA 19 <NA> NA
## 3 3 I code primarily as … Yes NA 15 <NA> NA
## 4 4 I am a developer by … Yes 25 18 <NA> NA
## 5 5 I used to be a devel… Yes 31 16 <NA> NA
## 6 6 I am a developer by … No NA 14 <NA> NA
## 7 7 I am a developer by … Yes NA 18 Monthly NA
## 8 8 I am a developer by … Yes 36 12 Yearly 116000
## 9 9 I am a developer by … No 30 20 <NA> NA
## 10 10 I am a developer by … Yes 22 14 Yearly 25000
## # ℹ 64,451 more rows
## # ℹ 237 more variables: ConvertedComp <dbl>, Country <chr>, CurrencyDesc <chr>,
## # CurrencySymbol <chr>, DatabaseDesireNextYear <chr>,
## # DatabaseWorkedWith <chr>, DevType <chr>, EdLevel <chr>, Employment <chr>,
## # Ethnicity <chr>, Gender <chr>, JobFactors <chr>, JobSat <chr>,
## # JobSeek <chr>, LanguageDesireNextYear <chr>, LanguageWorkedWith <chr>,
## # MiscTechDesireNextYear <chr>, MiscTechWorkedWith <lgl>, …
Dataset-2: Dataframe com as colunas selecionadas e filtro dos dois grupos “Transition” e “Developer”
# Definir as colunas de interesse para cada ano
columns_dict <- list(
"2018" = c("DevType", "Gender", "JobSatisfaction", "FormalEducation", "Employment", "UndergradMajor"),
"2019" = c("DevType", "Gender", "JobSat", "EdLevel", "Employment", "UndergradMajor"),
"2020" = c("DevType", "Gender", "JobSat", "EdLevel", "Employment", "UndergradMajor")
)
standardize_gender <- function(gender) {
gender <- tolower(gender)
if (gender %in% c("female", "woman")) {
return("Female")
} else if (gender %in% c("male", "man")) {
return("Male")
} else {
return("Non-binary, genderqueer, or gender non-conforming")
}
}
# Função para categorizar idades e lidar com valores já categorizados
#categorize_age <- function(age) {
# if (is.na(age)) {
# return(NA)
# }
# age <- as.numeric(age)
# if (!is.na(age)) {
# return(cut(age,
# breaks = c(-Inf, 17, 24, 34, 44, 54, 64, Inf),
# labels = c("0-18", "18-24", "25-34", "35-44", "45-54", "55-64", "64-100"),
# right = FALSE))
# } else {
# return(age) # Retorna a string original se não for um número
# }
#}
# Função para processar os datasets existentes, adicionar ano e criar a nova coluna "Category"
process_data <- function(data, year, columns_dict) {
# Selecionar colunas de interesse
columns <- columns_dict[[year]]
# Verificar se todas as colunas existem no dataframe
columns <- columns[columns %in% colnames(data)]
data <- data[, columns, drop = FALSE]
# Renomear "FormalEducation" para "EdLevel" no dataset de 2018
if ("FormalEducation" %in% colnames(data)) {
colnames(data)[colnames(data) == "FormalEducation"] <- "EdLevel"
}
# Renomear "JobSatisfaction" para "JobSat" no dataset de 2018
if ("JobSatisfaction" %in% colnames(data)) {
colnames(data)[colnames(data) == "JobSatisfaction"] <- "JobSat"
}
data <- data %>%
filter(str_detect(data$DevType, regex("develop", ignore_case = TRUE)))
# Adicionar coluna de ano
data$Year <- year
# Criar nova coluna "Category"
data$Category <- "Other"
transition_conditions <- data$Employment %in% c("Student, part-time",
"Student, full-time",
"Employed full-time",
"Employed part-time",
"Retired",
"Independent contractor, freelancer, or self-employed",
"Not employed, and not looking for work",
"Not employed, but looking for work",
NA) &
data$EdLevel %in% c("Primary/elementary school",
"Secondary school (e.g. American high school, German Realschule or Gymnasium, etc.)",
"Some college/university study without earning a degree",
"Master’s degree (MA, MS, M.Eng., MBA, etc.)",
"Master’s degree (M.A., M.S., M.Eng., MBA, etc.)",
"Bachelor’s degree (B.A., B.S., B.Eng., etc.)",
"Bachelor’s degree (BA, BS, B.Eng., etc.)",
"Associate degree",
"Associate degree (A.A., A.S., etc.)",
"Other doctoral degree (Ph.D, Ed.D., etc.)",
"Professional degree (JD, MD, etc.)",
"I never completed any formal education",
"Other doctoral degree (Ph.D., Ed.D., etc.)",
NA) &
data$UndergradMajor %in% c("A business discipline (ex. accounting, finance, marketing)",
"A business discipline (such as accounting, finance, marketing, etc.)",
"A health science (ex. nursing, pharmacy, radiology)",
"A health science (such as nursing, pharmacy, radiology, etc.)",
"A humanities discipline (ex. literature, history, philosophy)",
"A humanities discipline (such as literature, history, philosophy, etc.)",
"A natural science (ex. biology, chemistry, physics)",
"A natural science (such as biology, chemistry, physics, etc.)",
"A social science (ex. anthropology, psychology, political science)",
"A social science (such as anthropology, psychology, political science, etc.)",
"Another engineering discipline (ex. civil, electrical, mechanical)",
"Another engineering discipline (such as civil, electrical, mechanical, etc.)",
"Fine arts or performing arts (ex. graphic design, music, studio art)",
"Fine arts or performing arts (such as graphic design, music, studio art, etc.)",
"I never declared a major",
"Mathematics or statistics",
NA)
career_tech_conditions <- data$Employment %in% c("Employed full-time",
"Employed part-time",
"Independent contractor, freelancer, or self-employed",
"Not employed, but looking for work",
"Not employed, and not looking for work",
"Retired",
NA) &
data$EdLevel %in% c("Some college/university study without earning a degree",
"Master’s degree (MA, MS, M.Eng., MBA, etc.)",
"Master’s degree (M.A., M.S., M.Eng., MBA, etc.)",
"Bachelor’s degree (B.A., B.S., B.Eng., etc.)",
"Bachelor’s degree (BA, BS, B.Eng., etc.)",
"Associate degree", "Other doctoral degree (Ph.D, Ed.D., etc.)",
"Associate degree (A.A., A.S., etc.)",
"Professional degree (JD, MD, etc.)",
"Other doctoral degree (Ph.D., Ed.D., etc.)",
NA) &
data$UndergradMajor %in% c("Information systems, information technology, or system administration",
"Computer science, computer engineering, or software engineering",
"Web development or web design",
NA)
data$Category[transition_conditions] <- "Transition"
data$Category[career_tech_conditions] <- "Developer"
# Categorizar idades
#data$AgeCategorized <- sapply(data$Age, categorize_age)
# Substituir valores NA em AgeCategorized pelos valores já categorizados na coluna Age
#na_indices <- is.na(data$AgeCategorized)
#data$AgeCategorized[na_indices] <- data$Age[na_indices]
# Padronizar valores da coluna Gender
data$Gender <- sapply(data$Gender, standardize_gender)
return(data)
}
# Processar os datasets existentes
survey2018_processed <- process_data(survey2018, "2018", columns_dict)
survey2019_processed <- process_data(survey2019, "2019", columns_dict)
survey2020_processed <- process_data(survey2020, "2020", columns_dict)
# Combinar todos os datasets em um único data frame
combined_data <- rbind(survey2018_processed, survey2019_processed, survey2020_processed)
# Exibir as primeiras linhas do data frame combinado
print(combined_data)
## # A tibble: 93,897 × 8
## DevType Gender JobSat EdLevel Employment UndergradMajor Year Category
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Full-stack de… Non-b… Extre… Bachel… Employed … Mathematics o… 2018 Transit…
## 2 Full-stack de… Non-b… Neith… Bachel… Employed … Computer scie… 2018 Develop…
## 3 Back-end deve… Non-b… <NA> Bachel… Employed … Computer scie… 2018 Develop…
## 4 Back-end deve… Non-b… <NA> Some c… Employed … Computer scie… 2018 Develop…
## 5 Back-end deve… Non-b… <NA> Some c… Employed … Fine arts or … 2018 Transit…
## 6 Back-end deve… Non-b… <NA> Master… Employed … Information s… 2018 Develop…
## 7 Back-end deve… Non-b… <NA> Bachel… Employed … Another engin… 2018 Transit…
## 8 Back-end deve… Non-b… <NA> Some c… Employed … Computer scie… 2018 Develop…
## 9 Back-end deve… Non-b… <NA> Bachel… Employed … Another engin… 2018 Transit…
## 10 Back-end deve… Non-b… <NA> Second… Employed … <NA> 2018 Transit…
## # ℹ 93,887 more rows
# Contar as ocorrências de cada país na coluna 'Country'
count_occurrences <- function(data, column_name) {
counts <- table(data[[column_name]])
counts_df <- as.data.frame(counts)
colnames(counts_df) <- c(column_name, "Count")
return(counts_df)
}
# Listar e contar ocorrências para todas as colunas de interesse
#age_counts <- count_occurrences(combined_data, "Age")
#country_counts <- count_occurrences(combined_data, "Country", "Year")
devtype_counts <- count_occurrences(combined_data, "DevType")
gender_counts <- count_occurrences(combined_data, "Gender")
jobsat_counts <- count_occurrences(combined_data, "JobSat")
year_counts <- count_occurrences(combined_data, "Year")
category_counts <- count_occurrences(combined_data, "Category")
undergradMajor_counts <- count_occurrences(combined_data, "UndergradMajor")
edLevel_counts <- count_occurrences(combined_data, "EdLevel")
Agrupar: Coluna + ano + filtro group. Para todos os anos de 2018 a 2020.
Jobsat + Years + Category
# Filtrar dados
combined_data_filtered <- combined_data %>% filter(!is.na(JobSat))
# Função para criar gráficos para cada ano
plot_job_sat_by_year <- function(data, year) {
data_year <- data %>% filter(Year == year)
ggplot(data_year, aes(x = JobSat, fill = Category)) +
geom_bar() +
coord_flip() +
labs(title = paste("Job Satisfaction in", year),
x = "Count",
y = "Job Satisfaction") +
theme_minimal() +
theme(axis.text.y = element_text(size = 8))
}
# Criar gráficos para cada ano
plot_2018 <- plot_job_sat_by_year(combined_data_filtered, "2018")
plot_2019 <- plot_job_sat_by_year(combined_data_filtered, "2019")
plot_2020 <- plot_job_sat_by_year(combined_data_filtered, "2020")
# Exibir gráficos
print(plot_2018)
print(plot_2019)
print(plot_2020)
ggsave(filename = "./grafico/jobsat1.png", plot_2018)
## Saving 7 x 5 in image
ggsave(filename = "./grafico/jobsat2.png", plot_2019)
## Saving 7 x 5 in image
ggsave(filename = "./grafico/jobsat3.png", plot_2020)
## Saving 7 x 5 in image
RESPOSTA:
Em 2018, a maioria das respostas se concentrou na categoria “Moderately satisfied” para ambos os grupos, especialmente entre os desenvolvedores. Quanto à “Satisfação Moderada a Alta”, os desenvolvedores tendem a estar mais satisfeitos, com mais respostas nas categorias “Moderately satisfied” e “Extremely satisfied”. Embora haja insatisfação em ambos os grupos, os desenvolvedores apresentam uma distribuição mais ampla em todas as categorias de satisfação, mostrando maior variabilidade. Na categoria “Neutros”, existe uma proporção significativa de respostas neutras entre os desenvolvedores em comparação com a categoria “Transition”.
Em 2019, a maior concentração de respostas para ambas as categorias está em “Very satisfied”, indicando uma tendência geral de alta satisfação no trabalho. Na categoria “Levemente Satisfeitos e Insatisfeitos”, há uma presença significativa de respostas “Slightly satisfied” e “Slightly dissatisfied” em ambas as categorias, mas os desenvolvedores mostram maior variabilidade. Na categoria “Neutros”, existe uma proporção significativa de respostas neutras em ambas as categorias, embora ligeiramente mais prevalente entre os desenvolvedores. Em relação à “Insatisfação Extrema”, poucas respostas caem nas categorias de extrema insatisfação (“Very dissatisfied”), indicando que a maioria dos profissionais, em ambas as categorias, não está extremamente insatisfeita com seu trabalho.
Em 2020, a maioria dos indivíduos muito satisfeitos são desenvolvedores, com uma pequena proporção de indivíduos em transição também relatando alta satisfação. Um número considerável de desenvolvedores está levemente satisfeito, enquanto a proporção de pessoas em transição levemente satisfeitas é menor. Na categoria “Nem satisfeito nem insatisfeito”, há mais desenvolvedores, mas a proporção de pessoas em transição também é significativa. Mais desenvolvedores estão levemente insatisfeitos em comparação com as pessoas em transição, e a quantidade de indivíduos em transição levemente insatisfeitos é baixa. A maioria dos indivíduos muito insatisfeitos são desenvolvedores, com poucas pessoas em transição relatando alta insatisfação.
Conclusão
Em 2018, os desenvolvedores apresentam maior variabilidade na satisfação no trabalho, com uma concentração significativa na categoria de satisfação moderada, enquanto a categoria “Transition” exibe uma distribuição mais homogênea e geralmente menor em todas as categorias de satisfação.
Em 2019, tanto desenvolvedores quanto indivíduos na categoria “Transition” tendem a relatar altos níveis de satisfação no trabalho, com os desenvolvedores demonstrando maior variabilidade em todas as categorias de satisfação. A maioria dos desenvolvedores estão muito satisfeita ou levemente satisfeita com seu trabalho, embora uma quantidade considerável esteja na categoria de nem satisfeito nem insatisfeito. A maioria das pessoas em transição tende a estar muito satisfeita ou levemente satisfeita, com menos ocorrências nas outras categorias de satisfação.
Em 2020, a maioria dos desenvolvedores continua demonstrando alta satisfação com seu trabalho, com uma proporção significativa muito satisfeita ou levemente satisfeita. Similarmente, os indivíduos em transição também mostram uma tendência predominante de alta satisfação, com menos casos nas outras categorias de satisfação.
EdLevel + Years + Category
# Filtrar dados
combined_data_filtered <- combined_data %>% filter(!is.na(EdLevel))
# Função para criar gráficos para cada ano
plot_ed_level_by_year <- function(data, year) {
data_year <- data %>% filter(Year == year)
ggplot(data_year, aes(x = EdLevel, fill = Category)) +
geom_bar() +
coord_flip() +
labs(title = paste("Educational Level in", year),
x = "Count",
y = "Educational Level") +
theme_minimal() +
theme(axis.text.y = element_text(size = 8))
}
# Criar gráficos para cada ano
plot_2018_ed <- plot_ed_level_by_year(combined_data_filtered, "2018")
plot_2019_ed <- plot_ed_level_by_year(combined_data_filtered, "2019")
plot_2020_ed <- plot_ed_level_by_year(combined_data_filtered, "2020")
print(plot_2018_ed)
print(plot_2019_ed)
print(plot_2020_ed)
ggsave(filename = "./grafico/edlevel1.png", plot_2018_ed )
## Saving 7 x 5 in image
ggsave(filename = "./grafico/edlevel2.png", plot_2019_ed )
## Saving 7 x 5 in image
ggsave(filename = "./grafico/edlevel3.png", plot_2020_ed)
## Saving 7 x 5 in image
RESPOSTA:
Em 2018, a categoria “Bachelor’s degree (Bacharelado)” possui a maioria dos desenvolvedores, com uma quantidade significativa de pessoas em transição com este nível educacional. A categoria “Master’s degree (Mestrado)” também apresenta um número considerável de desenvolvedores, embora a quantidade de indivíduos em transição com mestrado seja pequena. A categoria “Secondary school (Ensino médio)” mostra uma pequena quantidade de indivíduos em transição que concluíram o ensino médio. Outras categorias educacionais têm uma presença menor de desenvolvedores e indivíduos em transição.
Em 2019, a categoria “Bachelor’s degree (Bacharelado)” continua sendo o nível educacional predominante entre os desenvolvedores e indivíduos em transição. A categoria “Master’s degree (Mestrado)” mantém um número significativo de desenvolvedores, com uma leve redução em comparação com 2018. A presença de indivíduos em transição com ensino médio na categoria “Secondary school (Ensino médio)” permanece relativamente constante. Outras categorias educacionais mantêm uma baixa representação.
Em 2020, a categoria “Bachelor’s degree (Bacharelado)” mantém-se como o nível educacional predominante entre desenvolvedores, mas com uma leve redução no número total. A categoria “Master’s degree (Mestrado)” continua significativa entre desenvolvedores, mas ainda menor do que em 2018. A presença de indivíduos em transição na categoria “Secondary school (Ensino médio)” permanece similar aos anos anteriores. Outras categorias educacionais mantêm uma presença pequena, semelhante aos anos anteriores.
Conclusão
Para comparar os gráficos dos três anos, é possível observar uma “Predominância do Bacharelado” em todos os anos. O bacharelado é o nível educacional mais comum tanto entre desenvolvedores quanto entre indivíduos em transição. No entanto, há uma leve tendência de diminuição no número total de bacharéis de 2018 a 2020. O nível “Mestrado” mostra uma presença constante de desenvolvedores com mestrado em todos os anos, embora o número total tenha diminuído ligeiramente de 2018 para 2020.
No nível “Ensino Médio,” os indivíduos em transição que completaram apenas o ensino médio mantêm uma presença constante em todos os anos, com pouca variação. Outras categorias educacionais, como alguns anos de faculdade sem diploma, graus profissionais e educação fundamental, mantêm uma baixa representação ao longo dos anos.
Há uma leve redução no número total de desenvolvedores e indivíduos em transição em 2020, especialmente no nível de bacharelado, sugerindo possíveis mudanças nas tendências educacionais ou no mercado de trabalho.
Esses gráficos oferecem uma visão sobre a distribuição do nível educacional entre desenvolvedores e indivíduos em transição, mostrando a predominância de bacharelados e uma presença constante de mestres, com pouca variação em outras categorias educacionais ao longo dos anos de 2018 a 2020.
Gender + Years + Category
DETALHES:
# Filtrar dados
combined_data_filtered <- combined_data %>% filter(!is.na(Gender))
# Função para criar gráficos para cada ano
plot_gender_by_year <- function(data, year) {
data_year <- data %>% filter(Year == year)
ggplot(data_year, aes(x = Gender, fill = Category)) +
geom_bar() +
coord_flip() +
labs(title = paste("Developer Type in", year),
x = "Count",
y = "Gender") +
theme_minimal() +
theme(axis.text.y = element_text(size = 8))
}
# Criar gráficos para cada ano
plot_2018_Gender <- plot_gender_by_year(combined_data_filtered, "2018")
plot_2019_Gender <- plot_gender_by_year(combined_data_filtered, "2019")
plot_2020_Gender <- plot_gender_by_year(combined_data_filtered, "2020")
# Exibir gráficos
print(plot_2018_Gender)
print(plot_2019_Gender)
print(plot_2020_Gender)
ggsave(filename = "./grafico/Gender1.png", plot_2018_Gender)
## Saving 7 x 5 in image
ggsave(filename = "./grafico/Gender2.png", plot_2019_Gender)
## Saving 7 x 5 in image
ggsave(filename = "./grafico/Gender3.png", plot_2020_Gender)
## Saving 7 x 5 in image
RESPOSTA:
Em 2018, a categoria “Non-binary, Genderqueer, or Gender Non-conforming” mostra uma presença significativa de desenvolvedores em transição. A maioria dos desenvolvedores estabelecidos são do sexo “Male”, mas há uma quantidade notável de desenvolvedores em transição. Em relação ao sexo “Female”, há pouca presença tanto entre os desenvolvedores estabelecidos quanto entre os desenvolvedores em transição.
Em 2019, a quantidade de desenvolvedores em transição na categoria “Non-binary, Genderqueer, or Gender Non-conforming” aumentou consideravelmente, ultrapassando o número de desenvolvedores estabelecidos. A categoria do sexo “Male” continua predominante entre os desenvolvedores estabelecidos, mas há um aumento significativo de desenvolvedores em transição. Já para o sexo “Female”, a presença permanece reduzida, com poucos desenvolvedores tanto estabelecidos quanto em transição.
Em 2020, a quantidade de desenvolvedores estabelecidos na categoria “Non-binary, Genderqueer, or Gender Non-conforming” aumentou significativamente, enquanto o número de desenvolvedores em transição diminuiu. No sexo “Male”, continua a ser a maior categoria entre os desenvolvedores estabelecidos, mas o número de desenvolvedores em transição diminuiu em comparação com 2019. Em relação ao sexo “Female”, a presença de desenvolvedores femininos continua baixa, com uma pequena quantidade de desenvolvedores em transição.
Conclusão
Em 2018, houve uma presença significativa de desenvolvedores não-binários, genderqueer ou gênero não-conforme em transição. Em 2019, essa categoria experimentou um aumento substancial, mas em 2020 houve uma diminuição no número de desenvolvedores em transição, acompanhada por um aumento nos desenvolvedores já estabelecidos.
Os desenvolvedores não-binários, genderqueer ou gênero não-conforme mostraram variações marcantes, atingindo um pico de transição em 2019 e uma queda em 2020, refletindo um aumento nos desenvolvedores estabelecidos.
Os desenvolvedores masculinos continuam a ser a maioria, com uma leve flutuação na quantidade de desenvolvedores em transição: houve um pico em 2019 seguido por uma pequena diminuição em 2020. A presença de desenvolvedores femininos permanece consistentemente baixa, indicando uma sub-representação tanto entre os que estão em transição quanto entre os já estabelecidos.
Esses gráficos ilustram a dinâmica de gênero na transição de carreira para o desenvolvimento de software ao longo dos anos, destacando as disparidades na representação entre as diferentes categorias de gênero. Os desenvolvedores masculinos continuam a ser a categoria predominante em todos os anos, com um aumento dos em transição em 2019 e uma leve diminuição em 2020. Os desenvolvedores femininos mantêm uma presença consistentemente baixa ao longo dos três anos, tanto entre os estabelecidos quanto entre os em transição.
Essas tendências enfatizam a importância de promover uma maior diversidade de gênero na área de desenvolvimento de software.
DevType + Years + Category
# Filtrar dados
combined_data_filtered <- combined_data %>% filter(!is.na(DevType))
# Função para criar gráficos para cada ano
plot_dev_type_by_year <- function(data, year) {
data_year <- data %>% filter(Year == year)
ggplot(data_year, aes(x = DevType, fill = Category)) +
geom_bar() +
coord_flip() +
labs(title = paste("Developer Type in", year),
x = "Count",
y = "Developer Type") +
theme_minimal() +
theme(axis.text.y = element_text(size = 8))
}
# Criar gráficos para cada ano
plot_2018_dev <- plot_dev_type_by_year(combined_data_filtered, "2018")
plot_2019_dev <- plot_dev_type_by_year(combined_data_filtered, "2019")
plot_2020_dev <- plot_dev_type_by_year(combined_data_filtered, "2020")
# Exibir gráficos
print(plot_2018_dev)
print(plot_2019_dev)
print(plot_2020_dev)
ggsave(filename = "./grafico/typedev1.png", plot_2018_dev)
## Saving 7 x 5 in image
ggsave(filename = "./grafico/typedev2.png", plot_2019_dev)
## Saving 7 x 5 in image
ggsave(filename = "./grafico/typedev3.png", plot_2020_dev )
## Saving 7 x 5 in image
RESPOSTA:
Em 2018, a categoria “Back-end Developer” possui a maior quantidade de desenvolvedores em transição, superando significativamente os desenvolvedores estabelecidos na area de tecnologia. Em comparação, a categoria “Desktop or Enterprise Applications Developer” possui um número muito menor de desenvolvedores em transição. Os tipos de desenvolvedores como “Embedded Applications or Devices Developer” e “QA or Test Developer” são praticamente inexistentes em transição. Por fim, as categorias “Mobile Developer” e “Game or Graphics Developer” têm uma presença maior de desenvolvedores em transição em comparação com outros tipos, mas ainda em menor número do que os desenvolvedores back-end.
Em 2019, a categoria “Back-end Developer” continua sendo a maior tanto em desenvolvedores em transição quanto estabelecidos, mas com uma presença significativamente reduzida em relação ao ano anterior. A categoria “Full-stack Developer” mostra um aumento significativo em relação ao ano anterior, especialmente entre os desenvolvedores em transição. A categoria “Front-end Developer” também apresenta um aumento notável em comparação com 2018. As categorias “Mobile Developer” e “Game or Graphics Developer” mostram um aumento moderado de desenvolvedores em transição. Por fim, “QA or Test Developer” e “Embedded Applications or Devices Developer” ainda têm uma presença limitada, mas ostram um pequeno crescimento.
Em 2020, a categoria “Back-end Developer” continua sendo a maior, com um número expressivo de desenvolvedores estabelecidos, mas com uma diminuição notável nos desenvolvedores em transição. A categoria “Full-stack Developer” tem o maior aumento, ultrapassando os desenvolvedores em transição da categoria back-end. A categoria “Front-end Developer” também continua a crescer, agora superando outras categorias menores. Por fim, a categoria “Mobile Developer” mostra um aumento constante ao longo dos anos, enquanto “QA or Test Developer” e “Embedded Applications or Devices Developer” aumentam levemente em número, mas continuam sendo categorias menores.
Conclusão
Em 2018, a maioria dos desenvolvedores em transição estava se movendo para papéis de back-end. No entanto, essa tendência diminuiu em 2019 e 2020, possivelmente devido a uma saturação ou mudança nas demandas do mercado. Em contraste, houve um aumento claro e contínuo de desenvolvedores em transição para papéis de full-stack de 2018 a 2020. Em 2020, os desenvolvedores full-stack quase superaram os desenvolvedores back-end em termos de desenvolvedores em transição.
Houve um crescimento contínuo e significativo nos desenvolvedores front-end em transição ao longo dos anos. Outras categorias, como Mobile e Game or Graphics Developers, tiveram aumentos moderados, enquanto QA ou Test Developers e Embedded Applications Developers mostraram aumentos menores, mas ainda assim positivos.
A análise dos gráficos mostra uma mudança de preferência dos desenvolvedores em transição, movendo-se de papéis de back-end para full-stack e front-end, possivelmente refletindo mudanças nas demandas do mercado e nas habilidades valorizadas. Outras categorias de desenvolvedores, como mobile e game developers, também mostraram crescimento, mas não tão significativo quanto os desenvolvedores full-stack e front-end.
UndergradMajor + JobSat + Years + Category - 2018
# Filtrar dados
data_2018 <- combined_data %>%
filter(Year == "2018" & !is.na(JobSat) & !is.na(UndergradMajor) & !is.na(Category))
# Função para criar gráficos de barras horizontais para cada Category em 2018
plot_job_sat_by_undergrad_major <- function(data, category) {
data_category <- data %>% filter(Category == category)
ggplot(data_category, aes(x = JobSat, fill = UndergradMajor)) +
geom_bar(position = "dodge") +
coord_flip() +
labs(title = paste("Job Satisfaction by Undergrad Major for Category:", category, "in 2018"),
x = "Count",
y = "Job Satisfaction",
fill = "Undergrad Major") +
theme_minimal() +
theme(
plot.title = element_text(size = 10),
axis.title.x = element_text(size = 8),
axis.title.y = element_text(size = 8),
axis.text.x = element_text(size = 6),
axis.text.y = element_text(size = 6),
legend.title = element_text(size = 8),
legend.text = element_text(size = 6)
)
}
# Criar gráficos para cada Category
categories <- unique(data_2018$Category)
plots <- lapply(categories, function(cat) plot_job_sat_by_undergrad_major(data_2018, cat))
# Exibir gráficos separadamente
for (plot in plots) {
print(plot)
}
RESPOSTA:
Em 2018, a categoria “Extremely satisfied” possui a maior parte dos desenvolvedores extremamente satisfeitos vindos de áreas como “Natural Science” e “Social Science”. Na categoria “Moderately satisfied”, os desenvolvedores com graduação em “Natural Science” apresentam a maior satisfação moderada. Para a categoria “Neither satisfied nor dissatisfied”, diversos desenvolvedores de áreas como “Humanities” e “Fine Arts” estão presentes. Nas categorias “Slightly satisfied” e “Slightly dissatisfied”, vários desenvolvedores em transição, independentemente da área de graduação, estão ligeiramente satisfeitos ou insatisfeitos. Em “Moderately dissatisfied”, desenvolvedores de “Social Science” e “Business” têm uma presença notável. Na categoria “Extremely dissatisfied”, desenvolvedores de “Health Science” e “Business” aparecem, mas em menor número.
Em 2018, a categoria “Moderately satisfied” é predominantemente composta por desenvolvedores graduados em “Computer Science, Computer Engineering, ou Software Engineering”. Na categoria “Slightly satisfied”, também predominam graduados em “Computer Science”. Já na categoria “Extremely satisfied”, há uma presença significativa de graduados em “Computer Science”. As outras categorias de satisfação têm menos desenvolvedores, com uma pequena presença de graduados em “Information Systems” e “Web Development”.
UndergradMajor + JobSat + Years + Category - 2019
# Filtrar dados
data_2019 <- combined_data %>%
filter(Year == "2019" & !is.na(JobSat) & !is.na(UndergradMajor) & !is.na(Category))
# Função para criar gráficos de barras horizontais para cada Category em 2019
plot_job_sat_by_undergrad_major <- function(data, category) {
data_category <- data %>% filter(Category == category)
ggplot(data_category, aes(x = JobSat, fill = UndergradMajor)) +
geom_bar(position = "dodge") +
coord_flip() +
labs(title = paste("Job Satisfaction by Undergrad Major for Category:", category, "in 2019"),
x = "Count",
y = "Job Satisfaction",
fill = "Undergrad Major") +
theme_minimal() +
theme(
plot.title = element_text(size = 10),
axis.title.x = element_text(size = 8),
axis.title.y = element_text(size = 8),
axis.text.x = element_text(size = 6),
axis.text.y = element_text(size = 6),
legend.title = element_text(size = 8),
legend.text = element_text(size = 6)
)
}
# Criar gráficos para cada Category
categories <- unique(data_2019$Category)
plots <- lapply(categories, function(cat) plot_job_sat_by_undergrad_major(data_2019, cat))
# Exibir gráficos separadamente
for (plot in plots) {
print(plot)
}
RESPOSTA:
Em 2019, na categoria “Extremely satisfied”, há um aumento na presença de desenvolvedores extremamente satisfeitos vindos de “Natural Science” e “Mathematics or Statistics”. Na categoria “Very satisfied”, a maioria dos desenvolvedores muito satisfeitos vem de “Natural Science”. Na categoria “Slightly satisfied”, os desenvolvedores de “Natural Science” continuam presentes. Na categoria “Slightly dissatisfied”, desenvolvedores de “Humanities” e “Fine Arts” são predominantes. Em “Neither satisfied nor dissatisfied”, há menos desenvolvedores de “Natural Science” nesta categoria. Na categoria “Very dissatisfied”, desenvolvedores de “Humanities” e “Health Science” são mais frequentes.
Em 2019, na categoria “Very satisfied”, a maioria dos desenvolvedores é graduada em “Computer Science”, seguida por “Information Systems” e uma pequena quantidade em “Web Development”. Na categoria “Slightly satisfied”, também predominam graduados em “Computer Science”.
Nas categorias “Neither satisfied nor dissatisfied” (Nem satisfeito nem insatisfeito) e “Slightly dissatisfied” (Levemente insatisfeito), a maioria dos desenvolvedores é graduada em “Computer Science”, com pequenas proporções de outros cursos. Na categoria “Very dissatisfied” (Muito insatisfeito), há menos desenvolvedores, mas a distribuição é semelhante aos outros níveis de satisfação.
UndergradMajor + JobSat + Years + Category - 2020
# Filtrar dados
data_2020 <- combined_data %>%
filter(Year == "2020" & !is.na(JobSat) & !is.na(UndergradMajor) & !is.na(Category))
# Função para criar gráficos de barras horizontais para cada Category em 2020
plot_job_sat_by_undergrad_major <- function(data, category) {
data_category <- data %>% filter(Category == category)
ggplot(data_category, aes(x = JobSat, fill = UndergradMajor)) +
geom_bar(position = "dodge") +
coord_flip() +
labs(title = paste("Job Satisfaction by Undergrad Major for Category:", category, "in 2020"),
x = "Count",
y = "Job Satisfaction",
fill = "Undergrad Major") +
theme_minimal() +
theme(
plot.title = element_text(size = 10),
axis.title.x = element_text(size = 8),
axis.title.y = element_text(size = 8),
axis.text.x = element_text(size = 6),
axis.text.y = element_text(size = 6),
legend.title = element_text(size = 8),
legend.text = element_text(size = 6)
)
}
# Criar gráficos para cada Category
categories <- unique(data_2020$Category)
plots <- lapply(categories, function(cat) plot_job_sat_by_undergrad_major(data_2020, cat))
# Exibir gráficos separadamente
for (plot in plots) {
print(plot)
}
RESPOSTA:
Em 2020, na categoria “Very satisfied”, a maior quantidade de desenvolvedores muito satisfeitos é de “Natural Science” e “Mathematics or Statistics”. Na categoria “Slightly satisfied”, a maioria dos desenvolvedores vem de “Natural Science”. Na categoria “Neither satisfied nor dissatisfied”, diversos desenvolvedores de áreas como “Humanities” e “Social Science” estão presentes. Na categoria “Slightly dissatisfied”, há menos desenvolvedores de “Business” insatisfeitos. Na categoria “Very dissatisfied”, desenvolvedores de “Humanities” e “Health Science” aparecem com mais frequência.
Em 2020, na categoria “Very satisfied” (Muito satisfeito), a maioria dos desenvolvedores é graduada em “Computer Science”, com menos presença de graduados em “Information Systems” e “Web Development”. Na categoria “Slightly satisfied” (Levemente satisfeito), também predominam graduados em “Computer Science”.
Nas categorias “Neither satisfied nor dissatisfied” (Nem satisfeito nem insatisfeito) e “Slightly dissatisfied” (Levemente insatisfeito), a maioria dos desenvolvedores é graduada em “Computer Science”, com pequenas proporções de outros cursos. Na categoria “Very dissatisfied” (Muito insatisfeito), a distribuição é semelhante aos outros níveis de satisfação.
Conclusão
A satisfação extrema ao longo dos três anos concentra-se principalmente entre os desenvolvedores formados em “Ciências Naturais” e “Matemática ou Estatística”, sugerindo uma possível melhor adaptação ou satisfação desses profissionais ao transitarem para a engenharia de software.
Em 2019 e 2020, os desenvolvedores com formação em “Ciências Naturais” mostram um aumento significativo na categoria “Muito Satisfeitos”. Esses grupos exibem uma diversidade considerável nas áreas de graduação, sem um padrão claro, embora “Ciências Naturais” ainda mantenha a maior representação entre os ligeiramente satisfeitos.
A presença de desenvolvedores “Nem Satisfeitos Nem Insatisfeitos” é consistente em várias áreas, com uma leve predominância em “Humanidades” e “Belas Artes”. Por outro lado, os desenvolvedores “Extremamente Insatisfeitos”, provenientes da área de “Ciências da Saúde”, aparecem em todos os anos, indicando possíveis desafios na transição para a engenharia de software.
Os desenvolvedores em transição com formação em “Ciências Naturais” tendem a apresentar níveis mais elevados de satisfação, especialmente em 2019 e 2020. As áreas de “Humanidades”, “Belas Artes” e “Ciências Sociais” mostram uma variedade de níveis de satisfação, sem um padrão definido. Profissionais oriundos de “Ciências da Saúde” tendem a apresentar maiores níveis de insatisfação, sugerindo dificuldades específicas na transição para a engenharia de software.
Em todos os anos, a maioria dos desenvolvedores estabelecidos na área, em todas as categorias de satisfação, são graduados em “Computer Science, Computer Engineering, or Software Engineering”. Houve um aumento notável na contagem de desenvolvedores “Very Satisfied” em 2019 e 2020 em comparação com 2018.
Desenvolvedores com graduação em “Information Systems” e “Web Development” têm uma presença menor em todas as categorias de satisfação em todos os anos, embora sejam notáveis em “Slightly Satisfied” e “Moderately Satisfied”.
A distribuição geral da satisfação no trabalho permanece relativamente estável ao longo dos anos, com a maioria dos desenvolvedores relatando estar moderadamente ou levemente satisfeitos.
Em 2018, a categoria “Moderately Satisfied” apresenta uma contagem muito maior em comparação com 2019 e 2020, sugerindo uma mudança na percepção de satisfação ao longo dos anos.
Esses gráficos oferecem uma visão de como a satisfação no trabalho varia entre desenvolvedores com diferentes formações acadêmicas e como essas percepções evoluíram ao longo dos anos de 2018 a 2020.
Para realizar o Teste Qui-Quadrado para testar a correlação entre a carreira de origem e a área de atuação. QP1: H1,0: Não existe correlação entre a carreira de origem e a área de atuação.
H1,1: Existe correlação entre a carreira de origem e a área de atuação.
# Função para aplicar o teste Qui-Quadrado
chi_square_test <- function(data, undergrad_major_col, devtype_col) {
# Verificar se as colunas existem no dataframe
if (!undergrad_major_col %in% colnames(data) | !devtype_col %in% colnames(data)) {
stop("Uma ou ambas as colunas não existem no dataframe")
}
# Converter as colunas para fatores, se necessário
data[[undergrad_major_col]] <- as.factor(data[[undergrad_major_col]])
data[[devtype_col]] <- as.factor(data[[devtype_col]])
# Remover valores NA
filtered_data <- data %>%
filter(!is.na(.data[[undergrad_major_col]]) & !is.na(.data[[devtype_col]]))
# Verificar se os dados não estão vazios após a filtragem
if (nrow(filtered_data) == 0) {
return("Dados insuficientes para realizar o teste")
}
# Criar tabela de contingência
contingency_table <- table(filtered_data[[undergrad_major_col]], filtered_data[[devtype_col]])
# Verificar se a tabela de contingência é válida para o teste Qui-Quadrado
if (any(dim(contingency_table) == 0)) {
return("Dados insuficientes para realizar o teste")
}
# Aplicar teste Qui-Quadrado
test_result <- chisq.test(contingency_table)
return(test_result)
}
# Filtrar dados por ano e categoria
df_2018_transition <- combined_data %>%
filter(Category == "Transition" & Year == 2018)
df_2018_developer <- combined_data %>%
filter(Category == "Developer" & Year == 2018)
df_2019_transition <- combined_data %>%
filter(Category == "Transition" & Year == 2019)
df_2019_developer <- combined_data %>%
filter(Category == "Developer" & Year == 2019)
df_2020_transition <- combined_data %>%
filter(Category == "Transition" & Year == 2020)
df_2020_developer <- combined_data %>%
filter(Category == "Developer" & Year == 2020)
# Aplicar o teste para cada combinação de ano e categoria
test_2018_transition <- chi_square_test(df_2018_transition, "UndergradMajor", "DevType")
## Warning in chisq.test(contingency_table): Aproximação do qui-quadrado pode
## estar incorreta
test_2018_developer <- chi_square_test(df_2018_developer, "UndergradMajor", "DevType")
test_2019_transition <- chi_square_test(df_2019_transition, "UndergradMajor", "DevType")
## Warning in chisq.test(contingency_table): Aproximação do qui-quadrado pode
## estar incorreta
test_2019_developer <- chi_square_test(df_2019_developer, "UndergradMajor", "DevType")
test_2020_transition <- chi_square_test(df_2020_transition, "UndergradMajor", "DevType")
## Warning in chisq.test(contingency_table): Aproximação do qui-quadrado pode
## estar incorreta
test_2020_developer <- chi_square_test(df_2020_developer, "UndergradMajor", "DevType")
## Warning in chisq.test(contingency_table): Aproximação do qui-quadrado pode
## estar incorreta
# Verificar resultados
test_2018_transition
##
## Pearson's Chi-squared test
##
## data: contingency_table
## X-squared = 852.07, df = 56, p-value < 2.2e-16
test_2018_developer
##
## Pearson's Chi-squared test
##
## data: contingency_table
## X-squared = 573.16, df = 14, p-value < 2.2e-16
test_2019_transition
##
## Pearson's Chi-squared test
##
## data: contingency_table
## X-squared = 178.6, df = 56, p-value = 1.015e-14
test_2019_developer
##
## Pearson's Chi-squared test
##
## data: contingency_table
## X-squared = 233.23, df = 14, p-value < 2.2e-16
test_2020_transition
##
## Pearson's Chi-squared test
##
## data: contingency_table
## X-squared = 55.939, df = 56, p-value = 0.4771
test_2020_developer
##
## Pearson's Chi-squared test
##
## data: contingency_table
## X-squared = 25.82, df = 14, p-value = 0.02728
RESPOSTA:
No ano de 2018, para o perfil “Transition”, observamos uma forte evidência contra a hipótese nula, sugerindo uma correlação significativa entre a carreira de origem e a área de atuação, devido ao p-valor extremamente baixo. Para o perfil “Developer”, também encontramos forte evidência contra a hipótese nula, com um valor de X-quadrado alto e um p-valor muito pequeno, o que indica uma correlação significativa.
Em 2019, para o perfil “Transition”, novamente encontramos uma correlação significativa, com um p-valor extremamente baixo que rejeita a hipótese nula. Para o perfil “Developer”, os resultados mostram mais uma vez forte evidência contra a hipótese nula, indicando uma correlação significativa.
No ano de 2020, para o perfil “Transition”, encontramos um p-valor de 0,4771, significativamente maior do que nos anos anteriores e acima do nível típico de significância de 0,05. Isso sugere que não há evidência suficiente para rejeitar a hipótese nula, indicando que não há uma correlação significativa entre a carreira de origem e a área de atuação para esta amostra específica. No entanto, para o perfil “Developer”, o p-valor é de 0,02728, menor do que 0,05, o que indica evidência suficiente para rejeitar a hipótese nula e sugere uma correlação significativa entre a carreira de origem e a área de atuação, embora a significância não seja tão forte quanto nos testes anteriores com p-valores menores.
A maioria dos resultados demonstra uma correlação significativa entre a carreira de origem e a área de atuação, exceto pelo resultado de 2020 para o perfil “Transition”, que não rejeita a hipótese nula. Esses achados indicam que, de maneira geral, há uma associação significativa entre a carreira de origem e a área de atuação dos desenvolvedores, com algumas variações dependendo da amostra específica analisada.
QP2: Teste de Kruskal-Wallis H3,0: Não há variação significativa nos tipos de desenvolvedores ao longo dos anos & H3,1: Há variação significativa nos tipos de desenvolvedores ao longo dos anos
# Filtrar dados por ano e categoria
df_2018_transition <- combined_data %>%
filter(Category == "Transition" & Year == 2018)
df_2018_developer <- combined_data %>%
filter(Category == "Developer" & Year == 2018)
df_2019_transition <- combined_data %>%
filter(Category == "Transition" & Year == 2019)
df_2019_developer <- combined_data %>%
filter(Category == "Developer" & Year == 2019)
df_2020_transition <- combined_data %>%
filter(Category == "Transition" & Year == 2020)
df_2020_developer <- combined_data %>%
filter(Category == "Developer" & Year == 2020)
# Função para aplicar o Teste de Kruskal-Wallis
kruskal_test <- function(data, group_col, value_col) {
# Remover valores NA
filtered_data <- data %>%
filter(!is.na(.[[group_col]]) & !is.na(.[[value_col]]))
# Verificar se os dados não estão vazios após a filtragem
if (nrow(filtered_data) == 0) {
return("Dados insuficientes para realizar o teste")
}
# Aplicar teste de Kruskal-Wallis
test_result <- kruskal.test(as.formula(paste(value_col, "~", group_col)), data = filtered_data)
return(test_result)
}
# Aplicar o teste para cada combinação de ano e categoria
test_2018_transition <- kruskal_test(df_2018_transition, "UndergradMajor", "DevType")
test_2018_developer <- kruskal_test(df_2018_developer, "UndergradMajor", "DevType")
test_2019_transition <- kruskal_test(df_2019_transition, "UndergradMajor", "DevType")
test_2019_developer <- kruskal_test(df_2019_developer, "UndergradMajor", "DevType")
test_2020_transition <- kruskal_test(df_2020_transition, "UndergradMajor", "DevType")
test_2020_developer <- kruskal_test(df_2020_developer, "UndergradMajor", "DevType")
# Verificar resultados
test_2018_transition
##
## Kruskal-Wallis rank sum test
##
## data: DevType by UndergradMajor
## Kruskal-Wallis chi-squared = 113.12, df = 8, p-value < 2.2e-16
test_2018_developer
##
## Kruskal-Wallis rank sum test
##
## data: DevType by UndergradMajor
## Kruskal-Wallis chi-squared = 1.1784, df = 2, p-value = 0.5548
test_2019_transition
##
## Kruskal-Wallis rank sum test
##
## data: DevType by UndergradMajor
## Kruskal-Wallis chi-squared = 15.467, df = 8, p-value = 0.05068
test_2019_developer
##
## Kruskal-Wallis rank sum test
##
## data: DevType by UndergradMajor
## Kruskal-Wallis chi-squared = 1.7494, df = 2, p-value = 0.417
test_2020_transition
##
## Kruskal-Wallis rank sum test
##
## data: DevType by UndergradMajor
## Kruskal-Wallis chi-squared = 7.6717, df = 8, p-value = 0.4662
test_2020_developer
##
## Kruskal-Wallis rank sum test
##
## data: DevType by UndergradMajor
## Kruskal-Wallis chi-squared = 4.3416, df = 2, p-value = 0.1141
RESPOSTA:
No ano de 2018, para o perfil “Transition”, observamos um p-valor extremamente baixo, menor que o nível típico de significância de 0.05. Portanto, rejeitamos a hipótese nula \(H2_0\) de que não há variação significativa nos tipos de desenvolvedores ao longo dos anos. Isso indica uma variação significativa nos tipos de desenvolvedores em relação à carreira de origem. Já para o perfil “Developer”, o p-valor é maior que 0.05, o que nos leva a não rejeitar a hipótese nula \(H2_0\), sugerindo que não há variação significativa nos tipos de desenvolvedores em relação à carreira de origem.
No ano de 2019, para o perfil “Transition”, encontramos um p-valor muito próximo de 0.05, resultando em um resultado marginal. Com um p-valor ligeiramente acima de 0.05, não podemos rejeitar a hipótese nula \(H2_0\), embora o resultado esteja próximo do limiar, indicando uma variação marginalmente significativa nos tipos de desenvolvedores em relação à carreira de origem. Para o perfil “Developer”, o p-valor é maior que 0.05, e não rejeitamos a hipótese nula \(H2_0\), sugerindo que não há variação significativa nos tipos de desenvolvedores em relação à carreira de origem.
No ano de 2020, tanto para o perfil “Transition” quanto para o perfil “Developer”, observamos p-valores maiores que 0.05. Isso nos leva a não rejeitar a hipótese nula \(H2_0\) em ambos os casos, indicando que não há variação significativa nos tipos de desenvolvedores em relação à carreira de origem.
Em resumo, o primeiro resultado com p-valor \(< 2.2e-16\) nos permite rejeitar a hipótese nula \(H2_0\), sugerindo variação significativa nos tipos de desenvolvedores em relação à carreira de origem. Nos demais casos, com p-valores acima de 0.05, não rejeitamos a hipótese nula \(H2_1\) de que não há variação significativa nos tipos de desenvolvedores. Esses resultados indicam que, em algumas combinações de dados, há variação significativa nos tipos de desenvolvedores em relação à carreira de origem, enquanto em outras não há variação significativa observada.
QP3: Teste Qui-Quadrado H4,0: Não existe correlação entre a diversidade de gênero e a escolha de áreas de especialização & H4,1: Existe correlação entre a diversidade de gênero e a escolha de áreas de especialização
# Filtrar e preparar os dados por ano
data_2018 <- combined_data %>%
filter(!is.na(Gender), !is.na(UndergradMajor), !is.na(Category), Year == 2018)
data_2019 <- combined_data %>%
filter(!is.na(Gender), !is.na(UndergradMajor), !is.na(Category), Year == 2019)
data_2020 <- combined_data %>%
filter(!is.na(Gender), !is.na(UndergradMajor), !is.na(Category), Year == 2020)
# Função para realizar o teste Qui-Quadrado
perform_chi_square_test <- function(data) {
categories <- unique(data$Category)
results <- list()
for (cat in categories) {
sub_data <- data %>% filter(Category == cat)
if (nrow(sub_data) > 0) {
table_2d <- table(sub_data$Gender, sub_data$UndergradMajor)
if (min(table_2d) > 0) {
chi_test <- chisq.test(table_2d)
results[[cat]] <- chi_test
} else {
results[[cat]] <- "Tabela de contingência inválida"
}
} else {
results[[cat]] <- "Dados insuficientes para realizar o teste"
}
}
return(results)
}
# Realizar os testes para cada ano
results_2018 <- perform_chi_square_test(data_2018)
results_2019 <- perform_chi_square_test(data_2019)
results_2020 <- perform_chi_square_test(data_2020)
# Exibir os resultados
print("Resultados para 2018:")
## [1] "Resultados para 2018:"
print(results_2018)
## $Transition
## [1] "Tabela de contingência inválida"
##
## $Developer
## [1] "Tabela de contingência inválida"
print("Resultados para 2019:")
## [1] "Resultados para 2019:"
print(results_2019)
## $Developer
##
## Chi-squared test for given probabilities
##
## data: table_2d
## X-squared = 6684.7, df = 2, p-value < 2.2e-16
##
##
## $Transition
##
## Chi-squared test for given probabilities
##
## data: table_2d
## X-squared = 1468.7, df = 8, p-value < 2.2e-16
print("Resultados para 2020:")
## [1] "Resultados para 2020:"
print(results_2020)
## $Transition
## [1] "Tabela de contingência inválida"
##
## $Developer
## [1] "Tabela de contingência inválida"
RESPOSTA:
Nos anos de 2018 e 2020, os perfis “Transition” e “Developer” apresentaram tabelas de contingência inválidas. Isso indica que os dados não foram suficientes para formar uma tabela de contingência válida. Uma tabela de contingência é considerada inválida quando há uma frequência esperada muito baixa em algumas das células, tornando o teste Qui-Quadrado impraticável ou indicando que os dados não estão distribuídos adequadamente para realizar o teste.
No ano de 2019, o teste Qui-Quadrado foi realizado com sucesso para a categoria “Transition”. O valor X-squared foi 1468.7 com 8 graus de liberdade, e o p-value foi muito pequeno (menor que 2.2e-16), indicando uma correlação significativa entre Gender e UndergradMajor para profissionais em transição. Para a categoria “Developer” em 2019, o valor X-squared foi 6684.7 com 2 graus de liberdade, e o p-value também foi muito pequeno (menor que 2.2e-16), indicando uma correlação significativa entre Gender e UndergradMajor para desenvolvedores.
Os resultados demonstram que tanto para profissionais em transição quanto para desenvolvedores, há uma associação estatisticamente significativa entre o gênero (Gender) e o curso de graduação (UndergradMajor). O p-valor extremamente baixo em ambos os casos sugere fortemente que podemos rejeitar a hipótese nula de independência entre essas variáveis, indicando que o gênero está correlacionado com a escolha do curso de graduação entre os respondentes.