add poll time
This commit is contained in:
		
							parent
							
								
									e25942b2c3
								
							
						
					
					
						commit
						ca7401a6ed
					
				|  | @ -32,8 +32,9 @@ Remedy: consider the conditional probabilities? But how? Or, relax assumptions u | ||||||
| 
 | 
 | ||||||
| ## Second round: just consider polls | ## Second round: just consider polls | ||||||
| 
 | 
 | ||||||
| - [ ] Download and format | - [x] Download and format | ||||||
| - [ ] Read | - [x] Read | ||||||
|  | - [ ] Add date of poll | ||||||
| - [ ] Consider what the standards error should be  | - [ ] Consider what the standards error should be  | ||||||
| - [ ] Aggregate polls? | - [ ] Aggregate polls? | ||||||
| - [ ] Exclude polls older than one month? | - [ ] Exclude polls older than one month? | ||||||
|  |  | ||||||
							
								
								
									
										42
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								main.go
									
									
									
									
									
								
							|  | @ -6,6 +6,7 @@ import ( | ||||||
| 	rand "math/rand/v2" | 	rand "math/rand/v2" | ||||||
| 	"os" | 	"os" | ||||||
| 	"strconv" | 	"strconv" | ||||||
|  | 	"time" | ||||||
| 	// "strings"
 | 	// "strings"
 | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | @ -13,7 +14,7 @@ import ( | ||||||
| type State struct { | type State struct { | ||||||
| 	Name                         string | 	Name                         string | ||||||
| 	Votes                        int | 	Votes                        int | ||||||
| 	VictoriousPartyPerElection map[string]string | 	PresidentialElectoralHistory map[string]string | ||||||
| 	Polls                        []Poll | 	Polls                        []Poll | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -26,6 +27,7 @@ type Poll struct { | ||||||
| 	PollId      string | 	PollId      string | ||||||
| 	SampleSize  int | 	SampleSize  int | ||||||
| 	PollResults map[string]float64 | 	PollResults map[string]float64 | ||||||
|  | 	Date        time.Time | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // type src = *rand.Rand
 | // type src = *rand.Rand
 | ||||||
|  | @ -60,7 +62,7 @@ func readStates() ([]State, error) { | ||||||
| 		} | 		} | ||||||
| 		state := csv_record[0] | 		state := csv_record[0] | ||||||
| 		if _, exists := states[state]; !exists { | 		if _, exists := states[state]; !exists { | ||||||
| 			states[state] = State{Name: state, Votes: votes, VictoriousPartyPerElection: make(map[string]string)} | 			states[state] = State{Name: state, Votes: votes, PresidentialElectoralHistory: make(map[string]string)} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -87,7 +89,7 @@ func readStates() ([]State, error) { | ||||||
| 				continue // State not found in votes map, skip
 | 				continue // State not found in votes map, skip
 | ||||||
| 			} | 			} | ||||||
| 			// Update the party winning in the specific year
 | 			// Update the party winning in the specific year
 | ||||||
| 			data.VictoriousPartyPerElection[year] = party | 			data.PresidentialElectoralHistory[year] = party | ||||||
| 			states[state] = data | 			states[state] = data | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | @ -115,17 +117,24 @@ func readStates() ([]State, error) { | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			break // EOF or an error
 | 			break // EOF or an error
 | ||||||
| 		} | 		} | ||||||
| 		state_name := record[12] |  | ||||||
| 		// fmt.Printf("State: %s", state_name)
 |  | ||||||
| 		poll_id := record[0] |  | ||||||
| 
 | 
 | ||||||
| 		sampleSize, err := strconv.Atoi(record[22]) | 		poll_id := record[0] | ||||||
|  | 		state_name := record[12] | ||||||
|  | 		candidate_name := record[44] | ||||||
|  | 		end_date := record[14] | ||||||
|  | 
 | ||||||
|  | 		date_layout := "1/2/06" | ||||||
|  | 		parsed_date, err := time.Parse(date_layout, end_date) | ||||||
|  | 		if err != nil { | ||||||
|  | 			fmt.Println("Error parsing date: ", err) | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		sample_size, err := strconv.Atoi(record[22]) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			continue // If error, skip this record
 | 			continue // If error, skip this record
 | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		candidateName := record[44] | 		percentage, err := strconv.ParseFloat(record[47], 64) // percentage is in the 42nd column
 | ||||||
| 		pct, err := strconv.ParseFloat(record[47], 64) // pct is in the 42nd column
 |  | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			fmt.Printf("Error parsing percentage") | 			fmt.Printf("Error parsing percentage") | ||||||
| 			continue // If error, skip this record
 | 			continue // If error, skip this record
 | ||||||
|  | @ -139,11 +148,12 @@ func readStates() ([]State, error) { | ||||||
| 		if !exists { | 		if !exists { | ||||||
| 			poll = Poll{ | 			poll = Poll{ | ||||||
| 				PollId:      poll_id, | 				PollId:      poll_id, | ||||||
| 				SampleSize:  sampleSize, | 				SampleSize:  sample_size, | ||||||
| 				PollResults: make(map[string]float64), | 				PollResults: make(map[string]float64), | ||||||
|  | 				Date:        parsed_date, | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		poll.PollResults[candidateName] = pct | 		poll.PollResults[candidate_name] = percentage | ||||||
| 		tmp_polls[state_name][poll_id] = poll | 		tmp_polls[state_name][poll_id] = poll | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -177,7 +187,7 @@ func readStates() ([]State, error) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func sampleFromState(state State) VotesForEachParty { | func sampleFromState(state State) VotesForEachParty { | ||||||
| 	fmt.Printf("%s\n\n", state) | 
 | ||||||
| 	switch state.Name { | 	switch state.Name { | ||||||
| 	case "Nebraska": | 	case "Nebraska": | ||||||
| 		// 2000: R
 | 		// 2000: R
 | ||||||
|  | @ -208,12 +218,12 @@ func sampleFromState(state State) VotesForEachParty { | ||||||
| 	default: | 	default: | ||||||
| 		{ | 		{ | ||||||
| 			p_republican := 0.0 | 			p_republican := 0.0 | ||||||
| 			for _, party := range state.VictoriousPartyPerElection { | 			for _, party := range state.PresidentialElectoralHistory { | ||||||
| 				if party == "R" { | 				if party == "R" { | ||||||
| 					p_republican++ | 					p_republican++ | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 			p_republican = p_republican / float64(len(state.VictoriousPartyPerElection)) | 			p_republican = p_republican / float64(len(state.PresidentialElectoralHistory)) | ||||||
| 			if r.Float64() < p_republican { | 			if r.Float64() < p_republican { | ||||||
| 				return VotesForEachParty{Democrats: 0, Republicans: state.Votes} | 				return VotesForEachParty{Democrats: 0, Republicans: state.Votes} | ||||||
| 			} else { | 			} else { | ||||||
|  | @ -227,12 +237,12 @@ func simulateElection(states []State) int { | ||||||
| 
 | 
 | ||||||
| 	republican_seats := 0 | 	republican_seats := 0 | ||||||
| 	for _, state := range states { | 	for _, state := range states { | ||||||
| 		// fmt.Printf("%s\n", state)
 | 		fmt.Printf("\n\nState: %s\n\tVotes: %d\n\tHistory: %s\n\tPolls: %s", state.Name, state.Votes, state.PresidentialElectoralHistory, state.Polls) | ||||||
| 		election_sample := sampleFromState(state) | 		election_sample := sampleFromState(state) | ||||||
| 		republican_seats += election_sample.Republicans | 		republican_seats += election_sample.Republicans | ||||||
| 		/* | 		/* | ||||||
| 			fmt.Printf("%s: Votes: %d,\n\tWinners: ", state.Name, state.Votes) | 			fmt.Printf("%s: Votes: %d,\n\tWinners: ", state.Name, state.Votes) | ||||||
| 			for year, party := range state.VictoriousPartyPerElection { | 			for year, party := range state.PresidentialElectoralHistory { | ||||||
| 				fmt.Printf("[%s: %s] ", year, party) | 				fmt.Printf("[%s: %s] ", year, party) | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user