Do Better Church

Do Better Church | @dobetterchurch

Do Better Church (@dobetterchurch) is an organization dedicated to coming alongside survivors of abuse in the church or Christian nonprofit context.

Data Pipeline

Social Media: The Do Better Church instagram account has regular posting and activity where Jo Luehmann (@joluehmann) and various volunteers share stories from the survey as instagram posts, and Jo also shares relevant commentary and links in the “instagram stories” section of the account, along with useful links and resources in the “Highlights” section.

Survey: A survey on Google forms called @doBetterChurch | Christian Church Abuse. The survey questions are:

  • What’s your name?
  • Name of church or organization:
  • What city and state, or country is the church in?
  • What role did you play? (Check all that apply, if none apply elaborate in the “Please share what you’d like here:” question)
  • What years did you work at the church?
  • What type of abuse did you experience? (Check all that apply. If none apply elaborate in the “Please share what you’d like here:” question)
  • This abuse was brought to…
  • Please share what you’d like here:
  • I would like for an advocate to follow up with me with options to hold this church accountable (email is required for follow up)
  • What is a your email? (Email is required for follow up)
  • May we share a piece or pieces of your story anonymously under the @DoBetterChurch on Instagram,Twitter and FB? No names of churches or individuals will be mentioned unless you expressly say you want that.
  • What are the church’s social media handles? (this is if you want us to tag them)
  • I would like to partner with you in my healing journey (email is required for follow up)

Storage: The survey data is stored in a corresponding google sheet.

Data Cleaning

The survey data is messy, because there were no constraints initially for the input fields. City, State, and Country, for instance, accept a variety of misspellings or capitalizations, the years involved question allowed for users to input “6 months” when we were hoping for a year range, to see differences among reports over specific year ranges.

Cleaning in google sheets:

  • Reformatting date ranges to be ####-#### manually
  • modifying the locations to be recognized by Tableau
  • Making sure all of the abuse lables match over several survey versions
  • Modifying the names of the churches or organization to a common name (Village Church vs. The village church, etc)

data_cleaning.ipynb: In the jupyter notebook called “data_cleaning”, I find the most recent date that has not been uploaded, and run the bottom cell to write to a csv, then:

  • upload the “new_cleaned_data” csv to google sheets.
  • manually copy and paste to the “cleaned data” spreadsheet, and the “stories” sheet within the cleaned data spreadsheet.

Data Presentation and Visualization

Location Map of Abuse Reports: hosted via Tableau Public, the map draws from a custom .csv created by the script (INSERT LINK) and generates an interactive map here: Geographic Distribution of Reports

Abuse Chart: Using the library PyWaffle, the script name_of_script generates a waffle chart of abuse cases grouped by abuse. To render the chart in a way that is appropriate for instagram, the number of columns and rows, and the padding along the custom shape (the person icon) is necessary. I have one script to generate the legend (which sloppily has a distorted graph in the background) and one to generate the graph, without the legend. If the image to be generated doesn’t need to be ready for an instagram post, then simply choosing the appropriate number of rows and columns is sufficient, and the legend will show in whatever location specified in the parameter. (image in carousel above)

Time In Abusive Spaces: Using plotly’s chart-studio, I produced a plot of all of the time each person spent in the abusive space they reported. (image in carousel above)


The web dev team is working on a website that will embed the survey, charts, and have other important information for Do Better Church. It will be hosted on

Scheduling Data Updates

Simple cron job
echo "Update successfully completed at: " >> output.txt
date >> output.txt
cd /path/to/dobetterchurch/scripts
X=$(grep -iEo '\d+\/\d+\/\d+' clean_survey_data.csv | wc -l | sed -e 's/^[ \t]*//') # number of current reports
Y=$(grep -iEo '\d+\/\d+\/\d+' clean_survey_data.csv | wc -l | sed -e 's/^[ \t]*//') # report count post update
NEW_REPORTS=`expr $Y - $X`
cd /path/to/log/folder
echo "number of new reports: " >> output.txt
echo $NEW_REPORTS >> output.txt

Link to the DBC Newsletter Sign up form, which is hosted on “sendinblue”.