def print_columns(column_names, dataset): """ Prints columns with specified column names in a dataset. :param column_names: A list of strings or string of header name(s) in a column. :param dataset: The dataset variable. It must be already read, and must contain headers. :returns: Prints strings to console line by line: __column_name1__ is: __column1_values__ __column_name2__ is: __column2_values__ :example: >>> example_data = [['day', 'month'], ['1', 'June'], ['3', 'May'], ['4', 'Jun']] >>> #print_columns(["day", "month"], example_data) # print multiple column names <BLANKLINE> day is: ['1', '3', '4'] <BLANKLINE> month is: ['June', 'May', 'Jun'] >>> print_columns("day", example_data) # print a single column name <BLANKLINE> day is: ['1', '3', '4'] """ if type(column_names) is list: # if the query is a list... for i, column_name in enumerate(column_names): print("\n" + column_name + " is: " + str(select_column(column_name, dataset))) elif type( column_names ) is str: # if the query is a string (i.e., if a single column name is entered)... column_name = column_names print("\n" + column_name + " is: " + str(select_column(column_name, dataset))) else: # if the query is not a list or single string, return error raise ValueError( '1: column_names must be a list of strings or a single string.')
def column_summary(column_name, dataset, print_values=False): """ Return (or print) the number of occurences for each value in the specified column in a dataset. :param column_name: (str) Target column name from the dateset headers. :param dataset: (var) Variable that holds the dataset. Headers must be included. :param print_values: (bool) Specifies whether to return or print variables :returns: - If print_values == False (default) --> A dictionary object - If print_values == True --> *Line by line* output to console (and no dictionary object returns) :examples: >>> my_data = [["id", "number"],["John", 0], ["John", 12], ["Someone else", 7]] >>> column_summary(column_name="id", dataset=my_data, print_values=True) John Someone else """ ############################################################################################################# column_summaries = {} selected_column = select_column(column_name, dataset) for value in selected_column: if value not in column_summaries: column_summaries[value] = 1 else: column_summaries[value] += 1 if print_values: for value in column_summaries: print(value) else: return column_summaries
def transform_column_substring(target_substring, replacement_substring, target_headers_list, dataset): """ Replaces substring for all values in a column and returns the transformed dataset. Accepts regex as target_substring. :param target_substring: (str, regex) The old substring :param replacement_substring: (str) The new substring :param target_headers_list: (str, list) A list of he headers of the target columns. A single string value can also be inputted. :param dataset: The variable that holds the dataset. Headers must be included in the dataset. :return: The transformed dataset (Variable assignment is unnecessary, the original dataset is changed once the function is run) :example - Replace irregular AM values: >>> my_data = [ ["id", "time"], ["1", "10 a.m."], ["2", "8 a.m."], ["3", "4 A.M."] ] >>> transform_column_substring("a.m.", "AM", "time", my_data) [['id', 'time'], ['1', '10 AM'], ['2', '8 AM'], ['3', '4 A.M.']] >>> transform_column_substring("[Aa].[Mm].", "AM", "time", my_data) [['id', 'time'], ['1', '10 AM'], ['2', '8 AM'], ['3', '4 AM']] :example - Remove the dots from all values in the specified columns: >>> my_data = [ ["id", "time"], ["1", "10 a.m."], ["2", "8 a.m."], ["3", "4 A.M."] ] >>> transform_column_substring("\.", "", ["time"], my_data) [['id', 'time'], ['1', '10 am'], ['2', '8 am'], ['3', '4 AM']] """ ############################################################################################################# import re from preprocessor.legacy_functions.select_column import select_column from preprocessor.legacy_functions.replace_column import replace_column if type( target_headers_list ) is str: # If a single value is inputted as target column header (and not a list) target_headers_list = [ target_headers_list ] # Convert this to a list with one item so the rest of the function can work correctly. for target_column_name in target_headers_list: # For each column in the inputted list selected_column = select_column(target_column_name, dataset) # Select the column for i, string in enumerate( selected_column): # And change the substring selected_column[i] = re.sub(target_substring, replacement_substring, string) replace_column(selected_column, target_column_name, dataset) # Rewrite the column with its new version return dataset
def transform_column_type(target_headers, target_type, dataset): """ Transforms a column of string integers or floats to integers or floats. :param target_headers: Header(s) of the columns to transformed to integers. Can be a list of strings (for multiple columns) or a single string (for a single column). :param target_type: (str) value:"int" --> Converts all values in the selected columns from strings to integers. value: "float" --> Converts strings to float values. :param dataset: A dataset that is read to a variable. It must contain headers. :return: Transformed dataset. NOTE: If function is run without any variable assignment, it still changes the original dataset variable. :example - transform single column to integers: >>> my_data = [["letters", "numbers"], ["a", "1"], ["b", "2"], ["c","3"]] # <- Notice the number strings >>> transform_column_type("numbers", "int", my_data) [['letters', 'numbers'], ['a', 1], ['b', 2], ['c', 3]] :example - transform multiple columns to integers: >>> my_data = [["letters", "small numbers", "large numbers"], ["a", "1", "100"], ["b", "2", "200"], ["c","3", "300"]] >>> transform_column_type(["small numbers", "large numbers"], "float", my_data) [['letters', 'small numbers', 'large numbers'], ['a', 1.0, 100.0], ['b', 2.0, 200.0], ['c', 3.0, 300.0]] """ ############################################################################################################# from preprocessor.legacy_functions.select_column import select_column from preprocessor.legacy_functions.replace_column import replace_column try: if type(target_headers) is str: target_headers = [target_headers] for header_name in target_headers: selected_column = select_column(header_name, dataset) if target_type is "int": selected_column = [int(value) for value in selected_column] elif target_type is "float": selected_column = [float(value) for value in selected_column] replace_column(selected_column, header_name, dataset) except: raise ValueError( "Unable to transform column values to target type. Column values are not strings that are convertible to target type?" ) return (dataset)
def print_column_vertically(target_column_name, dataset): """ Prints each variable of a column to a new line in console. :param target_column_name: (str) Header of the column to be printed :param dataset: dataset to column is in :returns: Strings printed to console :example: >>> long_data = [["date"], ['2017/03/30 12:20:57 AM UTC+0200'], ['2017/03/31 1:38:41 AM UTC+0200'], ['2017/04/01 12:00:27 AM UTC+0200']] >>> print_column_vertically("date", long_data) 2017/03/30 12:20:57 AM UTC+0200 2017/03/31 1:38:41 AM UTC+0200 2017/04/01 12:00:27 AM UTC+0200 """ ############################################################################################################# from preprocessor.legacy_functions.select_column import select_column selected_column = select_column(target_column_name, dataset) for i, value in enumerate(selected_column): print(value)
def calculate_scores(scale_columns_list, dataset, count_values=None, include_values_only=None): """ Calculates the row sums for given columns, which can be used to calculate scale/questionnaire scores. It works by taking column names and dataset as input, and returning a list of integers which is the sum of each row of the given column names. :param scale_columns_list: This must be a list of strings that hold the header names for target questions. :param dataset: The variable that holds the dataset to process. Dataset must also contain headers. :param count_values: (List of int or float, int, float) Counts the number of occurences for given values. :param include_values_only: (List of int or float, int, float) Values from column to include in the calculation. All other values are be converted to 0. :return: A LIST of INTEGERS that holds the calculated scores. :exception ValueError [1]: All values in the target rows (except the headers) must be either integers or strings that are convertible to strings. :example - simple score summation over columns: >>> example_data = [['participant_id', 'question_1', 'question_2', 'question_3'], ['#1', '0', '-2', '1'], ['#2', '2', '-3', '0'], ['#3', '4', '-1', '1'], ['#4', '1', '0', '2']] >>> scores = calculate_scores(["question_1", "question_2", "question_3"], example_data) >>> print("scores of four participants (row sums of given columns):" + str(scores)) scores of four participants (row sums of given columns):[-1.0, -1.0, 4.0, 3.0] :example - include only certain values in score calculation: >>> scores = calculate_scores(["question_1", "question_2", "question_3"], example_data, include_values_only=[1]) >>> print("filtered scores of four participants (filtered row sums of given columns):" + str(scores)) filtered scores of four participants (filtered row sums of given columns):[1.0, 0, 1.0, 1.0] :example - count number of occurences of a value over columns: >>> scores = calculate_scores(["question_1", "question_2", "question_3"], example_data, count_values=[0,1]) >>> print("counts of scores for four participants:" + str(scores)) counts of scores for four participants:[2, 1, 1, 2] """ ############################################################################################################# from preprocessor.legacy_functions.select_column import select_column ######################### ### INITIALIZATION ### ######################### # Prepare count_values parameter for internal use if count_values == None: count_values = [None] elif type(count_values) != list: try: count_values = [count_values] except: raise ValueError( "[2] 'count_values' parameter is not convertible to list.") # Prepare include_values_only parameter for internal use if include_values_only == None: include_values_only = [None] elif type(include_values_only) != list: try: include_values_only = [include_values_only] except: raise ValueError( "[3] 'include_values_only' parameter is not convertible to list." ) ############################### ### DICTIONARY OF COLUMNS ### ############################### # Make a dictionary of columns to be included in the score calculation (keys are column headers, values are column rows) columns = {} for column_name in scale_columns_list: current_column = select_column(column_name, dataset) for i, element in enumerate(current_column): try: current_column[i] = float( element ) # For compatibility with NaN values, this must be float except: raise ValueError( "[1] Scores are not integers or floats (or not strings that are convertible to float). A non-number string exists in the data?" ) break columns[column_name] = current_column ######################### ### TRANSFORMATIONS ### ######################### # Change all dictionary values that is given in count_values parameter to 1, and all others to 0 if count_values != [None]: for each_key, each_column in columns.items(): for i, each_value in enumerate(each_column): if each_value not in count_values: columns[each_key][i] = 0 else: columns[each_key][i] = 1 # Keep all dictionary values that is given in the include_values_only parameter, and make all other values 0 if include_values_only != [None]: for each_key, each_column in columns.items(): for i, each_value in enumerate(each_column): if each_value not in include_values_only: columns[each_key][i] = 0 ################### ### CALCULATION ### ################### current_and_previous_column = [ ] # temporary variable necessary for column additions in the for loop below sum_of_each_row_so_far = [] # will ultimately hold scores of each row for column_key, column_values in columns.items( ): # For each column (which are now in the 'columns' dictionary) # To begin, add all values of the first row for all columns to 'sum_of_each_row_so_far'. # (At this point, the for loop's index = 0 (i.e., the first column/key in dictionary)) if len(sum_of_each_row_so_far) == 0: for value in column_values: sum_of_each_row_so_far.append(value) # (By the time the for loop reaches this 'else', index = 1 instead of 0 (i.e., the second key/column in dictionary)). else: current_and_previous_column = list( zip(sum_of_each_row_so_far, column_values) ) # Pair values of the first rows of columns (stored in 'sum_of_each_row_so_far') and the values of the next row. for i, pair in enumerate(current_and_previous_column): sum_of_each_row_so_far[i] = sum( pair ) # Sum the current row (index = 1) and the previous row (index = 0) # After this calculation, let 'sum_of_each_row_so_far' become the result of this sum; # And in the next iteration, use this sum as the input (i.e., the previous row) when adding the next row to it. return sum_of_each_row_so_far
def divide_column_by_criteria(row_grouping_criteria_header, target_column_name, dataset, output="list"): """ Divides a column to multiple parts based on the division criteria provided (e.g., grouping rows based on participant IDs that are spread to multiple rows). Ignores capitalization differences in criteria names. :param row_grouping_criteria_header: (str): Header of the column that contains the criteria that will be used when creating groups of rows (e.g., Participant ID) :param target_column_name: (str) The column that will be divided into groups :param dataset: (var) A variable containing a dataset with headers :param output --> "list": (default) turns on the list mode, which returns the output as a list that is in the same order with the inputted data (if the rows of the row grouping criteria column has no interruption [i.e., this shouldn't happen in data: participant A's id for 10 rows, and then participant B's id, and then participant A's again.]) :param output --> "dict" returns a dictionary instead of a list. Does not preserve order. :return: A list of lists containing subgroups made out of the inputted column. :example - divide column/group rows by id (and output a list): >>> from preprocessor.legacy_functions.print_columns import print_columns >>> from preprocessor.legacy_functions.demo_daily_data import demo_daily_data >>> print_columns("id", demo_daily_data) <BLANKLINE> id is: ['AB64', 'AB64', 'AB64', 'AB64', 'AB64', 'AB64', 'AB64', 'AB64', 'AB64', 'AB64', 'AB64', 'AB64', 'AB64', 'AB64', 'EM11', 'EM11', 'EM11', 'EM11', 'EM11', 'EM11', 'EM11', 'EM11', 'EM11', 'EM11', 'EM11', 'EM11', 'EM11', 'EM11', 'EM11', 'FT12', 'FT12', 'FT12', 'FT12', 'FT12', 'FT12', 'FT12', 'FT12', 'FT12', 'FT12', 'FT12', 'FT12', 'FT12', 'FT12', 'gh93', 'gh93', 'gh93', 'gh93', 'gh93', 'gh93', 'gh93', 'Gh93', 'gh93', 'gh93', 'gh93', 'Gh93', 'gh93', 'gh93', 'GW98', 'GW98', 'GW98', 'GW98', 'GW98', 'GW98', 'GW98', 'GW98', 'GW98', 'GW98', 'GW98', 'GW98', 'GW98', 'GW98', 'GW98', 'GW98', 'GW98', 'GW98', 'GW98', 'GW98', 'GW98', 'HA61', 'HA61', 'HA61', 'HA61', 'HA61', 'HA61', 'HA61', 'HA61', 'HA61', 'HA61', 'HA61', 'HA61', 'HA61', 'HA61', 'HA61', 'HA61', 'HA61', 'HA61', 'HA61', 'he46', 'he46', 'he46', 'HE46', 'he46', 'he46', 'he46', 'he46', 'he46', 'he46', 'HE46', 'he46', 'he46', 'he46', 'he46', 'he46', 'MJ87', 'MJ87', 'MJ87', 'MJ87', 'MJ87', 'MJ87', 'MJ87', 'MJ87', 'MJ87', 'MJ87', 'MJ87', 'MJ87', 'MJ87', 'MJ87', 'MJ87', 'MJ87', 'MJ87', 'MJ87', 'MJ87', 'PM61', 'PM61', 'PM61', 'PM61', 'PM61', 'PM61', 'PM61', 'PM61', 'PM61', 'PM61', 'PM61', 'PM61', 'PM61', 'PM61', 'PM61', 'PM61', 'PM61', 'PM61', 'wh18', 'wh18', 'wh18', 'wh18', 'wh18', 'wh18', 'wh18', 'wh18', 'wh18', 'wh18', 'wh18', 'wh18', 'wh18', 'wh18', 'wh18', 'wh18', 'wh18', 'wh18', 'wh18'] >>> x = divide_column_by_criteria("id", "sun_hours", demo_daily_data) >>> print(x) [[12.3, 8.8, 10.7, 1.3, 7.2, 4.4, 5.8, 5.3, 9.4, 9.0, 6.3, 12.5, 0.7, 6.3], [12.3, 5.3, 8.6, 0.9, 7.7, 2.4, 4.7, 3.4, 7.4, 9.2, 7.1, 12.3, 0.4, 7.8, 5.5], [12.3, 5.3, 8.6, 0.9, 7.7, 2.4, 4.7, 3.4, 7.4, 9.2, 7.1, 12.3, 0.4, 7.8], [12.3, 8.8, 10.7, 1.3, 7.2, 4.4, 5.8, 5.3, 9.4, 9.0, 6.3, 12.5, 0.7, 6.3], [12.3, 6.2, 10.3, 0.9, 6.6, 4.8, 4.5, 2.9, 9.9, 10.2, 7.9, 11.5, 0.3, 6.8, 6.8, 1.9, 7.6, 8.0, 7.5, 7.9, 6.7], [12.5, 1.9, 1.6, 0.1, 6.6, 0.6, 6.8, 8.6, 7.6, 6.3, 5.1, 9.8, 1.1, 6.9, 9.7, 2.4, 10.4, 8.1, 8.1], [12.5, 1.9, 1.6, 0.1, 6.6, 0.6, 6.8, 8.6, 7.6, 6.3, 5.1, 9.8, 1.1, 6.9, 9.7, 2.4], [12.3, 6.2, 10.3, 0.9, 6.6, 4.8, 4.5, 2.9, 9.9, 10.2, 7.9, 11.5, 0.3, 6.8, 6.8, 1.9, 7.6, 8.0, 7.5], [12.3, 6.2, 10.3, 0.9, 6.6, 4.8, 4.5, 2.9, 9.9, 10.2, 7.9, 11.5, 0.3, 6.8, 6.8, 1.9, 7.6, 8.0], [12.5, 1.9, 1.6, 0.1, 6.6, 0.6, 6.8, 8.6, 7.6, 6.3, 5.1, 9.8, 1.1, 6.9, 9.7, 2.4, 10.4, 8.1, 8.1]] :example - divide column/group rows by id and output a dictionary: >>> y = divide_column_by_criteria("id", "sun_hours", demo_daily_data, "dict") >>> # print(y) # No comparisons in docstring is possible because a dictionary prints its items in a different order each time the function is run. >>> # an example output, however, is as following: >>> # {'gw98': [12.3, 6.2, 10.3, 0.9, 6.6, 4.8, 4.5, 2.9, 9.9, 10.2, 7.9, 11.5, 0.3, 6.8, 6.8, 1.9, 7.6, 8.0, 7.5, 7.9, 6.7], 'wh18': [12.5, 1.9, 1.6, 0.1, 6.6, 0.6, 6.8, 8.6, 7.6, 6.3, 5.1, 9.8, 1.1, 6.9, 9.7, 2.4, 10.4, 8.1, 8.1], 'em11': [12.3, 5.3, 8.6, 0.9, 7.7, 2.4, 4.7, 3.4, 7.4, 9.2, 7.1, 12.3, 0.4, 7.8, 5.5], 'gh93': [12.3, 8.8, 10.7, 1.3, 7.2, 4.4, 5.8, 5.3, 9.4, 9.0, 6.3, 12.5, 0.7, 6.3], 'he46': [12.5, 1.9, 1.6, 0.1, 6.6, 0.6, 6.8, 8.6, 7.6, 6.3, 5.1, 9.8, 1.1, 6.9, 9.7, 2.4], 'ft12': [12.3, 5.3, 8.6, 0.9, 7.7, 2.4, 4.7, 3.4, 7.4, 9.2, 7.1, 12.3, 0.4, 7.8], 'ab64': [12.3, 8.8, 10.7, 1.3, 7.2, 4.4, 5.8, 5.3, 9.4, 9.0, 6.3, 12.5, 0.7, 6.3], 'ha61': [12.5, 1.9, 1.6, 0.1, 6.6, 0.6, 6.8, 8.6, 7.6, 6.3, 5.1, 9.8, 1.1, 6.9, 9.7, 2.4, 10.4, 8.1, 8.1], 'pm61': [12.3, 6.2, 10.3, 0.9, 6.6, 4.8, 4.5, 2.9, 9.9, 10.2, 7.9, 11.5, 0.3, 6.8, 6.8, 1.9, 7.6, 8.0], 'mj87': [12.3, 6.2, 10.3, 0.9, 6.6, 4.8, 4.5, 2.9, 9.9, 10.2, 7.9, 11.5, 0.3, 6.8, 6.8, 1.9, 7.6, 8.0, 7.5]} """ ############################################################################################################# from preprocessor.legacy_functions.select_column import select_column # Compatibilty column for history_nback function. Can be ignored. if row_grouping_criteria_header is None: return [select_column(target_column_name, dataset)] # Initialize criteria that is going to be used to divide the columns, and initialize the target column to be divided target_column = select_column(target_column_name, dataset) criteria_column = select_column(row_grouping_criteria_header, dataset) # Make all elements in the criteria column (e.g., participant ids) lowecase, so instead of creating different groups for # ... each capitalization style of the criteria, one group is created. for i, row in enumerate(criteria_column): criteria_column[i] = row.lower() # Reduce all items in the criteria column to their unique ocurences criteria = set(criteria_column) # Divide the target column based on given criteria grouped_rows_dict = {} for criterion in criteria: grouped_rows_dict[criterion] = [] counter = range(0, len(criteria_column)) for i, criterion_value, target_value in zip(counter, criteria_column, target_column): if criterion_value == criterion: grouped_rows_dict[criterion].append(target_value) # Return a version of the inputted column that is divided per the criteria column if output == "list": # Order dictionary return order based on row order in the column divider_column = select_column(row_grouping_criteria_header, dataset) groups_order = [] for criterion in criteria_column: if criterion not in groups_order: groups_order.append(criterion) grouped_rows_ordered_list = [] # for group_key, group_values in grouped_rows_dict.items(): # for group_name in groups_order: # if group_key is group_name: # grouped_rows_ordered_list.append(grouped_rows_dict[group_key]) for group_name in groups_order: for group_key, group_values in grouped_rows_dict.items(): if group_key is group_name: grouped_rows_ordered_list.append( grouped_rows_dict[group_key]) return grouped_rows_ordered_list elif output == "dict": return grouped_rows_dict
def transform_column_values(target_replacement_dictionary, target_column_headers_list, dataset): """ Replaces values in columns by using a dictionary of conversions (e.g., in order to quantify likert scales). :param target_replacement_dictionary: (dict) A dictionary in which *keys* are old (target) values and dictionary *values* are new (replacement) values. :param target_column_headers_list: (str) A list of headers as a list of strings, which specifies in which columns the transformation will occur. :param dataset: (var) A variable that holds the dataset. Headers must be included. :returns: Transforms the original dataset, and also returns it. Assignment of output to a variable is not necessary; inputted dataset will be changed without assignment as well. :example (single target column as input): >>> from preprocessor.test_data.demo_data import demo_data >>> from preprocessor.legacy_functions.print_columns import print_columns >>> print_columns("consent", demo_data) <BLANKLINE> consent is: ['Ja, ik neem deel', 'Ja, ik neem deel', 'Ja, ik neem deel', 'Ja, ik neem deel', 'Ja, ik neem deel', 'Ja, ik neem deel', 'Ja, ik neem deel', 'Ja, ik neem deel', 'Ja, ik neem deel', 'Ja, ik neem deel', 'Ja, ik neem deel'] >>> transform_column_values({"Ja, ik neem deel":1, "no":2}, "consent", demo_data) [['date', 'consent', 'id', 'sex', 'age', 'edu', 'timezone_change', 'sleep_disorder', 'nightshift', 'psy_disorder', 'wake', 'young_kids', 'partn', 'btptr_1', 'btptr_2', 'btptr_3', 'btptr_4', 'btptr_5', 'btptr_6', 'btptr_7', 'btptr_8', 'btptr_9', 'ats_1', 'atbr_1', 'sq_1', 'sq_2', 'sq_3', 'sq_4', 'sq_5', 'sq_6', 'atbr_2', 'atbr_3', 'ats_2', 'ats_3', 'chron_1', 'chron_2', 'chron_3', 'chron_4', 'chron_5', 'chron_6', 'chron_7', 'chron_8', 'sc_1', 'sc_2', 'sc_3', 'sc_4', 'sc_5', 'sc_6', 'sc_7', 'sc_8', 'sc_9', 'sc_10', 'sc_11', 'sc_12', 'sc_13'], ['2017/04/01 8:35:57 p.m. EET', 1, 'EM11', 'Vrouw', '44', 'HBO', 'Nee', 'Nee', 'Nee', 'Nee', 'Ja', 'Nee', 'Soms', 'soms', '(bijna) altijd', '(bijna) altijd', 'soms', '(bijna) nooit', 'soms', '(bijna) altijd', '(bijna) nooit', '(bijna) altijd', '(bijna) nooit', '(bijna) nooit', 'binnen een kwartier', 'nooit', 'nooit', 'nooit', 'een beetje', 'erg goed', '(bijna) nooit', '(bijna) nooit', 'vaak', '(bijna) altijd', 'helemaal eens', 'helemaal oneens', 'helemaal oneens', 'helemaal eens', 'oneens', 'helemaal eens', 'helemaal eens', 'helemaal oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'helemaal oneens', 'helemaal oneens', 'oneens', 'eens', 'even vaak eens als oneens', 'eens', 'oneens', 'eens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'oneens'], ['2017/04/01 8:15:27 p.m. EET', 1, 'gh93', 'Man', '54', 'WO', 'Nee', 'Ja', 'Nee', 'Ja', 'Ja', 'Nee', 'Soms', 'vaak', 'vaak', 'regelmatig', 'soms', 'soms', 'vaak', '(bijna) nooit', 'soms', '(bijna) altijd', 'vaak', '(bijna) nooit', 'binnen een uur', '1 nacht per week', '2-3 keer per nacht', 'nooit', 'heel vaak', 'redelijk goed', '(bijna) nooit', '(bijna) altijd', 'vaak', 'vaak', 'even vaak eens als oneens', 'eens', 'helemaal eens', 'helemaal oneens', 'eens', 'even vaak eens als oneens', 'oneens', 'helemaal eens', 'oneens', 'eens', 'helemaal oneens', 'helemaal oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'oneens', 'even vaak eens als oneens', 'eens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'helemaal oneens'], ['2017/04/01 9:01:28 a.m. EET', 1, 'AB64', 'Vrouw', '49', 'WO', 'Nee', 'Nee', 'Nee', 'Nee', 'Ja', 'Nee', 'Niet van toepassing', 'vaak', 'soms', 'soms', 'soms', 'vaak', 'regelmatig', '(bijna) nooit', 'vaak', 'regelmatig', '(bijna) nooit', '(bijna) nooit', 'binnen een kwartier', 'nooit', '2-3 keer per nacht', 'nooit', 'helemaal niet', 'goed', '(bijna) nooit', 'soms', '(bijna) nooit', '(bijna) altijd', 'even vaak eens als oneens', 'oneens', 'even vaak eens als oneens', 'eens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'helemaal oneens', 'oneens', 'eens', 'eens', 'helemaal oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'eens', 'oneens', 'eens', 'even vaak eens als oneens', 'oneens', 'eens', 'even vaak eens als oneens'], ['2017/04/01 5:17:20 p.m. EET', 1, 'FT12', 'Man', '51', 'WO', 'Nee', 'Nee', 'Nee', 'Nee', 'Nee', 'Nee', 'Niet van toepassing', 'regelmatig', 'vaak', 'vaak', 'soms', 'soms', 'soms', 'regelmatig', 'soms', 'vaak', 'soms', 'soms', 'binnen een kwartier', '1 nacht per week', '4-5 keer per nacht', '1 nacht per week', 'een beetje', 'redelijk goed', 'soms', 'soms', 'soms', 'soms', 'eens', 'oneens', 'even vaak eens als oneens', 'oneens', 'oneens', 'eens', 'even vaak eens als oneens', 'oneens', 'eens', 'eens', 'oneens', 'oneens', 'eens', 'eens', 'oneens', 'even vaak eens als oneens', 'eens', 'oneens', 'eens', 'eens', 'eens'], ['2017/04/01 9:29:43 p.m. EET', 1, 'MJ87', 'Vrouw', '23', 'WO', 'Nee', 'Nee', 'Nee', 'Nee', 'Nee', 'Nee', 'Niet van toepassing', 'regelmatig', 'regelmatig', 'vaak', 'soms', 'soms', 'soms', 'soms', 'soms', 'regelmatig', '(bijna) nooit', 'soms', 'binnen een half uur', '1 nacht per week', 'nooit', '2-3 nachten per week', 'een beetje', 'goed', 'soms', 'soms', 'soms', '(bijna) altijd', 'even vaak eens als oneens', 'helemaal oneens', 'oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'helemaal oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'oneens', 'oneens', 'oneens', 'eens', 'oneens', 'even vaak eens als oneens', 'oneens', 'oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'oneens'], ['2017/04/01 11:08:39 p.m. EET', 1, 'PM61', 'Man', '25', 'HBO', 'Nee', 'Nee', 'Nee', 'Ja', 'Ja', 'Nee', 'Nooit', 'regelmatig', 'regelmatig', 'soms', 'vaak', 'regelmatig', 'regelmatig', 'regelmatig', 'regelmatig', 'soms', 'regelmatig', 'vaak', 'binnen een uur', '2-3 nachten per week', 'nooit', 'nooit', 'enigszins', 'redelijk goed', 'vaak', 'regelmatig', 'vaak', 'vaak', 'eens', 'helemaal eens', 'oneens', 'helemaal oneens', 'oneens', 'oneens', 'eens', 'eens', 'oneens', 'eens', 'eens', 'helemaal oneens', 'eens', 'oneens', 'helemaal eens', 'helemaal oneens', 'oneens', 'eens', 'eens', 'eens', 'eens'], ['2017/04/01 10:53:53 a.m. EET', 1, 'JL25', 'Vrouw', '44', 'HBO', 'Nee', 'Nee', 'Nee', 'Nee', 'Ja', 'Nee', 'Soms', 'vaak', 'regelmatig', 'regelmatig', 'soms', 'regelmatig', 'regelmatig', 'soms', 'soms', 'regelmatig', 'soms', 'soms', 'binnen een half uur', '1 nacht per week', '2-3 keer per nacht', '2-3 nachten per week', 'een beetje', 'redelijk goed', 'soms', 'soms', 'regelmatig', 'regelmatig', 'even vaak eens als oneens', 'even vaak eens als oneens', 'oneens', 'helemaal oneens', 'eens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'oneens', 'eens', 'even vaak eens als oneens', 'oneens', 'eens', 'even vaak eens als oneens', 'helemaal eens', 'oneens', 'even vaak eens als oneens', 'oneens', 'even vaak eens als oneens', 'eens', 'even vaak eens als oneens'], ['2017/04/01 12:22:06 a.m. EET', 1, 'GW98', 'Man', '28', 'WO', 'Nee', 'Nee', 'Ja', 'Nee', 'Nee', 'Nee', 'Nooit', '(bijna) altijd', '(bijna) nooit', 'vaak', '(bijna) altijd', 'soms', '(bijna) altijd', '(bijna) nooit', 'regelmatig', 'soms', 'regelmatig', 'vaak', 'binnen een kwartier', 'nooit', 'nooit', 'nooit', 'een beetje', 'goed', '(bijna) altijd', '(bijna) altijd', '(bijna) nooit', '(bijna) altijd', 'oneens', 'even vaak eens als oneens', 'eens', 'helemaal oneens', 'oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'oneens', 'oneens', 'even vaak eens als oneens', 'eens', 'helemaal oneens', 'helemaal eens', 'oneens', 'helemaal eens', 'helemaal oneens', 'eens', 'eens', 'oneens', 'eens', 'even vaak eens als oneens'], ['2017/04/01 7:35:17 p.m. EET', 1, 'HA61', 'Man', '51', 'WO', 'Nee', 'Nee', 'Nee', 'Nee', 'Ja', 'Nee', 'Niet van toepassing', '(bijna) nooit', 'vaak', 'vaak', 'soms', 'soms', 'soms', 'regelmatig', 'soms', 'regelmatig', '(bijna) nooit', '(bijna) nooit', 'binnen een half uur', 'nooit', '2-3 keer per nacht', '4-5 nachten per week', 'vaak', 'slecht', '(bijna) nooit', 'soms', '(bijna) nooit', 'regelmatig', 'even vaak eens als oneens', 'oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'eens', 'even vaak eens als oneens', 'helemaal oneens', 'even vaak eens als oneens', 'eens', 'oneens', 'helemaal oneens', 'eens', 'even vaak eens als oneens', 'oneens', 'even vaak eens als oneens', 'helemaal oneens', 'oneens', 'eens', 'even vaak eens als oneens', 'oneens'], ['2017/04/01 8:55:08 a.m. EET', 1, 'wh18', 'Vrouw', '70', 'MBO', 'Nee', 'Nee', 'Nee', 'Nee', 'Nee', 'Nee', 'Nooit', 'soms', 'soms', '(bijna) altijd', '(bijna) nooit', '(bijna) nooit', '(bijna) nooit', '(bijna) nooit', '(bijna) nooit', '(bijna) altijd', '(bijna) nooit', '(bijna) nooit', 'binnen een kwartier', 'nooit', '2-3 keer per nacht', '1 nacht per week', 'helemaal niet', 'redelijk goed', '(bijna) nooit', '(bijna) nooit', '(bijna) nooit', 'vaak', 'even vaak eens als oneens', 'oneens', 'even vaak eens als oneens', 'eens', 'oneens', 'eens', 'oneens', 'oneens', 'eens', 'oneens', 'helemaal oneens', 'helemaal oneens', 'even vaak eens als oneens', 'oneens', 'oneens', 'eens', 'oneens', 'oneens', 'eens', 'oneens', 'oneens'], ['2017/04/01 8:14:46 p.m. EET', 1, 'he46', 'Man', '44', 'WO', 'Nee', 'Ja', 'Nee', 'Nee', 'Ja', 'Nee', 'Niet van toepassing', 'vaak', 'regelmatig', 'soms', 'vaak', 'vaak', 'vaak', '(bijna) nooit', 'vaak', 'soms', 'soms', 'soms', 'binnen een half uur', '2-3 nachten per week', '1 keer per nacht', '1 nacht per week', 'een beetje', 'slecht', 'vaak', 'vaak', 'soms', 'vaak', 'even vaak eens als oneens', 'even vaak eens als oneens', 'eens', 'oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'eens', 'even vaak eens als oneens', 'eens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'even vaak eens als oneens']] >>> print_columns("consent", demo_data) <BLANKLINE> consent is: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] :example (list of target columns as input): >>> replacements_dictionary = {"oneens":1, "eens":2, "even vaak eens als oneens":3, "helemaal oneens":4, "x":5} >>> print_columns("sc_9", demo_data) <BLANKLINE> sc_9 is: ['oneens', 'even vaak eens als oneens', 'eens', 'eens', 'oneens', 'oneens', 'even vaak eens als oneens', 'eens', 'helemaal oneens', 'oneens', 'eens'] >>> transform_column_values(replacements_dictionary, ["sc_9", "sc_10"], demo_data) [['date', 'consent', 'id', 'sex', 'age', 'edu', 'timezone_change', 'sleep_disorder', 'nightshift', 'psy_disorder', 'wake', 'young_kids', 'partn', 'btptr_1', 'btptr_2', 'btptr_3', 'btptr_4', 'btptr_5', 'btptr_6', 'btptr_7', 'btptr_8', 'btptr_9', 'ats_1', 'atbr_1', 'sq_1', 'sq_2', 'sq_3', 'sq_4', 'sq_5', 'sq_6', 'atbr_2', 'atbr_3', 'ats_2', 'ats_3', 'chron_1', 'chron_2', 'chron_3', 'chron_4', 'chron_5', 'chron_6', 'chron_7', 'chron_8', 'sc_1', 'sc_2', 'sc_3', 'sc_4', 'sc_5', 'sc_6', 'sc_7', 'sc_8', 'sc_9', 'sc_10', 'sc_11', 'sc_12', 'sc_13'], ['2017/04/01 8:35:57 p.m. EET', 1, 'EM11', 'Vrouw', '44', 'HBO', 'Nee', 'Nee', 'Nee', 'Nee', 'Ja', 'Nee', 'Soms', 'soms', '(bijna) altijd', '(bijna) altijd', 'soms', '(bijna) nooit', 'soms', '(bijna) altijd', '(bijna) nooit', '(bijna) altijd', '(bijna) nooit', '(bijna) nooit', 'binnen een kwartier', 'nooit', 'nooit', 'nooit', 'een beetje', 'erg goed', '(bijna) nooit', '(bijna) nooit', 'vaak', '(bijna) altijd', 'helemaal eens', 'helemaal oneens', 'helemaal oneens', 'helemaal eens', 'oneens', 'helemaal eens', 'helemaal eens', 'helemaal oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'helemaal oneens', 'helemaal oneens', 'oneens', 'eens', 'even vaak eens als oneens', 'eens', 1, 2, 'even vaak eens als oneens', 'even vaak eens als oneens', 'oneens'], ['2017/04/01 8:15:27 p.m. EET', 1, 'gh93', 'Man', '54', 'WO', 'Nee', 'Ja', 'Nee', 'Ja', 'Ja', 'Nee', 'Soms', 'vaak', 'vaak', 'regelmatig', 'soms', 'soms', 'vaak', '(bijna) nooit', 'soms', '(bijna) altijd', 'vaak', '(bijna) nooit', 'binnen een uur', '1 nacht per week', '2-3 keer per nacht', 'nooit', 'heel vaak', 'redelijk goed', '(bijna) nooit', '(bijna) altijd', 'vaak', 'vaak', 'even vaak eens als oneens', 'eens', 'helemaal eens', 'helemaal oneens', 'eens', 'even vaak eens als oneens', 'oneens', 'helemaal eens', 'oneens', 'eens', 'helemaal oneens', 'helemaal oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'oneens', 3, 2, 'even vaak eens als oneens', 'even vaak eens als oneens', 'helemaal oneens'], ['2017/04/01 9:01:28 a.m. EET', 1, 'AB64', 'Vrouw', '49', 'WO', 'Nee', 'Nee', 'Nee', 'Nee', 'Ja', 'Nee', 'Niet van toepassing', 'vaak', 'soms', 'soms', 'soms', 'vaak', 'regelmatig', '(bijna) nooit', 'vaak', 'regelmatig', '(bijna) nooit', '(bijna) nooit', 'binnen een kwartier', 'nooit', '2-3 keer per nacht', 'nooit', 'helemaal niet', 'goed', '(bijna) nooit', 'soms', '(bijna) nooit', '(bijna) altijd', 'even vaak eens als oneens', 'oneens', 'even vaak eens als oneens', 'eens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'helemaal oneens', 'oneens', 'eens', 'eens', 'helemaal oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'eens', 'oneens', 2, 3, 'oneens', 'eens', 'even vaak eens als oneens'], ['2017/04/01 5:17:20 p.m. EET', 1, 'FT12', 'Man', '51', 'WO', 'Nee', 'Nee', 'Nee', 'Nee', 'Nee', 'Nee', 'Niet van toepassing', 'regelmatig', 'vaak', 'vaak', 'soms', 'soms', 'soms', 'regelmatig', 'soms', 'vaak', 'soms', 'soms', 'binnen een kwartier', '1 nacht per week', '4-5 keer per nacht', '1 nacht per week', 'een beetje', 'redelijk goed', 'soms', 'soms', 'soms', 'soms', 'eens', 'oneens', 'even vaak eens als oneens', 'oneens', 'oneens', 'eens', 'even vaak eens als oneens', 'oneens', 'eens', 'eens', 'oneens', 'oneens', 'eens', 'eens', 'oneens', 'even vaak eens als oneens', 2, 1, 'eens', 'eens', 'eens'], ['2017/04/01 9:29:43 p.m. EET', 1, 'MJ87', 'Vrouw', '23', 'WO', 'Nee', 'Nee', 'Nee', 'Nee', 'Nee', 'Nee', 'Niet van toepassing', 'regelmatig', 'regelmatig', 'vaak', 'soms', 'soms', 'soms', 'soms', 'soms', 'regelmatig', '(bijna) nooit', 'soms', 'binnen een half uur', '1 nacht per week', 'nooit', '2-3 nachten per week', 'een beetje', 'goed', 'soms', 'soms', 'soms', '(bijna) altijd', 'even vaak eens als oneens', 'helemaal oneens', 'oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'helemaal oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'oneens', 'oneens', 'oneens', 'eens', 'oneens', 'even vaak eens als oneens', 1, 1, 'even vaak eens als oneens', 'even vaak eens als oneens', 'oneens'], ['2017/04/01 11:08:39 p.m. EET', 1, 'PM61', 'Man', '25', 'HBO', 'Nee', 'Nee', 'Nee', 'Ja', 'Ja', 'Nee', 'Nooit', 'regelmatig', 'regelmatig', 'soms', 'vaak', 'regelmatig', 'regelmatig', 'regelmatig', 'regelmatig', 'soms', 'regelmatig', 'vaak', 'binnen een uur', '2-3 nachten per week', 'nooit', 'nooit', 'enigszins', 'redelijk goed', 'vaak', 'regelmatig', 'vaak', 'vaak', 'eens', 'helemaal eens', 'oneens', 'helemaal oneens', 'oneens', 'oneens', 'eens', 'eens', 'oneens', 'eens', 'eens', 'helemaal oneens', 'eens', 'oneens', 'helemaal eens', 'helemaal oneens', 1, 2, 'eens', 'eens', 'eens'], ['2017/04/01 10:53:53 a.m. EET', 1, 'JL25', 'Vrouw', '44', 'HBO', 'Nee', 'Nee', 'Nee', 'Nee', 'Ja', 'Nee', 'Soms', 'vaak', 'regelmatig', 'regelmatig', 'soms', 'regelmatig', 'regelmatig', 'soms', 'soms', 'regelmatig', 'soms', 'soms', 'binnen een half uur', '1 nacht per week', '2-3 keer per nacht', '2-3 nachten per week', 'een beetje', 'redelijk goed', 'soms', 'soms', 'regelmatig', 'regelmatig', 'even vaak eens als oneens', 'even vaak eens als oneens', 'oneens', 'helemaal oneens', 'eens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'oneens', 'eens', 'even vaak eens als oneens', 'oneens', 'eens', 'even vaak eens als oneens', 'helemaal eens', 'oneens', 3, 1, 'even vaak eens als oneens', 'eens', 'even vaak eens als oneens'], ['2017/04/01 12:22:06 a.m. EET', 1, 'GW98', 'Man', '28', 'WO', 'Nee', 'Nee', 'Ja', 'Nee', 'Nee', 'Nee', 'Nooit', '(bijna) altijd', '(bijna) nooit', 'vaak', '(bijna) altijd', 'soms', '(bijna) altijd', '(bijna) nooit', 'regelmatig', 'soms', 'regelmatig', 'vaak', 'binnen een kwartier', 'nooit', 'nooit', 'nooit', 'een beetje', 'goed', '(bijna) altijd', '(bijna) altijd', '(bijna) nooit', '(bijna) altijd', 'oneens', 'even vaak eens als oneens', 'eens', 'helemaal oneens', 'oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'oneens', 'oneens', 'even vaak eens als oneens', 'eens', 'helemaal oneens', 'helemaal eens', 'oneens', 'helemaal eens', 'helemaal oneens', 2, 2, 'oneens', 'eens', 'even vaak eens als oneens'], ['2017/04/01 7:35:17 p.m. EET', 1, 'HA61', 'Man', '51', 'WO', 'Nee', 'Nee', 'Nee', 'Nee', 'Ja', 'Nee', 'Niet van toepassing', '(bijna) nooit', 'vaak', 'vaak', 'soms', 'soms', 'soms', 'regelmatig', 'soms', 'regelmatig', '(bijna) nooit', '(bijna) nooit', 'binnen een half uur', 'nooit', '2-3 keer per nacht', '4-5 nachten per week', 'vaak', 'slecht', '(bijna) nooit', 'soms', '(bijna) nooit', 'regelmatig', 'even vaak eens als oneens', 'oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'eens', 'even vaak eens als oneens', 'helemaal oneens', 'even vaak eens als oneens', 'eens', 'oneens', 'helemaal oneens', 'eens', 'even vaak eens als oneens', 'oneens', 'even vaak eens als oneens', 4, 1, 'eens', 'even vaak eens als oneens', 'oneens'], ['2017/04/01 8:55:08 a.m. EET', 1, 'wh18', 'Vrouw', '70', 'MBO', 'Nee', 'Nee', 'Nee', 'Nee', 'Nee', 'Nee', 'Nooit', 'soms', 'soms', '(bijna) altijd', '(bijna) nooit', '(bijna) nooit', '(bijna) nooit', '(bijna) nooit', '(bijna) nooit', '(bijna) altijd', '(bijna) nooit', '(bijna) nooit', 'binnen een kwartier', 'nooit', '2-3 keer per nacht', '1 nacht per week', 'helemaal niet', 'redelijk goed', '(bijna) nooit', '(bijna) nooit', '(bijna) nooit', 'vaak', 'even vaak eens als oneens', 'oneens', 'even vaak eens als oneens', 'eens', 'oneens', 'eens', 'oneens', 'oneens', 'eens', 'oneens', 'helemaal oneens', 'helemaal oneens', 'even vaak eens als oneens', 'oneens', 'oneens', 'eens', 1, 1, 'eens', 'oneens', 'oneens'], ['2017/04/01 8:14:46 p.m. EET', 1, 'he46', 'Man', '44', 'WO', 'Nee', 'Ja', 'Nee', 'Nee', 'Ja', 'Nee', 'Niet van toepassing', 'vaak', 'regelmatig', 'soms', 'vaak', 'vaak', 'vaak', '(bijna) nooit', 'vaak', 'soms', 'soms', 'soms', 'binnen een half uur', '2-3 nachten per week', '1 keer per nacht', '1 nacht per week', 'een beetje', 'slecht', 'vaak', 'vaak', 'soms', 'vaak', 'even vaak eens als oneens', 'even vaak eens als oneens', 'eens', 'oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'even vaak eens als oneens', 'eens', 'even vaak eens als oneens', 2, 3, 'even vaak eens als oneens', 'even vaak eens als oneens', 'even vaak eens als oneens']] >>> print_columns("sc_9", demo_data) <BLANKLINE> sc_9 is: [1, 3, 2, 2, 1, 1, 3, 2, 4, 1, 2] """ ############################################################################################################# from preprocessor.legacy_functions.select_column import select_column from preprocessor.legacy_functions.replace_column import replace_column from preprocessor.legacy_functions.print_columns import print_columns # If target_column_headers_list is not a list but a string (i.e., target is a single column)... # Convert this string to a single list item so that the upcoming lines in the function can still take it as input. if type(target_column_headers_list) is str: # If parameter is string target_column_headers_list = [target_column_headers_list ] # Convert it to a list # Separate headers from data # headers_list = get_headers(dataset) # data = get_data(dataset) # Separate the dictionary to targets and replacements targets_list = [] replacements_list = [] for i, key in enumerate( target_replacement_dictionary ): # iterate over each item in the input dictionary targets_list.append(key) # add keys to targets list replacements_list.append(target_replacement_dictionary[key] ) # add values to replacements list # Extract values of the specified column in the given dataset by using a separate headers variable columns = {} for i, target_column_header in enumerate(target_column_headers_list): columns[target_column_header] = select_column(target_column_header, dataset) # and not 'data'; the headers in 'dataset' is necessary for the select_column() to work. # Search targets in each of the extracted columns, and when the target values are found, replace them # with their counterparts specific in the dictionary. for column in columns: for i, target in enumerate(targets_list): for j, value in enumerate(columns[column]): if value == target: columns[column][j] = replacements_list[i] # Replace columns within a copy of the provided dataset and return this dataset for col_name, col_values in columns.items(): replace_column( col_values, col_name, dataset) # and not 'data' but 'dataset', which includes headers return dataset # and not 'data' but 'dataset', which includes headers
def preview_data(dataset, depth=0): """ Transposes and prints data for easy previewing. :usage: function(dataset, depth_int) :param dataset: This is a database that contains headers. The database must have already been tokenized and to a variable. :param depth: The number of rows to print. (Rows will appear as lines next to column names in the transposed output). :returns: A line-by-line print of columns in a table. This is a transposed version of the table. :exception: 01: User likely entered integer, string, or boolean instead of dataset. :example: >>> my_dataset = [["id", "number"],["John", 0], ["John", 12], ["Someone else", 7]] >>> preview_data(my_dataset) Transposed Table (Columns in original data => Rows in output) Displaying up to 4 values per column. ============================================================= <BLANKLINE> id: 'John' 'John' 'Someone else' number: 0 12 7 >>> preview_data(my_dataset, 5) # displays all columns 5 rows deep Transposed Table (Columns in original data => Rows in output) Displaying up to 5 values per column. ============================================================= <BLANKLINE> id: 'John' 'John' 'Someone else' number: 0 12 7 """ ############################################################################################################# # Check if input is a dataset if type(dataset) is str or type(dataset) is int or type(dataset) is bool: raise ValueError("01: Argument 1 must be a dataset.") # Import regex module for later use in function import re # If the number of rows to be displayed is not specified, set it to display all rows. if depth == 0: depth = len(dataset) # Select the number of rows specified by user # selected_rows = dataset[0:depth] column_headers = dataset[0] # Store each column in a list item extracted_columns = [] for header in column_headers: extracted_columns.append(select_column(header, dataset)) # Title and subtitle print("Transposed Table (Columns in original data => Rows in output)") print("Displaying up to " + str(depth) + " values per column.") print("=============================================================\n") # Print selected columns line by line, and clear unnecessary characters for i, column in enumerate(extracted_columns): output = str(column_headers[i]) + ": " + str(column[0:depth]) output = re.sub("[\[\],]", "", output) print(output)