<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Class Central Survey
Step1:  Read the survey data
Step2:  Create target group 'Latin America'
Step4:  Generic function to plot barchart for any categorical feature on any target/nontarget split
Step6:  Generic function to plot barchart for any multi-categorical feature on any target/nontarget split
Step7:  Apply this plot on the target 'Africa'
Step8:  They also started earlier with MOOCs
<ASSISTANT_TASK:>
Python Code:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="white")
sns.set_context("talk")
Explanation: Class Central Survey: compare target group 'Africa' with the rest of the sample
End of explanation
df = pd.read_csv('raw/2016-17-ClassCentral-Survey-data-noUserText.csv', decimal=',', encoding = "ISO-8859-1")
Explanation: Read the survey data
End of explanation
df['Which region of the world are you in?'].value_counts()
target_name = 'Latin America'
mask_africa = (df['Which region of the world are you in?'] == 'Africa')
Explanation: Create target group 'Latin America'
End of explanation
def binary_compare_categorical_barh(mask, feature, df=df,
                                            target_name='target', nontarget_name='Other', 
                                            split_name='visitor', answer='answer'):
    Split dataframe into two based on mask
    Draw horizontal barcharts for each category item for both masked and unmasked object
    target = df[mask]
    nontarget = df[~mask]
    target_size, nontarget_size = len(target), len(nontarget)
    
    res_target = target[feature].value_counts()/target_size*100
    res_nontarget = nontarget[feature].value_counts()/nontarget_size*100
    
    result = pd.DataFrame({target_name: res_target, nontarget_name: res_nontarget})
    result[answer] = result.index
    
    res_df = pd.melt(result, id_vars=answer, var_name=split_name, value_name='percentage')
    print(res_df)
    
    sns.factorplot(x='percentage', y=answer, hue=split_name, data=res_df, kind='bar', orient='h', size=6, aspect=2)
    plt.title(feature)
    sns.despine(left=True, bottom=True)
    plt.show()
    return
Explanation: Generic function to plot barchart for any categorical feature on any target/nontarget split
End of explanation
def binary_compare_multi_select_categorical_barh(df, target, target_name, question, selectors, nontarget_name = 'Others'):
    draw a barchart for Survey results on a question that allows to select multiple categories
    df: dataframe to use
    target: selection of rows based on column values
    question: the question you want to analyse
    selectors: list of df column containing the selectors (values 0/1)
    size = {}
    target_df = df[target]
    nontarget_df = df[~target]
    size[target_name], size[nontarget_name] = len(target_df), len(nontarget_df)
    print(size)
    graph_targetdata = target_df.loc[:, selectors]
    graph_targetdata['target'] = target_name
    
    graph_nontargetdata = nontarget_df.loc[:, selectors]
    graph_nontargetdata['target'] = nontarget_name
    
    graph_data = pd.concat([graph_targetdata, graph_nontargetdata])
    
    melted = pd.melt(graph_data, id_vars='target', var_name='select', value_name='percentage')
    grouped = melted.groupby(['target', 'select'], as_index=False).sum()
    #print(size[grouped['target']])
    grouped.percentage = grouped.percentage/grouped['target'].map(size)*100 # make it percentage of total
    grouped['select'] = grouped['select'].apply(lambda x: x.split(": ")[1]) # remove prefix from string
    print(grouped)  
    
    sns.factorplot(x='percentage', y='select', hue='target', data=grouped, kind='bar', orient='h', size=6, aspect=2)
    sns.plt.title(question)
    sns.despine(left=True, bottom=True)
    sns.plt.show()
Explanation: Generic function to plot barchart for any multi-categorical feature on any target/nontarget split
End of explanation
binary_compare_categorical_barh(mask=mask_africa, 
            target_name='Africa', feature='How familiar are you with MOOCs?')
binary_compare_categorical_barh(mask=mask_africa, 
                                        target_name='Africa', feature='How important is the ability to earn a certificate when you complete a MOOC?')
reasons = ['Reasons: Learning skills for current career', 'Reasons: Learning skills for new career', 
           'Reasons: School credit', 'Reasons: Personal interest', 'Reasons: Access to reference materials']
binary_compare_multi_select_categorical_barh(df, target=mask_africa, target_name='Africa',
                question='Which of the following are important reasons for you to take MOOCs?', 
                selectors=reasons)
decisions = ['Decide: Topic/Subject', 'Decide: Instructor', 'Decide: Institution/university', 
             'Decide: Platform', 'Decide: Ratings', 'Decide: Others recommendations']
binary_compare_multi_select_categorical_barh(df, target=mask_africa, target_name='Africa',
                question='Which are the most important factors in deciding which MOOC to take?', 
                selectors=decisions)
aspects = ['Aspects: Browsing discussion forums', 
           'Aspects: Actively contributing to discussion forums',
           'Aspects: Connecting with other learners in the course environment',
           'Aspects: Connecting with learners outside the course environment',
           'Aspects: Taking the course with other people you know (friends, colleagues, etc.)']
binary_compare_multi_select_categorical_barh(df, target=mask_africa, target_name='Africa',
                question='Which of the following are important aspects of the MOOC experience to you?', 
                selectors=aspects)
benefits = ['Benefit: Have not taken MOOCs', 
            'Benefit: Not Really',
            'Benefit: School credit towards a degree',
            'Benefit: Promotion at current organization',
            'Benefit: Higher performance evaluation at current job',
            'Benefit: Helped me get a new job in the same field',
            'Benefit: Helped me get a new job in a different field']
binary_compare_multi_select_categorical_barh(df, target=mask_africa, target_name='Africa',
                question='Have you received any tangible benefits from taking MOOCs?', 
                selectors=benefits)
pays = ['Pay: The topic/subject',
        'Pay: The institution/university offering the MOOC',
        'Pay: The instructor/professor', 
        'Pay: The MOOC platform being used',
        'Pay: A multi-course certification that the MOOC is a part of']
binary_compare_multi_select_categorical_barh(df, target=mask_africa, target_name='Africa',
                question='Which of the following have a strong impact on your willingness to pay for a MOOC certificate?', 
                selectors=pays)
binary_compare_categorical_barh(mask=mask_africa, 
                                        target_name='Africa', feature='# MOOCs Started')
binary_compare_categorical_barh(mask=mask_africa, 
                                        target_name='Africa', feature='# MOOCs Finished')
binary_compare_categorical_barh(mask=mask_africa, 
                                        target_name='Africa', feature='When did you first start taking MOOCs?')
Explanation: Apply this plot on the target 'Africa'
End of explanation
binary_compare_categorical_barh(mask=mask_africa, 
                                        target_name='Africa', feature='How willing are you to pay for a certificate for a MOOC?')
binary_compare_categorical_barh(mask=mask_africa, 
                                        target_name='Arica', 
                                        feature='How much do you think employers value MOOC certificates?')
binary_compare_categorical_barh(mask=mask_africa, 
                                        target_name='Africa', 
                                        feature='What is your level of formal education?')
binary_compare_categorical_barh(mask=mask_africa, 
                                        target_name='Africa', 
                                        feature='What is your age range?')
Explanation: They also started earlier with MOOCs
End of explanation
<END_TASK>