GithubHelp home page GithubHelp logo

mon2tor's Introduction

Contributor

김도현 원혁주 김을중
@dozzzang @won-hj, @1hjwon @KimEulJoong
컴퓨터공학과2학년 컴퓨터공학과3학년 물리학과4학년
[email protected] [email protected], [email protected] [email protected]

프로젝트 소개

2023-1 오픈소스기초프로젝트 강의 프로젝트입니다. '예측'이라는 키워드에 저희가 생각한 주제는 한국의 저출산과 고령화 현상입니다. 한국의 저출산과 고령화 현상은 가속화 되고 있지만, 대중들의 인식은 그 속도를 따라가지 못하는 것에 아쉬움을 느껴 사람들에게 미래의 인구 변화를 체감시켜주고자 웹이 만들어졌습니다. MON2TOR에서는 회원기능과 미래의 인구구조 변화에 대해 그래프를 제공하고, 사용자의 나이에 따른 도움 될 정보를 기사 주소를 통해 제공해줍니다.

설치 방법

$ git clone https://github.com/won-hj/mon2tor.git
$ cd ./MON2TOR
pip install bokeh==2.4.2
pip install flask==2.2.2
pip install pandas==1.5.3
pip install prophet==1.1.2
pip install Flask-SQLAlchemy==3.0.3
pip install Flask-WTF==1.1.1
pip install request==2.28.1

충돌 발생 시

pip uninstall holidays
pip install holidays==0.10.5.2

의존성

[Language]
python>=3.8.1
[Web Framework]
Flask==2.2.2
[Database]
Flask-SQLAlchemy==3.0.3
[Form Handling]
Flask-WTF==1.1.1
WTForms==3.0.1
[Data Visualization]
bokeh==2.4.2
[Data Analysis]
prophet==1.1.2
pandas==1.5.3
[HTTP Requests]
requests==2.28.1

사용 방법

app.py로 이동하여 $ python app.py
개발서버로 접속
웹 페이지 상단 우측을 이용하여 회원가입/로그인/로그아웃 가능
나이를 입력하면 예측에 대한 링크로 이동가능 아래 나오는 사진을 클릭하면 과거에 대한 링크로 이동가능

주요 기능

⭐ 사용자의 나이를 입력

  • 사용자의 나이에 맞는 인구구조와 관련된 키워드의 기사 링크 제공
  • 미래 인구구조에 대한 상호작용 그래프 제공

⭐️ 과거와 현재의 인구구조 그래프

  • 미래 뿐만 아니라 과거와 현재의 인구구조 상호작용 그래프 제공

⭐️ 회원 기능

  • 회원가입/로그인 기능을 제공하며 (인구구조 예측 그래프를 보고 각자의 의견을 공유할 수 있는 커뮤니티 기능 제공 미구현)

License

MIT License

Copyright (c) 2023 MON2TOR

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

아키텍쳐

디렉토리 구조

|   .gitignore
|   activate
|   app.py : 개발 서버
|   db.sqlite : 회원 정보 DB
|   form.py : 비밀번호 유효성 검사
|   Models.py : DB구성,비밀번호해싱
|   README.md
|   LICENSE
|   dave_server.log
|
+---config : 서버에 넘길 파일과 데이터베이스 관련 폴더
|   |   config.ini
|   |
|   +---birth_death
|   |   +---over
|   |   |       2022.csv
|   |   |       2027.csv
|   |   |       2032.csv
|   |   |       2037.csv
|   |   |
|   |   \---under
|   |           2013.csv
|   |           2014.csv
|   |           2015.csv
|   |           2016.csv
|   |           2017.csv
|   |           2018.csv
|   |           2019.csv
|   |           2020.csv
|   |           2021.csv
|   |           2022.csv
|   |           2023.csv
|   |
|   +---prediction_graph : 서버에 넘길 미래 예측 그래프
|   |   +---birth_death
|   |   |   |   bdp20232027.py
|   |   |   |   bdp20282032.py
|   |   |   |   bdp20332037.py
|   |   |   |
|   |   |   \---__pycache__
|   |   |           bdp20232027.cpython-310.pyc
|   |   |           bdp20282032.cpython-310.pyc
|   |   |           bdp20332037.cpython-310.pyc
|   |   |
|   |   \---work_nonwork
|   |       |   wnwp20232027.py
|   |       |   wnwp20282032.py
|   |       |   wnwp20332037.py
|   |       |
|   |       \---__pycache__
|   |               wnwp20232027.cpython-310.pyc
|   |               wnwp20282032.cpython-310.pyc
|   |               wnwp20332037.cpython-310.pyc
|   |
|   \---work_nonwork
|       +---over
|       |       2022.csv
|       |       2027.csv
|       |       2032.csv
|       |       2037.csv
|       |
|       \---under
|               20132022.csv
|
+---crawling : 네이버 API를 이용한 크롤링 폴더
|   |   naver_crawling.py
|   |
|   \---__pycache__
|           naver_crawling.cpython-310.pyc
|
+---Data_pipeline : 예측에 들어가는 데이터 파이프라인화
|       2023-2027 csv 추출.py
|       2023-2027_csv추출,병합.py
|       2023-2027_workcsv추출,병합.py
|       2028-2032_csv추출,병합.py
|       2028-2032_workcsv추출,병합.py
|       2033-2037_csv추출,병합.py
|       2033-2037_workcsv추출,병합.py
|
+---past_graph : 과거 그래프 시각화
|   |   2013data_graph.py
|   |   2014data_graph.py
|   |   2015data_graph.py
|   |   2016data_graph.py
|   |   2017data_graph.py
|   |   2018data_graph.py
|   |   2019data_graph.py
|   |   2020data_graph.py
|   |   2021data_graph.py
|   |   2022data_graph.py
|   |   past_work_nonwork_graph.py
|   |
|   \---__pycache__
|           past_work_nonwork_graph.cpython-310.pyc
|
+---prediction_graph : 미래 그래프 
|   +---birth&death
|   |       2023-2027_graph.py
|   |       2028-2032_graph.py
|   |       2033-2037_graph.py
|   |
|   \---work&nonwork
|           2023-2027_graph.py
|           2028-2032_graph.py
|           2033-2037_graph.py
|
+---src
|   |   FilePath.py
|   |   PastGraph.py
|   |   PrintGraph.py
|   |   __init__.py
|   |
|   +---past_graph
|   |       2013data_graph.py
|   |       2014data_graph.py
|   |       2015data_graph.py
|   |       2016data_graph.py
|   |       2017data_graph.py
|   |       2018data_graph.py
|   |       2019data_graph.py
|   |       2020data_graph.py
|   |       2021data_graph.py
|   |       2022data_graph.py
|   |       __init__.py
|   |
|   +---transition
|   |       birthdeath.py
|   |       worknonwork.py
|   |       __init__.py
|   |
|   \---__pycache__
|           PrintGraph.cpython-310.pyc
|           __init__.cpython-310.pyc
|
+---static : JS,CSS,IMAGE
|   +---assets
|   |   \---demo
|   |           chart-area-demo.js
|   |           chart-bar-demo.js
|   |           chart-pie-demo.js
|   |           datatables-demo.js
|   |
|   +---css : 부트스트랩 css
|   |       styles.css
|   |
|   +---image
|   |       link1.PNG
|   |       link2.PNG
|   |       logo.png
|   |       LOGO2.PNG
|   |
|   \---js
|           bokeh-tables.min.js
|           bokeh-widgets.min.js
|           bokeh.min.js
|           js_to_server.py : bokeh를 외부에서 받아올 수 없어 내부에서 받아오기 시도(시도 자체는 성공했지만 렌더링에 실패)
|           scripts.js : index와 나이를 넘기는데 쓰이는 js파일
|
+---templates : 화면 구성
|       demo.html
|       example.html
|       index.html : 메인화면
|       login.html : 로그인화면
|       past_graph1.html : 과거 그래프 화면 좌측
|       past_graph2.html : 과거 그래프 화면 우측
|       prediction.html : 미래 그래프 화면 
|       register.html : 회원가입 화면
|
+---tool : 그래프 생성에 필요한 data
|   +---birth&death_data
|   |       -2022data.csv
|   |       -2027data.csv
|   |       -2032data.csv
|   |       -2036data.csv
|   |       -2037data.csv
|   |       2013data.csv
|   |       2014data.csv
|   |       2015data.csv
|   |       2016data.csv
|   |       2017data.csv
|   |       2018data.csv
|   |       2019data.csv
|   |       2020data.csv
|   |       2021data.csv
|   |       2022data.csv
|   |
|   \---work&nonwork_data
|           -2022_data.csv
|           -2027_data.csv
|           -2032_data.csv
|           -2036_data.csv
|           -2037_data.csv
|           2013-2022data.csv

mon2tor's People

Contributors

dozzzang avatar 1hjwon avatar kimeuljoong avatar won-hj avatar

Watchers

 avatar

Forkers

dozzzang

mon2tor's Issues

해야할 것

  • 경로명 및 파일명 설명 듣고 변경

  • 화면 나오는대로 적용시킬 것들

  • 추후 궁금한점 바로바로 물어볼게요!

웹 화면은 모두 사용하는건가요?

커밋 메시지 보니까 아직 미완료라고 되어있는데 웹 디렉토리 아래에 있는 html 전부 사용하는게 맞나요?

그리고 template에 html, static에 js나 css같은걸 넣어야하는데 구조 변경시 문제 없죠?

아직 완성이 안되었고 다 사용한다기엔 인덱스페이지만 있어도 될 것 같은 느낌이라 어떻게 해야할지 모르겠어요!!

✅주제 구체화 하기

주제를 나타낼 방식을 적어주세요.

ex) 웹에 어떤 기능을 넣으면 좋을 지

어떤 언어를 사용하면 좋을 지 적어주세요.

ex)

  • Python
  • (HTML)/CSS

ETC

ex) 기타 하고 싶은 말이 있다면 적어주세요. ~~기능을 ~~언어로 구현해보면 어떨까요?

환경변수같은거 만들겠습니다

feature_envset 이라고 하겠습니다
수업시간에 했던 그 환경변수들 중 얼마나 만들면 좋을지 모르겠지만
pycache랑 경로명이랑 보고 더 추가할 것 같습니다

혹시 생성한 브랜치를 공유 한다면 push 전용 브랜치를 만드는건 어떨까요?

뭐 하나 할 때마다 브랜치를 하나하나 만들어서인지 몇 개 하지도 않았는데도
이게 맞는건지 헷갈립니다...

push 용으로 큰 브랜치를 만들고 그 push브랜치에서 작업할 브랜치를 따로 생성하여 관리하는건 어떨까 싶습니다
이후 작업이 완료되면 push를 위한 브랜치에 push를 하며 통합시키는 것입니다.
push에서 메인으로는 굵직한 것을 마무리하면 그 때 push하는게 더 좋을 것 같아요..,,,

전달이 좀 이상하게 되고있는데 다들 무슨 의미인지 잘 알아들으셨다고 믿고
혹시라도 무슨 말인지 모르겠다면 말해주세용.........

reset 소요

image

Netword 그래프를 보시면 갑자기 main으로 커밋이 뻗어나가는 것을 오늘 오전에야 확인했습니다.
git log를 들어다보며 원인을 분석해보니 제가 로컬 main 브랜치에 remote main을 pull받고, 또 로컬 브랜치에 remote main을 pull 받아 처음 pull받은 main에서 작업한 것으로 인지된 것 같습니다.

따라서 이 문제를 해결하기 위해 로컬 main 브랜치에 remote main을 merge받은 시점 이전으로 revert해야할 것 같은데, 이미 오늘 새벽에 제 브랜치를 pull받으셨더군요. 만약 제가 revert를 하게 된다면 혁주님이 merge받은 시점과 차이가 날 수 있을 것 같은데 이 경우 혁주님의 merge받은 시점도 revert해야할까요?

그래프 UI 문제와 예측 시점 논의

image
형광펜 칠한 부분이 마우스를 갖다대면 정보를 제공하는 hover 기능 부분인데 아무리해도 구분이 안되네요 plot자체를 구분시켜야할 것 같은데 위의 hover을 클릭해서 비활성화 시키면 "사망자 수"라는 툴팁만 나오고 아래 hover을 클릭해서 비활성화 시키면 "출생아 수"라는 툴팁만 나옵니다. 어쨌거나 변경할 수 있는 기능자체는 있기 때문에 냅두려고 하는데 어떠신가요?

추가로 현재 2023-2027 그래프를 생성했는데
이후 2027-2031 2031-2035 2035-2039 2039-2043 그래프 까지만 생성해보고자 합니다. 시기는 적절한 듯 한가요?

csv 경로명 및 작업 할 내용 확인 과 추가 변경사항 요청

이슈를 본 결과

  • 셀렉트박스로부터의 입력값에 따라 13~22년도에 해당하는 출생아수/사망자수, 생산인구, 비생산인구로 각각 표현
  • 텍스트 박스로부터 입력받은 값에 따라 22년도부터 예측하는 그래프 표현

인 것으로 표현하면 완성인 것 같습니다

이것이 맞다면 두 번째에서 표현해주고 싶은 것이 무엇인지 제대로 나와있진 않은 것 같습니다.
파일을 확인한 결과 출/사와 생/비생도 예측할 데이터가 있습니다.
그렇다면 실질적으로 예측을 하는 화면은 어떻게 표현해낼 것인지 궁금합니다.

  • 22년도까지의 내용과 같은 방법으로 한다면 단순히 각 그래프를 나열하는 방식만 생각하면 되는 문제일 것입니다
  • 아니라면 어떻게 표현할 것인지 조금만 더 방향성을 잡아야 할 것 같습니다

또한 제가 했던 것은 13년도부터 22년도까지의 그래프를 각각 한꺼번에 나타내주었던 것입니다
근데 이렇게 한꺼번에 전부 띄워주는 것이 아니라 특정 기준에 따른 출력을 원하는 것이기 때문에 따로 출력하는 것으로 표현하면 될 것입니다.
여기서 제가 요구하고 싶은 것이 있는데 여러가지 파일들을 접근하는데 너무 따로따로 되어있는데다가 모듈로써 사용하기에 불편하기 때문에 구조를 조금 바꾸고 싶습니다.
클래스를 사용하여 13년도부터 22년도까지 한꺼번에 관리할 수 있는 객체를 만드는 식으로 바꾸고 싶습니다

경로명의 경우 birth_death와 work_nonwork로 나누고 데이터는 년도로만(2013, 2014 등) 사용하며,
한번에 관리 할 모듈의 이름은 transition과 prediction으로 생각하고 있습니다

적절한지 의견 주세요!

새로운 이슈

커밋하기 전까지 그래프 여러개(2013 ~ 2022) 화면에 띄웠었었는데
커밋하고 푸쉬하고나니 있지도 않은 2013data.csv가 없다며 오류가 생겼습니다

알고보니 tool 디렉토리에 first_data와 second_data가 추가되어 생긴 문제인데
이름 통일하던지 지우던지 바꾸던지 해야할 것 같습니다

두개 빼고 실행해보면 가로로(옵션 설정 안했으니까) 주르륵 나옵니다

확인 한번 해보세요

과거 10개년 데이터그래프 생성했습니다.

image
그래프 형태는 위 사진과 같이 hbar이고, 각 bar에 마우스를 갖다대면 어떤 type인지 value의 값은 무엇인지 보여주는 기능이 있습니다.
또 확대나 그래프를 png파일로 저장하는 부가적인 기능들이 존재합니다.
js기반 html문서로 .py코드를 변환할 수 있기 때문에 flask를 이용하여 다른 웹페이지에 삽입할 수 있다고 합니다. 자세한 방법에 관해서는 더 찾아볼 것입니다.
코드를 푸쉬해보려는데 고민이 있습니다.
csv파일이 제 로컬에 있는 것이라 깃에 올린다면 파일경로를 찾지 못할 것인데, csv파일도 모두 푸쉬 해야할 것 같습니다.
코드를 오늘 내에 푸쉬할 것이고 그래프를 웹페이지로 열어보고 싶으시다면 bokeh api를 설치하시면 열어보실 수 있습니다.
피드백은 pull requests에서 받겠습니다.

향후 개발 목표 및 데이터 이슈

6월 10일까지 commit이 가능합니다. 시간이 정말 없습니다. 제 희망사항은 6월 6일까지 마치는 것입니다.

저희가 해야할 일은

  1. 웹 마무리(UI는 흰 화면이더라도 렌더링이 제일 중요)
  2. 나이에 맞는 예측 정보 제공 + 크롤링으로 정보 제공

크게 2가지 인 것 같습니다.
그리고 data를 저는 csv로 관리를 하고 있는데, 하다 보니 굉장히 비효율적인 것 같습니다. 이전 수업시간에 배운 flask sqlalchemy를 사용하면 mySQL을 사용하는 것보다 편하게 관리할 수 있을 것 같긴한데 이는 우선사항이 아니라 위 2가지가 완료되고 나면 고려해보겠습니다.

가상환경 복사

전엔 생각을 잘못해서 심볼릭링크로 만들었는데
지금은 삭제하고 다시 복사했기 때문에
따로 feature_installFlask 브랜치에서 수행하고 바로 push 했습니다.

확인하고 적용시켜주세요
source activate하는 그거입니다.

향후 목표 및 이슈

지금 전에 했던 부분에서 문제가 있던걸 어떻게 해결해야할지 고민중이긴한데
빠른 시일 안으로 해결이 안된다면 더더더더 간단히 하는 쪽으로 하겠습니다.

그리고 지금 웹쪽을 어떻게 사용하면 좋을지 아직 모르는 상황이라 뭔갈 할 수 있지 못할거같고
그래프 표현하는거까지는 임의로여도 해보겠습니다...

브랜치 슬슬 바꿔야할거같은데 feature_drawgraph로 할거같아요

또 지금 또 문제가 뭘 하겠다고 생각을 해놓고 다른걸 보면 잊어버려서 조금 문제인 상황인데
일단 계속 생각하고 적어가면서 체크해야겠습니다
최대한 빨리 잘 해보겠습니다

지금 문제점

커밋 좀 만지다가 뭔가 이상한 느낌이 들긴한데
그래도 구조만 잘 만들어지면 금방 복구할 수 있을 것 같다는 생각은 듭니다

근데 지금 tool 있던 그거랑 config 바꾸는 그거랑 지금 문제가 좀 있습니다
뭐만하면 계속 merge 어쩌고 하면서 문제생겨서
이걸 어떻게 하면 완전히 안뜨게 하는지도 문제고

아까는 문제좀 계속 있어서 나중에 처리한다 하고 풀리퀘스트부터 했는데(어차피 또 pr하면 되는거니까)
경로쪽 문제가 제가 말한대로 구분이 안됐더라구요

2013~2022 랑 22273236이랑 구분하라고했었는데 전달이 잘 안됐나봐요
이부분 제가 env_set에서 수정 해놓고 메인에 pr할게요

-특수문자 제거
-파일 년도기준 구분
이 될 것 같습니다

오해했던점 + 추가 질문사항

5월동안 아무것도 안하진 않았는데 알고보니 저번주랑 이번주 사이 도현씨 커밋한것이 너무너무 많았어서
날짜를 지난달로 착각했네요.......

혹시 커밋수 점이 하나 찍혀있으면 안에 파일 여러개여도 하나로 취급되는지 혹시 아시는 분 계시면 ...

풀리퀘 받아주세요

다른 브랜치 작업해야하는데 pull받아야합니다. 풀리퀘 받아주시길 바랍니다.

예측 재개선 필요

나름 보수적으로 예측을 했다고 생각했음에도 33년에 출생아 수가 -에 달하였습니다. 이대로 예측을 끝내도 좋겠지만 더 개선할 여지가 있어 예측을 재개선 해보겠습니다.

revert 소요

image
출생아수 사망자수 향후 5년 예측하는 그래프 초기라는 메시지의 커밋에 분명히 코드를 넣고 commit했다고 생각했는데
제가 코드를 삽입하지 않고 commit한 것 같습니다.
reset을 고려해보았으나 git의 존재의의는 형상관리이고 이에 부합하기 위해 삭제이력도 커밋으로 남기는 것이 좋다 생각하여 revert 한 후 다시 코드 올리겠습니다.

bootstrap_test branch에 커밋한 것들에 대한 질문

bootstrap_test branch에 있는 커밋 내역들을 모두 확인해보았습니다.
부트스트랩을 사용하여 웹 사이트를 구현하는 것은 인지하였으나, 필요한 것만 끌어다 써야할 것 같은데 저는 도저히 엄두가 나질 않네요
코드가 주석이 없이 너무 길고 어떻게 수정해야할 지 감이 안잡혀서요.
종료까지 2주 남은 시점에서 을중씨가 수정할 수 있다면 방향을 제시해주면 저도 같이 노력해보겠습니다.
만약 그것이 아니라면, 저 코드를 수정하는 것보다 새로 만드는 것이 더 나을 것 같습니다.
다들 어떻게 생각하는 지 궁금합니다.

네이버 기사 크롤링

네이버 기사 크롤링 시작하겠습니다.
나이를 입력했을 때 그에 대한 예측 그래프가 나올 것이고
아래에 저출산&고령화와 관련된 키워드를 설정하여 네이버 기사를 크롤링하여 정보를 제공할 예정입니다.
네이버 api를 이용할 예정입니다.

회원제(로그인,커뮤니티) 관련 작업

로그인 UI는 의중씨가 만들어 준 것으로 확인했습니다.
로그인 페이지 / 회원가입을 하는 페이지 구현 / 사용자들의 정보 저장 / 가능하다면 커뮤니티까지
만들어 보도록 하겠습니다.
이 작업을 마무리로 두 분 작업이 완료되면 모두 취합하는 과정만 거치면 마무리 될 것 같습니다.
예측 개선을 해보고 싶었는데 시도해볼 수는 있으나 지금 웹에 렌더링하는 과정이 있어서 함부로 방식을 아예 바꿔버리면 렌더링하는 코드도 다시 짜야하기 때문에 예측 개선은 포기하겠습니다.

모든 과거&예측 그래프들 생성 완료 PR확인바랍니다.

feature_create_past_graph + feature_recreate_past_graph

  1. 과거~현재의 출생아 수&사망자 수 각각을 보여주는 그래프
  2. 생산인구와 고령인구의 과거~현재의 추이를 보여주는 그래프

feature_create_prediction_grpah + feature_recreate_prediction_graph
4. 출생아 수&사망자 수를 5년 단위로 예측하여 2036년까지 예측한 그래프
5. 생산인구와 고령인구를 5년 단위롤 예측하여 2036년까지 예측한 그래프

feature_create_continuous_data
6. 추후 DB화(재사용 용이)를 위해 csv파일로 모든 기록을 남김

경로나 구분에 있어서 개선 여지가 있다면 pr에 남겨주시기 바랍니다.

폴더를 만들어야 하는 경우

제가 10개년 csv파일을 merge한 후에 폴더를 만들어서 파일을 옮겼는데 결국 이는 main에서 하게 되는 일이어서 지양해야할 것 같습니다.
폴더를 만들 소요가 있는 경우에도.. local에서 폴더를 만들어 넣고 PR해야하나봐요.
image

bokeh api를 이용하여 html로 그림 그리는거 되시는분 계신가요??

https://frhyme.github.io/python-libs/python_bokeh_tutorial/#html-%ED%8E%98%EC%9D%B4%EC%A7%80%EB%A1%9C-%EB%BD%91%EC%95%84%EB%82%B4%EA%B8%B0

올려주셨던 예제랑 사용자설명서 보면서 예제를 따라하고 있는 상황이었는데

블로그 기준으로 file_html()로는 그림이 출력되어도 json으로 json.dumps()나 render_template()하는건 그림이 전혀 그려지지 않아요...

제가 생각해본 것 중에서 무슨 라이브러리를 설치하지 않았거나 버전이 맞지 않는 것이 아닌가 추측하고는 있는데

뭘 어떻게 했어야하는지 잘 모르겠네요...

찾아봐도 vs코드 기준으로는 안나오고 주피터로만 나오는 것 같아서 무작정 따라하는 것도 조금 안맞는 느낌이기도 하고

암튼 지금 진전이 전혀 안되고 있는 상황입니다......

그림 예제 후딱 실행해보고 csv 파일로 각 년도 보여주는걸 응용해보려 했는데 초장부터 잘 안되네요...

혼자로는 왜 그림이 안그려지고 json형식 자체로만 나오는지 모르겠습니다...
라이브러리 적용이 안된다...라기엔 예시 그대로 복사했고 간단하게 표현해주는 것인데도 모두 그림이 그려지지 않기 때문에 그 외로 추가적인 설치과정이 생략되었나 라는 것 밖에 생각이 안납니다

도움이 필요합니다....

생산 가능 인구(15세-64세)와 생산 불가능 인구(65세 이상) 예측에 대하여

본래 출생아 수와 사망자 수 예측 데이터를 이용하여 그 출생아 수가 15년이 지났을 때 15세가 될 것이고
사망자 수와 종합적으로 엮어 데이터를 예측하려고 했었는데, 아무리 해도 안되네요.
우선, prophet으로 예측한 후 우선순위가 급한 것들부터 처리하고 재개선 시도 해보겠습니다.
예측이 주제인만큼 예측의 정확성을 올려보고 싶은데 쉽지 않네요.

이슈테스트

123

발표 대충 정리

주제
어마그 : 영화추천 선호대응 등 차별적으로는 기존 전체 상ㅇ자가 했던 평점이나 평론가들 보여주긴 하는데 연령이나 성별 들 유사 집단 에서 추출 해서 나랑 영활 취향이 비슷한 사람들과 비교 혹은 자기가 시나리오 써서 기존 ㄷ[이터와 비교 챗gpt활용 대화형으로 한다

여장신 : 사람의 몸상태 예측, 선호 영양제 브랜드 추천 어떤 영양제를 추천할지

예A조 : 축구 승부 예측 전략 최근전적 등 / mbit 같은거 - 예측 결과를 시각적으로 보여주거나 예측 결과 강조 혹은 대진 팀 등 입력변수 활용 등

칭주조 : 가상 피팅 서비스; 입어보고싶은 옷 등을 합성하여 보여준다.

운명 : 최경예,여행지추천,장르별드라마추천; 보고 싶어 할 영화 및 드라마 예측 및 추천 기존 유사 프로그램들은 본 것들을 다시 보여주는데 안보여 줄 것 키워드 별로 선호도 취합

소컴 : 주식예측; 어떻게어떻게 해서 원하는걸 검색해서 실시간으로 보여준다

오웅아 : 다이어트 도우미;폭식할거같은상황 예측 계획표도움;; 대호ㅏ를 할 때 상대방의 말을 판단해 호감도 예측해 추천

교a뿌 : 등급으로 학교예측 ; 수능치고나서 등급 나온다........ 등급만 넣어서 통계낸다... 성적표 안기다려도 된다. . 가독성과 신속성

울팀ㅋㅋ : 저출산고령화 ; 몇십년 뒤를 도식화해서 제공........ -> 너무 구체적이지 않다 ... 생각했던게 그래서 어떤 주제가 있냐 라고는... -> 그래서 낮아지면 낮아져서 어떡할건데?라는느낌 ->>>> 더더더 구체화시키기 1!!!!!

파볼 : 로또예측 해서 추천해준다... 운세같은거 추가 .... 사람들에게 어떤 번호가 많이 나왔나 .. 부가적인 기능 추가

히사조 : 우주 및 우주산업 - 우 뭐? / 우주 시뮬레이션 최신화된 행성들과 그 행성의 경로 예측

안대사 : 계절별로 날씨가 좋은 날짜 및 장소 알려준다. 기상 예측 별로 적절한 옷 추천. 어떤 스타일을 입을지 추천

소공녀 : 스포츠 선수 몸값 예측....

외국인..... : 한국에 있는 외국인들이 쉽게 여행하는데 도움이 되는 .... 암튼 추차ㅓㄴ ...

docstring 주석 양식

docstring으로 따로 문서화하기 전에 python 코드에 주석을 남기는 것은 return type만 명시하는 것을 지향하라고 하셨고,
docstring으로 문서화할 때 인자(arguments),return type,함수 설명을 기재하라는 것 맞았나요?
8주차 강의자료를 다시봐도 이에 대해 자세한 구분이 없어 헷갈리네요.

예측 개선에 대한 정보 공유

우선 Prophet모델에 대한 이해가 있어야 하는데요. 굉장히 요약해서 말하자면,

  • Prophet모델은 Facebook에서 개발했고 Python에서 제공하는 전통적인 모델인 Arima모델보다 이상값 감지 및 처리 메커니즘이 뛰어납니다.
  • 사용하기도 Arima보다 간편합니다. reference가 다소 불친절하긴 하지만
  • 튜닝할 매개변수 간편화, 계절성 처리, 추세 모델링이라는 강력한 특징을 가지고 있습니다.

3번째에 집중해보았는데요 먼저 코드입니다.

m_births = Prophet(changepoint_prior_scale=0.001, seasonality_mode='multiplicative', yearly_seasonality=5)
m_deaths = Prophet(changepoint_prior_scale=0.001, seasonality_mode='multiplicative', yearly_seasonality=5)

1. 매개변수 간편화

changepoint_prior_scale으로 매개변수는 0에 가까울 수록 변화점 감지에 덜 민감해지고 1에 가까울 수록 변화점 감지에 더 민감해집니다. 우리의 데이터 추세를 보면 보수적인 추세를 띄고 있고 대한민국 인구는 앞으로 이 추세를 따를 것이라는 전망이므로 0에 가까운 것이 좋다고 판단했습니다. default는 0.05입니다.

2. 계절성 처리

seasonality_mode으로 저희의 데이터는 multiplicative에 속합니다. 데이터의 진폭이 점점 증가하거나 감소하기 때문입니다. 그리고 3번과 연계하여 특히 저희는 연간을 주기로 하기 때문에 연 계절성 의 값을 default / 2 해주는 것으로 판단하였습니다.

다음 할 것은 data graph 적용 입니다

일단 readme 문서화, 호스팅, 주석처리 그리고... 더 생각해보면 해야하는 것들이 있는데 아직 수업시간에 다루는 것들이고
일단 결과를 낸 이후 신경쓰겠습니다.
주석 > sphinx > 호스팅 > 기타 순으로 생각하고 있습니다.

그래프가 나오긴 하는데 지금은 그냥 의미가 없는 상태입니다.
그래도 나오긴 하니 응용하면 될 것 같습니다.
기간은 잘 모르겠지만 최대한 다음주 안까진 해보고 싶습니다.

보여주는 것 자체만 생각하고 있습니다
빨리 해볼게요..

주제 정하기 등

지금 태그가 아무도 안되네요~~~일단 쓸게요~~

우리가 이제 주제도 확정을 시켜야 하는데요
지금 기억하기로는 출산율을 가지고 어떻게 해야하느냐 였던 것 같습니다
그래서 이제 해야할 것은 출산율(과 고령화)이라는 키워드를 가지고 어떤 컨텐츠를 제공해주느냐를 생각하면 될 것 같습니다

그래서 무엇을 해야하냐 라고 한다면 출산율과 고령화 라는 키워드를 가지고 무엇을 보여주고 싶은지를 정한 후,
그에 대해 상세히 기록해 저장만 해두면서 참고하면 될 것 같아요.....

ex) 시간이 지남에 따른 출산율과 고령화 비율 예측 및 이로 인한 뭐 무슨 인구밀도 예측 아니면 의료시설이나 학교같은 시설 수 예측 (기억나는게 이런거밖에 없네요 죄송..)

한두개만 적절이 던져보고 취합해서 하나 고르는거로 해요
-> 그래서 저는 출산율과 고령화에 대해서 지금까지 어떤 수치를 보여왔으니 나중에는 (정확도 무시) 어떻게 될 것이다 따라서 현재 의료(아니면 요양)시설과 학교 수 정도로만 간단히 시각적으로 보여주는건 어떨까 싶습니다 (저번에 말했던게 이거 맞죠?)

  • 근데 커뮤니티라던지 이런건 차별점이 될 수는 있겠지만 그래서 우리가 해야할 기능인가 싶어서 긴가민가 합니다... 어떻게 생각하시나요?
  • 그리고 우리가 만드는게 어떤 대상으로 하는지 생각해보면 좋을 것 같고(아무래도 저런 수치는 일반인보단 연구자나 관련 사업가 정도니까 그런 사람들 대상으로 만들어야겠죠?), 이에 따라 필요한 기능이 달라져서 면밀히 고민해봐야 할 것 같습니다(커뮤니티 만들려면 로그인 필요한데 이런 것도 누가 로그인을 하냐 라는 것부터 문제니까요)

그리고 또 이걸 어떻게 구현해야하는지를 좀 정해야 하는데

이게 웹으로 할지 앱으로 할지 부터 정하고

그 다음에 설계를 조금씩(대신 빨리) 하면 될 것 같습니다....

그러니까 웹이나 앱 중 (혹은 둘 다) 어떤 플랫폼으로 만들지 정한 후
이걸 어떤 방식이나 구조로 만들지 좀 정하면 되겠어요~

ex) 앱으로 만드는데 자바나 코틀린사용하거나 웹으로 하는데 파이썬이나 자바로해서 스프링이나 장고같은거 아님 플라스크같은거 써서 mvc mvvc 이런거나 cs같은 구조로 구현한다~~

-> 근데 이게 사실 기능 구현이나 이런거 기술같은거 있으면 어차피 검색해서 쪼금쪼금 고쳐다가 쓰는 정도일텐데(당연히 기본적인건 똑같거나 기초적인 구조는 공통된거니까요..) 어디부터 어디까지 할 수 있느냐가 문제같아요 근데 제가 그걸 지금 가늠을 못하겠네용..........
앱으로 할거면 대표적으로 안드로이드자바/코틀린이랑 아님 스위프트같은걸 쓸텐데 음 이게 UI같은건 좀 어떻게 쉬울거같긴한데 고민을 해봐야 할거같아서 결정을 못하겠네요
웹으로 하면 사실 다 거기서 거기긴한데 앱도 그렇지만 서버라던지 이런거 어떻게 할거고 그렇게 하다보면 aws같은거 쓰냐(강의자료보면있죠?) 이런 것도 정해야해서 음... 이게 이슈에다가 쓴다고 될까 싶네용........................ 암튼 웹으로 한다면 파이썬은 어떻게 잘 쓰신다니까 파이썬 쓰는게 어떨까 싶고... 음 그럼 프레임워크는 뭐로 쓸까요? 장고?플라스크? 아님 다른거 있으면 그거?

일단 확인해보고 의견 던져주세요~

모르는건 검색하거나 서로 물어보면서 하면 되는거니까 모르는거 있으면 바로바로 표현을 하고 부담없이 열심히만 합시다...

아 그리고 점수 표에 따라서 발표하는 것도 정하면 좋겠어요
발표에는 어떤 내용을 넣고 강조할지랑 발표자는 어떻게 할지(여러명이서 할 수 있는거니까 아마도???)
발표준비는 어떻게 하는게 좋을지도(장소나 시간 문제가 있을 수 있으니까, 서로 피드백같은거 하는게 좋으니까)

어 또 우리가 이걸 그냥 하는 것 보단 주기적으로 회의 (진짜 잠깐 진짜 잠깐 어떤걸 했고 어떤걸 할거고 어려운건 뭐였고 그런 내용으로 공유만 딱 하고 끝) 하는건 어떨까요????????????????????????

지금 문제는

뭐 완성하고 커밋한 후 푸쉬 하려고보니 아까 뭐 하는 과정에서 없어진건지 별거 없어져버렸네요....
사실 기능 자체로는 많이 한건 아닌데
뭘 계속 수정하고 하는 과정이 뭔가 너무 없어진 느낌이에요....
아니면 커밋할때 git add app.py printgraph 이런 식으로 해서인지 커밋이 하나로 합쳐진걸까요??

일단 이건 revert였나 커밋한거 되돌려서 따로따로 하면 되긴한데 ....

복잡하네요 .........
커밋수를 60개 채워야했던걸까요?
~23갠가 밖에 안되던데 망했네요 ~
일단 이름 바꾸는걸로 분량을 부풀려야겠어요..............
그래도 커밋수 늘려야합니다...

==================================
무엇보다 지금 제일 큰 문제는 갑자기 import가 안돼요.......
혹시 비슷한 경험 해보신적 있으신가요?

계속 보는데 아까 필요에 의해 git merge --abort를 했더니 어느 순간으로 돌아간 것도 문제고
print_graph 이름을 계속 바꾸다가 처음엔 잘 됐는데 그 다음부터 import가 안되는게 문제같아요 근데
이걸 어떻게 해야할지는 아직까진 잘 모르겠습니다.

파일명이나 경로명 등에서 -랑 & 등 특수문자 되도록 쓰지 맙시다 !!!

언더바가 아니더라도 더 사용가능한 문자들이 있겠지만
웬만하면 _만 사용하도록 하고
&라던지 -라던지 공백같은걸 보기 쉽다고 사용하는건 안좋은거같아요!!!!!

예를 들자면 -2022data.csv 같이 이름을 붙이셨는데
이거 리눅스같은데 명령어로 뭐 하려고 하면 대쉬때문에 무슨 이상한 옵션 어쩌고 하면서 안돼요!!!!

$ mv -2022data.csv over2022/
mv: unknown option -- 2
Try 'mv --help' for more information.

다음엔 조심합시다!!!!!

create continuous data 및 2개 문제 있습니다

pr안하고 git pull 해서인지 cd는 from prophet import Prophet에서 prophet 부분에 import 할 수 없다는 문제가 있고
Import "prophet" could not be resolvedPylancereportMissingImports

나머지 두 pd/pre graph 는 "Exiting because of an unresolved conflict" 라면서 pull이 안됩니다...

웹 페이지 구성 의견 요청

메인페이지1

메인페이지 현황입니다.
나이를 입력하고 하단에 파란색 입력 버튼을 누르면 예측된 정보를 제공해 주는 페이지로 넘어가도록 설정하였습니다.
그 아래의 인구 현황 그래프 예정 1과 그래프 예정2 에는 각각 -2022 graph와 work&nonwork 영역의 2023-2027_graph를 보여줄 예정입니다. 이 부분은 간편하게 이미지 파일로 첨부할까 생각중입니다.
그래프 아래에는 연령계층별 추계인구 데이터를 30년부터 70년까지 10년단위로 나타낸 테이블 입니다.

왼쪽의 사이드바(메뉴바)는 사진과 같이 구성되어있고, 메인-장래인구추계는 메인페이지 / 메뉴-페이지는 인증과 예측 카테고리로 구성되어있으며 인증카테고리에서는 본인인증과 비밀번호 찾기 및 로그인 등의 기능이 있고, 예측 카테고리는 메인페이지에서 나이를 입력하면 넘어가게 되는 예측 정보 제공 페이지가 있을 예정입니다. 차트는 제작 과정에서 참고하기 위해 남겨두었으며 추 후 필요 없다면 제거할 예정입니다.

실제로 어떻게 나오는지 보시려면 bootstrap 브랜치 가셔서 index.html을 파일로 다운받아 실행하시면 편하게 웹 페이지를 확인할 수 있습니다.
웹 페이지 구성에 추가적인 피드백 해주시면 오늘 안에 수정하도록 하겠습니다.
웹을 완성하기 위해서 추가적으로 진행되어야 하는것들
(1) 메인 페이지 그래프 이미지 추가
(2) 피드백 반영 후 수정
(3) 완성된 예측 그래프를 반영한 페이지 제작

편하게 의견 주시면 빠르게 반영해보도록 하겠습니다.
포인트는 (3)번이고 웹 페이지 수정과 병행하여 진행될 예정입니다. (3)번에 대해서 완성한 python형식 그래프를 어떠한 방법으로 웹에 적용시킬것인지 생각하신 아이디어가 있으시다면 말씀해주세요. 아직 고민중이시라면 고민중이라고 말씀해주세요. 그럼 제가 일단 어떤 방법이든 이용해서 만들어볼께요.

시스템 구조 생각해보면 좋겠습니다.

image

간단하게 3가지로 구분했어요

  1. 서버에서 데이터만 보여주는 식입니다. 따로 데이터베이스를 쓰진 않기 때문에 로그인이나 커뮤니티 등 기타 기능은 제공하지 않습니다.
  2. 데이터베이스를 만들어두는 것입니다. 커뮤니티같은 용도로만 사용하게끔 가공할 데이터와 배타적입니다.
  3. 출산율/고령화 관련 데이터도 데이터베이스에 저장하여 사용하는 것입니다. 대신 무겁습니다.

첫번째 이슈에서 말씀하신 것과 수업시간에 도현씨가 하신 말씀을 보면 1번으로써 출산율과 고령화와 관련된 시각적 기능만 제공하는 것으로 생각하고 있습니다.
기간을 생각하면 많은 기능을 구현하지 못할 것이라고 여겨지기 때문입니다.
추후 상황에 따라 추가적인 행동을 하는 것입니다.
대신 나중에 기능을 새로 만드는데 필요한게 있어 설치하고 연동해야 한다면 더욱 복잡해질 수 있습니다.

또 고민중인 것은 어떻게 시작하냐 입니다.

  1. 웹 화면만 먼저 구현한 후 웹서버를 만든다.
  2. 서버부터 만들고 웹은 그 다음부터 만든다.
  3. 동시에 만든다
    다 장단점이 있는데 1번을 한다면 정제한 데이터를 먼저 시각화 할 수 있을 것입니다.
    2번은 1과 비슷할 것이라고 생각합니다.
    3번은 살짝 속도가 느리지만 동시에 하는 만큼 완성도 동시에 할 가능성이 높습니다.

그리고 프레임워크 같은 것을 어떻게 적용시키냐가 문제입니다. 이 부분은 더 찾아보고 최대한 빨리 시작해보겠습니다.

서버도 그냥 통째로 하나만 만들어서 쉽게쉽게 합시다........

fbprophet 라이브러리를 설치할 수 없는 오류

1주일 넘게 씨름 중인 오류입니다.

전통적 방법인 arima가 아닌 페이스북에서 만든 fbprophet을 이용하여 시계열 데이터 분석으로 예측그래프를 만드려고 했는데 라이브러리 설치에서 오류가 납니다. 파이썬 버전을 낮추는 방법은 전혀 고려하고 싶지 않습니다.

필요 설치 Library

  • pystan
  • prophet
  • fbprophet

설치시도 하며 겪은 과정

  • 현재 내 파이썬 버전은 3.11

1.pystan 수동 설치

pip install fbprophet을 시도하였으나 pystan 설치에서 무한로딩이 걸려 수동으로 설치하려고 하였으나
pystan 설치오류
와 같이 무한로딩이 나옵니다. 버전의 문제인가 싶어 pystan의 버전을 낮춰서 설치해보았으나 마찬가지였습니다.

2.Anaconda Navigator 사용

StackOverflow나 구글에서 여러가지 찾아보던 중 Anaconda Navigator을 이용하여 설치하라는 제안을 보았으나
anaconda navigator에서 pystan 찾짐ㅅ함
pystan을 all package에서 찾지 못한다고 나왔습니다.

3. 아나콘다 재설치 소요

다시 위 이유에 대해 구글에 검색해보니 Anaconda Navigator 업데이트를 해줄 소요가 있다고 나와 강제로 업데이트하였습니다. 그랬더니, 몇 일전 에러와 같은
최종율
와 같이 Anaconda에서 기본으로 제공하는 모듈이 사라졌습니다..
위 importError을 해결하기 위해 환경변수 설정 등 다양한 시도를 해보았으나 모두 실패하여 아나콘다를 재설치했던 경험이 있습니다.

번외. pycharm을 이용하여 설치시도를 해보았습니다.

2와 같이 pystan을 찾을 수 없었습니다.

검색하여 찾을 수 있는 모든 방법은 시도해보았습니다. 그럼에도 설치할 수 없었어서 fbprophet으로 예측하는 방법은 포기할까 생각 중입니다. 사실 한 번 fbprophet을 과거에 사용해봤었는데 아나콘다를 재설치하니 다시 패키지가 안깔리며 지금까지 왔습니다..

웹 페이지 진행상황

메인 페이지 진행 중이고 나이 입력 칸이랑, 우리가 완성한 그래프만 넣으면 일단 완성될것같습니다. 늦어도 내일까지는 완료해서 피드백 받도록 하겠습니다.

tool-config 관련 문제

tool을 config 로 바꾸는 과정에서 문제가 생겼었는데
이번에도 비슷하게 config로 바꾸는 과정에서 문제가 생겼습니다

대신 지금은 tool에서 config로 바뀌지 않는 문제인데
이걸 push하면 문제가 생긴다고 생각이 강하게 듭니다
어떻게 헤쳐나가야할까요

Prophet 예측 개발 상황

image

Prophet 라이브러리는 기본적으로 dataframe을 ds(datastamp)와 y 두가지 column으로 구성해야합니다.

과거년도를 ds로 설정하는 것은 문제가 없었으나 출생아 수와 사망자 수를 동시에 y로 받을 수는 없었기에 두 그래프를 한 번에 보여### 줄 수 없을 지에 대한 방법이 필요했었습니다.

이에 대해 혼자 시행착오를 거치다 Stackoverflow에 질문을 남겨 해결했습니다..

아직 시각적 요소는 보완할 점이 많지만 예측에 성공했다는 것에 의의를 둡니다.

이전 과정도 기록했어야 하는데 지금부터라도 개발 상황에 따라 이슈 업데이트 하겠습니다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.