Advertisement
Guest User

Untitled

a guest
Dec 10th, 2016
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.66 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. Given:
  5. - CSV file with path: <INPUT_DIR>/heartRate-<YYYYMMDD>.csv
  6. - First line of CSV file: <COLUMN_TIME>,<COLUMN_HEARTRATE>
  7. - Rest of the lines: <Timestamp with format YYYY-MM-DD HH:mm:ss>,<Beats per minute>
  8.  
  9. Then:
  10. - Create a new CSV file in: <OUTPUT_DIR>/heartRate-<YYYYMMDD>.csv
  11. - First line of CSV file: <COLUMN_TIME>,<COLUMN_HEARTRATE>,<COLUMN_WORKINGOUT>
  12. - Rest of the lines: <Timestamp with format YYYY-MM-DD HH:mm:ss>,<Beats per minute>,<True or False>
  13.  
  14. The new column in the new CSV file indicates if, at each moment, the person
  15. which heart rate is recorded in this file, was working out or not.
  16.  
  17. The values for the new column will be set to True between
  18. <WORKOUT_INIT_HOUR>:<WORKOUT_INIT_MIN>:<WORKOUT_INIT_SEC> and
  19. <WORKOUT_END_HOUR>:<WORKOUT_END_MIN>:<WORKOUT_END_SEC>.
  20.  
  21. TIP: To set all values to False, set
  22. <WORKOUT_INIT_HOUR>:<WORKOUT_INIT_MIN>:<WORKOUT_INIT_SEC> to 02:00:00 and
  23. <WORKOUT_END_HOUR>:<WORKOUT_END_MIN>:<WORKOUT_END_SEC> to 01:00:00.
  24.  
  25. NOTICE: This code plots 2 graphs, the first one based on the data in the input
  26. file and the second one equal to the first but coloring each dot with a
  27. different color depending on the value in the 3 column.
  28.  
  29. TIP: Execute the first half of the script to find the range where the person
  30. if exercising, then update
  31. <WORKOUT_INIT_HOUR>:<WORKOUT_INIT_MIN>:<WORKOUT_INIT_SEC> and
  32. <WORKOUT_END_HOUR>:<WORKOUT_END_MIN>:<WORKOUT_END_SEC> and execute all the
  33. code.
  34. """
  35.  
  36. # Imports
  37. from datetime import datetime as dt
  38. from os.path import join
  39.  
  40. import matplotlib.pyplot as plt
  41. import pandas as pd
  42.  
  43. # Constants
  44. COLUMN_TIME = 'Time'
  45. COLUMN_HEARTRATE = 'BPM'
  46. COLUMN_WORKINGOUT = 'WorkingOut'
  47.  
  48. YEAR = 2016
  49. MONTH = 12
  50. DAY = 10
  51.  
  52. WORKOUT_INIT_HOUR = 2
  53. WORKOUT_INIT_MIN = 0
  54. WORKOUT_INIT_SEC = 0
  55.  
  56. WORKOUT_END_HOUR = 1
  57. WORKOUT_END_MIN = 0
  58. WORKOUT_END_SEC = 0
  59.  
  60. DATE_FORMAT = '%Y-%m-%d %H:%M:%S'
  61.  
  62. INPUT_DIR = './Raw'
  63. OUTPUT_DIR = './Processed'
  64.  
  65. FILENAME = 'heartRate-%d%02d%02d.csv' % (YEAR, MONTH, DAY)
  66.  
  67. # Read dataset
  68. input_file = join(INPUT_DIR, FILENAME)
  69.  
  70. dataset = pd.read_csv(input_file,
  71. parse_dates = [COLUMN_TIME],
  72. date_parser = lambda x: dt.strptime(x, DATE_FORMAT))
  73. dataset.dtypes
  74.  
  75. # Plot dataset
  76. plt.plot(dataset[COLUMN_TIME].values,
  77. dataset[COLUMN_HEARTRATE].values,
  78. color = 'black')
  79. plt.scatter(dataset[COLUMN_TIME].values,
  80. dataset[COLUMN_HEARTRATE].values,
  81. color = 'black')
  82. plt.title(COLUMN_TIME + ' vs ' + COLUMN_HEARTRATE + ' (' + FILENAME + ')')
  83. plt.xlabel(COLUMN_TIME)
  84. plt.ylabel(COLUMN_HEARTRATE)
  85. plt.show()
  86.  
  87.  
  88.  
  89.  
  90.  
  91. # Label dataset
  92. init_time = dt(YEAR, MONTH, DAY,
  93. WORKOUT_INIT_HOUR, WORKOUT_INIT_MIN, WORKOUT_INIT_SEC)
  94. end_time = dt(YEAR, MONTH, DAY,
  95. WORKOUT_END_HOUR, WORKOUT_END_MIN, WORKOUT_END_SEC)
  96. dataset[COLUMN_WORKINGOUT] = ((dataset[COLUMN_TIME] > init_time) &
  97. (dataset[COLUMN_TIME] < end_time))
  98.  
  99. # Plot dataset
  100. plt.plot(dataset[COLUMN_TIME].values,
  101. dataset[COLUMN_HEARTRATE].values,
  102. color = 'black')
  103. plt.scatter(dataset[dataset[COLUMN_WORKINGOUT] == False][COLUMN_TIME].values,
  104. dataset[dataset[COLUMN_WORKINGOUT] == False][COLUMN_HEARTRATE].values,
  105. color = 'blue')
  106. plt.scatter(dataset[dataset[COLUMN_WORKINGOUT] == True][COLUMN_TIME].values,
  107. dataset[dataset[COLUMN_WORKINGOUT] == True][COLUMN_HEARTRATE].values,
  108. color = 'red')
  109. plt.title(COLUMN_TIME + ' vs ' + COLUMN_HEARTRATE + ' (' + FILENAME + ')')
  110. plt.xlabel(COLUMN_TIME)
  111. plt.ylabel(COLUMN_HEARTRATE)
  112. plt.show()
  113.  
  114. # Export dataset
  115. output_file = join(OUTPUT_DIR, FILENAME)
  116.  
  117. dataset.to_csv(output_file,
  118. index = False,
  119. date_format = DATE_FORMAT)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement