• Stars
    star
    575
  • Rank 77,622 (Top 2 %)
  • Language
    R
  • License
    Other
  • Created over 4 years ago
  • Updated 9 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

R package for building customizable CVs from spreadsheets

datadrivencv

The goal of datadrivencv is to ease the burden of maintaining a CV by separating the content from the output by treating entries as data.

Installation

The development version from GitHub with:

# install.packages("devtools")
devtools::install_github("nstrayer/datadrivencv")

Motivation

Updating a CV is not fun

Anytime I would go to add something to my CV I ended up wanting to change the format a tiny bit. This usually meant the entire word document completely falling apart and needing to have each entry copied and pasted into a new version.

Ultimately this process felt formulaic and repetitive, prime indicators they could be done better with code. Using a spreadsheet to store each entry in the CV and R to write markdown seemed like the way to go. Pagedown made this even easier. Meaning that the same CV could be rendered with interactive HTML and PDF without changing the underlying rendering engine like was done with kniting to pdf vs knitting to html.

No lock-in

Inspired heavily the the usethis package, datadrivencv strives to make itself unnecessary. The main function is use_data_driven_cv, which sets up the files you need to build your CV. These files are self-contained meaning if you uninstall datadrivencv your CV will still knit fine. All the R code logic is contained in a sourced script so if you want to change it you can do so.

The package aims to bootstrap you to a working data-driven CV pipeline. Serving as a jumping off point for you to build your own custom CV, you may at first want to leave it as is and then slowly tweak things to keep it fresh. You have all the code, so you can!

Using it

The first step to using the package is the use_data_driven_cv() function. This function takes a few input parameters and when when run, sets up a series of files in your current working directory. E.g.

# run ?datadrivencv::use_datadriven_cv to see more details
datadrivencv::use_datadriven_cv(
  full_name = "Nick Strayer",
  data_location = "https://docs.google.com/spreadsheets/d/14MQICF2F8-vf8CKPF1m4lyGKO6_thG-4aSwat1e2TWc",
  pdf_location = "https://github.com/nstrayer/cv/raw/master/strayer_cv.pdf",
  html_location = "nickstrayer.me/cv/",
  source_location = "https://github.com/nstrayer/cv"
)

The available arguments are:

Argument Description
full_name Your full name, used in title of document and header
data_location Path of the spreadsheets holding all your data. This can be either a URL to a google sheet with multiple sheets containing the four data types or a path to a folder containing four .csvs with the neccesary data.
pdf_location What location will the PDF of this CV be hosted at?
html_location What location will the HTML version of this CV be hosted at?
source_location Where is the code to build your CV hosted?
open_files Should the added files be opened after creation?
use_network_logo Should logo be an interactive network based on your CV data? Note that this uses the function build_network_logo() so will introduce a dependency on this package.

This code is all that’s needed to setup a full CV. It outputs five files:

File Description
cv.rmd An RMarkdown file with various sections filled in. Edit this to fit your personal needs.
dd_cv.css A custom set of CSS styles that build on the default Pagedown β€œresume” template. Again, edit these as desired.
render_cv.r Use this script to build your CV in both PDF and HTML at the same time.
cv_printing_functions.r A series of functions that perform the dirty work of turning your spreadsheet data into markdown/html and making that output work for PDF printing. E.g. Replacing markdown links with superscripts and a links section, tweaking the CSS to account for chrome printing quirks, etc..

Storing your data in spreadsheets

By default the googlesheets4 package is used to get a Google Sheet with all necessary data. To build your own version I suggest simply copying my data, removing all the rows, and filling in with your data.

Format of spreadsheets:

There are four spreadsheets of β€œdata” that are used. These take the form of separate sub-sheets within a google sheet.

The four spreadsheets that are needed and their columns are:

entries

Column Description
section Where in your CV this entry belongs
title Main title of the entry
loc Location the entry occured
institution Primary institution affiliation for entry
start Start date of entry (year). Can be left blank for single point events like a manuscript.
end End year of entry. Set to β€œcurrent” if entry is still ongoing.
description_* Each description column is a separate bullet point for the entry. If you need more description bullet points simply add a new column with title β€œdescription_{4,5,..}”

language_skills

Column Description
skill Name of language
level Relative numeric level of skill

text_blocks

Column Description
loc Id used for finding text block
text Contents of text block. Supports markdown formatting.

contact info

Column Description
loc Id of contact section
icon Icon used from font-awesome 4 to label this contact section
contact The actual value written for the contact entry

Using .csvs instead of google sheets

Don’t want to use google sheets to store your data? Not a problem. Just make four .csvs (entries.csv, language_skills.csv, text_blocks.csv, contact_info.csv) that have the same matching format as above and pass the folder containing those as your data_location when initializing with use_datadriven_cv().

The function use_csv_data_storage() will set these up for you.

Rendering your CV

Now that you have the templates setup and you’ve configured your data, the last thing to do is render. The easiest way to do this is by opening cv.rmd in RStudio and clicking the β€œKnit” button. This will render an HTML version of your CV. However, you most likely want a PDF version of your CV to go along with an HTML version. The easiest way to do this is to run the included script render_cv.r:

render_cv.r

# Knit the HTML version
rmarkdown::render("cv.rmd",
                  params = list(pdf_mode = FALSE),
                  output_file = "cv.html")

# Knit the PDF version to temporary html location
tmp_html_cv_loc <- fs::file_temp(ext = ".html")
rmarkdown::render("cv.rmd",
                  params = list(pdf_mode = TRUE),
                  output_file = tmp_html_cv_loc)

# Convert to PDF using Pagedown
pagedown::chrome_print(input = tmp_html_cv_loc,
                       output = "cv.pdf")

This script will render your CV in HTML and output it as cv.html, it will also turn on the pdf_mode parameter in cv.rmd, which will strip the links out and place them at the end linked by inline superscripts. Once the pdf version is rendered to HTML, it will then turn that HTML into a PDF using pagedown::chrome_print(). By using this script you can easily make sure your get both versions rendered at the same time without having to manually go in and toggle the pdf mode parameter in the yaml header and then use the print dialog in your browser.

Questions?

Confused by anything (there’s a lot to be confused by)? Open an issue on github and let me know. Not comfortable with github issues? Tweet the question at me on Twitter: @nicholasstrayer.

More Repositories

1

cv

My CV built using RMarkdown and the pagedown package.
HTML
523
star
2

shinysense

A bunch of shiny modules that let shiny sense the world around it.
JavaScript
204
star
3

tuftesque

A very similar style to the original tufte hugo theme but with a few modifications. Used in my blogdown blog.
HTML
53
star
4

tuftesque2

A successor to the tuftesque blogdown theme. This time starting out as a rmarkdown theme.
CSS
27
star
5

D3ManhattanPlots

An R HTMLWidget for making interactive manhattan plots for GWAS.
JavaScript
19
star
6

spell_casts

A shiny app for casting spells using deep learning
R
16
star
7

js4shiny_r2d3

Repo for R2D3 section at the javascript for shiny users workshop at RStudio::Conf 2020
JavaScript
15
star
8

shinyswipr

An R Shiny module to put swiping interfaces in your app!
JavaScript
13
star
9

nstrayer.github.io

Personal website
HTML
13
star
10

network3d

Three dimensional network visualization in R using webgl/threejs. Built to be configurable and fast.
HTML
13
star
11

slid3r

A simple d3 slider that is meant to be placed inside your svg.
JavaScript
10
star
12

grided

A web-app to help you build grid-layouts for your web-app
TypeScript
9
star
13

manhattanPlotr

A tiny package that just makes nice looking interactive manhattan plots for use in Shiny apps or publication.
JavaScript
8
star
14

visualization_in_r

A repository for the computing workshop I am giving in the Vanderbilt biostatistics department May 20.
HTML
8
star
15

mcmcDemo

A pure javascript implementation of a metropolis haystings mcmc sampler
JavaScript
7
star
16

cvdown

R package for building data-driven CVs/ Resumes with RMarkdown/Pagedown
R
6
star
17

activity_detection_post

Can we use Keras to detect human activity from accelerometer data?
HTML
5
star
18

neural_nets_for_statisticians

A series of two lectures for the class Advanced Statistical Inference at Vanderbilt on Neural Networks
HTML
4
star
19

bipartiteNetwork

A 3-d gpu-powered bi-partite network visualization tool. For use in shiny or static environments. Fast.
JavaScript
4
star
20

travelingSalesman

A tiny interactive that allows you to fiddle with the simulated annealing algorithm
JavaScript
3
star
21

statdists

A javascript library mocking R's distribution forms
JavaScript
3
star
22

phewasHelper

A package with a few tiny helper functions to make life easier to work with phewas and phecodes.
R
3
star
23

shinyearr

This package has been rolled into the library shinysense!
JavaScript
3
star
24

wildfires

Where are wildfires happening?
JavaScript
2
star
25

tree-town-trees

A shiny app to explore all of Ann Arbor's trees
R
2
star
26

rstudioconf19_me-poster

Repo containing the flexdashboard e-poster on the shiny app Multimorbidity Explorer for RStudio::Conf 2019
HTML
2
star
27

d3Stats

A d3 javascript library that will allow easy generation of common statistical plots (scatter, box, violin, histogram... etc.).
JavaScript
2
star
28

Mysis_DVM_Modeling

The code and brainstorms for my senior thesis project "Modeling the Diel Vertical Migration Patterns of Mysis diluviana."
HTML
2
star
29

js_stat_snippets

Small copy and pasteable snippets of common statistics/probability functions in ES6 javascript.
2
star
30

viewr_imagenet_demo

A demo of using the shinyviewr function in my shinysense package to classify photos using the VGG50 imagenet model.
R
2
star
31

tsne_presentation

Vanderbilt biostatistics journal club paper presentation on T-SNE by Maaten et al.
HTML
2
star
32

associationsubgraphs

Estimation of association networks using non-parametric entropy-based measures
R
2
star
33

network_builder

A small javascript tool to build toy networks and export them for use in your favorite network program.
HTML
2
star
34

math295

Code and data for Professor James Bagrow's, Math 295 (Data Science 2) at UVM, F14
Python
2
star
35

marketStory

Exploration of state level farmers market trends.
JavaScript
2
star
36

deeplearnjs

JavaScript
1
star
37

pyrtree

Automatically exported from code.google.com/p/pyrtree
Python
1
star
38

pyshiny-output-binding-example

Simple example demonstrating a custom output binding using the Tabulator JS library
JavaScript
1
star
39

py-shiny-custom-input-component

Example for a custom javascript input for a shiny for python in package form
JavaScript
1
star
40

dataDayTexas

Presentation for my talk at Data Day Texas on Jan 27, 2018
HTML
1
star
41

sequence_classification

A presentation I'm making for my qualifying exam on using deep learning for sequence classification
HTML
1
star
42

biSBMR

A quick R implementation of the Bipartite SBM by Dan Larremore, Abigail Jacobs, and Aaron Clauset. Currently just their code pretty much wholesale.
C++
1
star
43

likelihood

A interactive explanation of likelihood functions/ ratios/ intervals.
JavaScript
1
star
44

sbmrcpp

Experimental new version of sbmR package that forgoes the rcpp s4 class in favor of lightweight wrappers of the built in SEXP classes
C++
1
star
45

brimr

A quick implementation of the BRIM algorithm for bipartite network clustering. May eventually be a package.
R
1
star
46

docker_for_biostatisticians

Slides and demo for Vanderbilt computing seminar on 4/26/2019
HTML
1
star
47

distributionTool

Little app to visualize different probability distributions and play around with their parameters.
JavaScript
1
star
48

nviz

A collection of random visualizations I find myself reusing a lot
R
1
star
49

ehr_mining_presentation

HTML
1
star
50

binomialFun

An interactive exploration of binomial confidence interval generation and hypothesis testing.
JavaScript
1
star
51

leapD3

Experimental repo interfacing leap motion and d3 graphics.
JavaScript
1
star
52

chromebookDevSetup

A simple set of steps to go from fresh chromebook to active dev environment
1
star
53

bayesian_nonparametrics_tutorial

A series of scripts that implement common bayesian nonparametric unsupervised learning methods from scratch. Will eventually be a blog post.
R
1
star
54

WebComponentCheatSheet

A series of code snippets to make getting webcomponents up and running easier
1
star
55

hiking_maps

3d hiking maps from Strava
R
1
star
56

journal_club_bipartite_sbm_larremore_et_al

My slides for the Vandy biostats journal club on Efficiently inferring community structure in bipartite networks by Daniel B. Larremore, Aaron Clauset, and Abigail Z. Jacobs.
HTML
1
star
57

chromebookTesting

Testing the ability to run an entire multifile webdev project from a stock chromebook.
HTML
1
star