Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
3baf7e6
Data scraping
Feb 17, 2022
25bf17e
Data cleaning
Feb 18, 2022
e8b53c2
Cygnus through Orion done
hgsmith-wpi Feb 18, 2022
1fb7831
Manual data cleaning
Feb 18, 2022
af92255
Finished mappings
Feb 18, 2022
5935ef3
Organized files
Feb 18, 2022
2beb291
add kaamil constellations
Feb 18, 2022
9f1f9e4
Started validating data
Feb 18, 2022
a3bd9a0
Finding missing stars
Feb 18, 2022
ac5d18c
Added more missing stars
Feb 19, 2022
9ccab18
Finished data!
Feb 19, 2022
34bbc64
Draw map
Feb 19, 2022
18306ac
Star Description data added
hgsmith-wpi Feb 21, 2022
254c487
Draw north/south hemisphere
Feb 21, 2022
dd9f309
add aesthetic animations, gradient, title, glow
Feb 21, 2022
d1a34ab
Changes
Feb 21, 2022
bd5b349
Fixed bulbous stars
Feb 21, 2022
f8268d1
Merge branch 'main' of https://github.com/vrmelican/final into anim
Feb 22, 2022
92a41fd
Merge branch 'anim' of https://github.com/vrmelican/final into anim
Feb 22, 2022
2f368cf
Search Bar added
hgsmith-wpi Feb 22, 2022
23637e7
Dropdown added
hgsmith-wpi Feb 22, 2022
0e44470
Updated filter function
Feb 23, 2022
8f0cdb8
Dropdown updates
hgsmith-wpi Feb 24, 2022
2abe995
merge conflicts resolved
Feb 25, 2022
3a0979c
Clean up code
Feb 25, 2022
542524d
Changed ids
Feb 25, 2022
4f894ee
activate constellations based on ids, change ids to name, add global …
Feb 25, 2022
3247c8a
merge
Feb 25, 2022
bf9f508
Fixed border
Feb 26, 2022
104e87e
Small change
Feb 26, 2022
daeb939
Updated dropdown styles
Feb 26, 2022
13c1098
Mouseover on stars highlights constellation
Feb 26, 2022
a5f6aec
Started datatips
Feb 26, 2022
02e79b5
Worked on drawing datatip
Feb 26, 2022
b246bc3
Side panel
Feb 26, 2022
b48f532
Added titles, back button
Feb 27, 2022
21a6085
Fixed tooltip image rotations
Feb 27, 2022
cbfb7da
Some CSS changes
hgsmith-wpi Feb 27, 2022
8bc6489
Merge branch 'datatips' of https://github.com/vrmelican/final into da…
hgsmith-wpi Feb 27, 2022
8c6f554
Merge pull request #1 from vrmelican/datatips
vrmelican Feb 27, 2022
a3e766b
Alignment
Feb 28, 2022
2e1d112
Style updates
hgsmith-wpi Feb 28, 2022
614174f
More data cleaning
Feb 28, 2022
e880c18
Styles updates
Feb 28, 2022
5ecf5f7
Fixed color change
Feb 28, 2022
9438b59
Style Updates
hgsmith-wpi Feb 28, 2022
3faa685
Move datasets to folder
Feb 28, 2022
a0a5243
Small changes
Feb 28, 2022
c5fea2f
Worked on website
Feb 28, 2022
a3ebbc8
Added new source
vrmelican Mar 1, 2022
6113ef6
Updated website
Mar 1, 2022
581f984
Add to sources txt
Mar 1, 2022
b27c21b
merge
Mar 1, 2022
46ab80a
Button updates
hgsmith-wpi Mar 1, 2022
f49ca6b
Added button
hgsmith-wpi Mar 2, 2022
53a058c
Padding adjustment
hgsmith-wpi Mar 2, 2022
94b03db
Uploaded process book
Mar 2, 2022
0efc1f9
Added links to process book and video
Mar 2, 2022
8f225fc
Update README.md
vrmelican Mar 3, 2022
7934a13
Update README.md
hgsmith-wpi Mar 3, 2022
ce799dd
Added title
Mar 3, 2022
279d0d3
Changed video link
Mar 3, 2022
d262137
small change
Mar 3, 2022
2c79f2e
Update README.md
vrmelican Mar 3, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added CS480X Final Project.pdf
Binary file not shown.
120 changes: 13 additions & 107 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,123 +1,29 @@
Final Project - Interactive Data Visualization
===
# CS480X Final Project - Stories in Our Stars

The key learning experience of this course is the final project.
You will design a web site and interactive visualizations that answer questions you have, provide an exploratory interface to some topic of your own choosing, or take on a more ambitious experiment than A3.
You will acquire the data, design your visualizations, implement them, and critically evaluate the results.
In this project, we created an interactive constellation visualization using d3. This repository contains the code for the website and visualization, datasets, and data preparation code.

The path to a good visualization is going to involve mistakes and wrong turns.
It is therefore important to recognize that mistakes are valuable in finding the path to a solution, to broadly explore the design space, and to iterate designs to improve possible solutions.
To help you explore the design space, we will hold events such as feedback sessions in which you propose your idea and initial designs and receive feedback from the class and staff.
Link to the website: https://vrmelican.github.io/final/

Proposals / Idea Generation
---
Link to the screencast: https://www.youtube.com/watch?v=kMGT6WDc_fk

Submit project ideas using [this Google Form](https://docs.google.com/forms/d/e/1FAIpQLSepaCzjEq9AXwmJ8mJ-06ytkQUuLI1Z2QF5KGyhVnKaxBI-mA/viewform?usp=sf_link).
## References

You're encouraged to submit many ideas-- staff will help you identify the most promising ones and possible roadblocks.
Data scraping tutorial: https://medium.com/analytics-vidhya/web-scraping-a-wikipedia-table-into-a-dataframe-c52617e1f451

Please stick to 1-4 folks per team.
Scraped star locations: https://en.wikipedia.org/wiki/Lists_of_stars_by_constellation

Final Project Materials
---
For your final project you must hand in the following items.
Scraped constellation paths and histories: http://www.seasky.org/constellations/constellations.html

### Process Book
Used to check constellation paths: https://www.iau.org/public/themes/constellations/

An important part of your project is your process book. Your process book details your steps in developing your solution, including the alternative designs you tried, and the insights you got. Develop your process book out of the project proposal. Equally important to your final results is how you got there! Your process book is the place you describe and document the space of possibilities you explored at each step of your project. It is not, however, a journal or lab notebook that describes every detail - you should think carefully about the important decisions you made and insights you gained and present your reasoning in a concise way.
Used to find unlabelled stars: https://theskylive.com/sky/constellations/

We strongly advise you to include many figures in your process book, including photos of your sketches of potential designs, screen shots from different visualization tools you explored, inspirations of visualizations you found online, etc. Several images illustrating changes in your design or focus over time will be far more informative than text describing those changes. Instead, use text to describe the rationale behind the evolution of your project.
Describes how to convert RA/Dec to Lon/Lat: https://skyandtelescope.org/astronomy-resources/right-ascension-declination-celestial-coordinates/

Your process book should include the following topics. Depending on your project type the amount of discussion you devote to each of them will vary:
Path glow tutorial: https://www.visualcinnamon.com/2016/06/glow-filter-d3-visualization/

- Overview and Motivation: Provide an overview of the project goals and the motivation for it. Consider that this will be read by people who did not see your project proposal.
- Related Work: Anything that inspired you, such as a paper, a web site, visualizations we discussed in class, etc.
- Questions: What questions are you trying to answer? How did these questions evolve over the course of the project? What new questions did you consider in the course of your analysis?
- Data: Source, scraping method, cleanup, etc.
- Exploratory Data Analysis: What visualizations did you use to initially look at your data? What insights did you gain? How did these insights inform your design?
- Design Evolution: What are the different visualizations you considered? Justify the design decisions you made using the perceptual and design principles you learned in the course. Did you deviate from your proposal?
- Implementation: Describe the intent and functionality of the interactive visualizations you implemented. Provide clear and well-referenced images showing the key design and interaction elements.
- Evaluation: What did you learn about the data by using your visualizations? How did you answer your questions? How well does your visualization work, and how could you further improve it?
Search tutorial: https://www.w3schools.com/howto/howto_js_search_menu.asp

As this will be your only chance to describe your project in detail make sure that your process book is a standalone document that fully describes your results and the final design.
[Here](http://dataviscourse.net/2015/assets/process_books/bansal_cao_hou.pdf) are a [few examples](http://dataviscourse.net/2015/assets/process_books/walsh_trevino_bett.pdf) of process books from a similar course final.

Tip: Start your process book on Day 1. Make entries after each meeting, and trim / edit as needed towards the end of the project. Many folks use either slides software (like PowerPoint) or Google Docs to make this book, as both allow for flexible layouts and export to PDF.


### Project Website

Create a public website for your project using GitHub pages or another web hosting service of your choice.
The web site should contain your interactive visualization, summarize the main results of the project, and tell a story.
Consider your audience (the site should be public if possible, unless you're running an experiment, etc.) and keep the level of discussion at the appropriate level.
Your process book and data should be linked from the web site as well.
Also embed your interactive visualization and your screen-cast in your website.
If you are not able to publish your work (e.g., due to confidential data) please let us know in your project proposal.

### Project Screen-Cast

Each team will create a two minute screen-cast with narration showing a demo of your visualization and/or some slides.

You can use any screencast tool of your choice, such as Camtasia or Loom (new and recommended).
Please make sure that the sound quality of your video is good -- it may be worthwhile to invest in an external USB microphone-- campus IT should have some you can borrow.
Upload the video to an online video-platform such as YouTube or Vimeo and embed it into your project web page.
For our final project presentation day, we will show as many videos in class as possible, and ask teams to field questions.

We will strictly enforce the two minute time limit for the video, so please make sure you are not running longer.
Use principles of good storytelling and presentations to get your key points across. Focus the majority of your screencast on your main contributions rather than on technical details.
What do you feel is the best part of your project?
What insights did you gain?
What is the single most important thing you would like your audience to take away? Make sure it is front and center rather than at the end.

Outside Libraries/References
---

For this project you *do not* have to write everything from scratch.

You may *reference* demo programs from books or the web, and *include* popular web libraries like Material UI, React, Svelte, etcetera.

Please *do not* use libraries on top of d3 without consulting staff, however.
Libraries like nvd3.js look tempting, but such libraries often have poor defaults and result in poor visualizations.
There may be exceptions.
Instead, draw from the numerous existing d3 examples on the web.

If you use outside sources please provide a References section with links at the end of your Readme.

Resources
---
The "[Data is Plural](https://tinyletter.com/data-is-plural/archive)" weekly letter often contains interesting datasets.

Think of something you're interested in, go find data on it! Include data collection and processing as part of your work on this project.

Requirements
---

Store the following in your GitHub repository:

- Code - All web site files and libraries assuming they are not too big to include
- Data - Include all the data that you used in your project. If the data is too large for github store it on a cloud storage provider, such as Dropbox or Yousendit.
- Process Book- Your Process Book in PDF format.
- README - The README file must give an overview of what you are handing in: which parts are your code, which parts are libraries, and so on. The README must contain URLs to your project websites and screencast videos. The README must also explain any non-obvious features of your interface.

GitHub Details
---

- Fork the repo. You now have a copy associated with your username.
- Make changes to index.html to fulfill the project requirements.
- Make sure your "main" branch matches your "gh-pages" branch. See the GitHub Guides referenced above if you need help.
- Edit the README.md with a link to your gh-pages or other external site: for example http://YourUsernameGoesHere.github.io/DataVisFinal/index.html
- To submit, make a [Pull Request](https://help.github.com/articles/using-pull-requests/) on the original repository.

Grading
---

- Process Book - Are you following a design process that is well documented in your process book?
- Solution - Is your visualization effective in answering your intended questions? Was it designed following visualization principles?
- Implementation - What is the quality of your implementation? Is it appropriately polished, robust, and reliable?
- Presentation - Are your web site and screencast clear, engaging, and effective?
Your individual project score will also be influenced by your peer evaluations.

References
---

- This final project is adapted from https://www.dataviscourse.net/2020/project/
107 changes: 107 additions & 0 deletions data-preparation/create-files.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
#create geojson from paths and path mappings

import pandas as pd
import json

#convert numbers to latitude and longitude
def convertToLon(n, constellation):
constellationData = mappings[mappings["Constellation"] == constellation]
data = constellationData.loc[constellationData["Number"] == n]
return data.iloc[0].Lon

def convertToLat(n, constellation):
#print(n, constellation)
constellationData = mappings[mappings["Constellation"] == constellation]
data = constellationData.loc[constellationData["Number"] == n]
return data.iloc[0].Lat

def makeFeature(constellation, latMin, latMax):
constellationData = paths[paths["Name"] == constellation]

typeField = "Feature"
idField = names.loc[names["Name"] == constellation].iloc[0].Abbreviation
nameField = constellation
geometryType = "MultiLineString"

geometryCoordinates = []
for index, row in constellationData.iterrows():
startLon, startLat, endLon, endLat = row.StartLon, row.StartLat, row.EndLon, row.EndLat
#make sure paths are in range
#if partially out of range, clip to be in range
if startLat < latMin and endLat >= latMin:
startLat = latMin
elif startLat >= latMin and endLat < latMin:
endLat = latMin
elif startLat > latMax and endLat <= latMax:
startLat = latMax
elif startLat <= latMax and endLat > latMax:
endLat = latMax
elif startLat < latMin and endLat < latMin:
continue
elif startLat > latMax and endLat > latMax:
continue

coordinate = [[startLon, startLat], [endLon, endLat]]
geometryCoordinates.append(coordinate)

properties = {"name": nameField}
geometry = {"type": geometryType, "coordinates": geometryCoordinates}

feature = {"type": typeField, "id": idField, "properties": properties, "geometry": geometry}
return feature

def makeGeoJSON(file, names, latMin, latMax):
features = []
for name in names:
feature = makeFeature(name, latMin, latMax)
features.append(feature)

#create dummy featuers around edges
extraFeature1 = {"type": "Feature", "id": "extra1", "properties": {"name": "extra1"}, "geometry": {"type": "MultiLineString", "coordinates": [[[-90,0],[-90,0]]]}}
extraFeature2 = {"type": "Feature", "id": "extra2", "properties": {"name": "extra2"}, "geometry": {"type": "MultiLineString", "coordinates": [[[0,0],[0,0]]]}}
extraFeature3 = {"type": "Feature", "id": "extra3", "properties": {"name": "extra3"}, "geometry": {"type": "MultiLineString", "coordinates": [[[90,0],[90,0]]]}}
extraFeature4 = {"type": "Feature", "id": "extra4", "properties": {"name": "extra4"}, "geometry": {"type": "MultiLineString", "coordinates": [[[180,0],[180,0]]]}}

features.append(extraFeature1)
features.append(extraFeature2)
features.append(extraFeature3)
features.append(extraFeature4)

data = {"type":"FeatureCollection", "features":features}

with open('../' + file, 'w') as f:
json.dump(data, f)

def makeStarCsv(file, latMin, latMax):
start_df = paths[["Name", "Start"]]
start_df.rename(columns={"Start": "Number", "Name": "Constellation"}, inplace=True)
end_df = paths[["Name", "End"]]
end_df.rename(columns={"End": "Number", "Name": "Constellation"}, inplace=True)
nums_used = pd.concat([start_df, end_df])
nums_used.drop_duplicates(subset=["Constellation", "Number"], inplace=True)
stars = nums_used.merge(mappings, on=["Constellation", "Number"])
stars = stars.loc[stars["Lat"].between(latMin, latMax)]
stars.to_csv("../" + file, index=False)

paths = pd.read_csv("paths.csv")
mappings = pd.read_csv("path_mappings.csv")
names = pd.read_csv("helper-csvs/names.csv")

paths["StartLat"] = paths.apply(lambda x: convertToLat(x["Start"], x["Name"]), axis=1)
paths["StartLon"] = paths.apply(lambda x: convertToLon(x["Start"], x["Name"]), axis=1)
paths["EndLat"] = paths.apply(lambda x: convertToLat(x["End"], x["Name"]), axis=1)
paths["EndLon"] = paths.apply(lambda x: convertToLon(x["End"], x["Name"]), axis=1)

#all
makeGeoJSON("paths.geojson", names.Name, -90, 90)
makeStarCsv("stars.csv", -90, 90)

#northern
northern = names[names["Region"].isin(["Northern", "Equatorial"])]
makeGeoJSON("paths_north.geojson", names.Name, 0, 90)
makeStarCsv("stars_north.csv", 0, 90)

#southern
southern = names[names["Region"].isin(["Southern", "Equatorial"])]
makeGeoJSON("paths_south.geojson", names.Name, -90, 0)
makeStarCsv("stars_south.csv", -90, 0)
25 changes: 25 additions & 0 deletions data-preparation/helper-csvs/greek.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
Name,Symbol
Alpha,α
Beta,β
Gamma,γ
Delta,δ
Epsilon,ε
Zeta,ζ
Eta,η
Theta,θ
Iota,ι
Kappa,κ
Lambda,λ
Mu,μ
Nu,ν
Xi,ξ
Omicron,ο
Pi,π
Rho,ρ
Sigma,σ
Tau,τ
Upsilon,υ
Phi,φ
Chi,χ
Psi,ψ
Omega,ω
41 changes: 41 additions & 0 deletions data-preparation/helper-csvs/manual_HD.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
Name,Constellation,HD
Beta Tauri,Auriga,35497
Zeta Bo�tis,Bo�tes,129247
Iota Cancri,Cancer,74739
Alpha Canis Majoris,Canis Major,48915
Alnair,Centaurus,121263
Nu-1 Centauri,Centaurus,121790
Delta Cephei,Cepheus,213306
Xi Cephei,Cepheus,209790
Beta Cygni,Cygnus,183912
Epsilon Cygni,Cygnus,197989
Gamma Delphini,Delphinus,197963
Nu Draconis,Draco,159560
Pi Ceti,Eridanus,17081
Alpha Geminorum,Gemini,60178
Nu Geminorum,Gemini,45542
Alnair,Grus,209952
Kappa Herculis,Hercules,145001
Alpha Crateris,Hydra,95272
Beta Crateris,Hydra,97277
Gamma Leonis,Leo,89484
Alpha Librae,Libra,130819
10 Ursae Majoris,Lynx,76943
Zeta Lyrae,Lyra,173648
Epsilon Lyrae,Lyra,173607
Beta Monocerotis,Monoceros,45725
Zeta Orionis,Orion,37742
Delta Orionis,Orion,36486
Lambda Orionis,Orion,36861
Sigma Orionis,Orion,37468
Alpha Andromedae,Pegasus,358
Gamma Persei,Perseus,18925
Tau Persei,Perseus,17878
L2 Puppis,Puppis,56096
Nu Ophiuchi,Serpens,163917
Eta Ophiuchi,Serpens,155125
Delta Ophiuchi,Serpens,146051
Theta Tauri,Taurus,28307
Beta Tucanae,Tucana,3003
Psi Velorum,Vela,82434
Gamma Volantis,Volans,55864
Loading