EX 2.2
This commit is contained in:
parent
e80cfbc2f9
commit
e958141123
69
ex22.py
Normal file
69
ex22.py
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
from collections import Counter, defaultdict
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
|
from readrides import read_rides, row_to_dataclass
|
||||||
|
|
||||||
|
|
||||||
|
def count_routes(data):
|
||||||
|
return len({row.route for row in data})
|
||||||
|
|
||||||
|
|
||||||
|
def rider_count(data, date=None, route=None):
|
||||||
|
if date and not isinstance(date, tuple):
|
||||||
|
date = (date,)
|
||||||
|
if route and isinstance(route, tuple):
|
||||||
|
route = (route,)
|
||||||
|
|
||||||
|
def _filterfunc(row):
|
||||||
|
if (date and row.date not in date):
|
||||||
|
return False
|
||||||
|
if (route and row.route not in route):
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
return sum(row.rides for row in data if _filterfunc(row))
|
||||||
|
|
||||||
|
|
||||||
|
def rides_per_route(data):
|
||||||
|
ride_counts = Counter()
|
||||||
|
for row in data:
|
||||||
|
ride_counts[row.route] += row.rides
|
||||||
|
return dict(ride_counts)
|
||||||
|
|
||||||
|
|
||||||
|
def ten_year_increase(data):
|
||||||
|
ridership = defaultdict(Counter)
|
||||||
|
routes = defaultdict(set)
|
||||||
|
for row in data:
|
||||||
|
if '/2001' in row.date:
|
||||||
|
year = 2001
|
||||||
|
elif '/2011' in row.date:
|
||||||
|
year = 2011
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
ridership[year][row.route] += row.rides
|
||||||
|
routes[year].add(row.route)
|
||||||
|
increases = Counter()
|
||||||
|
for route in (routes[2001] & routes[2011]):
|
||||||
|
difference = ridership[2011][route] - ridership[2001][route]
|
||||||
|
if difference >= 0:
|
||||||
|
increases[route] = difference
|
||||||
|
return increases
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
filename = 'Data/ctabus.csv'
|
||||||
|
data = read_rides(filename, row_to_dataclass)
|
||||||
|
|
||||||
|
print("Number of bus routes: ", count_routes(data))
|
||||||
|
print("Ridership count, 22 bus on 2/2/2011:",
|
||||||
|
rider_count(data, date='02/02/2011', route='22'))
|
||||||
|
print("Total Ridership Per Route:")
|
||||||
|
print(" Route | Ridership")
|
||||||
|
print(" -------+-----------")
|
||||||
|
total_ridership = rides_per_route(data)
|
||||||
|
for route in sorted(total_ridership.keys()):
|
||||||
|
rides = total_ridership[route]
|
||||||
|
print(f" {route:>5} | {rides}")
|
||||||
|
print("Route ridership increases, 2001 - 2011")
|
||||||
|
pprint(ten_year_increase(data).most_common(5))
|
||||||
@ -1,10 +1,11 @@
|
|||||||
import csv
|
import csv
|
||||||
|
|
||||||
|
|
||||||
def read_portfolio(filename):
|
def read_portfolio(filename):
|
||||||
portfolio = []
|
portfolio = []
|
||||||
with open(filename) as f:
|
with open(filename) as f:
|
||||||
rows = csv.reader(f)
|
rows = csv.reader(f)
|
||||||
headers = next(rows)
|
_ = next(rows)
|
||||||
for row in rows:
|
for row in rows:
|
||||||
record = {
|
record = {
|
||||||
'name': row[0],
|
'name': row[0],
|
||||||
@ -13,4 +14,3 @@ def read_portfolio(filename):
|
|||||||
}
|
}
|
||||||
portfolio.append(record)
|
portfolio.append(record)
|
||||||
return portfolio
|
return portfolio
|
||||||
|
|
||||||
|
|||||||
@ -5,6 +5,7 @@ from dataclasses import dataclass
|
|||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class DataClassRow:
|
class DataClassRow:
|
||||||
|
__slots__ = ['route', 'date', 'daytype', 'rides']
|
||||||
route: str
|
route: str
|
||||||
date: str
|
date: str
|
||||||
daytype: str
|
daytype: str
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user