library(tidyverse)
library(openintro)
library(readr)

INTRODUCTION

For this assignment, we are tasked to find a dataset from the fivethirtyeight website. I went ahead and downloaded the latest polls from the 2024 Presidential general election polls. Afterwards, I uploaded the raw csv file into the Github repository for open-access.

polls_data <- read_csv("https://raw.githubusercontent.com/GullitNa/fivethirtyeight-polls2024/main/president_polls.csv")
## Rows: 10 Columns: 52
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (20): pollster, sponsors, display_name, pollster_rating_name, methodolog...
## dbl (11): poll_id, pollster_id, sponsor_ids, pollster_rating_id, question_id...
## lgl (21): numeric_grade, pollscore, transparency_score, state, sponsor_candi...
## 
## ℹ 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.
head(polls_data)
## # A tibble: 6 × 52
##   poll_id pollster_id pollster         sponsor_ids sponsors         display_name
##     <dbl>       <dbl> <chr>                  <dbl> <chr>            <chr>       
## 1   89457        1890 SoCal Strategies        2152 On Point Politi… SoCal Strat…
## 2   89457        1890 SoCal Strategies        2152 On Point Politi… SoCal Strat…
## 3   89457        1890 SoCal Strategies        2152 On Point Politi… SoCal Strat…
## 4   89457        1890 SoCal Strategies        2152 On Point Politi… SoCal Strat…
## 5   89457        1890 SoCal Strategies        2152 On Point Politi… SoCal Strat…
## 6   89457        1890 SoCal Strategies        2152 On Point Politi… SoCal Strat…
## # ℹ 46 more variables: pollster_rating_id <dbl>, pollster_rating_name <chr>,
## #   numeric_grade <lgl>, pollscore <lgl>, methodology <chr>,
## #   transparency_score <lgl>, state <lgl>, start_date <chr>, end_date <chr>,
## #   sponsor_candidate_id <lgl>, sponsor_candidate <lgl>,
## #   sponsor_candidate_party <lgl>, endorsed_candidate_id <lgl>,
## #   endorsed_candidate_name <lgl>, endorsed_candidate_party <lgl>,
## #   question_id <dbl>, sample_size <dbl>, population <chr>, …

DATA CLEANING

Within the data, there are lots of columns that either have “N/A” or 0 values that are basically unavailable data taking up space. Additionally for data clarity as stated in step 1, I will also capitalize all necessary columns and/or abbreviate. I clean this out using the following code:

cleaned_data <- polls_data %>%
  drop_na() %>%
  select(-seat_number) %>%
  rename(
    Poll_ID = poll_id,
    Pollster_ID = pollster_id,
    Pollster_Name = pollster,
    Sponsor_IDs = sponsor_ids,
    Sponsors = sponsors,
    Pollster_Rating_ID = pollster_rating_id,
    Pollster_Rating_Name = pollster_rating_name,
    Pollster_Numeric_Grade = numeric_grade,
    Poll_Score = pollscore,
    Methodology = methodology,
    Transparency_Score = transparency_score,
    State = state
  )

CONCLUSION

For the sake of cleaning, I did remove all the unavailable information in this dataset. However, I would extend the selected article by filling in these invalid data spaces with the required information for it’s completion. To verify this article, it is possible to technically independently search for each of the columns missing values via the previous information given such as the poll ID for example.

glimpse(cleaned_data)
## Rows: 0
## Columns: 51
## $ Poll_ID                   <dbl> 
## $ Pollster_ID               <dbl> 
## $ Pollster_Name             <chr> 
## $ Sponsor_IDs               <dbl> 
## $ Sponsors                  <chr> 
## $ display_name              <chr> 
## $ Pollster_Rating_ID        <dbl> 
## $ Pollster_Rating_Name      <chr> 
## $ Pollster_Numeric_Grade    <lgl> 
## $ Poll_Score                <lgl> 
## $ Methodology               <chr> 
## $ Transparency_Score        <lgl> 
## $ State                     <lgl> 
## $ start_date                <chr> 
## $ end_date                  <chr> 
## $ sponsor_candidate_id      <lgl> 
## $ sponsor_candidate         <lgl> 
## $ sponsor_candidate_party   <lgl> 
## $ endorsed_candidate_id     <lgl> 
## $ endorsed_candidate_name   <lgl> 
## $ endorsed_candidate_party  <lgl> 
## $ question_id               <dbl> 
## $ sample_size               <dbl> 
## $ population                <chr> 
## $ subpopulation             <lgl> 
## $ population_full           <chr> 
## $ tracking                  <lgl> 
## $ created_at                <chr> 
## $ notes                     <lgl> 
## $ url                       <chr> 
## $ url_article               <chr> 
## $ url_topline               <chr> 
## $ url_crosstab              <chr> 
## $ source                    <lgl> 
## $ internal                  <lgl> 
## $ partisan                  <lgl> 
## $ race_id                   <dbl> 
## $ cycle                     <dbl> 
## $ office_type               <chr> 
## $ seat_name                 <lgl> 
## $ election_date             <chr> 
## $ stage                     <chr> 
## $ nationwide_batch          <lgl> 
## $ ranked_choice_reallocated <lgl> 
## $ ranked_choice_round       <lgl> 
## $ hypothetical              <lgl> 
## $ party                     <chr> 
## $ answer                    <chr> 
## $ candidate_id              <dbl> 
## $ candidate_name            <chr> 
## $ pct                       <dbl>
LS0tDQp0aXRsZTogIkRBVEEgNjA3IFdlZWsgMSINCmF1dGhvcjogIkd1bGxpdCBOYXZhcnJldGUiDQpkYXRlOiAiMi8yLzIwMjUiDQpvdXRwdXQ6IG9wZW5pbnRybzo6bGFiX3JlcG9ydA0KLS0tDQoNCmBgYHtyIGxvYWQtcGFja2FnZXMsIGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShvcGVuaW50cm8pDQpsaWJyYXJ5KHJlYWRyKQ0KYGBgDQoNCiMjIyBJTlRST0RVQ1RJT04NCg0KRm9yIHRoaXMgYXNzaWdubWVudCwgd2UgYXJlIHRhc2tlZCB0byBmaW5kIGEgZGF0YXNldCBmcm9tIHRoZSBmaXZldGhpcnR5ZWlnaHQgd2Vic2l0ZS4gSSB3ZW50IGFoZWFkIGFuZCBkb3dubG9hZGVkIHRoZSBsYXRlc3QgcG9sbHMgZnJvbSB0aGUgMjAyNCBQcmVzaWRlbnRpYWwgZ2VuZXJhbCBlbGVjdGlvbiBwb2xscy4gQWZ0ZXJ3YXJkcywgSSB1cGxvYWRlZCB0aGUgcmF3IGNzdiBmaWxlIGludG8gdGhlIEdpdGh1YiByZXBvc2l0b3J5IGZvciBvcGVuLWFjY2Vzcy4NCmBgYHtyIGxvYWRpbmctZGF0YSwgZWNobz1UUlVFfQ0KcG9sbHNfZGF0YSA8LSByZWFkX2NzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0d1bGxpdE5hL2ZpdmV0aGlydHllaWdodC1wb2xsczIwMjQvbWFpbi9wcmVzaWRlbnRfcG9sbHMuY3N2IikNCmhlYWQocG9sbHNfZGF0YSkNCmBgYA0KDQojIyMgREFUQSBDTEVBTklORw0KDQpXaXRoaW4gdGhlIGRhdGEsIHRoZXJlIGFyZSBsb3RzIG9mIGNvbHVtbnMgdGhhdCBlaXRoZXIgaGF2ZSAiTi9BIiBvciAwIHZhbHVlcyB0aGF0IGFyZSBiYXNpY2FsbHkgdW5hdmFpbGFibGUgZGF0YSB0YWtpbmcgdXAgc3BhY2UuIEFkZGl0aW9uYWxseSBmb3IgZGF0YSBjbGFyaXR5IGFzIHN0YXRlZCBpbiBzdGVwIDEsIEkgd2lsbCBhbHNvIGNhcGl0YWxpemUgYWxsIG5lY2Vzc2FyeSBjb2x1bW5zIGFuZC9vciBhYmJyZXZpYXRlLiBJIGNsZWFuIHRoaXMgb3V0IHVzaW5nIHRoZSBmb2xsb3dpbmcgY29kZToNCmBgYHtyIGRhdGEtY2xlYW5pbmcsIGVjaG89VFJVRX0NCmNsZWFuZWRfZGF0YSA8LSBwb2xsc19kYXRhICU+JQ0KICBkcm9wX25hKCkgJT4lDQogIHNlbGVjdCgtc2VhdF9udW1iZXIpICU+JQ0KICByZW5hbWUoDQogICAgUG9sbF9JRCA9IHBvbGxfaWQsDQogICAgUG9sbHN0ZXJfSUQgPSBwb2xsc3Rlcl9pZCwNCiAgICBQb2xsc3Rlcl9OYW1lID0gcG9sbHN0ZXIsDQogICAgU3BvbnNvcl9JRHMgPSBzcG9uc29yX2lkcywNCiAgICBTcG9uc29ycyA9IHNwb25zb3JzLA0KICAgIFBvbGxzdGVyX1JhdGluZ19JRCA9IHBvbGxzdGVyX3JhdGluZ19pZCwNCiAgICBQb2xsc3Rlcl9SYXRpbmdfTmFtZSA9IHBvbGxzdGVyX3JhdGluZ19uYW1lLA0KICAgIFBvbGxzdGVyX051bWVyaWNfR3JhZGUgPSBudW1lcmljX2dyYWRlLA0KICAgIFBvbGxfU2NvcmUgPSBwb2xsc2NvcmUsDQogICAgTWV0aG9kb2xvZ3kgPSBtZXRob2RvbG9neSwNCiAgICBUcmFuc3BhcmVuY3lfU2NvcmUgPSB0cmFuc3BhcmVuY3lfc2NvcmUsDQogICAgU3RhdGUgPSBzdGF0ZQ0KICApDQpgYGANCg0KIyMjIENPTkNMVVNJT04NCg0KRm9yIHRoZSBzYWtlIG9mIGNsZWFuaW5nLCBJIGRpZCByZW1vdmUgYWxsIHRoZSB1bmF2YWlsYWJsZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGRhdGFzZXQuIEhvd2V2ZXIsIEkgd291bGQgZXh0ZW5kIHRoZSBzZWxlY3RlZCBhcnRpY2xlIGJ5IGZpbGxpbmcgaW4gdGhlc2UgaW52YWxpZCBkYXRhIHNwYWNlcyB3aXRoIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbiBmb3IgaXQncyBjb21wbGV0aW9uLiBUbyB2ZXJpZnkgdGhpcyBhcnRpY2xlLCBpdCBpcyBwb3NzaWJsZSB0byB0ZWNobmljYWxseSBpbmRlcGVuZGVudGx5IHNlYXJjaCBmb3IgZWFjaCBvZiB0aGUgY29sdW1ucyBtaXNzaW5nIHZhbHVlcyB2aWEgdGhlIHByZXZpb3VzIGluZm9ybWF0aW9uIGdpdmVuIHN1Y2ggYXMgdGhlIHBvbGwgSUQgZm9yIGV4YW1wbGUuDQpgYGB7ciBjb25jbHVzaW9uLCBlY2hvPVRSVUV9DQpnbGltcHNlKGNsZWFuZWRfZGF0YSkNCmBgYA==