Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Review Ticket: Visualizing Data with Bokeh and Pandas #152

Closed
ianmilligan1 opened this issue Feb 22, 2018 · 25 comments
Closed

Review Ticket: Visualizing Data with Bokeh and Pandas #152

ianmilligan1 opened this issue Feb 22, 2018 · 25 comments
Assignees
Labels

Comments

@ianmilligan1
Copy link
Contributor

@ianmilligan1 ianmilligan1 commented Feb 22, 2018

The Programming Historian has received the following tutorial on 'Visualizing Data with Bokeh and Pandas' by @archaeocharlie. This lesson is now under review and can be read at:

http://programminghistorian.github.io/ph-submissions/lessons/visualizing-with-bokeh

Please feel free to use the line numbers provided on the preview if that helps with anchoring your comments, although you can structure your review as you see fit.

@drjwbaker and myself will act as editors for the review process. Our role is to solicit two reviews from the community and to manage the discussions, which should be held here on this forum. We have already read through the lesson and provided feedback, to which the author has responded.

Members of the wider community are also invited to offer constructive feedback which should post to this message thread, but they are asked to first read our Reviewer Guidelines (http://programminghistorian.org/reviewer-guidelines) and to adhere to our anti-harassment policy (below). We ask that all reviews stop after the second formal review has been submitted so that the author can focus on any revisions. I will make an announcement on this thread when that has occurred.

I will endeavor to keep the conversation open here on Github. If anyone feels the need to discuss anything privately, you are welcome to email me. You can always turn to @amandavisconti if you feel there's a need for an ombudsperson to step in.

Anti-Harassment Policy

This is a statement of the Programming Historian's principles and sets expectations for the tone and style of all correspondence between reviewers, authors, editors, and contributors to our public forums.

The Programming Historian is dedicated to providing an open scholarly environment that offers community participants the freedom to thoroughly scrutinize ideas, to ask questions, make suggestions, or to requests for clarification, but also provides a harassment-free space for all contributors to the project, regardless of gender, gender identity and expression, sexual orientation, disability, physical appearance, body size, race, age or religion, or technical experience. We do not tolerate harassment or ad hominem attacks of community participants in any form. Participants violating these rules may be expelled from the community at the discretion of the editorial board. If anyone witnesses or feels they have been the victim of the above described activity, please contact our ombudspeople (Ian Milligan and Amanda Visconti - http://programminghistorian.org/project-team). Thank you for helping us to create a safe space.

@ianmilligan1

This comment has been minimized.

Copy link
Contributor Author

@ianmilligan1 ianmilligan1 commented Mar 2, 2018

Just a quick update: @drjwbaker and myself are reaching out to peer reviewers. We'll update the ticket once they've agreed to write. Thanks all.

@bmschmidt

This comment has been minimized.

Copy link

@bmschmidt bmschmidt commented Mar 4, 2018

This is a good introduction with clear instructions about using Bokeh and pandas to do some preliminary exploration of
the THOR dataset. This is an important workflow that is common in the digital humanities, and does not appear to be that much coverage in PH at this point. For instance, there is no tutorial in matplotlib that I can see up at the moment, which would be nice. It will be a useful contribution to Programming Historian.

It is written in a personable and communicative style which will be welcoming to many readers. The dataset is a fairly interesting one to use, but the content of the data is mostly ignored. This is possibly good--both because military history may be alienating to some users, and because who wants to think seriously about Hiroshima and Dresden while learning a programming API?--but also means the usefulness of visualization in generating insight is mostly unaddressed. The dataset is also unfortunately short in continuous, quantitative variables to plot--there's basically just date and tonnage, although maybe there's more in the original data. I think the strongest possible version of this article would probably use a different data set, but that this one is good enough as it is.

My general take is that the major areas of improvement lie in tightening the scope of what is being taught, and introducing new elements more slowly.
Currently this skates a little too close to a description of some interesting exploratory data visualization the author has done, and could do a bit more to be a tutorial well-integrated with the rest of PH.

The goals should be more general.

The first paragraph gives bullet points that describe what the tutorial will do. This should be pushed down,
and the bullet points at the top should say instead what skills someone will learn.

What is Bokeh good for?

The most important thing to fix should be a clear and succinct description early on of what Bokeh is good for.

The closest thing currently is in paragraphs 23-25. (Too late, I think). But this explanation isn't sufficiently
taylored for programming historians. Why highlight, for example, that it works with 'streaming datasets?'

This section needs to do a litle more.

  1. Why would someone use bokeh over matplotlib, or vice versa?
  2. If you're only planning to learn one python plotting library,
    should it be bokeh, or is this supplemental to matplotlib?
  3. What's special about it being a library that targets browsers?

I myself can't answer 2. Questions 1 and 3 are related, but the examples
don't highlight them enough. In particular, there are a couple absolutely killer benefits
of bokeh that I see:

  1. You can export them or embed them in web pages. It would be worth linking to an existing web-page lesson to talk about how
    bokeh plots might live online.
  2. HTML-javascript plots allow interactivity. The plots readers will make in these tutorials don't leverage
    interactivity enough to make these benefits clear, and they aren't laid out on top.

In particular, I think that hovering tooltips are an incredibly useful feature that historians both need,
and are occasionally unaware of how badly they need them. I think it would be wise to both mention them (and other kinds of interactivity, like zooming and/or dynamic brushing/filtering) in the first few paragraphs,
and to make an example rather quickly that includes them.

Add lines of code more slowly to the plots.

"Your first graph" is a useful approximation, but the second graph is a little confusing and could probably go.

In particular, I'd break off legends and titles into their own sections. Legends are introduced earlier than necessary; and the examples very quickly come to include several lines apiece about axis/title positioning, styling, and the like. Even at the cost of making the initial graphs uglier, I would avoid changing the default settings for things like axis ticks. Having the first plots of the Thor data be so long makes things look more complicated than they are.

As I said earlier, I think that this should ultimately lead to a plot of some type with tooltips for elements, which shows the distinctive possibilities of interactive web plots.

Have a stronger first plot of the data.

The first plot here is a scatterplot by latitude and longitude that, without a map underlying it, is almost unreadable. There's no need to make this when a lot of other plots would be more interesting; even this one requires some filtering, and the description of it ('top 100 targets') isn't quite right (this is the 100 largest individual raids, or bombs, or whatever the row-unit is here).

I think it would be useful to have an ungrouped example earlier in the running. Typically this would be a bivariate scatterplot; possibly something like tonnage on the y-axis vs date on the x. Anything that shows individual bombs is also pedagogically useful because it highlights the two atomic bombings, which don't stick out in the time-series plots later.

It's possible this should be random-sampled rather than taking a sort.

Some other candidates:

  • average tonnage per bomb;
  • what different countries bombs are dropped on.

Consider one or two more plot types.

Currently there are instructions for making a map, a bar chart, and a line chart. This is a good set of choices if only three plot types will be shown.

There are also instructions for a scatterplot of latitude and longitude,
which is kind of a scatterplot but I would think of more as a map.

I would consider including a true scatterplot, although this dataset doesn't lend itself to a single very obvious one. (tonnage of bombs by date, as I said: maybe number of planes against tonnage, or something like that).

A heatmap, or a binned scatterplot, (or a single plot incorporating both) of who's bombing whom might be useful. It would presumably show the US bombing Germany and Japan, and the British bombing just Germany, possibly with smaller numbers.

Less importantly, I'd consider a boxplot or a filled area chart. For either of these, you could plot the US vs Britain.

How much other stuff needs to be taught to use Bokeh and pandas on data?

Some of this tutorial is a partial explanation of things that will be elementary to experienced
users but too short for complete beginniners. I would borrow some practices from the existing tutorial
on sentiment analysis by Zoë Wilkinson Saldaña
which has sentences like this instead of explaining downloads.

If you need any help downloading and installing the module for
Python 3, take a look at the Installing Python Modules with pip
lesson by Fred Gibbs."

Avoid difficult list methods.

I would consider removing the following two list methods, which are more than self-taught beginners will have seen:

  1. x[::-1] for triangle styling;
  2. zip(* (i.e, the ridiculously named python unzip operation).

The latter could possibly be kept with an inline comment noting it's a trick.

Slim down the pandas vocabulary.

Pandas is a library with an endless vocabulary of functions that everyone seems to only use a subset of.
It would not be possible to give an adequate survey in a lesson of this size, so I think the goal should
be to describe as limited subset as possible to do a wide variety of tasks specifically in visualization.

Things that are useful:

  1. Grouping by count and sum. Grouping by count is not currently
    described, but should be because many people will want to do
    it. Paragraph 82 ('Let’s take this one piece at a time. The') is an
    extremely useful description at a good pace of a common pandas
    operation.

  2. Pandas' date grouping syntax, which is likely to be useful for many historians. I would be clearer though that this is
    is something distinctively powerful about pandas.

  3. Filtering out values. This is important. It is described in pp
    90-94 or so. It's called 'masking' in the article, but this usage
    seems idiosyncratic, if not incorrect, to me--in the pandas docs
    and most cases I've seen it, 'masking' is a binary operation that
    does not change the dimensionality of the data. In R or excel
    the thing done here would be called filtering, and in SQL selecting
    with a where clause-- the pandas docs seem to call it
    Boolean indexing.

In practice, I think that means the pandas commands here should be limited to
reading data, and performing aggregations across dimensions for plotting.

Some of the commands that don't need to be shown are:

df.shape(), df.columns(), and df.head() (just type df to see a representation of the source.)

A description of the deprecated 3-D pandas type, or even of the pandas
Series type. I don't see anything else in here that needs readers to
know what a Series is--I think it would be possible to do this
tutorial just by thinking of a DataFrame as a way of storing tabular
data in python.

(Is there a good explanation of pandas elsewhere) that can be used?

Can conda be removed?

I find the overhead of virtual environments to be rather high for
beginniners who just want to visualize some data in python. I myself
don't have conda on the machine where I did this tutorial, and didn't
install it to run it. Having the first several steps of the tutorial
be about installing conda when that is not strictly necessary defers
gratification a bit to no especially important end.

Especially given that PH already has a lesson about python and pip that doesn't include virtual environments, I think it is not useful to suggest them here.

Minor point

All the code examples are rendering as a box-in-a-box on my computer, and appear to have four levels of html elements associated with them.

@ianmilligan1

This comment has been minimized.

Copy link
Contributor Author

@ianmilligan1 ianmilligan1 commented Mar 5, 2018

Thanks @bmschmidt for the fantastic suggestions and comments (and to @drjwbaker for setting up the review).

I've lined up a second peer reviewer who should have their comments by the end of this week, early next.

@archaeocharlie: feel free to read Ben's comments and begin thinking about them, although since we have a second review coming in I'd hold off on any substantial revisions (in case there are disagreements - and to keep the preview copy intact to track the second set of suggestions). So be in touch again fairly soon!

@ZoeLeBlanc

This comment has been minimized.

Copy link
Collaborator

@ZoeLeBlanc ZoeLeBlanc commented Mar 8, 2018

Very comprehensive introduction to Bokeh and Pandas! I enjoyed learning more about some of the functionality of these libraries, and I think you do a good job of 'narrating' the code.

I'll try to keep my review fairly short since Ben gave you a lot to work with. I'll first go through the sections I had comments on directly and then I have some general comments below. I'm happy to go into further detail if anything is unclear or if you would like more specificity.

Overview

I see that Ben is pushing for more generalized skills in this section which I think is right, but I would also push for you to address briefly why should someone turn their historical data into visual arguments. This pretty much assumed in the entire tutorial but I think it's worthwhile to talk about visualization as a way to test hypotheses or elucidate patterns. I would then move your bullet points about what you'll do in the tutorial to the The WWII THOR Dataset section where you could talk about your specific hypotheses. I would finish the overview section listing the generalized skills you will learn/need to visualize historical arguments.

The WWII THOR Dataset

I agree with Ben that you don't really go into the content of this data, which I think you could if you framed each graphing exercise as a way to test your hypotheses. Those bullet points from the overview could be reworked as questions that you want to explore in this tutorial. I do think the content of this dataset may be less exciting for some researchers so you might want to mention datasets used in other Programming Historian tutorials as alternatives. You also need to add a download tag to the dataset otherwise people have to manually copy and paste it into a file.

Creating a Python 3 Environment

Agree with Ben that conda is not really standard for most people and that using a virtual environment that works with a standard install of python would be preferable. I'm not sure if Programming Historian has guidelines on this but my understanding is that Pipenv is the current gold standard. You can install it with pip and it manages all dependencies https://pipenv.readthedocs.io/en/latest/
Out of curiosity, why aren't you using the latest version of bokeh? From what I can see everything you're doing should be compatible so was wondering if you had a certain rationale.

Bokeh Overview

I agree with most of what Ben wrote, and I think this section should actually be shorter and titled What is Bokeh? and that you could move the second and third paragraph to the end of the tutorial where you could talk more generally about Bokeh vs other visualization libraries.

Adding to Your First plot

Mention that you should add these code lines before the show method.

The Bokeh ColumnDataSource

At line 72 "This approach to styling is mostly self-explanatory and this is an advantage of Bokeh, but you can see that sometimes Bokeh takes this too far. Some of its naming conventions are too verbose; for example, axis_label_text_font_size could probably just be called label_font_size since we already know we’re operating on an axis and the use of text and font seems redundant. Hopefully, this verbosity will be reigned in with future releases."
I think you can remove this aside or move it to the bottom of the tutorial if you have a section talking about Bokeh more generally.
Also the target locations seem like it would better with the mapping graph example, and I like Ben's idea using a different set of variables for the scatterplot example.

General comments:

  • You tend to write about the code before showing it which I think is actually harder to follow than having the code first to copy and then explain what it's doing. I think if you could reverse the order in most places it would make your explanations clearer to the reader. I can list specific instances if you decide to reorganize.
  • As mentioned earlier you aren't really presenting any hypotheses to test which makes it hard to understand the choices you're making or even the value of the visualizations. Even in exploratory data analysis you usually have a very generalized hypothesis to test. I think foregrounding these could help differentiate between which plots are appropriate for which questions. Also lines like "Interestingly, we’re not limited to just using column names for coordinates. We can also pass a column name for other parameters such as size, line_color, or fill_color. This allows styling options to be determined by columns in the datasource itself" p. 70 or "The order of this list determines the order that the columns will be stacked from bottom to top (after you’ve worked through this example, try switching the column order to see what happens). " p. 99 could be expanded to address how stylistic changes impact the argument of the visualization. I think it would be worthwhile to demonstrate how changing the styling of the graphs impacts the type of visual argument you make (I think the reversing stacked bar chart could easily be used for this).
  • Agree with Ben on avoiding difficult list methods and I also had never heard of masking before. I personally prefer df.loc[df['COUNTRY_FLYING_MISSION'].isin(('USA','GREAT BRITAIN'))] but you could just link to this Stack Overflow post with a note that masking is just one way among many for selecting data in pandas https://stackoverflow.com/questions/17071871/select-rows-from-a-dataframe-based-on-values-in-a-column-in-pandas .
  • Finally the tutorial ends really abruptly. I think moving some of the Bokeh overview section to the end as a place to discuss other visualization/plotting libraries with the links to other useful resources would be helpful. You might also summarize the hypotheses you tested and what you discovered with these visualizations.

Overall I think you have really clear language for explaining the code that would be furthered if you spent some more time on framing your plots as ways to explore historical questions. You don't have to go super in depth but a line or two about what mapping vs bar chart etc... helps visualize would be really helpful for people new to visualization that might not understand how you're selecting which variables to graph. I realize it's tough to balance explaining the code vs explaining the research question/visualization method but I think some more time spent on the latter will really help readers understand how they could use these examples in their own research.

@drjwbaker

This comment has been minimized.

Copy link
Member

@drjwbaker drjwbaker commented Mar 9, 2018

Thanks @ZoeLeBlanc for your constructive and detailed comments (and - in particular - for taking into account what @bmschmidt had already said along the way). This can only improve the lesson.

@archaeocharlie: @ianmilligan1 & I need to have a little chat about editorial direction, but in the meantime proceed as directed #152 (comment).

@ianmilligan1

This comment has been minimized.

Copy link
Contributor Author

@ianmilligan1 ianmilligan1 commented Mar 13, 2018

Just echoing the thanks again to @ZoeLeBlanc and @bmschmidt for these two comprehensive, detailed, and constructive reviews (and of course @archaeocharlie for the lesson).

@drjwbaker and I have had a chance to discuss the reviews and our own work on the lesson. The reviews don't seem to conflict, so I think the best pathway forward is to begin responding and incorporating the reviewer suggestions. If it's possible to do this without a virtual environment that's worth considering – for what it's worth I similarly bypassed those steps and did it through my usual package manager.

Why don't you take a go at revising the lesson, and upon revisions, @drjwbaker and I are also happy to bounce ideas around with respects to framing and making the case for Bokeh as clear as possible.

We're really excited to see this lesson move through the pipeline!

Would April 16 work for a revision deadline, @archaeocharlie?


I should also note that now that we've received two reviews, we'd like to close this ticket to further reviews.

@ianmilligan1

This comment has been minimized.

Copy link
Contributor Author

@ianmilligan1 ianmilligan1 commented Apr 16, 2018

I've been in touch with the author and we're now shooting for mid-May. Be in touch soon! 😄

@drjwbaker

This comment has been minimized.

Copy link
Member

@drjwbaker drjwbaker commented May 29, 2018

Author emailed for update 29 May 2018 and to agree fresh deadline for revisions. Will close ticket if no response is forthcoming.

Note: we are now past our recommended 4 week period for revisions to be completed (see policy at https://programminghistorian.org/en/editor-guidelines#managing-the-revision-process)

@drjwbaker

This comment has been minimized.

Copy link
Member

@drjwbaker drjwbaker commented Jun 4, 2018

Agreed resubmission date of 6 July has been agreed with the author. This is a hard deadline.

@archaeocharlie

This comment has been minimized.

Copy link
Collaborator

@archaeocharlie archaeocharlie commented Jul 6, 2018

Thanks all for your great input and ample patience with this. I've just uploaded a modified version.

I've done my best to simplify code and also to emphasize interactivity in Bokeh. I'm sure there are many other parts that can continue to be improved. Although I didn't add it, one possibility is to include another example on linking plots together (e.g. linking two maps together in the last example with one showing incendiary and the other fragmentation could be nice).

I've also left the virtual env as is. I think it's extremely important, even for the beginner, to use one and conda, in my opinion, beats out pipenv! We can certainly discuss this though.

Thanks!

@drjwbaker

This comment has been minimized.

Copy link
Member

@drjwbaker drjwbaker commented Jul 9, 2018

Dear @archaeocharlie - thanks for getting a revised version in by the revised deadline. I take a look tomorrow and pass on comments accordingly.

@drjwbaker

This comment has been minimized.

Copy link
Member

@drjwbaker drjwbaker commented Jul 10, 2018

I've gone through and copy edited this proposed lesson. Actions for the author @archaeocharlie:

  • 'Other Possible Datasets'. Do these datasets have comparable attributes to the THOR dataset (e.g. they contain spatial/temporal data as well as volumes). If so, please make a note of that.
  • On 'Creating a Python 3 Virtual Environment', you still don't make a clear case for why this is something a historian might want to do: what are the benefits, drawbacks. You also cite a lesson submission that was ultimately not publishing: see #132. Note this unpublished lesson is also mentioned in the section 'Your First Plot'.
  • When plotting with colour in 'Your First Plot' suggest a colour palette that avoids where possible the use of red and green (in this case, change green to yellow).
  • On 'Pandas Overview', you cite 'Wrangling Museum Collection Data with Pandas' which is another lesson that was ultimately not published: see #136
  • "Since we don’t want to plot all 170,000+ rows in our scatterplot". Why?
  • The final part of the lesson uses a Mercator projection. Since this map projection makes Greenland look around the same area as Africa (Africa is in fact ~14 times bigger) this is a poor fit with the spirit of our writing for a global audience guidelines. Can we invoke a different projection here without adding too much extra complexity? If not, we should state that Bokeh uses Mercator by default, demonstrate our displeasure with this, and link to how to change the map projection.

Code issues:

  • "When running this code, df will output an abridged representation of the loaded data." At this point when I do python loading_data.py (which is what is implied I should do) I get no output.
  • When running df.columns.tolist() code block I get IndentationError: unexpected indent
  • When running munitions_by_country.py from combined code between '..and adding some initial code.' and 'We add a hover tool again..' I get the below traceback:

screen shot 2018-07-10 at 16 25 17

  • When running annotating_trends.py two problems. First, from bokeh.models import ColumnDataSource is missing. Second, once the first problem is fixed I get the below traceback:

screen shot 2018-07-10 at 16 45

  • When running combined cut and paste that makes target_locations.py I get the below traceback:

screen shot 2018-07-10 at 16 52 39

Overall, this is a huge improvement from the original submission that has benefited from astute peer review: so my thanks to @ZoeLeBlanc and @bmschmidt for their marvelous contributions! The substantive comments of both peer reviewers have been incorporated. I am happy with the use of a Virtual Environment (in fact, compared to other Python based lessons I found it easier to set up as I didn't have to figure out clashes with old versions of Python, especially Python 2). So @archaeocharlie if we can resolve the issues I note above, I think we can start moving this to the next part of the editorial process.

Would 27 July work as a revision deadline, @archaeocharlie?

@archaeocharlie

This comment has been minimized.

Copy link
Collaborator

@archaeocharlie archaeocharlie commented Jul 10, 2018

@drjwbaker, thanks for the commentary and code checks! I'll be working through these over the next week. July 27th is a good deadline for these revisions!

@drjwbaker

This comment has been minimized.

Copy link
Member

@drjwbaker drjwbaker commented Jul 11, 2018

@archaeocharlie Thanks for confirming. I think we are on the final stretch now!

And a quick note on process: if you check off the above as we go through, that would be helpful.

@archaeocharlie

This comment has been minimized.

Copy link
Collaborator

@archaeocharlie archaeocharlie commented Jul 12, 2018

@drjwbaker was amazingly given a day full of free time and I believe I've resolved all of these issues. The Witch Trial dataset does not have a spatial component. Should I drop this?

I'll be double checking tomorrow on another machine that code runs smoothly and there are no other problems. If things look good, I see two last things I need to do.

  • Reupload a new version of image 1

  • Recreate the Jupyter notebook to match changes.

How does this sound?

@archaeocharlie

This comment has been minimized.

Copy link
Collaborator

@archaeocharlie archaeocharlie commented Jul 12, 2018

@drjwbaker I've rerun all the code, fixed a minor issue in the lesson, and created the updated Jupyter notebook. Everything else looks good to me at the moment.

@drjwbaker

This comment has been minimized.

Copy link
Member

@drjwbaker drjwbaker commented Jul 13, 2018

@archaeocharlie Thanks for getting to this earlier than planned. I should be able to find the time next week to run through the lesson again.

@drjwbaker

This comment has been minimized.

Copy link
Member

@drjwbaker drjwbaker commented Jul 17, 2018

Looks great. Further comments before I do a copy edit:

  • "This shows that we have 178,281 records of missions with 19 columns per record. To see what the 19 columns are in full, we can access the dataframe’s columns object. df.columns.tolist() The output should look like:" It still isn't clear here what the reader should do. Should they add df.columns.tolist() to loading_data.py or something else to get the output?
  • "If you look at the variable grouped, you’ll see that Pandas has grouped by the five unique countries in our dataset and summed the total tons dropped by each." How does the reader do that? As this is an intermediate lesson a prompt will suffice rather than full instructions.
  • The box annotation code block has a missing comma. I've fixed it on the lesson page 43165d4#diff-897efc7433bf34c69626feeec85fcf9f but could you fix in the Jupyter notebook please .
@drjwbaker

This comment has been minimized.

Copy link
Member

@drjwbaker drjwbaker commented Jul 17, 2018

@mdlincoln Is it normal that links inside <div class="alert alert-warning"> do not render correctly on the submission preview? See line 448 (https://github.com/programminghistorian/ph-submissions/blob/gh-pages/lessons/visualizing-with-bokeh.md)

  • Fix!
@drjwbaker

This comment has been minimized.

Copy link
Member

@drjwbaker drjwbaker commented Jul 17, 2018

@archaeocharlie Once the issues above (#152 (comment) & #152 (comment)) we are ready to start publishing! Looking at my workflow for this https://programminghistorian.org/en/editor-guidelines#acceptance-and-publication---editorial-checklist the only remaining items I need from you are:

Let's try and do all this by the July 27th deadline above.

@archaeocharlie

This comment has been minimized.

Copy link
Collaborator

@archaeocharlie archaeocharlie commented Jul 25, 2018

@drjwbaker quick question, in the preview lesson, links and formatting don't display correctly in the aside DIVs. Do I need to remove these?

@drjwbaker

This comment has been minimized.

Copy link
Member

@drjwbaker drjwbaker commented Jul 25, 2018

@archaeocharlie I've asked @mdlincoln #152 (comment) Still awaiting response (he's a little busy at the moment!). So leave them in for now and we'll fix before pushing to the live site.

@archaeocharlie

This comment has been minimized.

Copy link
Collaborator

@archaeocharlie archaeocharlie commented Jul 25, 2018

@drjwbaker for the bio: Charlie Harper is the Digital Learning and Scholarship Librarian at Case Western Reserve University.

@drjwbaker drjwbaker mentioned this issue Jul 27, 2018
@drjwbaker

This comment has been minimized.

Copy link
Member

@drjwbaker drjwbaker commented Jul 27, 2018

@archaeocharlie Thank you for your hard work. I've made some light edits (a8a5e85#diff-897efc7433bf34c69626feeec85fcf9f and headers on the live site version) and made a pull request for the lesson on the live site programminghistorian/jekyll#952 Note: #152 (comment) is unresolved, but hoping someone can help during the pull request process. I will close this issue once the lesson is live!

@drjwbaker

This comment has been minimized.

Copy link
Member

@drjwbaker drjwbaker commented Aug 2, 2018

This lesson is now published at https://programminghistorian.org/en/lessons/visualizing-with-bokeh

Thanks to @archaeocharlie for authoring, @ianmilligan1 for the co-edit, and our wonderful reviewers @bmschmidt and @ZoeLeBlanc.

@drjwbaker drjwbaker closed this Aug 2, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
5 participants
You can’t perform that action at this time.