def dataCleaning(df):
    """  
    This function takes the dataframe as an arugment.
    
    1) Filtering missing and meaningless values (e.g. Don't know, refused, etc.)
       by using the loc technique.
    2) Replacing Feature values with their actual meaning by using dictionaries.
        
    :param [df]: [dataframe that will be used to carry out the data cleaning]
    :return: [cleaned (without NAs, meaningless values, renamed values) dataframe]
    
    """
    
    df = df.loc[(df['Overweight_Obese'] != 9) & (df['Education_Level'] != 9)
                & (df['Income_Categories'] != 9) & (df['Exercise'] != 7) 
                & (df['Exercise'] != 9) & (df['Age_Categories'] != 14) 
                & (df['Gender'] != 7) & (df['Gender'] != 9) 
                & (df['Alcohol_Consumption'] != 7) 
                & (df['Alcohol_Consumption'] != 9)]
    
    # =========================================================================
    # Creating a copy of the BRFSS dataframe while removing all the missing 
    # values (NaNs) to ensure that the modifications to the data will not be
    # reflected in the original dataframe
    # =========================================================================
    df = df.dropna().copy()
    
    gender_dict = {1: 'Male', 2:'Female'}

    for k1, v1 in gender_dict.items():
        df.Gender.replace(k1, v1, inplace=True)
    
    
    overweight_dict = {1: 'No', 2: 'Yes'}
    
    for k2, v2 in overweight_dict.items():
        df.Overweight_Obese.replace(k2, v2, inplace =True)
    
    
    education_dict = {1: 'No_HighSchool_Graduate', 2: 'HighSchool_Graduate', 
                      3: 'Attended_College', 4: 'College_Graduate'}
    
    for k3, v3 in education_dict.items():
        df.Education_Level.replace(k3, v3, inplace=True)
    
    
    income_dict = {1: '<$15,000', 2: '$15,000_to_<$25,000',
                   3: '$25,000_to_<$35,000', 4: '$35,000_to_<$50,000',
                   5: '$50,000>='}
    
    for k4, v4 in income_dict.items():
        df.Income_Categories.replace(k4, v4, inplace=True)
    
    
    exercise_dict = {1: 'Yes', 2: 'No'}
    
    for k5, v5 in exercise_dict.items():
        df.Exercise.replace(k5, v5, inplace=True)
    
    
    age_dict = {1: '18-24', 2: '25-29', 3: '30-34', 4: '35-39', 5: '40-44',
                6: '45-49', 7: '50-54', 8: '55-59', 9: '60-64', 10: '65-69',
                11: '70-74', 12: '75-79', 13: '80>='}
    
    for k6, v6 in age_dict.items():
        df.Age_Categories.replace(k6, v6, inplace=True)
    
    
    alcohol_dict = {1: 'Yes', 2: 'No'}
    
    for k7, v7 in alcohol_dict.items():
        df.Alcohol_Consumption.replace(k7, v7, inplace=True)
    
    
    arthritis_dict = {1: 'Diagnosed', 2: 'Not_Diagnosed'}
    
    for k8, v8 in arthritis_dict.items():
        df.Arthritis.replace(k8, v8, inplace=True)
    
    
    return df