CSE 6242 A, Q / CX 4242 A: Data and Visual Analytics Homework 1: Analyzing The MovieDB Data; Gephi; SQLite; D3 Warmup; OpenRefine; Flask; jQuery

$30.00

Download Details:

  • Name: HW1-SQLite.D3.OpenRefine.Flask_.jQuery-yir1rf.zip
  • Type: zip
  • Size: 2.30 MB

Category:

Description

Rate this product

Q1 [40 points] Collecting and visualizing The Movie DB (TMDb) data
Q1.1 [25 points] Collecting Movie Data
You will use “The Movie DB” API to: (1) download data about movies and (2) for each movie, download its 5
similar movies.
You will write some Python 3 code (not Python 2.x) in script.py in this question. You will need an API key to
use the TMDb data. Your API key will be an input to script.py so that we can run your code with our own API
key to check the results. Running the following command should generate the CSV files specified in part b and
part c:
python3 script.py
Please refer to this tutorial to learn how to parse command line arguments. Please DO NOT leave your API key
written in the code.
Note: The Python Standard Library and the requests library are allowed. Python wrappers (or modules) for the
TMDb API may NOT be used for this assignment. Pandas also may NOT be used ­­­ we are aware that it is a
useful library to learn. However, to make grading more manageable and to enable our TAs to provide better,
more consistent support to our students, we have decided to restrict the libraries to the more “essential” ones
mentioned above.
a. How to use TheMovieDB API:
● Create a TMDb account and request for an API key ­ https://www.themoviedb.org/account/signup.
Refer to this document for detailed instructions.
● Refer to the API documentation https://developers.themoviedb.org/3/getting­started/introduction , as
you work on this question.
Note:
­ The API allows you to make 40 requests every 10 seconds. Set appropriate timeout intervals in
your code while making requests. We recommend you think about how much time your script will run
for when solving this question, so you will complete it on time.
­ The API endpoint may return different results for the same request.
b. [10 points] Search for movies in the “Comedy” genre released in the year 2000 or later. Retrieve the 300 most
popular movies in this genre. The movies should be sorted from most popular to least popular. Hint: Sorting
based on popularity can be done in the API call.
● Documentation for retrieving movies: https://developers.themoviedb.org/3/discover/moviediscover https://developers.themoviedb.org/3/genres/get­movie­list
● Save the results in movie_ID_name.csv.
Each line in the file should describe one movie, in the following format ­­­ NO space after comma, and do
not include any column headers:
movie­ID,movie­name
For example, a line in the file could look like:
353486,Jumanji: Welcome to the Jungle
Note:
­ You may need to make multiple API calls to retrieve all 300 movies. For example, the results may
be returned in “pages,” so you may need to retrieve them page by page.
­ Please use the “primary_release_date” parameter instead of the “release_date” parameter in the
API when retrieving movies released in the year 2000 or later. The “release_date” parameter will
incorrectly return a movie if any of its release dates fall within the years listed.
c. [15 points] For each of the 300 movies, use the API to find its 5 similar movies. If a movie has fewer than 5
similar movies, the API will return as many as it can find. Your code should be flexible to work with however
many movies the API returns.
● Documentation for obtaining similar movies: https://developers.themoviedb.org/3/movies/get­similarmovies
● Save the results in movie_ID_sim_movie_ID.csv.
Each line in the file should describe one pair of similar movies ­­­ NO space after comma, and do not
include any column headers:
movie­ID,similar­movie­ID
Note: You should remove all duplicate pairs after the similar movies have been found. That is, if both the
pairs A,B and B,A are present, only keep A,B where A < B. For example, if movie A has three similar
movies X, Y and Z; and movie X has two similar movies A and B, then there should only be four lines in
the file.
A,X
A,Y
A,Z
X,B
You do not need to fetch additional similar movies for a given movie, if one or more of its pairs were
removed due to duplication.
Deliverables: Place all the files listed below in the Q1 folder.
● movie_ID_name.csv: The text file that contains the output to part b.
● movie_ID_sim_movie_ID.csv: The text file that contains the output to part c.
● script.py: The Python 3 (not Python 2.x) script you write that generates both
movie_ID_name.csv and movie_ID_sim_movie_ID.csv.
Note : Q1.2 builds on the results of Q1.1. Specifically, Q1.2 asks that the “Source,Target” be added to the
resulting file from Q1.1. If you have completed both Q1.1 and Q1.2, your csv would have the header row —
please submit this file. If you have completed only Q1.1, but not Q1.2 (for any reasons), then please submit the
csv file without the header row.
Q1.2 [15 points] Visualizing Movie Similarity Graph
Using Gephi, visualize the network of similar movies obtained. You can download Gephi here. Ensure your
system fulfills all requirements for running Gephi.
a. Go through the Gephi quick­start guide.
b. [2 points] Insert Source,Target as the first line in movie_ID_sim_movie_ID.csv. Each line now
represents a directed edge with the format Source,Target. Import all the edges contained in the file
using Data Laboratory in Gephi.
Note: Remember to check the “create missing nodes” option while importing since we do not have an
explicit nodes file.
c. [8 points] Using the following guidelines, create a visually meaningful graph:
● Keep edge crossing to a minimum, and avoid as much node overlap as possible.
● Keep the graph compact and symmetric if possible.
● Whenever possible, show node labels. If showing all node labels create too much visual
complexity, try showing those for the “important” nodes.
● Using nodes’ spatial positions to convey information (e.g., “clusters” or groups).
Experiment with Gephi’s features, such as graph layouts, changing node size and color, edge thickness,
etc. The objective of this task is to familiarize yourself with Gephi and hence is a fairly open ended task.
d. [5 points] Using Gephi’s built­in functions, compute the following metrics for your graph:
● Average node degree (run the function called “Average Degree”)
● Diameter of the graph (run the function called “Network Diameter”)
● Average path length (run the function called “Avg. Path Length”)
Briefly explain the intuitive meaning of each metric in your own words.
You will learn about these metrics in the “graphs” lectures.
Deliverables: Place all the files listed below in the Q1 folder.
● For part b: movie_ID_sim_movie_ID.csv (with Source,Target as its first line).
● For part c: an image file named “graph.png” (or “graph.svg”) containing your visualization and a text
file named “graph_explanation.txt” describing your design choices, using no more than 50 words.
● For part d: a text file named “metrics.txt” containing the three metrics and your intuitive explanation
for each of them, using no more than 100 words.
Q2 [35 pt] SQLite
The following questions will help refresh your memory about SQL and get you started with SQLite ­­­ a
lightweight, serverless embedded database that can easily handle up to multiple GBs of data. As mentioned in
class, SQLite is the world’s most popular embedded database. It is convenient to share data stored in an SQLite
database ­­­ just one cross­platform file, and no need to parse (unlike CSV files).
You will modify the given Q2.SQL.txt file to add SQL statements and SQLite commands to it.
We will autograde your solution by running the following command that generates Q2.db and
Q2.OUT.txt (assuming the current directory contains the data files).
$ sqlite3 Q2.db Q2.OUT.txt
We will generate the Q2.OUT.txt using the above command.
­ You may not receive any points if we are unable to generate the 2 output files.
­ You may also lose points if you do not strictly follow the output format specified in each
question below. The output format corresponds to the headers/column names for your SQL
command output.
We have added some lines of code in the Q2.SQL.txt file which are for the purpose of autograding. .
DO NOT REMOVE/MODIFY THESE LINES. You may not receive any points if these statements are
modified in any way (our autograder will check for changes). There are clearly marked regions in the
Q2.SQL.txt file where you should add your code. We have also provided a
Q2.OUT.SAMPLE.txt which gives an example of how your final Q2.OUT.txt should look like after
running the above command. Please avoid printing unnecessary items in your final submission as it
may affect autograding and you may lose points. Purpose of some lines of code in file Q2.SQL.txt are
as follows:
● .headers off. : After each question, an output format has been given with a list of
column names/headers.This command ensures that such headers are not displayed in the
output.
● .separator ‘,’ : To specify that the input file and the output are comma­separated.
● select ‘’: This command prints a blank line. After each question’s query, this command
ensures that there is a new line between each result in the output file.
WARNING: Do not copy and paste any code/command from this PDF for use in the sqlite command
prompt, because PDFs sometimes introduce hidden/special characters, causing SQL error. Manually
type out the commands instead.
Note: For the questions in this section, you must use only INNER JOIN when you perform a join
between two tables. Other types of join may result in incorrect outputs.
Note: Do not use .mode csv in your Q2.SQL.txt file. This will cause quotes to be printed in the output
of each select ‘’; statement.
a. Create tables and import data.
i. [2 points] Create the following two tables (“movies” and “cast”) with columns having the indicated
data types:
● movies
○ id (integer)
○ name (text)
○ score (integer)
● cast
○ movie_id (integer)
○ cast_id (integer)
○ cast_name (text)
ii. [1 point] Import the provided movie­name­score.txt file into the movies table, and moviecast.txt into the cast table. You can use SQLite’s .import command for this. Please use relative
paths while importing files since absolute/local paths are specific locations that exist only on your
computer and will cause the autograder to fail right in the beginning.
b. [2 points] Create indexes. Create the following indexes which would speed up subsequent operations
(improvement in speed may be negligible for this small database, but significant for larger databases):
i. scores_index for the score column in movies table
ii. cast_index for the cast_id column in cast table
iii. movie_index for the id column in movies table
c. [2 points] Calculate average score. Find the average score of all movies having a score >= 5
Output format:
average_score
d. [3 points] Find poor movies. List the five worst movies (lowest scores). Sort your output by score from
lowest to highest, then by name in alphabetical order.
Output format:
id,name,score
e. [4 points] Find laid back actors. List ten cast members (alphabetically by cast_name) with exactly two
movie appearances.
Output format:
cast_id,cast_name,movie_count
f. [6 points] Get high scoring actors. Find the top ten cast members who have the highest average movie
scores. Sort your output by score (from high to low). In case of a tie in the score, sort the results based
on the name of the cast member in alphabetical order. Skip movies with score = 50.
The view should have the format:
good_collaboration(
cast_member_id1,
cast_member_id2,
movie_count,
average_movie_score)
For symmetrical or mirror pairs, only keep the row in which cast_member_id1 has a lower numeric
value. For example, for ID pairs (1, 2) and (2, 1), keep the row with IDs (1, 2). There should not be any
self pairs (cast_member_id1 == cast_member_id2).
Full points will only be awarded for queries that use joins.
Remember that creating a view will not produce any output, so you should test your view with a few
simple select statements during development. One such test has already been added to the code as part
of the autograding.
Optional Reading: Why create views?
h. [4 points] Find the best collaborators. Get the five cast members with the highest average scores from
the good_collaboration view made in the last part, and call this score the collaboration_score.
This score is the average of the average_movie_score corresponding to each cast member,
including actors in cast_member_id1 as well as cast_member_id2. Sort your output in a
descending order of this score (and alphabetically in case of a tie).
Output format:
cast_id,cast_name,collaboration_score
i. SQLite supports simple but powerful Full Text Search (FTS) for fast text­based querying (FTS
documentation). Import movie overview data from the movie­overview.txt into a new FTS table called
movie_overview with the schema:
movie_overview (
id integer,
name text,
year integer,
overview text,
popularity decimal)
NOTE: Create the table using fts3 or fts4 only. Also note that keywords like NEAR, AND, OR and NOT
are case sensitive in FTS queries.
1. [1 point] Count the number of movies whose overview field contains the word “fight”.
Output format:
count_overview
2. [2 points] List the id’s of the movies that contain the terms “love” and “story” in the
overview field with no more than 5 intervening terms in between.
Output format:
id
Deliverables: Place all the files listed below in the Q2 folder
● Q2.SQL.txt: Modified file additionally containing all the SQL statements and SQLite commands you
have used to answer questions a ­ i in the appropriate sequence.
● Q2.OUT.txt: Output of the queries in Q2.SQL.txt. Check above for how to generate this file.
Q3 [15 pt] D3 Warmup and Tutorial
● Go through the D3 tutorial here before attempting this question.
● Complete steps 01­16 (Complete through “16. Axes”).
● This is a simple and important tutorial which lays the groundwork for Homework 2.
Note: We recommend using Mozilla Firefox or Google Chrome, since they have relatively robust built­in
developer tools.
Deliverables: Place all the files/folders listed below in the Q3 folder
● A folder named d3 containing file d3.v3.min.js (download)
● index.html : When run in a browser, it should display a scatterplot with the following specifications:
a. [12 pt] Generate and plot 60 objects: 30 upward­pointing equilateral triangles and 30 crosses.
Each object’s X and Y coordinates should be a random integer between 0 and 100 inclusively
(i.e., [0, 100]). An object’s X and Y coordinates should be independently computed.
Each object’s size will be a value between 5 and 50 inclusively (i.e., [5, 50]). You should use the
“symbol.size()” function of d3 to adjust the size of the object. Use the object’s X coordinate to
determine the size of the object. You should use a linear scale for the size, to map the domain of
X values to the range of [5,50]. Objects with larger x coordinate values should have larger sizes.
This link explains how size is interpreted by symbol.size(). You may want to look at this
example for the usage of “symbol.size()” function.
All objects with size greater than the average size of all scatterplot objects should be colored blue
and all other objects should be colored green.
All these objects should be filled (Please see the figure below) and the entire graph should fit in
the browser window (no scrolling).
b. [2 pt] The plot must have visible X and Y axes that scale according to the generated objects.
The ticks on these axes should adjust automatically based on the randomly generated scatterplot
objects.
c. [1 pt] Your full name (in upper case) should appear above the scatterplot. Set the HTML title
tag () to your GT account username (jdoe3) in lower case. Do not use your alias.<br /> Example scatter plot<br /> Notes:<br /> ● We show an example result of how your scatter plot may look like in the above figure.<br /> Your plot will likely be different (e.g., different locations for the points).<br /> ● No external libraries should be used. The index.html file can only refer to d3.v3.min.js<br /> within the d3 folder.<br /> ● While accessing d3.v3.min.js from index.html, please make sure that the path used is<br /> relative.<br /> Q4 [10 pt] OpenRefine<br /> a. Watch the videos on the OpenRefine’s homepage for an overview of its features.<br /> Download and install the latest stable release (2.8) of OpenRefine.<br /> b. Import Dataset:<br /> ● Launch OpenRefine. It opens in a browser (127.0.0.1:3333).<br /> ● We use a transactions dataset from Kaggle (Black Friday). If you are interested in the details,<br /> please refer to the data description page. To reduce the demand for memory and disk space that<br /> you may need, we have sampled a subset of the dataset as “properties.csv”, which you will use in<br /> this question. Each row in this file is of the form .<br /> ● Choose “Create Project” ­> This Computer ­> “properties.csv”. Click “Next”.<br /> ● You will now see a preview of the dataset. Click “Create Project” in the upper right corner.<br /> c. Clean/Refine the data:<br /> Note: OpenRefine maintains a log of all changes. You can undo changes. See the “Undo/Redo” button<br /> on the upper left corner.<br /> i. [2 pt] Use the Transform feature (under Edit Cells → Transform) and a General Refine Evaluation<br /> Language (GREL) expression to replace the values M and F in the column “Gender” with 0 and 1<br /> respectively. Record the GREL expression you used in the observations text file.<br /> ii. [2 pt] Use the Transform feature and a GREL expression to replace the null values in column<br /> “Product_Category_2” with the string “0”. Record the GREL expression you used in the observations text<br /> file. Perform the same operation on “Product_Category_3” column to replace null values with “0”.<br /> iii. [2 pt] Use the Transform feature (under Edit Cells → Transform) and a GREL expression to replace<br /> the value “55+” in the column “Age” with the value “56­100”. Record the GREL expression you used in<br /> the observations text file.<br /> iv. [2 pt] Create a new column “High_Priced” with the values 0 or 1 based on the “Purchase” column (Edit<br /> column → Add column based on this column) with the following conditions: If the purchase value is<br /> greater than 1000, “high_priced” should be set as 1, else 0. (Ensure that the GREL expression handles<br /> converting the string value in “Purchase” column to numeric form). Record the GREL expression you<br /> used in the observations text file.<br /> v. [2 pt] Create a text facet (Facet → Text facet) from the “Product_ID” column and find the number of<br /> unique products in the dataset. Then, sort the unique names by their counts to find the product with the<br /> highest count value (i.e., most frequently bought). Record the number of unique products and the<br /> Product_Id of this most frequently purchased product, separated by a comma, in the observations text<br /> file. For example, if the number of unique products is 100 and the product bought the most is<br /> P00000001, then your answer would be “100,P00000001” (without double quotes).<br /> Deliverables: Place all the files listed below in the Q4 folder<br /> ● properties_clean.csv : Export the final table as a comma­separated values (.csv) file.<br /> ● changes.json : Submit a list of changes made to file in json format. Use the “Extract Operation<br /> History” option under the Undo/Redo tab to create this file.<br /> ● Q4Observations.txt : A text file with answers to parts c.i, c.ii, c.iii, c.iv and c.v. Provide each answer in<br /> a new line.<br /> Q5 [20 pt] Web Development with Flask and jQuery<br /> In this question, we are going to create an interactive web­based application from scratch using web<br /> frameworks. It is recommended that you learn about the basics of HTML and Python before attempting this<br /> question. We believe this question will be helpful to students/teams who wish to develop web­based applications<br /> for their class projects. We recommend attempting this question using Python 3+.<br /> Flask is a micro web framework written in Python and based on the Werkzeug toolkit and Jinja2 template<br /> engine. A web framework or web application framework is a software framework designed to support the<br /> development of web applications including web services, web resources, and web APIs. Web frameworks aim to<br /> automate the overhead associated with common activities performed in web development. Flask is called a<br /> micro framework because it does not require particular tools or libraries. However, Flask supports extensions<br /> that can add application features as if they were implemented in Flask itself.<br /> jQuery is a cross­platform JavaScript library designed to simplify the client­side scripting of HTML. jQuery’s<br /> syntax is designed to make it easier to navigate a document, select DOM elements, create animations, handle<br /> events, and develop Ajax applications. jQuery also provides capabilities for developers to create plugins on top<br /> of the JavaScript library. Ajax is a set of Web development techniques using many Web technologies on the<br /> client side to create asynchronous Web applications. With Ajax, Web applications can send and retrieve data<br /> from a web server asynchronously (in the background) without interfering with the display and behavior of the<br /> existing page. By decoupling the data interchange layer from the presentation layer, Ajax allows for Web pages,<br /> and by extension Web applications, to change content dynamically without the need to reload the entire page.<br /> A few good tutorials for working with Flask, MySQL and jQuery in specific applications are listed below. You do<br /> not have to go through all of them to solve this question, however, they may give you clues that will help you<br /> solve the tasks at hand. These links are only for educational purposes ­ you do not have to implement them to<br /> get credit for this question.<br /> ● Implementing a simple Web application with Flask<br /> ● A tutorial to connect JQuery and Flask to handle REST requests<br /> ● A tutorial to connect a MySQL backend database for Flask<br /> ● A tutorial on understanding Flask in depth<br /> ● Advanced full stack development for a fully functional website<br /> In the following questions, strive to create user interfaces that have both good usability (easy to understand, and<br /> to use) and are aesthetically pleasing (it is a valued industry skill!). However, you will not lose or gain points due<br /> to user interface aesthetics. Strictly adhere to the letter casing of file names (all small letters) ­ Flask and<br /> operating systems like Ubuntu are sensitive to casing of file names. If wrong casing is used, this might cause<br /> your submission to fail on case­sensitive operating systems, and points may be deducted.<br /> a. [5 pt] Follow the steps mentioned in this tutorial to create a signup website for CSE6242. The tutorial<br /> will help you create an HTML page called signup.html. Also, create an html page<br /> called hello.html which displays the phrase “Hello World!”. Visiting http://127.0.0.1:5000/ will display<br /> hello.html.<br /> Example screenshots are shown below:<br /> hello.html<br /> signup.html (with the console debugger opened on the right)<br /> To run your website:<br /> 1. Go to the directory that contains your python script, app.py, and run it in the terminal.<br /> 2. Copy paste the URL printed in the terminal after the server (python script app.py) starts.<br /> 3. Go to http://127.0.0.1:5000/, the landing page, and check that it displays “Hello World!”.<br /> 4. Go to http://127.0.0.1:5000/signup and test filling in the form on the website.<br /> 5. Right click on your browser, click ‘Inspect Element’ and then press the console tab to see whether<br /> your entered details are visible there.<br /> b. [3 pt] You will modify the landing page (hello.html) created in Q5.a to help potential CSE6242<br /> students more easily navigate to the sign up page. You will create two buttons, one for signing up<br /> campus students, and another for prospective students to check out the course’s critique.<br /> 1. Create a button on the hello.html page (created in part a) which when clicked would redirect to<br /> the sign up page (signup.html) for the campus CSE6242 course.<br /> 2. Create a second button on hello.html that when clicked will redirect students to the course critique<br /> page of CSE6242 (http://critique.gatech.edu/course.php?id=CSE6242) (you probably saw it already,<br /> before signing up for this course).<br /> The image below shows an example design for modified hello.html. Your design does not need to follow<br /> the example exactly.<br /> Updated hello.html<br /> Updated signup.html<br /> c. [7 pt] We would now like to create a confirmation for users who have completed registering. Hence, we<br /> want users to see a simple confirmation message at the bottom of the signup page after they register.<br /> However, we are student­centric, and want to say everything with a personal touch! Hence, we would like<br /> to print the email address (not the password!) of the registered user in the confirmation message. Do the<br /> following:<br /> 1. Print the following confirmation message underneath the registration form only after the user<br /> enters his details and clicks “Register”. Try to keep the message clearly visible and center aligned.<br /> “Congratulations on registering for CSE6242, ! Redirecting you to the course<br /> homepage…”.<br /> 2. After the confirmation message is printed, clear the previously entered inputs from the form.<br /> Hint: You only need one function to do this.<br /> 3. After displaying the above mentioned confirmation message, wait for 3 seconds, and then redirect<br /> to the CSE6242 website (http://poloclub.gatech.edu/cse6242/).<br /> Hint: Consider using window.setTimeout and document.location.<br /> d. [5 pt] Like all other websites, we would like that students choose passwords that can not be easily<br /> compromised. We would like to check that all students have passwords that satisfy the following security<br /> criterion before accepting the registration of the student:<br /> 1. Should be at least 8 characters in length<br /> 2. Should have at least 1 uppercase character<br /> 3. Should have at least 1 number<br /> Write a function that will check this input. If all criteria are met, then go ahead and send the confirmation<br /> message. But if they are not met, store the criteria that were violated and store them in the password that<br /> is to be returned. For example, if criteria 1 and 3 were not met, then password = [1,3] and status = ‘BAD’<br /> (instead of ‘OK’). In such failure cases, return status = ‘BAD’, user = and password = [1,3].<br /> On the webpage, mention the criteria that have not been met ­­­ use the exact criterion wording, as<br /> written in the bullet list above. Also, encourage them to try again. Clear the password input of the form<br /> only for failure cases. Using the above example, the output should look similar to:<br /> Output when entering an invalid password<br /> Deliverables: Place all the files listed below in the Q5 folder (carefully follow the folder structure mentioned at<br /> the end of this assignment):<br /> ● hello.html : The landing page of the website<br /> ● signup.html : The registration page for the campus course<br /> ● signup.css: Provided by us. You are encouraged to make changes that make the site aesthetically<br /> pleasing<br /> ● bootstrap.min.css: Provided by us. Please do not edit this!<br /> ● signup.js: Javascript file holding the AJAX requests<br /> ● app.py: Server backend that is responsible for routing, etc.<br /> Important Instructions on Folder structure<br /> The directory structure must be:<br /> HW1­{GT username}/<br /> |­­­ Q1/<br /> |­­­­ movie_ID_name.csv<br /> |­­­­ movie_ID_sim_movie_ID.csv<br /> |­­­­ graph.png / graph.svg<br /> |­­­­ graph_explanation.txt<br /> |­­­­ metrics.txt<br /> |­­­­ script.py<br /> |­­­ Q2/<br /> |­­­­ Q2.SQL.txt<br /> |­­­­ Q2.OUT.txt<br /> |­­­ Q3/<br /> |­­­­ index.html<br /> |­­­­ d3/<br /> |­­­­ d3.v3.min.js<br /> |­­­ Q4/<br /> |­­­­ properties_clean.csv<br /> |­­­­ changes.json<br /> |­­­­ Q4Observations.txt<br /> |­­­ Q5/<br /> |­­­­ app.py<br /> |­­­­ templates/<br /> |­­­­­ signup.html<br /> |­­­­­ hello.html<br /> |­­­­ static/<br /> |­­­­­ css/<br /> |­­­­­­ signup.css<br /> |­­­­­­ bootstrap.min.css<br /> |­­­­­ js/<br /> |­­­­­­ signup.js<br /> Version 0</p> </div> </div> <section class="related products"> <h2>Related products</h2> <ul class="products columns-3"> <li class="product type-product post-14331 status-publish first instock product_cat-cse-6242 has-post-thumbnail downloadable virtual purchasable product-type-simple"> <a href="https://codingherolab.com/product/cse-6242-cx-4242-homework-2-d3-graphs-and-visualization/" class="woocommerce-LoopProduct-link woocommerce-loop-product__link"><img width="225" height="225" src="https://i0.wp.com/codingherolab.com/wp-content/uploads/2025/03/programming-assignments.jpg?resize=225%2C225&ssl=1" class="attachment-woocommerce_thumbnail size-woocommerce_thumbnail" alt="CSE 6242/CX 4242 Homework 2 : D3 Graphs and Visualization" decoding="async" loading="lazy" srcset="https://i0.wp.com/codingherolab.com/wp-content/uploads/2025/03/programming-assignments.jpg?w=225&ssl=1 225w, https://i0.wp.com/codingherolab.com/wp-content/uploads/2025/03/programming-assignments.jpg?resize=150%2C150&ssl=1 150w, https://i0.wp.com/codingherolab.com/wp-content/uploads/2025/03/programming-assignments.jpg?resize=100%2C100&ssl=1 100w" sizes="auto, (max-width: 225px) 100vw, 225px" /><h2 class="woocommerce-loop-product__title">CSE 6242/CX 4242 Homework 2 : D3 Graphs and Visualization</h2> <span class="price"><span class="woocommerce-Price-amount amount"><bdi><span class="woocommerce-Price-currencySymbol">$</span>30.00</bdi></span></span> </a><a href="/product/cse-6242-a-q-cx-4242-a-data-and-visual-analytics-homework-1-analyzing-the-moviedb-data-gephi-sqlite-d3-warmup-openrefine-flask-jquery/?add-to-cart=14331" aria-describedby="woocommerce_loop_add_to_cart_link_describedby_14331" data-quantity="1" class="button product_type_simple add_to_cart_button ajax_add_to_cart" data-product_id="14331" data-product_sku="" aria-label="Add to basket: “CSE 6242/CX 4242 Homework 2 : D3 Graphs and Visualization”" rel="nofollow" data-success_message="“CSE 6242/CX 4242 Homework 2 : D3 Graphs and Visualization” has been added to your cart" role="button">Add to basket</a> <span id="woocommerce_loop_add_to_cart_link_describedby_14331" class="screen-reader-text"> </span> </li> <li class="product type-product post-10737 status-publish instock product_cat-cse-6242 has-post-thumbnail downloadable virtual purchasable product-type-simple"> <a href="https://codingherolab.com/product/cse-6242-cx-4242-data-and-visual-analytics-homework-3-hadoop-spark-pig-and-azure/" class="woocommerce-LoopProduct-link woocommerce-loop-product__link"><img width="225" height="225" src="https://i0.wp.com/codingherolab.com/wp-content/uploads/2025/03/programming-assignments.jpg?resize=225%2C225&ssl=1" class="attachment-woocommerce_thumbnail size-woocommerce_thumbnail" alt="CSE 6242 / CX 4242: Data and Visual Analytics Homework 3 : Hadoop, Spark, Pig and Azure" decoding="async" loading="lazy" srcset="https://i0.wp.com/codingherolab.com/wp-content/uploads/2025/03/programming-assignments.jpg?w=225&ssl=1 225w, https://i0.wp.com/codingherolab.com/wp-content/uploads/2025/03/programming-assignments.jpg?resize=150%2C150&ssl=1 150w, https://i0.wp.com/codingherolab.com/wp-content/uploads/2025/03/programming-assignments.jpg?resize=100%2C100&ssl=1 100w" sizes="auto, (max-width: 225px) 100vw, 225px" /><h2 class="woocommerce-loop-product__title">CSE 6242 / CX 4242: Data and Visual Analytics Homework 3 : Hadoop, Spark, Pig and Azure</h2> <span class="price"><span class="woocommerce-Price-amount amount"><bdi><span class="woocommerce-Price-currencySymbol">$</span>30.00</bdi></span></span> </a><a href="/product/cse-6242-a-q-cx-4242-a-data-and-visual-analytics-homework-1-analyzing-the-moviedb-data-gephi-sqlite-d3-warmup-openrefine-flask-jquery/?add-to-cart=10737" aria-describedby="woocommerce_loop_add_to_cart_link_describedby_10737" data-quantity="1" class="button product_type_simple add_to_cart_button ajax_add_to_cart" data-product_id="10737" data-product_sku="" aria-label="Add to basket: “CSE 6242 / CX 4242: Data and Visual Analytics Homework 3 : Hadoop, Spark, Pig and Azure”" rel="nofollow" data-success_message="“CSE 6242 / CX 4242: Data and Visual Analytics Homework 3 : Hadoop, Spark, Pig and Azure” has been added to your cart" role="button">Add to basket</a> <span id="woocommerce_loop_add_to_cart_link_describedby_10737" class="screen-reader-text"> </span> </li> <li class="product type-product post-10748 status-publish last instock product_cat-cse-6242 has-post-thumbnail downloadable virtual purchasable product-type-simple"> <a href="https://codingherolab.com/product/cse-6242-cx-4242-data-and-visual-analytics-georgia/" class="woocommerce-LoopProduct-link woocommerce-loop-product__link"><img width="225" height="225" src="https://i0.wp.com/codingherolab.com/wp-content/uploads/2025/03/programming-assignments.jpg?resize=225%2C225&ssl=1" class="attachment-woocommerce_thumbnail size-woocommerce_thumbnail" alt="CSE 6242 / CX 4242: Data and Visual Analytics | Georgia" decoding="async" loading="lazy" srcset="https://i0.wp.com/codingherolab.com/wp-content/uploads/2025/03/programming-assignments.jpg?w=225&ssl=1 225w, https://i0.wp.com/codingherolab.com/wp-content/uploads/2025/03/programming-assignments.jpg?resize=150%2C150&ssl=1 150w, https://i0.wp.com/codingherolab.com/wp-content/uploads/2025/03/programming-assignments.jpg?resize=100%2C100&ssl=1 100w" sizes="auto, (max-width: 225px) 100vw, 225px" /><h2 class="woocommerce-loop-product__title">CSE 6242 / CX 4242: Data and Visual Analytics | Georgia</h2> <span class="price"><span class="woocommerce-Price-amount amount"><bdi><span class="woocommerce-Price-currencySymbol">$</span>30.00</bdi></span></span> </a><a href="/product/cse-6242-a-q-cx-4242-a-data-and-visual-analytics-homework-1-analyzing-the-moviedb-data-gephi-sqlite-d3-warmup-openrefine-flask-jquery/?add-to-cart=10748" aria-describedby="woocommerce_loop_add_to_cart_link_describedby_10748" data-quantity="1" class="button product_type_simple add_to_cart_button ajax_add_to_cart" data-product_id="10748" data-product_sku="" aria-label="Add to basket: “CSE 6242 / CX 4242: Data and Visual Analytics | Georgia”" rel="nofollow" data-success_message="“CSE 6242 / CX 4242: Data and Visual Analytics | Georgia” has been added to your cart" role="button">Add to basket</a> <span id="woocommerce_loop_add_to_cart_link_describedby_10748" class="screen-reader-text"> </span> </li> </ul> </section> <nav class="storefront-product-pagination" aria-label="More products"> <a href="https://codingherolab.com/product/cse-6242-cx-4242-homework-4-scalable-pagerank-via-virtual-memory-mmap-random-forest-weka/" rel="prev"> <img width="225" height="225" src="https://i0.wp.com/codingherolab.com/wp-content/uploads/2025/03/programming-assignments.jpg?resize=225%2C225&ssl=1" class="attachment-woocommerce_thumbnail size-woocommerce_thumbnail" alt="CSE 6242/CX 4242 Homework 4 : Scalable PageRank via Virtual Memory (MMap), Random Forest, Weka" loading="lazy" /> <span class="storefront-product-pagination__title">CSE 6242/CX 4242 Homework 4 : Scalable PageRank via Virtual Memory (MMap), Random Forest, Weka</span> </a> <a href="https://codingherolab.com/product/cse-6242-cx-4242-data-and-visual-analytics-homework-2-d3-graphs-and-visualization/" rel="next"> <img width="225" height="225" src="https://i0.wp.com/codingherolab.com/wp-content/uploads/2025/03/programming-assignments.jpg?resize=225%2C225&ssl=1" class="attachment-woocommerce_thumbnail size-woocommerce_thumbnail" alt="CSE 6242 / CX 4242: Data and Visual Analytics Homework 2 : D3 Graphs and Visualization" loading="lazy" /> <span class="storefront-product-pagination__title">CSE 6242 / CX 4242: Data and Visual Analytics Homework 2 : D3 Graphs and Visualization</span> </a> </nav><!-- .storefront-product-pagination --> </div> </main><!-- #main --> </div><!-- #primary --> </div><!-- .col-full --> </div><!-- #content --> <footer id="colophon" class="site-footer" role="contentinfo"> <div class="col-full"> <div class="footer-widgets row-1 col-3 fix"> <div class="block footer-widget-1"> <div id="block-5" class="widget widget_block"> <div class="wp-block-jetpack-contact-info"> <div class="wp-block-jetpack-email">Email: <a href="mailto:codingprolab@gmail.com">codingprolab@gmail.com</a></div> <div class="wp-block-jetpack-phone"><span class="phone-prefix">Whatsapp: </span><a href="tel:+15414237793">+1 (541)-423-7793</a></div> <div class="wp-block-jetpack-address"><div class="jetpack-address__city">Arizona</div><div class="jetpack-address__country">United Sates</div></div> </div> </div> </div> <div class="block footer-widget-2"> <div id="block-26" class="widget widget_block widget_media_image"> <figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="465" height="108" src="https://codingherolab.com/wp-content/uploads/2025/03/images-2-1.jpg" alt="" class="wp-image-35" srcset="https://i0.wp.com/codingherolab.com/wp-content/uploads/2025/03/images-2-1.jpg?w=465&ssl=1 465w, https://i0.wp.com/codingherolab.com/wp-content/uploads/2025/03/images-2-1.jpg?resize=300%2C70&ssl=1 300w, https://i0.wp.com/codingherolab.com/wp-content/uploads/2025/03/images-2-1.jpg?resize=416%2C97&ssl=1 416w" sizes="auto, (max-width: 465px) 100vw, 465px" /><figcaption class="wp-element-caption">All Payments are Secured</figcaption></figure> </div> </div> <div class="block footer-widget-3"> <div id="block-24" class="widget widget_block"> <details class="wp-block-details"><summary><strong>Terms of Use</strong><br>By using <strong>CodingHeroLab</strong>, you agree that our services are for <strong>educational assistance only</strong>. All tutorials and solutions should be used for <strong>guidance and direction only</strong>. We do not support plagiarism or academic dishonesty.<br><img decoding="async" draggable="false" role="img" class="emoji is-layout-flow wp-block-details-is-layout-flow" src="https://s.w.org/images/core/emoji/15.0.3/svg/1f680.svg" alt="🚀"> <strong>Your success, your responsibility!</strong></summary> <p></p> </details> </div><div id="block-20" class="widget widget_block widget_text"> <p></p> </div><div id="block-16" class="widget widget_block widget_text"> <p></p> </div> </div> </div><!-- .footer-widgets.row-1 --> <div class="site-info"> © CodingHeroLab 2026 <br /> <a href="https://woocommerce.com" target="_blank" title="WooCommerce - The Best eCommerce Platform for WordPress" rel="noreferrer nofollow">Built with WooCommerce</a>. </div><!-- .site-info --> <div class="storefront-handheld-footer-bar"> <ul class="columns-3"> <li class="my-account"> <a href="https://codingherolab.com/my-account/">My Account</a> </li> <li class="search"> <a href="">Search</a> <div class="site-search"> <div class="widget woocommerce widget_product_search"><form role="search" method="get" class="woocommerce-product-search" action="https://codingherolab.com/"> <label class="screen-reader-text" for="woocommerce-product-search-field-1">Search for:</label> <input type="search" id="woocommerce-product-search-field-1" class="search-field" placeholder="Search products…" value="" name="s" /> <button type="submit" value="Search" class="">Search</button> <input type="hidden" name="post_type" value="product" /> </form> </div> </div> </li> <li class="cart"> <a class="footer-cart-contents" href="https://codingherolab.com/cart/">Basket <span class="count">0</span> </a> </li> </ul> </div> </div><!-- .col-full --> </footer><!-- #colophon --> <section class="storefront-sticky-add-to-cart"> <div class="col-full"> <div class="storefront-sticky-add-to-cart__content"> <img width="225" height="225" src="https://i0.wp.com/codingherolab.com/wp-content/uploads/2025/03/programming-assignments.jpg?resize=225%2C225&ssl=1" class="attachment-woocommerce_thumbnail size-woocommerce_thumbnail" alt="CSE 6242 A, Q / CX 4242 A: Data and Visual Analytics Homework 1: Analyzing The MovieDB Data; Gephi; SQLite; D3 Warmup; OpenRefine; Flask; jQuery" loading="lazy" /> <div class="storefront-sticky-add-to-cart__content-product-info"> <span class="storefront-sticky-add-to-cart__content-title">You're viewing: <strong>CSE 6242 A, Q / CX 4242 A: Data and Visual Analytics Homework 1: Analyzing The MovieDB Data; Gephi; SQLite; D3 Warmup; OpenRefine; Flask; jQuery</strong></span> <span class="storefront-sticky-add-to-cart__content-price"><span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">$</span>30.00</span></span> </div> <a href="/product/cse-6242-a-q-cx-4242-a-data-and-visual-analytics-homework-1-analyzing-the-moviedb-data-gephi-sqlite-d3-warmup-openrefine-flask-jquery/?add-to-cart=10732" class="storefront-sticky-add-to-cart__content-button button alt" rel="nofollow"> Add to basket </a> </div> </div> </section><!-- .storefront-sticky-add-to-cart --> </div><!-- #page --> <script type="speculationrules"> {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/storefront/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <script type="application/ld+json">{"@context":"https://schema.org/","@graph":[{"@context":"https://schema.org/","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"name":"Home","@id":"https://codingherolab.com"}},{"@type":"ListItem","position":2,"item":{"name":"CSE 6242","@id":"https://codingherolab.com/product-category/cse-6242/"}},{"@type":"ListItem","position":3,"item":{"name":"CSE 6242 A, Q / CX 4242 A: Data and Visual Analytics Homework 1: Analyzing The MovieDB Data\u037e Gephi\u037e SQLite\u037e D3 Warmup\u037e OpenRefine\u037e Flask\u037e jQuery","@id":"https://codingherolab.com/product/cse-6242-a-q-cx-4242-a-data-and-visual-analytics-homework-1-analyzing-the-moviedb-data-gephi-sqlite-d3-warmup-openrefine-flask-jquery/"}}]},{"@context":"https://schema.org/","@type":"Product","@id":"https://codingherolab.com/product/cse-6242-a-q-cx-4242-a-data-and-visual-analytics-homework-1-analyzing-the-moviedb-data-gephi-sqlite-d3-warmup-openrefine-flask-jquery/#product","name":"CSE 6242 A, Q / CX 4242 A: Data and Visual Analytics Homework 1: Analyzing The MovieDB Data\u037e Gephi\u037e SQLite\u037e D3 Warmup\u037e OpenRefine\u037e Flask\u037e jQuery","url":"https://codingherolab.com/product/cse-6242-a-q-cx-4242-a-data-and-visual-analytics-homework-1-analyzing-the-moviedb-data-gephi-sqlite-d3-warmup-openrefine-flask-jquery/","description":"Q1 [40 points] Collecting and visualizing The Movie DB (TMDb) data\r\nQ1.1 [25 points] Collecting Movie Data\r\nYou will use \u201cThe Movie DB\u201d API to: (1) download data about movies and (2) for each movie, download its 5\r\nsimilar movies.\r\nYou will write some Python 3 code (not Python 2.x) in script.py in this question. You will need an API key to\r\nuse the TMDb data. Your API key will be an input to script.py so that we can run your code with our own API\r\nkey to check the results. Running the following command should generate the CSV files specified in part b and\r\npart c:\r\npython3 script.py \r\nPlease refer to this tutorial to learn how to parse command line arguments. Please DO NOT leave your API key\r\nwritten in the code.\r\nNote: The Python Standard Library and the requests library are allowed. Python wrappers (or modules) for the\r\nTMDb API may NOT be used for this assignment. Pandas also may NOT be used \u00ad\u00ad\u00ad we are aware that it is a\r\nuseful library to learn. However, to make grading more manageable and to enable our TAs to provide better,\r\nmore consistent support to our students, we have decided to restrict the libraries to the more \u201cessential\u201d ones\r\nmentioned above.\r\na. How to use TheMovieDB API:\r\n\u25cf Create a TMDb account and request for an API key \u00ad https://www.themoviedb.org/account/signup.\r\nRefer to this document for detailed instructions.\r\n\u25cf Refer to the API documentation https://developers.themoviedb.org/3/getting\u00adstarted/introduction , as\r\nyou work on this question.\r\nNote:\r\n\u00ad The API allows you to make 40 requests every 10 seconds. Set appropriate timeout intervals in\r\nyour code while making requests. We recommend you think about how much time your script will run\r\nfor when solving this question, so you will complete it on time.\r\n\u00ad The API endpoint may return different results for the same request.\r\nb. [10 points] Search for movies in the \u201cComedy\u201d genre released in the year 2000 or later. Retrieve the 300 most\r\npopular movies in this genre. The movies should be sorted from most popular to least popular. Hint: Sorting\r\nbased on popularity can be done in the API call.\r\n\u25cf Documentation for retrieving movies: https://developers.themoviedb.org/3/discover/moviediscover https://developers.themoviedb.org/3/genres/get\u00admovie\u00adlist\r\n\u25cf Save the results in movie_ID_name.csv.\r\nEach line in the file should describe one movie, in the following format \u00ad\u00ad\u00ad NO space after comma, and do\r\nnot include any column headers:\r\nmovie\u00adID,movie\u00adname\r\nFor example, a line in the file could look like:\r\n353486,Jumanji: Welcome to the Jungle\r\nNote:\r\n\u00ad You may need to make multiple API calls to retrieve all 300 movies. For example, the results may\r\nbe returned in \u201cpages,\u201d so you may need to retrieve them page by page.\r\n\u00ad Please use the \u201cprimary_release_date\u201d parameter instead of the \u201crelease_date\u201d parameter in the\r\nAPI when retrieving movies released in the year 2000 or later. The \u201crelease_date\u201d parameter will\r\nincorrectly return a movie if any of its release dates fall within the years listed.\r\nc. [15 points] For each of the 300 movies, use the API to find its 5 similar movies. If a movie has fewer than 5\r\nsimilar movies, the API will return as many as it can find. Your code should be flexible to work with however\r\nmany movies the API returns.\r\n\u25cf Documentation for obtaining similar movies: https://developers.themoviedb.org/3/movies/get\u00adsimilarmovies\r\n\u25cf Save the results in movie_ID_sim_movie_ID.csv.\r\nEach line in the file should describe one pair of similar movies \u00ad\u00ad\u00ad NO space after comma, and do not\r\ninclude any column headers:\r\nmovie\u00adID,similar\u00admovie\u00adID\r\nNote: You should remove all duplicate pairs after the similar movies have been found. That is, if both the\r\npairs A,B and B,A are present, only keep A,B where A &lt; B. For example, if movie A has three similar\r\nmovies X, Y and Z\u037e and movie X has two similar movies A and B, then there should only be four lines in\r\nthe file.\r\nA,X\r\nA,Y\r\nA,Z\r\nX,B\r\nYou do not need to fetch additional similar movies for a given movie, if one or more of its pairs were\r\nremoved due to duplication.\r\nDeliverables: Place all the files listed below in the Q1 folder.\r\n\u25cf movie_ID_name.csv: The text file that contains the output to part b.\r\n\u25cf movie_ID_sim_movie_ID.csv: The text file that contains the output to part c.\r\n\u25cf script.py: The Python 3 (not Python 2.x) script you write that generates both\r\nmovie_ID_name.csv and movie_ID_sim_movie_ID.csv.\r\nNote : Q1.2 builds on the results of Q1.1. Specifically, Q1.2 asks that the \u201cSource,Target\u201d be added to the\r\nresulting file from Q1.1. If you have completed both Q1.1 and Q1.2, your csv would have the header row \u2014\r\nplease submit this file. If you have completed only Q1.1, but not Q1.2 (for any reasons), then please submit the\r\ncsv file without the header row.\r\nQ1.2 [15 points] Visualizing Movie Similarity Graph\r\nUsing Gephi, visualize the network of similar movies obtained. You can download Gephi here. Ensure your\r\nsystem fulfills all requirements for running Gephi.\r\na. Go through the Gephi quick\u00adstart guide.\r\nb. [2 points] Insert Source,Target as the first line in movie_ID_sim_movie_ID.csv. Each line now\r\nrepresents a directed edge with the format Source,Target. Import all the edges contained in the file\r\nusing Data Laboratory in Gephi.\r\nNote: Remember to check the \u201ccreate missing nodes\u201d option while importing since we do not have an\r\nexplicit nodes file.\r\nc. [8 points] Using the following guidelines, create a visually meaningful graph:\r\n\u25cf Keep edge crossing to a minimum, and avoid as much node overlap as possible.\r\n\u25cf Keep the graph compact and symmetric if possible.\r\n\u25cf Whenever possible, show node labels. If showing all node labels create too much visual\r\ncomplexity, try showing those for the \u201cimportant\u201d nodes.\r\n\u25cf Using nodes\u2019 spatial positions to convey information (e.g., \u201cclusters\u201d or groups).\r\nExperiment with Gephi\u2019s features, such as graph layouts, changing node size and color, edge thickness,\r\netc. The objective of this task is to familiarize yourself with Gephi and hence is a fairly open ended task.\r\nd. [5 points] Using Gephi\u2019s built\u00adin functions, compute the following metrics for your graph:\r\n\u25cf Average node degree (run the function called \u201cAverage Degree\u201d)\r\n\u25cf Diameter of the graph (run the function called \u201cNetwork Diameter\u201d)\r\n\u25cf Average path length (run the function called \u201cAvg. Path Length\u201d)\r\nBriefly explain the intuitive meaning of each metric in your own words.\r\nYou will learn about these metrics in the \u201cgraphs\u201d lectures.\r\nDeliverables: Place all the files listed below in the Q1 folder.\r\n\u25cf For part b: movie_ID_sim_movie_ID.csv (with Source,Target as its first line).\r\n\u25cf For part c: an image file named \u201cgraph.png\u201d (or \u201cgraph.svg\u201d) containing your visualization and a text\r\nfile named \u201cgraph_explanation.txt\u201d describing your design choices, using no more than 50 words.\r\n\u25cf For part d: a text file named \u201cmetrics.txt\u201d containing the three metrics and your intuitive explanation\r\nfor each of them, using no more than 100 words.\r\nQ2 [35 pt] SQLite\r\nThe following questions will help refresh your memory about SQL and get you started with SQLite \u00ad\u00ad\u00ad a\r\nlightweight, serverless embedded database that can easily handle up to multiple GBs of data. As mentioned in\r\nclass, SQLite is the world\u2019s most popular embedded database. It is convenient to share data stored in an SQLite\r\ndatabase \u00ad\u00ad\u00ad just one cross\u00adplatform file, and no need to parse (unlike CSV files).\r\nYou will modify the given Q2.SQL.txt file to add SQL statements and SQLite commands to it.\r\nWe will autograde your solution by running the following command that generates Q2.db and\r\nQ2.OUT.txt (assuming the current directory contains the data files).\r\n$ sqlite3 Q2.db Q2.OUT.txt\r\nWe will generate the Q2.OUT.txt using the above command.\r\n\u00ad You may not receive any points if we are unable to generate the 2 output files.\r\n\u00ad You may also lose points if you do not strictly follow the output format specified in each\r\nquestion below. The output format corresponds to the headers/column names for your SQL\r\ncommand output.\r\nWe have added some lines of code in the Q2.SQL.txt file which are for the purpose of autograding. .\r\nDO NOT REMOVE/MODIFY THESE LINES. You may not receive any points if these statements are\r\nmodified in any way (our autograder will check for changes). There are clearly marked regions in the\r\nQ2.SQL.txt file where you should add your code. We have also provided a\r\nQ2.OUT.SAMPLE.txt which gives an example of how your final Q2.OUT.txt should look like after\r\nrunning the above command. Please avoid printing unnecessary items in your final submission as it\r\nmay affect autograding and you may lose points. Purpose of some lines of code in file Q2.SQL.txt are\r\nas follows:\r\n\u25cf .headers off. : After each question, an output format has been given with a list of\r\ncolumn names/headers.This command ensures that such headers are not displayed in the\r\noutput.\r\n\u25cf .separator \u2018,\u2019 : To specify that the input file and the output are comma\u00adseparated.\r\n\u25cf select \u2018\u2019: This command prints a blank line. After each question\u2019s query, this command\r\nensures that there is a new line between each result in the output file.\r\nWARNING: Do not copy and paste any code/command from this PDF for use in the sqlite command\r\nprompt, because PDFs sometimes introduce hidden/special characters, causing SQL error. Manually\r\ntype out the commands instead.\r\nNote: For the questions in this section, you must use only INNER JOIN when you perform a join\r\nbetween two tables. Other types of join may result in incorrect outputs.\r\nNote: Do not use .mode csv in your Q2.SQL.txt file. This will cause quotes to be printed in the output\r\nof each select \u2018\u2019\u037e statement.\r\na. Create tables and import data.\r\ni. [2 points] Create the following two tables (\u201cmovies\u201d and \u201ccast\u201d) with columns having the indicated\r\ndata types:\r\n\u25cf movies\r\n\u25cb id (integer)\r\n\u25cb name (text)\r\n\u25cb score (integer)\r\n\u25cf cast\r\n\u25cb movie_id (integer)\r\n\u25cb cast_id (integer)\r\n\u25cb cast_name (text)\r\nii. [1 point] Import the provided movie\u00adname\u00adscore.txt file into the movies table, and moviecast.txt into the cast table. You can use SQLite\u2019s .import command for this. Please use relative\r\npaths while importing files since absolute/local paths are specific locations that exist only on your\r\ncomputer and will cause the autograder to fail right in the beginning.\r\nb. [2 points] Create indexes. Create the following indexes which would speed up subsequent operations\r\n(improvement in speed may be negligible for this small database, but significant for larger databases):\r\ni. scores_index for the score column in movies table\r\nii. cast_index for the cast_id column in cast table\r\niii. movie_index for the id column in movies table\r\nc. [2 points] Calculate average score. Find the average score of all movies having a score &gt;= 5\r\nOutput format:\r\naverage_score\r\nd. [3 points] Find poor movies. List the five worst movies (lowest scores). Sort your output by score from\r\nlowest to highest, then by name in alphabetical order.\r\nOutput format:\r\nid,name,score\r\ne. [4 points] Find laid back actors. List ten cast members (alphabetically by cast_name) with exactly two\r\nmovie appearances.\r\nOutput format:\r\ncast_id,cast_name,movie_count\r\nf. [6 points] Get high scoring actors. Find the top ten cast members who have the highest average movie\r\nscores. Sort your output by score (from high to low). In case of a tie in the score, sort the results based\r\non the name of the cast member in alphabetical order. Skip movies with score = 50.\r\nThe view should have the format:\r\ngood_collaboration(\r\ncast_member_id1,\r\ncast_member_id2,\r\nmovie_count,\r\naverage_movie_score)\r\nFor symmetrical or mirror pairs, only keep the row in which cast_member_id1 has a lower numeric\r\nvalue. For example, for ID pairs (1, 2) and (2, 1), keep the row with IDs (1, 2). There should not be any\r\nself pairs (cast_member_id1 == cast_member_id2).\r\nFull points will only be awarded for queries that use joins.\r\nRemember that creating a view will not produce any output, so you should test your view with a few\r\nsimple select statements during development. One such test has already been added to the code as part\r\nof the autograding.\r\nOptional Reading: Why create views?\r\nh. [4 points] Find the best collaborators. Get the five cast members with the highest average scores from\r\nthe good_collaboration view made in the last part, and call this score the collaboration_score.\r\nThis score is the average of the average_movie_score corresponding to each cast member,\r\nincluding actors in cast_member_id1 as well as cast_member_id2. Sort your output in a\r\ndescending order of this score (and alphabetically in case of a tie).\r\nOutput format:\r\ncast_id,cast_name,collaboration_score\r\ni. SQLite supports simple but powerful Full Text Search (FTS) for fast text\u00adbased querying (FTS\r\ndocumentation). Import movie overview data from the movie\u00adoverview.txt into a new FTS table called\r\nmovie_overview with the schema:\r\nmovie_overview (\r\nid integer,\r\nname text,\r\nyear integer,\r\noverview text,\r\npopularity decimal)\r\nNOTE: Create the table using fts3 or fts4 only. Also note that keywords like NEAR, AND, OR and NOT\r\nare case sensitive in FTS queries.\r\n1. [1 point] Count the number of movies whose overview field contains the word \u201cfight\u201d.\r\nOutput format:\r\ncount_overview\r\n2. [2 points] List the id\u2019s of the movies that contain the terms \u201clove\u201d and \u201cstory\u201d in the\r\noverview field with no more than 5 intervening terms in between.\r\nOutput format:\r\nid\r\nDeliverables: Place all the files listed below in the Q2 folder\r\n\u25cf Q2.SQL.txt: Modified file additionally containing all the SQL statements and SQLite commands you\r\nhave used to answer questions a \u00ad i in the appropriate sequence.\r\n\u25cf Q2.OUT.txt: Output of the queries in Q2.SQL.txt. Check above for how to generate this file.\r\nQ3 [15 pt] D3 Warmup and Tutorial\r\n\u25cf Go through the D3 tutorial here before attempting this question.\r\n\u25cf Complete steps 01\u00ad16 (Complete through \u201c16. Axes\u201d).\r\n\u25cf This is a simple and important tutorial which lays the groundwork for Homework 2.\r\nNote: We recommend using Mozilla Firefox or Google Chrome, since they have relatively robust built\u00adin\r\ndeveloper tools.\r\nDeliverables: Place all the files/folders listed below in the Q3 folder\r\n\u25cf A folder named d3 containing file d3.v3.min.js (download)\r\n\u25cf index.html : When run in a browser, it should display a scatterplot with the following specifications:\r\na. [12 pt] Generate and plot 60 objects: 30 upward\u00adpointing equilateral triangles and 30 crosses.\r\nEach object\u2019s X and Y coordinates should be a random integer between 0 and 100 inclusively\r\n(i.e., [0, 100]). An object\u2019s X and Y coordinates should be independently computed.\r\nEach object\u2019s size will be a value between 5 and 50 inclusively (i.e., [5, 50]). You should use the\r\n\u201csymbol.size()\u201d function of d3 to adjust the size of the object. Use the object\u2019s X coordinate to\r\ndetermine the size of the object. You should use a linear scale for the size, to map the domain of\r\nX values to the range of [5,50]. Objects with larger x coordinate values should have larger sizes.\r\nThis link explains how size is interpreted by symbol.size(). You may want to look at this\r\nexample for the usage of \u201csymbol.size()\u201d function.\r\nAll objects with size greater than the average size of all scatterplot objects should be colored blue\r\nand all other objects should be colored green.\r\nAll these objects should be filled (Please see the figure below) and the entire graph should fit in\r\nthe browser window (no scrolling).\r\nb. [2 pt] The plot must have visible X and Y axes that scale according to the generated objects.\r\nThe ticks on these axes should adjust automatically based on the randomly generated scatterplot\r\nobjects.\r\nc. [1 pt] Your full name (in upper case) should appear above the scatterplot. Set the HTML title\r\ntag () to your GT account username (jdoe3) in lower case. Do not use your alias.\r\nExample scatter plot\r\nNotes:\r\n\u25cf We show an example result of how your scatter plot may look like in the above figure.\r\nYour plot will likely be different (e.g., different locations for the points).\r\n\u25cf No external libraries should be used. The index.html file can only refer to d3.v3.min.js\r\nwithin the d3 folder.\r\n\u25cf While accessing d3.v3.min.js from index.html, please make sure that the path used is\r\nrelative.\r\nQ4 [10 pt] OpenRefine\r\na. Watch the videos on the OpenRefine\u2019s homepage for an overview of its features.\r\nDownload and install the latest stable release (2.8) of OpenRefine.\r\nb. Import Dataset:\r\n\u25cf Launch OpenRefine. It opens in a browser (127.0.0.1:3333).\r\n\u25cf We use a transactions dataset from Kaggle (Black Friday). If you are interested in the details,\r\nplease refer to the data description page. To reduce the demand for memory and disk space that\r\nyou may need, we have sampled a subset of the dataset as \"properties.csv\", which you will use in\r\nthis question. Each row in this file is of the form .\r\n\u25cf Choose \"Create Project\" \u00ad&gt; This Computer \u00ad&gt; \"properties.csv\". Click \"Next\".\r\n\u25cf You will now see a preview of the dataset. Click \"Create Project\" in the upper right corner.\r\nc. Clean/Refine the data:\r\nNote: OpenRefine maintains a log of all changes. You can undo changes. See the \"Undo/Redo\" button\r\non the upper left corner.\r\ni. [2 pt] Use the Transform feature (under Edit Cells \u2192 Transform) and a General Refine Evaluation\r\nLanguage (GREL) expression to replace the values M and F in the column \u201cGender\u201d with 0 and 1\r\nrespectively. Record the GREL expression you used in the observations text file.\r\nii. [2 pt] Use the Transform feature and a GREL expression to replace the null values in column\r\n\u201cProduct_Category_2\u201d with the string \u201c0\u201d. Record the GREL expression you used in the observations text\r\nfile. Perform the same operation on \u201cProduct_Category_3\u201d column to replace null values with \u201c0\u201d.\r\niii. [2 pt] Use the Transform feature (under Edit Cells \u2192 Transform) and a GREL expression to replace\r\nthe value \u201c55+\u201d in the column \u201cAge\u201d with the value \u201c56\u00ad100\u201d. Record the GREL expression you used in\r\nthe observations text file.\r\niv. [2 pt] Create a new column \u201cHigh_Priced\u201d with the values 0 or 1 based on the \u201cPurchase\u201d column (Edit\r\ncolumn \u2192 Add column based on this column) with the following conditions: If the purchase value is\r\ngreater than 1000, \u201chigh_priced\u201d should be set as 1, else 0. (Ensure that the GREL expression handles\r\nconverting the string value in \u201cPurchase\u201d column to numeric form). Record the GREL expression you\r\nused in the observations text file.\r\nv. [2 pt] Create a text facet (Facet \u2192 Text facet) from the \u201cProduct_ID\u201d column and find the number of\r\nunique products in the dataset. Then, sort the unique names by their counts to find the product with the\r\nhighest count value (i.e., most frequently bought). Record the number of unique products and the\r\nProduct_Id of this most frequently purchased product, separated by a comma, in the observations text\r\nfile. For example, if the number of unique products is 100 and the product bought the most is\r\nP00000001, then your answer would be \u201c100,P00000001\u201d (without double quotes).\r\nDeliverables: Place all the files listed below in the Q4 folder\r\n\u25cf properties_clean.csv : Export the final table as a comma\u00adseparated values (.csv) file.\r\n\u25cf changes.json : Submit a list of changes made to file in json format. Use the \u201cExtract Operation\r\nHistory\u201d option under the Undo/Redo tab to create this file.\r\n\u25cf Q4Observations.txt : A text file with answers to parts c.i, c.ii, c.iii, c.iv and c.v. Provide each answer in\r\na new line.\r\nQ5 [20 pt] Web Development with Flask and jQuery\r\nIn this question, we are going to create an interactive web\u00adbased application from scratch using web\r\nframeworks. It is recommended that you learn about the basics of HTML and Python before attempting this\r\nquestion. We believe this question will be helpful to students/teams who wish to develop web\u00adbased applications\r\nfor their class projects. We recommend attempting this question using Python 3+.\r\nFlask is a micro web framework written in Python and based on the Werkzeug toolkit and Jinja2 template\r\nengine. A web framework or web application framework is a software framework designed to support the\r\ndevelopment of web applications including web services, web resources, and web APIs. Web frameworks aim to\r\nautomate the overhead associated with common activities performed in web development. Flask is called a\r\nmicro framework because it does not require particular tools or libraries. However, Flask supports extensions\r\nthat can add application features as if they were implemented in Flask itself.\r\njQuery is a cross\u00adplatform JavaScript library designed to simplify the client\u00adside scripting of HTML. jQuery's\r\nsyntax is designed to make it easier to navigate a document, select DOM elements, create animations, handle\r\nevents, and develop Ajax applications. jQuery also provides capabilities for developers to create plugins on top\r\nof the JavaScript library. Ajax is a set of Web development techniques using many Web technologies on the\r\nclient side to create asynchronous Web applications. With Ajax, Web applications can send and retrieve data\r\nfrom a web server asynchronously (in the background) without interfering with the display and behavior of the\r\nexisting page. By decoupling the data interchange layer from the presentation layer, Ajax allows for Web pages,\r\nand by extension Web applications, to change content dynamically without the need to reload the entire page.\r\nA few good tutorials for working with Flask, MySQL and jQuery in specific applications are listed below. You do\r\nnot have to go through all of them to solve this question, however, they may give you clues that will help you\r\nsolve the tasks at hand. These links are only for educational purposes \u00ad you do not have to implement them to\r\nget credit for this question.\r\n\u25cf Implementing a simple Web application with Flask\r\n\u25cf A tutorial to connect JQuery and Flask to handle REST requests\r\n\u25cf A tutorial to connect a MySQL backend database for Flask\r\n\u25cf A tutorial on understanding Flask in depth\r\n\u25cf Advanced full stack development for a fully functional website\r\nIn the following questions, strive to create user interfaces that have both good usability (easy to understand, and\r\nto use) and are aesthetically pleasing (it is a valued industry skill!). However, you will not lose or gain points due\r\nto user interface aesthetics. Strictly adhere to the letter casing of file names (all small letters) \u00ad Flask and\r\noperating systems like Ubuntu are sensitive to casing of file names. If wrong casing is used, this might cause\r\nyour submission to fail on case\u00adsensitive operating systems, and points may be deducted.\r\na. [5 pt] Follow the steps mentioned in this tutorial to create a signup website for CSE6242. The tutorial\r\nwill help you create an HTML page called signup.html. Also, create an html page\r\ncalled hello.html which displays the phrase \u201cHello World!\u201d. Visiting http://127.0.0.1:5000/ will display\r\nhello.html.\r\nExample screenshots are shown below:\r\nhello.html\r\nsignup.html (with the console debugger opened on the right)\r\nTo run your website:\r\n1. Go to the directory that contains your python script, app.py, and run it in the terminal.\r\n2. Copy paste the URL printed in the terminal after the server (python script app.py) starts.\r\n3. Go to http://127.0.0.1:5000/, the landing page, and check that it displays \u201cHello World!\u201d.\r\n4. Go to http://127.0.0.1:5000/signup and test filling in the form on the website.\r\n5. Right click on your browser, click \u2018Inspect Element\u2019 and then press the console tab to see whether\r\nyour entered details are visible there.\r\nb. [3 pt] You will modify the landing page (hello.html) created in Q5.a to help potential CSE6242\r\nstudents more easily navigate to the sign up page. You will create two buttons, one for signing up\r\ncampus students, and another for prospective students to check out the course\u2019s critique.\r\n1. Create a button on the hello.html page (created in part a) which when clicked would redirect to\r\nthe sign up page (signup.html) for the campus CSE6242 course.\r\n2. Create a second button on hello.html that when clicked will redirect students to the course critique\r\npage of CSE6242 (http://critique.gatech.edu/course.php?id=CSE6242) (you probably saw it already,\r\nbefore signing up for this course).\r\nThe image below shows an example design for modified hello.html. Your design does not need to follow\r\nthe example exactly.\r\nUpdated hello.html\r\nUpdated signup.html\r\nc. [7 pt] We would now like to create a confirmation for users who have completed registering. Hence, we\r\nwant users to see a simple confirmation message at the bottom of the signup page after they register.\r\nHowever, we are student\u00adcentric, and want to say everything with a personal touch! Hence, we would like\r\nto print the email address (not the password!) of the registered user in the confirmation message. Do the\r\nfollowing:\r\n1. Print the following confirmation message underneath the registration form only after the user\r\nenters his details and clicks \u201cRegister\u201d. Try to keep the message clearly visible and center aligned.\r\n\u201cCongratulations on registering for CSE6242, ! Redirecting you to the course\r\nhomepage...\u201d.\r\n2. After the confirmation message is printed, clear the previously entered inputs from the form.\r\nHint: You only need one function to do this.\r\n3. After displaying the above mentioned confirmation message, wait for 3 seconds, and then redirect\r\nto the CSE6242 website (http://poloclub.gatech.edu/cse6242/).\r\nHint: Consider using window.setTimeout and document.location.\r\nd. [5 pt] Like all other websites, we would like that students choose passwords that can not be easily\r\ncompromised. We would like to check that all students have passwords that satisfy the following security\r\ncriterion before accepting the registration of the student:\r\n1. Should be at least 8 characters in length\r\n2. Should have at least 1 uppercase character\r\n3. Should have at least 1 number\r\nWrite a function that will check this input. If all criteria are met, then go ahead and send the confirmation\r\nmessage. But if they are not met, store the criteria that were violated and store them in the password that\r\nis to be returned. For example, if criteria 1 and 3 were not met, then password = [1,3] and status = \u2018BAD\u2019\r\n(instead of \u2018OK\u2019). In such failure cases, return status = \u2018BAD\u2019, user = and password = [1,3].\r\nOn the webpage, mention the criteria that have not been met \u00ad\u00ad\u00ad use the exact criterion wording, as\r\nwritten in the bullet list above. Also, encourage them to try again. Clear the password input of the form\r\nonly for failure cases. Using the above example, the output should look similar to:\r\nOutput when entering an invalid password\r\nDeliverables: Place all the files listed below in the Q5 folder (carefully follow the folder structure mentioned at\r\nthe end of this assignment):\r\n\u25cf hello.html : The landing page of the website\r\n\u25cf signup.html : The registration page for the campus course\r\n\u25cf signup.css: Provided by us. You are encouraged to make changes that make the site aesthetically\r\npleasing\r\n\u25cf bootstrap.min.css: Provided by us. Please do not edit this!\r\n\u25cf signup.js: Javascript file holding the AJAX requests\r\n\u25cf app.py: Server backend that is responsible for routing, etc.\r\nImportant Instructions on Folder structure\r\nThe directory structure must be:\r\nHW1\u00ad{GT username}/\r\n|\u00ad\u00ad\u00ad Q1/\r\n|\u00ad\u00ad\u00ad\u00ad movie_ID_name.csv\r\n|\u00ad\u00ad\u00ad\u00ad movie_ID_sim_movie_ID.csv\r\n|\u00ad\u00ad\u00ad\u00ad graph.png / graph.svg\r\n|\u00ad\u00ad\u00ad\u00ad graph_explanation.txt\r\n|\u00ad\u00ad\u00ad\u00ad metrics.txt\r\n|\u00ad\u00ad\u00ad\u00ad script.py\r\n|\u00ad\u00ad\u00ad Q2/\r\n|\u00ad\u00ad\u00ad\u00ad Q2.SQL.txt\r\n|\u00ad\u00ad\u00ad\u00ad Q2.OUT.txt\r\n|\u00ad\u00ad\u00ad Q3/\r\n|\u00ad\u00ad\u00ad\u00ad index.html\r\n|\u00ad\u00ad\u00ad\u00ad d3/\r\n|\u00ad\u00ad\u00ad\u00ad d3.v3.min.js\r\n|\u00ad\u00ad\u00ad Q4/\r\n|\u00ad\u00ad\u00ad\u00ad properties_clean.csv\r\n|\u00ad\u00ad\u00ad\u00ad changes.json\r\n|\u00ad\u00ad\u00ad\u00ad Q4Observations.txt\r\n|\u00ad\u00ad\u00ad Q5/\r\n|\u00ad\u00ad\u00ad\u00ad app.py\r\n|\u00ad\u00ad\u00ad\u00ad templates/\r\n|\u00ad\u00ad\u00ad\u00ad\u00ad signup.html\r\n|\u00ad\u00ad\u00ad\u00ad\u00ad hello.html\r\n|\u00ad\u00ad\u00ad\u00ad static/\r\n|\u00ad\u00ad\u00ad\u00ad\u00ad css/\r\n|\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad signup.css\r\n|\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad bootstrap.min.css\r\n|\u00ad\u00ad\u00ad\u00ad\u00ad js/\r\n|\u00ad\u00ad\u00ad\u00ad\u00ad\u00ad signup.js\r\nVersion 0","image":"https://codingherolab.com/wp-content/uploads/2025/03/programming-assignments.jpg","sku":10732,"offers":[{"@type":"Offer","priceSpecification":[{"@type":"UnitPriceSpecification","price":"30.00","priceCurrency":"USD","valueAddedTaxIncluded":false,"validThrough":"2027-12-31"}],"priceValidUntil":"2027-12-31","availability":"https://schema.org/InStock","url":"https://codingherolab.com/product/cse-6242-a-q-cx-4242-a-data-and-visual-analytics-homework-1-analyzing-the-moviedb-data-gephi-sqlite-d3-warmup-openrefine-flask-jquery/","seller":{"@type":"Organization","name":"CodingHeroLab","url":"https://codingherolab.com"}}]}]}</script> <div id="photoswipe-fullscreen-dialog" class="pswp" tabindex="-1" role="dialog" aria-modal="true" aria-hidden="true" aria-label="Full screen image"> <div class="pswp__bg"></div> <div class="pswp__scroll-wrap"> <div class="pswp__container"> <div class="pswp__item"></div> <div class="pswp__item"></div> <div class="pswp__item"></div> </div> <div class="pswp__ui pswp__ui--hidden"> <div class="pswp__top-bar"> <div class="pswp__counter"></div> <button class="pswp__button pswp__button--zoom" aria-label="Zoom in/out"></button> <button class="pswp__button pswp__button--fs" aria-label="Toggle fullscreen"></button> <button class="pswp__button pswp__button--share" aria-label="Share"></button> <button class="pswp__button pswp__button--close" aria-label="Close (Esc)"></button> <div class="pswp__preloader"> <div class="pswp__preloader__icn"> <div class="pswp__preloader__cut"> <div class="pswp__preloader__donut"></div> </div> </div> </div> </div> <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap"> <div class="pswp__share-tooltip"></div> </div> <button class="pswp__button pswp__button--arrow--left" aria-label="Previous (arrow left)"></button> <button class="pswp__button pswp__button--arrow--right" aria-label="Next (arrow right)"></button> <div class="pswp__caption"> <div class="pswp__caption__center"></div> </div> </div> </div> </div> <script> (function () { var c = document.body.className; c = c.replace(/woocommerce-no-js/, 'woocommerce-js'); document.body.className = c; })(); </script> <script id="kk-star-ratings-js-extra"> var kk_star_ratings = {"action":"kk-star-ratings","endpoint":"https://codingherolab.com/wp-admin/admin-ajax.php","nonce":"b13820a143"}; //# sourceURL=kk-star-ratings-js-extra </script> <script src="https://codingherolab.com/wp-content/plugins/kk-star-ratings/src/core/public/js/kk-star-ratings.min.js?ver=5.4.10.4" id="kk-star-ratings-js"></script> <script src="https://codingherolab.com/wp-content/plugins/pinterest-pin-it-button-on-image-hover-and-post/js/main.js?ver=6.9.4" id="wl-pin-main-js"></script> <script id="wl-pin-main-js-after"> jQuery(document).ready(function(){jQuery(".is-cropped img").each(function(){jQuery(this).attr("style", "min-height: 120px;min-width: 100px;");});jQuery(".avatar").attr("style", "min-width: unset; min-height: unset;");}); //# sourceURL=wl-pin-main-js-after </script> <script id="awdr-main-js-extra"> var awdr_params = {"ajaxurl":"https://codingherolab.com/wp-admin/admin-ajax.php","nonce":"71ed745c1b","enable_update_price_with_qty":"show_when_matched","refresh_order_review":"0","custom_target_simple_product":"","custom_target_variable_product":"","js_init_trigger":"","awdr_opacity_to_bulk_table":"","awdr_dynamic_bulk_table_status":"0","awdr_dynamic_bulk_table_off":"on","custom_simple_product_id_selector":"","custom_variable_product_id_selector":""}; //# sourceURL=awdr-main-js-extra </script> <script src="https://codingherolab.com/wp-content/plugins/woo-discount-rules/v2/Assets/Js/site_main.js?ver=2.6.14" id="awdr-main-js"></script> <script src="https://codingherolab.com/wp-content/plugins/woo-discount-rules/v2/Assets/Js/awdr-dynamic-price.js?ver=2.6.14" id="awdr-dynamic-price-js"></script> <script id="storefront-navigation-js-extra"> var storefrontScreenReaderText = {"expand":"Expand child menu","collapse":"Collapse child menu"}; //# sourceURL=storefront-navigation-js-extra </script> <script src="https://codingherolab.com/wp-content/themes/storefront/assets/js/navigation.min.js?ver=4.6.1" id="storefront-navigation-js"></script> <script src="https://c0.wp.com/c/6.9.4/wp-includes/js/dist/vendor/wp-polyfill.min.js" id="wp-polyfill-js"></script> <script src="https://codingherolab.com/wp-content/plugins/jetpack/jetpack_vendor/automattic/woocommerce-analytics/build/woocommerce-analytics-client.js?minify=false&ver=80112f9db03e5698f4a6" id="woocommerce-analytics-client-js" defer data-wp-strategy="defer"></script> <script src="https://c0.wp.com/p/woocommerce/10.6.1/assets/js/sourcebuster/sourcebuster.min.js" id="sourcebuster-js-js"></script> <script id="wc-order-attribution-js-extra"> var wc_order_attribution = {"params":{"lifetime":1.0e-5,"session":30,"base64":false,"ajaxurl":"https://codingherolab.com/wp-admin/admin-ajax.php","prefix":"wc_order_attribution_","allowTracking":true},"fields":{"source_type":"current.typ","referrer":"current_add.rf","utm_campaign":"current.cmp","utm_source":"current.src","utm_medium":"current.mdm","utm_content":"current.cnt","utm_id":"current.id","utm_term":"current.trm","utm_source_platform":"current.plt","utm_creative_format":"current.fmt","utm_marketing_tactic":"current.tct","session_entry":"current_add.ep","session_start_time":"current_add.fd","session_pages":"session.pgs","session_count":"udata.vst","user_agent":"udata.uag"}}; //# sourceURL=wc-order-attribution-js-extra </script> <script src="https://c0.wp.com/p/woocommerce/10.6.1/assets/js/frontend/order-attribution.min.js" id="wc-order-attribution-js"></script> <script src="https://codingherolab.com/wp-content/themes/storefront/assets/js/woocommerce/header-cart.min.js?ver=4.6.1" id="storefront-header-cart-js"></script> <script src="https://codingherolab.com/wp-content/themes/storefront/assets/js/footer.min.js?ver=4.6.1" id="storefront-handheld-footer-bar-js"></script> <script src="https://codingherolab.com/wp-content/plugins/visual-footer-credit-remover/script.js?ver=6.9.4" id="jabvfcr_script-js"></script> <script src="https://codingherolab.com/wp-content/themes/storefront/assets/js/woocommerce/extensions/brands.min.js?ver=4.6.1" id="storefront-woocommerce-brands-js"></script> <script id="jetpack-stats-js-before"> _stq = window._stq || []; _stq.push([ "view", {"v":"ext","blog":"242831167","post":"10732","tz":"3","srv":"codingherolab.com","j":"1:15.6"} ]); _stq.push([ "clickTrackerInit", "242831167", "10732" ]); //# sourceURL=jetpack-stats-js-before </script> <script src="https://stats.wp.com/e-202611.js" id="jetpack-stats-js" defer data-wp-strategy="defer"></script> <script id="storefront-sticky-add-to-cart-js-extra"> var storefront_sticky_add_to_cart_params = {"trigger_class":"entry-summary"}; //# sourceURL=storefront-sticky-add-to-cart-js-extra </script> <script src="https://codingherolab.com/wp-content/themes/storefront/assets/js/sticky-add-to-cart.min.js?ver=4.6.1" id="storefront-sticky-add-to-cart-js"></script> <script id="wp-emoji-settings" type="application/json"> {"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://codingherolab.com/wp-includes/js/wp-emoji-release.min.js?ver=6.9.4"}} </script> <script type="module"> /*! This file is auto-generated */ const a=JSON.parse(document.getElementById("wp-emoji-settings").textContent),o=(window._wpemojiSettings=a,"wpEmojiSettingsSupports"),s=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const a=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===a[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,a){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!a(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,a){let r;const o=(r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),s=(o.textBaseline="top",o.font="600 32px Arial",{});return e.forEach(e=>{s[e]=t(o,e,n,a)}),s}function r(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}a.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),c.toString(),p.toString()].join(",")+"));",a=new Blob([e],{type:"text/javascript"});const r=new Worker(URL.createObjectURL(a),{name:"wpTestEmojiSupports"});return void(r.onmessage=e=>{i(n=e.data),r.terminate(),t(n)})}catch(e){}i(n=f(s,u,c,p))}t(n)}).then(e=>{for(const n in e)a.supports[n]=e[n],a.supports.everything=a.supports.everything&&a.supports[n],"flag"!==n&&(a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&a.supports[n]);var t;a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&!a.supports.flag,a.supports.everything||((t=a.source||{}).concatemoji?r(t.concatemoji):t.wpemoji&&t.twemoji&&(r(t.twemoji),r(t.wpemoji)))}); //# sourceURL=https://codingherolab.com/wp-includes/js/wp-emoji-loader.min.js </script> <script type="text/javascript"> (function() { window.wcAnalytics = window.wcAnalytics || {}; const wcAnalytics = window.wcAnalytics; // Set the assets URL for webpack to find the split assets. wcAnalytics.assets_url = 'https://codingherolab.com/wp-content/plugins/jetpack/jetpack_vendor/automattic/woocommerce-analytics/src/../build/'; // Set the REST API tracking endpoint URL. wcAnalytics.trackEndpoint = 'https://codingherolab.com/wp-json/woocommerce-analytics/v1/track'; // Set common properties for all events. wcAnalytics.commonProps = {"session_id":null,"landing_page":null,"is_engaged":null,"ui":0,"blog_id":242831167,"store_id":"b7456afe-f512-4e10-9eec-c80d77b32b60","url":"https://codingherolab.com","woo_version":"10.6.1","wp_version":"6.9.4","store_admin":0,"device":"desktop","store_currency":"USD","timezone":"Africa/Nairobi","is_guest":1,"_via_ua":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","_via_ip":"216.73.216.153","_lg":"","_dr":"https://codingherolab.com/product/cse-6242-a-q-cx-4242-a-data-and-visual-analytics-homework-1-analyzing-the-moviedb-data-gephi-sqlite-d3-warmup-openrefine-flask-jquery","_dl":"https://codingherolab.com/product/cse-6242-a-q-cx-4242-a-data-and-visual-analytics-homework-1-analyzing-the-moviedb-data-gephi-sqlite-d3-warmup-openrefine-flask-jquery/","_via_ref":"https://codingherolab.com/product/cse-6242-a-q-cx-4242-a-data-and-visual-analytics-homework-1-analyzing-the-moviedb-data-gephi-sqlite-d3-warmup-openrefine-flask-jquery"}; // Set the event queue. wcAnalytics.eventQueue = [{"eventName":"product_view","props":{"pi":10732,"pn":"CSE 6242 A, Q / CX 4242 A: Data and Visual Analytics Homework 1: Analyzing The MovieDB Data\u037e Gephi\u037e SQLite\u037e D3 Warmup\u037e OpenRefine\u037e Flask\u037e jQuery","pc":"CSE 6242","pp":"30","pt":"simple"}}]; // Features. wcAnalytics.features = { ch: false, sessionTracking: false, proxy: false, }; wcAnalytics.breadcrumbs = ["Tutorials","CSE 6242","CSE 6242 A, Q / CX 4242 A: Data and Visual Analytics Homework 1: Analyzing The MovieDB Data\u037e Gephi\u037e SQLite\u037e D3 Warmup\u037e OpenRefine\u037e Flask\u037e jQuery"]; // Page context flags. wcAnalytics.pages = { isAccountPage: false, isCart: false, }; })(); </script> </body> </html> <!-- Page cached by LiteSpeed Cache 7.8 on 2026-03-14 00:16:09 -->