티스토리 뷰
승하차기록파일
1. 년월, 역이름 으로 필터
2. 필터된 승하차 총합을 구함
3. plotly 설치후 그래프로 표시
def read_file(path):
with open(path, "r") as f:
return f.readlines()
class Log:
def __init__(self, date=None, line=None, station=None, in_outs=None):
self.date = date
self.line = line
self.station = station
self.in_outs = in_outs
def __str__(self):
return f"{self.__dict__}"
@classmethod
def line_to_list(cls, line):
line = line.replace('"', "").replace("\n", "")
line = line.split(",")
return line
@classmethod
def __get_times(cls, times):
in_outs = {}
time_stamp = 4
for i, in_out in enumerate(times):
if i + 1 < len(times):
key = f"{'0'+str(time_stamp) if time_stamp < 10 else time_stamp}" \
f"{'0'+str(time_stamp+1) if time_stamp+1 < 10 else time_stamp+1}"
in_outs[key] = (times[i], times[i+1])
time_stamp += 1
return in_outs
@classmethod
def line_to_ins(cls, line):
line = cls.line_to_list(line)
params = list()
params.append(line[0])
params.append(line[1])
params.append(line[2])
params.append(cls.__get_times(line[3:]))
return params
class LogManager:
def __init__(self, path):
self.lines = read_file(path)
self.logs = list()
def import_logs(self, start, stop):
for line in self.lines[start:] if stop == -1 else self.lines[start:stop]:
log = Log(*Log.line_to_ins(line))
self.__add(log)
def __add(self, item):
self.logs.append(item)
def get_logs(self):
return self.logs
@classmethod
def __filter_station(cls, logs, station):
return list(filter(lambda log: log.station == station, logs))
@classmethod
def __filter_date(cls, logs, date):
return list(filter(lambda log: log.date == date, logs))
@classmethod
def __get_summary_in_outs(cls, logs):
in_outs = [0, 0]
for log in logs:
for in_val, out_val in log.in_outs.values():
in_outs[0] += int(in_val)
in_outs[1] += int(out_val)
return in_outs
def __get_in_outs_from_date_station(self, station, date):
logs = LogManager.__filter_station(self.logs, station)
logs = LogManager.__filter_date(logs, date)
for log in logs:
print(log)
return LogManager.__get_summary_in_outs(logs)
def draw_in_outs_from_date_station(self, station, date):
in_outs = self.__get_in_outs_from_date_station(station=station, date=date)
print(in_outs)
import plotly.express as px
df = px.data.tips()
fig = px.histogram(df, title=f"station={station} date={date}", x=["in", "out"], y=in_outs)
fig.show()
if __name__ == '__main__':
log_manager = LogManager("out/metro.csv")
log_manager.import_logs(1, -1)
print("파일 임포트 완료되었습니다.")
while True:
cmd = input("[역이름] [년월] 입력하세요\n").split(" ")
if len(cmd) == 2:
log_manager.draw_in_outs_from_date_station(*cmd)
else:
print("잘못된 명령어 입니다.")
'python lecture > project' 카테고리의 다른 글
[Python] Pillow 영상처리 이미지 회전 (0) | 2020.10.14 |
---|---|
[python] 은행프로그램 (0) | 2020.07.02 |
[python] n 진수 바꾸기 (0) | 2020.06.03 |
[python] 시간변환 (0) | 2020.05.27 |
[python] 스테가노그래피 (0) | 2020.05.25 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- pycrypto
- 모바일 스킨 적용
- 파이썬 독학
- 이미지 비교
- 플러스친구 자동응답
- admin.py
- 파이썬 강좌
- virtualenv
- 모바일 테마 적용
- Tistory
- 장고 카톡 자동응답
- 파이썬 입문
- 문과 코딩
- 장고 플러스친구 자동응답
- PuTTYGen
- django
- Python
- 파이썬 프로그래밍
- django chatbot
- 문서 비교
- 엑셀 비교
- gitignore
- 파이썬
- gitlab
- 면접답변
- chatbot
- GIT
- wsgi
- 면접정답
- 장고
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함