In this project we will graph

  

​ The Popularity of Baby Names

In this project we will graph data about American baby names taken from the Social 

Security Administration Website. We will read the data, store it in a dictionary of lists

data structure, and then let the user type in names. If a name appears in our data, we

will draw a graph, like the one below, showing how the popularity of the name evolved

since 1880. The graph below plots the frequency of babies named Karl by year. 

As a side note, this plot is very similar to the plots that can be obtained from Googles 

N-gram viewer, with the exception that this is a much more manageable set of data. 

Input File

The primary data file ​ countsByName.csv​ contains 97,310 names compiled from Social 

Security card applications after 1879. It was downloaded and reformatted from the

Social Security Administration names database file (​ here (Links to an external

site.)Links to an external site.​ ). The first line describes the columns. The leftmost

column is the name. This is followed by the number of applications with that name from

1880 to 2017. 

Here are the first 9 lines from the file countsByName.csv: 

Name,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893 

Mary,7092,6948,8178,8044,9253,9166,9921,9935,11804,11689,12113,11742,13222,12839 

Anna,2616,2714,3143,3322,3880,4014,4298,4240,5008,5085,5253,5114,5562,5712 

Emma,2013,2043,2310,2374,2596,2742,2775,2661,3104,2894,2996,2897,3140,2982 

Elizabeth,1948,1852,2193,2268,2565,2591,2691,2695,3236,3074,3124,3065,3469,3372 

Minnie,1755,1661,2014,2049,2243,2184,2380,2226,2668,2637,2666,2440,2617,2528 

Margaret,1578,1667,1828,1894,2152,2215,2283,2432,2914,2930,3115,3077,3447,3579 

Ida,1480,1444,1678,1639,1890,1860,2057,1938,2242,2130,2188,2002,2269,2256 

Alice,1414,1315,1542,1494,1732,1690,1821,1829,2207,2154,2281,2024,2381,2445 

Normalizing your counts.​ ​ To account for the fact that the population of the United

States has been increasing it makes sense to plot the percentage of applications

instead of the total number of applications for a specific name. To get the percentage of

applications for a specific name and year, you need to divide the count for that name by

the total number of applications that year. You have the counts by year from the file

above. We are also providing the totals by year in a separate file named

totalsByYear.csv​ : 

Year,Total

1880,201484

1881,192696

1882,221533

2014,3696311

2015,3688687

2016,3652968

2017,3546301

Hint:​ ​ The first line can be ignored by your program. Your program may assume that that 

the year range always runs from 1880 to 2017 when creating the x-axis for your plots.

Graphing module

This assignment includes an introduction to using a simple graphing module that 

outputs results in text to the screen. We will be using the ​ plainchart.py​ module which is

not covered in your primary textbook. Download the module here from Canvas and put

it in the same directory as your Python code. You will only need to know three lines of

code to use the plainchart.py module: 

# import the plainchart module at the top of your program 

import plainchart

# create and print a text chart that is 25 lines high

# numList is a list of integer counts by year or

# a list of floating point percentages by year

chart = plainchart.PlainChart(numList, height=25)

print(chart.render()) 

Your objective is to create a list of numbers numList to give to the charting module. The 

module works with both integers and floating point values. Also regardless of the range

of values, the module will automatically adjust the height of the chart to 25 lines. 

Part 1​ ​ (40%) ​ Reading the Database and Getting User Input

Get the file ​ countsByName.csv​ and place it in the same directory you are running your 

script.

You will begin by writing a program that reads in the file countsByName.csv and 

populates a dictionary that can be used to look up a list of counts by year (columns

2,3,4,5,…in countsByName.csv) using the person’s name (column 1 in

countsByName.csv). The counts should be stored as a list of integers, not strings. 

You will then write a loop that keeps asking the user to enter a name until it finds it in

the dictionary. When “Name” is found print out “Found Name” followed by the list of

counts. Do not assume that the user entered the name in the same case as used in the

file, instead use string methods to convert the user input to the correct case. 

The exact format for the prompt and output is shown here:

What’s your name?chipmunk

What’s your name?xylophone

What’s your name?porschE

Found Porsche

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 10, 14, 9, 7, 19, 48, 64, 51, 

45, 46, 57, 66, 82, 127, 182, 172, 159, 179, 123, 123, 70, 68, 45, 30, 35, 27, 12, 25, 32,

15, 20, 9, 15, 18, 17, 16, 11, 9, 14, 9, 5, 0, 13, 0, 5] 

Strategy hints:

● When looking up a name, you should use string methods convert the case of 

whatever the user entered to titlecase. (see example above)

● You will need to remove the name from the list of counts before storing it in 

the dictionary. The pop list method can be used to remove elements from

lists. 

● The split method will give you a list of counts as strings, but you will need to

convert them to integers before storing them in the dictionary. 

● The format for the printed list is exactly what you get if your give a list to the

print command. (e.g. print(counts) ) We will improve on this output in the next

part. 

Submit this to Kodethon as Baby_Names_Pt1.py

Part 2​ ​ (30%) ​ Plotting the output

Download the ​ plainchart.py​ module and place it in the directory where you are running 

your script. 

Modify your program so that it prints the maximum counts and then instead of printing a 

list of integers it uses plainchart to plot the values.

Plainchart does not provide axes. The y-axis is provided by the Maximum Count. You 

can write a loop that uses string methods to create the x-axis. Every 10 years (from

1880 to 2010) draw a bar “|”, followed by the year, followed by 5 spaces (for a total of 10

characters). 

Strategy hints:

● If you can’t figure out the x-axis loop you may also do it with a single print 

statement.

Submit this to Kodethon as Baby_Names_Pt2.py 

Part 3​ ​ (30%) ​ Normalizing

Get the file ​ totalsByYear.csv​ and place it in the same directory you are running your 

script.

Read in the file to get the total number of people in the database for each year. Note 

that the number increases over time, and our plots will be more accurate representation

of the name’s popularity if we plot the percentage over time. For each year, compute the

percentage (count / total for that year) * 100, before plotting it with plainchart. Also

change the y=axis to show the maximum popularity as a percentage. 

Strategy hints: 

● The popularity is a percentage formatted to four decimal places. You will

need to multiply the years frequency (counts/total counts) by 100 to get a

percentage. You will need to use the format method to format the floating

point value for printing. 

Submit this to Kodethon as Baby_Names_Pt3.py 

Place your order
(550 words)

Approximate price: $22

Calculate the price of your order

550 words
We'll send you the first draft for approval by September 11, 2018 at 10:52 AM
Total price:
$26
The price is based on these factors:
Academic level
Number of pages
Urgency
Basic features
  • Free title page and bibliography
  • Unlimited revisions
  • Plagiarism-free guarantee
  • Money-back guarantee
  • 24/7 support
On-demand options
  • Writer’s samples
  • Part-by-part delivery
  • Overnight delivery
  • Copies of used sources
  • Expert Proofreading
Paper format
  • 275 words per page
  • 12 pt Arial/Times New Roman
  • Double line spacing
  • Any citation style (APA, MLA, Chicago/Turabian, Harvard)

Our guarantees

Delivering a high-quality product at a reasonable price is not enough anymore.
That’s why we have developed 5 beneficial guarantees that will make your experience with our service enjoyable, easy, and safe.

Money-back guarantee

You have to be 100% sure of the quality of your product to give a money-back guarantee. This describes us perfectly. Make sure that this guarantee is totally transparent.

Read more

Zero-plagiarism guarantee

Each paper is composed from scratch, according to your instructions. It is then checked by our plagiarism-detection software. There is no gap where plagiarism could squeeze in.

Read more

Free-revision policy

Thanks to our free revisions, there is no way for you to be unsatisfied. We will work on your paper until you are completely happy with the result.

Read more

Privacy policy

Your email is safe, as we store it according to international data protection rules. Your bank details are secure, as we use only reliable payment systems.

Read more

Fair-cooperation guarantee

By sending us your money, you buy the service we provide. Check out our terms and conditions if you prefer business talks to be laid out in official language.

Read more