Disclaimer: this article does not cover or promote any political views. It’s all about data and REST APIs.
I am relieved, thankful, elated, glad, thrilled, joyful (I could go on with more synonyms from my thesaurus.com search for 'happy') November 6, 2018 has come and gone. Election day is over. This means no more political ads on TV, and those signs lining the streets will be coming down! It is a joy to now watch commercials about things that matter. Things like injury lawyers who are on your side or discovering a copper colored pan is going to cook my food better than a black one.
The data in this article pertains to advertising expenditures in the 2018 elections. This is the second of three articles in a series outlining the use of REST APIs and SAS. You can read all of my posts on this topic here. The first article, Using SAS Viya REST APIs to access images from SAS Visual Analytics, I used SAS Viya REST APIs to download an image from a flight data SAS report. In this article I use Cloud Analytics Service (CAS) REST APIs to run statistical methods on political ad spending data. The third article will bring both APIs together in an application.
The data
In the closing days of the election season, while being inundated with political advertising, I thought about how much money is spent during each cycle. The exact numbers vary depending on the resource, but the range for this year’s mid-term elections is between four and five billion dollars.
A little research reveals that outside the candidates themselves, the biggest spenders on political ads are political action committees, aka PACs. The Center for Responsive Politics compiled the data set used in this article, and derives from a larger data set released by the Federal Election Commission. The data set lists a breakdown of PAC contributions to campaign finances.
CAS REST APIs
As I explained in the previous article, SAS publishes two sets of APIs. Which APIs to use depends on the service, the data organization, or the intended use of the data. Please refer to the SAS Viya REST API article for more information on each set of APIs.
CAS REST APIs use CAS actions to perform statistical methods across a variety of SAS products. You can also use the CAS REST APIs to configure and maintain the SAS Viya environment. Here, I focus on the CAS actions. Calling the CAS actions via the REST API allow users to access SAS data and procedures and integrate them into their applications.
The process
How to construct the API call
I start with the API documentation for information on how to construct and use the CAS REST APIs. The REST API can submit actions and return the results. Parameters and result data are in JSON format. To specify your parameters, encapsulate the attributes in a JSON object, then submit a POST method on the action. The URL for your action will include the UUID of your session in the format: /cas/sessions/{uuid}/actions/{action}. Replace {uuid} and action with the appropriate values.
Create a session
The first requirement is to create a session. I use the following cURL command to create the session.
curl -X POST http://sasserver.demo.sas.com:8777/cas/sessions \ -H 'Authorization: Bearer <access-token-goes-here>' |
The response is a JSON object with a session ID:
{ "session": "16dd9ee7-3189-1e40-8ba7-934a4a257fd7" } |
I’ll use the UUID for the session to build the URLs for the remainder of the REST calls.
Build the CAS REST API call body
Now we know the general structure of the CAS REST API call. We can browse the CAS actions by name to determine how to build the body text.
Using the simple.summary action definition, I build a JSON body to access the PAC spending from a CASTable, create a new table grouped by political views, and calculate total spending. The resulting code is below:
{ "table":{"caslib":"CASUSER(sasdemo)","name":"politicalspending2018","groupBy":{"name":"view"}}, "casout":{"caslib":"CASUSER(sasdemo)","name":"spendingbyaffiliation","promote":true}, "inputs":"total", "subset":["SUM","N"] } |
Each line of code above contributes to running the CAS action:
- Define the table to use and how to group the data
- The output of the API call will create a new CASTable
- Dictate the column to summarize.
- The statistical method(s) to include in the result table; in this case I want to sum the Total column and count the number of PACs by group.
Send the CAS REST API
Next, I send the body of the text with the curl call below. Notice the session ID obtained earlier is now part of the URL:
curl -X POST http://sasserver.demo.sas.com:8777/cas/sessions/16dd9ee7-3189-1e40-8ba7-934a4a257fd7/actions/simple.summary \ -H 'Authorization: Bearer <access-token-goes-here>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' |
The REST call creates a new CASTable, SPENDINGBYAFFILIATION. Refer to the screen shot below.
I also have the option of returning the data to create the SPENDINGBYAFFILIATION table in JSON format. To accomplish this, remove the casout{}
line from the preceding call. Below is a snippet of the JSON response.
After parsing the JSON response code, it is now ready for utilization by a web application, software program, or script.
Moving on
The Thanksgiving Day holiday is fast approaching here in the United States. I plan to eat a lot of turkey and sweet potato pie, welcome the out-of-town family, and watch football. It will be refreshing to not hear the back-and-forth banter and bickering between candidates during commercial breaks. Oh, but wait, Thanksgiving is the start of the holiday season. This means one thing: promotions on Black Friday deals for items I may not need will start airing and last through year's-end. I guess if it is not one thing filling the advertising air waves, it is another. I'll just keep the remote handy and hope I can find another ball game on.
What’s next?
I understand and appreciate political candidates’ needs to communicate their stance on issues and promote their agendas. This takes money. I don't see the spending trend changing direction in the coming years. I can only hope the use of the funds will promote candidates' qualifications, beliefs, and ideas, and not to bash or belittle their opponents.
My next article will demonstrate how to use both the SAS Viya and the CAS REST APIs under the umbrella of one web application. And I promise, no politics.
4 Comments
Hello Joe
I tried this example and had issues getting the parameters passed in a JSON file. They did work as application/x-www-form-urlencoded but I needed to use JSON.
I noticed that the headers for content in your cURL example are incorrect. They use = symbol instead of :
Correct format is:
-H "Accept: application/json"
-H "Content-Type: application/json"
Now it also works for me with JSON parameter file!
Thanks for the great example in any case!
Hi Jarno,
Thanks for reading and catching my error. I have made the correction in the article. Glad it all worked out for you.
Thanks nice information
Nice Blog..Thank you