Skip to content

Commit

Permalink
#46 Team onebillion: Fix incorrect serial numbers in tablet tracker
Browse files Browse the repository at this point in the history
- Identify serial numbers found in tablet usage data, but not in tracker
  • Loading branch information
jo-xprize committed Nov 11, 2019
1 parent 9f43f6b commit d612c03
Show file tree
Hide file tree
Showing 2 changed files with 137 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
# Extracts serial numbers found in tablet usage data, but not in tablet tracker.
#
# Usage:
# cd tablet-tracker
# python3 extract_serial_numbers_not_found_in_tablet_tracker.py
#
# The resulting list of missing serial numbers will be stored in a file named `serial-numbers-not-found-in-tablet-tracker.csv`.

import csv
import logging

logging.basicConfig(format='%(levelname)s | %(asctime)s | %(message)s', level=logging.DEBUG)


# Extract serial numbers from tablet tracker, and add them to an array
serial_numbers_in_tablet_tracker = []
with open('tablet-tracker-ONEBILLION.csv') as in_file:
csv_data = csv.reader(in_file)
row_count = 0
for csv_row in csv_data:
row_count += 1
if row_count == 1:
# Skip header row
continue

logging.debug("csv_row: {}".format(csv_row))

# Iterate serial columns ("Serial #1" --> "Serial #8")
removal_count = 1
column_index = 2
while removal_count <= 8:
serial_number = csv_row[column_index]
logging.debug("Serial #{0}: {1}".format(removal_count, serial_number))

if (serial_number != "") and (serial_number not in serial_numbers_in_tablet_tracker):
serial_numbers_in_tablet_tracker.append(serial_number)

removal_count += 1
if removal_count == 2:
column_index += 1
else:
column_index += 2

logging.debug("serial_numbers_in_tablet_tracker: {}".format(serial_numbers_in_tablet_tracker))
logging.debug("len(serial_numbers_in_tablet_tracker): {}".format(len(serial_numbers_in_tablet_tracker)))


# Iterate the serial numbers in `tablets-uploading-data-ONEBILLION.csv`
with open('../tablets-uploading-data/tablets-uploading-data-ONEBILLION.csv') as in_file:
serial_numbers_not_found_in_tablet_tracker = []

csv_data = csv.reader(in_file)
row_count = 0
for csv_row in csv_data:
row_count += 1
if row_count == 1:
# Skip header row
continue

logging.debug("csv_row: {}".format(csv_row))

tablet_serials = csv_row[4]
logging.debug("tablet_serials: {}".format(tablet_serials))

# Convert string to array. E.g. "['5B12002947', '6111002083', '6116000839', '6116001775', '6116002363', '6130000141']"
tablets_serials_as_array = eval(tablet_serials)
logging.debug("tablets_serials_as_array: {}".format(tablets_serials_as_array))
logging.debug("len(tablets_serials_as_array): {}".format(len(tablets_serials_as_array)))

# Iterate each serial number and check if it can be found in the tablet tracker
for tablet_serial in tablets_serials_as_array:
logging.debug("tablet_serial: {}".format(tablet_serial))

if tablet_serial not in serial_numbers_in_tablet_tracker:
logging.warning("tablet_serial not found in tablet tracker: {}".format(tablet_serial))
if tablet_serial not in serial_numbers_not_found_in_tablet_tracker:
serial_numbers_not_found_in_tablet_tracker.append(tablet_serial)

logging.debug("serial_numbers_not_found_in_tablet_tracker: {}".format(serial_numbers_not_found_in_tablet_tracker))
logging.debug("len(serial_numbers_not_found_in_tablet_tracker): {}".format(len(serial_numbers_not_found_in_tablet_tracker)))

# Sort the serial numbers alphabetically
serial_numbers_not_found_in_tablet_tracker = sorted(serial_numbers_not_found_in_tablet_tracker)

# Write results to a CSV file
csv_filename = "serial-numbers-not-found-in-tablet-tracker.csv"
print("Writing list of missing tablet serials to the file \"" + csv_filename + "\"")
with open(csv_filename, mode='w') as csv_file:
csv_fieldnames = ['serial_number']
csv_writer = csv.writer(csv_file, csv_fieldnames)
csv_writer.writerow(csv_fieldnames)
for serial_number in serial_numbers_not_found_in_tablet_tracker:
serial_number_as_list = [serial_number]
csv_writer.writerow(serial_number_as_list)
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
serial_number
5A23002711
5A27000730
5A27000909
5A27001537
5A27001802
5A28000016
5A28000063
5A29001362
5B13001290
5B20002050
5B20002381
5C01000192
5C01000564
6109001517
6111000738
6111000969
6111001065
6111001347
6111001392
6111001615
6111001757
6111001864
6115000433
6115001597
6115002170
6116001145
6116001176
6116001228
6116001401
6116001600
6116001983
6116002691
6116002775
6118002480
6118002670
6118002767
6118002869
6118003278
6118003568
6126000234
6129001189
6130000027

0 comments on commit d612c03

Please sign in to comment.