[Python 오리지널 졸업 프로젝트 | 강좌 설계] Python Flask 머신러닝 기반 국가+상하이 기상 데이터 수집 및 예측 시각화 시스템 - 첨부파일에는 다운로드 링크와 상세 논문 보고서가 포함되어 있으며, 기타 원본 프로젝트는 표절하였습니다.

Python Flask 머신러닝 기반 국가+상하이 기상 데이터 수집 및 예측 시각화 시스템

1. 프로젝트 소개

정보 기술이 호황을 누리는 시대에 우리는 Python Flask를 기반으로 전국 + 상하이 기상 데이터 수집, 예측 및 시각화 시스템을 출시했습니다. 기후 변화가 전 세계적으로 점점 더 많은 관심을 끌면서 정확한 기상 데이터와 시각적 표시가 점점 더 중요해지고 있습니다. 이 시스템은 첨단 기술과 혁신적인 기능을 사용하여 실시간 기상 정보와 과거 기상 데이터에 대한 사용자의 요구를 충족하고 대중, 기업 및 정부가 더 많은 정보를 바탕으로 결정을 내릴 수 있도록 돕습니다.

기술 수준에서 우리는 Python 웹 크롤러 기술을 최대한 활용하여 China Weather Network와 같은 권위 있는 데이터 소스로부터 전국 실시간 기상 데이터와 상하이 과거 기상 데이터를 획득하여 데이터의 적시성과 정확성을 보장합니다. 데이터 정리 및 MySQL 데이터베이스 스토리지를 통해 데이터의 일관성과 신뢰성을 보장합니다. 동시에 HTML, CSS, JavaScript 및 프런트엔드 프레임워크 Layui와 같은 프런트엔드 기술은 간단하고 친숙한 사용자 상호 작용 인터페이스를 구축하여 사용자가 쉽게 데이터를 얻고 분석할 수 있도록 합니다. 백엔드는 Flask를 사용하여 강력한 데이터 인터페이스를 구축하고 PyMySQL 라이브러리를 통해 데이터와 데이터베이스 간의 상호 작용을 실현합니다. 데이터 예측 측면에서는 scikit-learn, pandas, numpy 등의 기계 학습 라이브러리를 사용하여 다중 선형 회귀 모델을 구축하여 사용자에게 정확한 기상 분석 및 예측 결과를 제공합니다.

이 시스템은 전국 실시간 기상 데이터 및 상하이 과거 기상 데이터 수집, 국가 종합 기상 데이터 및 전국 도시 기상 데이터의 Echarts 시각적 표시, 다중 선형 회귀 예측 기능 등 풍부하고 다양한 기능을 갖추고 있습니다. 기상 데이터. 또한, 당사는 사용자 데이터의 보안과 개인정보 보호를 보장하기 위해 사용자 로그인 및 등록 기능을 제공합니다. 데이터 관리 기능은 사용자에게 개인화된 데이터 표시 및 공지사항 보기도 제공합니다. 다차원적인 데이터 관리를 통해 사용자는 국가 기상 데이터를 심층적으로 이해하고 보다 정확한 의사결정을 내릴 수 있습니다.

미래를 내다보면 이러한 국가 + 상하이 기상 데이터 수집, 예측 및 시각화 시스템은 광범위한 개발 전망을 가지고 있습니다. 점점 더 심각해지는 기후변화 상황에서 우리는 지속적으로 시스템을 최적화 및 개선하고, 더욱 발전된 기계 학습 알고리즘과 데이터 분석 방법을 도입하며 일기예보의 정확성과 적시성을 향상시킬 것입니다. 동시에 점차 더 많은 도시와 지역으로 확대되어 국가는 물론 전 세계를 포괄하는 기상 데이터 서비스 시스템을 구축하여 사회 모든 부문이 기후 변화로 인한 과제에 대처할 수 있도록 지원할 것입니다. 이는 대중, 기업 및 정부에 보다 포괄적이고 실용적인 기상 정보를 제공하여 스마트 시티와 지속 가능한 개발을 향한 확고한 발걸음을 내디딜 것입니다.

2. 개발 환경

개발 환경 버전/도구
파이썬 3.6.8
개발 도구 파이참
운영 체제 윈도우 10
메모리 요구 사항 8GB 이상
브라우저 Firefox(권장), Google Chrome(권장), Edge
데이터 베이스 MySQL 8.0(권장)
데이터베이스 도구 Navicat Premium 15 (권장)
프로젝트 프레임워크 FLASK, scikit-learn

3. 프로젝트 기술

Python: 백엔드 논리 작성 및 데이터 처리에 사용되는 개발 언어입니다.

Flask: 백엔드 데이터 인터페이스를 구축하고 HTTP 요청을 처리하는 데 사용되는 Python의 웹 프레임워크입니다.

PyMySQL: Python과 MySQL 데이터베이스 간의 상호 작용에 사용되어 데이터를 저장하고 읽습니다.

웹 크롤러 기술: 중국 기상 네트워크와 같은 데이터 소스로부터 전국 실시간 기상 데이터와 상하이 과거 기상 데이터를 얻는 데 사용됩니다.

데이터 정리: 데이터의 정확성과 일관성을 보장하기 위해 크롤링된 원시 데이터를 전처리하는 데 사용됩니다.

Echarts: 데이터를 차트로 변환하고 사용자에게 표시하는 데 사용되는 JavaScript 데이터 시각화 라이브러리입니다.

LAYUI: 사용자 친화적인 대화형 인터페이스를 구축하기 위한 경량 프런트 엔드 UI 프레임워크입니다.

JavaScript: 프런트 엔드 상호 작용을 구현하고 사용자 입력을 처리하는 데 사용됩니다.

HTML 및 CSS: 프런트 엔드 인터페이스 및 스타일 디자인을 구축하는 데 사용됩니다.

scikit-learn, pandas 및 numpy: 데이터 예측 및 분석을 위한 Python의 데이터 처리 및 기계 학습 라이브러리입니다.

AJAX: 프런트엔드와 백엔드 데이터 상호 작용을 실현하고 백엔드 데이터 인터페이스를 비동기적으로 요청하는 데 사용됩니다.

MySQL: 데이터 지속을 위한 데이터베이스 관리 시스템입니다.

위의 기술이 함께 작동하여 시스템이 데이터 수집, 예측, 시각화 및 사용자 상호 작용과 같은 풍부한 기능을 실현하고 사용자에게 정확하고 실용적인 기상 정보를 제공할 수 있습니다.

4. 기능적 구조

시스템의 기능적 구조에는 다음 모듈이 포함됩니다.

데이터 수집 기능 모듈:

국가 실시간 기상 데이터 수집: China Weather Network와 같은 데이터 소스에서 전국의 실시간 기상 데이터를 가져옵니다.

상하이 과거 기상 데이터 수집: 데이터 분석 및 시각적 표시를 위해 데이터 소스에서 상하이의 과거 기상 데이터를 얻습니다.

데이터 전처리 저장 모듈:

데이터 처리: 수집된 원시 기상 데이터를 전처리하여 유효하지 않은 데이터를 제거하고 데이터의 정확성과 일관성을 보장합니다.

데이터베이스 저장: 후속 데이터 분석 및 예측을 위해 전처리된 날씨 데이터를 MySQL 데이터베이스에 저장합니다.

데이터 시각화 기능 모듈:

국가 종합 기상 데이터 시각화: Echarts 시각화 라이브러리를 사용하여 전국 실시간 기상 데이터를 차트와 지도 형식으로 표시하여 사용자가 전국의 기상 상황을 직관적으로 이해할 수 있습니다.

전국 도시의 기상정보 시각화 : 실시간 기상정보로 각 도시의 위치를 ​​지도에 표시하고 해당 차트를 그려 사용자가 각 도시의 기상상태를 볼 수 있도록 합니다.

상하이의 과거 기상 데이터 시각화: Echarts를 사용하여 과거 기상 데이터를 선 차트, 막대 차트 등의 형태로 표시하여 사용자가 일정 기간 동안 상하이의 날씨 변화를 볼 수 있도록 합니다.

데이터 예측 기능 모듈:

기상 분석 및 예측: scikit-learn, pandas 및 numpy와 같은 기계 학습 라이브러리를 사용하여 기상 데이터를 분석 및 예측하는 다중 선형 회귀 모델을 구축하고 사용자에게 정확한 기상 분석 및 예측 결과를 제공합니다.

사용자 로그인 및 등록 기능 모듈:

사용자 등록: 사용자 데이터 보안을 보장하기 위해 사용자 이름과 비밀번호를 입력하여 등록할 수 있습니다.

사용자 로그인: 등록된 사용자는 사용자 이름과 비밀번호를 입력하여 로그인하여 맞춤형 기상 데이터 표시 및 예측 기능을 얻을 수 있습니다.

데이터 관리 기능 모듈:

사용자 데이터 관리: 사용자 데이터의 무결성과 보안을 보장하기 위해 사용자 정보를 추가, 삭제, 수정, 확인하는 기능을 구현합니다.

공지사항 데이터 관리 : 공지사항 기능이 있는 경우 공지사항의 게시, 편집, 삭제가 가능합니다.

국가 기상 데이터 관리: 데이터 수집 기능을 통해 얻은 전국 실시간 기상 데이터가 올바르게 저장되고 필요에 따라 업데이트 및 정리될 수 있는지 확인합니다.

이러한 기능 모듈은 서로 협력하여 완전한 전국 + 상하이 기상 데이터 수집, 예측 및 시각화 시스템을 형성하고 사용자에게 포괄적인 기상 정보를 제공하고 사용자가 정보에 입각한 결정을 내릴 수 있도록 지원합니다. 사용자는 인터페이스를 통해 상호 작용하여 실시간 데이터를 얻고, 과거 데이터를 보고, 예측 기능을 사용하여 미래 기상 변화 추세를 얻을 수 있습니다. 또한 이 시스템은 변화하는 기상 과학 및 사용자 요구에 적응하기 위해 지속적인 확장 및 최적화 가능성을 가지고 있습니다.
이미지 설명을 추가해주세요

논문 목차 결과는 다음과 같습니다.
이미지 설명을 추가해주세요

5. 스크린샷 실행

시스템 로그인 페이지
이미지 설명을 추가해주세요
사용자 등록 페이지
이미지 설명을 추가해주세요
백엔드 관리 홈페이지
이미지 설명을 추가해주세요
상하이 도시 국가 기상 시각화 상하이
이미지 설명을 추가해주세요
다양한 지역 시각화 상하이 다양한 지역
이미지 설명을 추가해주세요
도시의 과거 기상 시각화 사용자 관리 페이지 ** 공지사항 관리 페이지 국가 기상 관리 페이지 상하이 기상 관리 페이지 상하이 각종 지역별 이력기상 관리 페이지 시스템 크롤러 로그 관리 페이지
이미지 설명을 추가해주세요

이미지 설명을 추가해주세요

이미지 설명을 추가해주세요

이미지 설명을 추가해주세요

이미지 설명을 추가해주세요

이미지 설명을 추가해주세요

이미지 설명을 추가해주세요

이미지 설명을 추가해주세요

6. 기능 구현

머신러닝 예측 핵심코드

# 预测数据(cityname, record_date, high, low, weather, wd, ws)
def predict(cityname, record_date, high, low, weather, wd, ws):
  city = cityname
  cityname, record_date, high, low, weather, wd, ws =deal_data.transformer_item(cityname, record_date, high, low,weather, wd, ws)
  next_input = [float(cityname), float(record_date), float(high), float(low), float(weather), float(wd), float(ws)]
  result = []
  for i in range(1, 11):
    record_date, record_str = deal_data.getNextDay(i)
    pred_y = model.predict([next_input])[0]
    next_input = [float(cityname), float(record_date)]
    next_input.extend(pred_y)
    result.append(deal_data.de_transformer_item(city, record_str, pred_y[0], pred_y[1], pred_y[2], pred_y[3], pred_y[4]))
  return result

데이터베이스 연결 핵심코드 생성

def connect(self):
    self.conn = pymysql.connect(
      host=DB_CONFIG["host"],
      port=DB_CONFIG["port"],
      user=DB_CONFIG["user"],
      passwd=DB_CONFIG["passwd"],
      db=DB_CONFIG["db"],
      charset=DB_CONFIG["charset"],
      cursorclass=pymysql.cursors.DictCursor)
    self.cursor = self.conn.cursor()

상하이 도시 시각화 데이터 인터페이스

@app.route('/data/history/weather', methods=['post', 'get'])
def data_history_category():
  city = request.args.get('city')
  result_weather = data_service.weather_category_data(city)
  result_wd = data_service.wd_category_data(city)
  result_ws = data_service.ws_category_data(city)
  result_temp = data_service.temp_data(city)
  return {
    
    "weather_data": result_weather, "wd_data": result_wd, "ws_data": result_ws, "temp_data": result_temp}

상하이시 데이터 구축 사업 코드

# 气象分类
def weather_category_data(city):
  sqlManager = SQLManager()
  key_sql = "select weather from historyweather where cityname ='" + city + "' group by weather"
  value_sql = "select count(id) as `value`,weather as `name` from historyweather where cityname ='" + city + "' group by weather"
  key_data = sqlManager.get_list(key_sql)
  value_data = sqlManager.get_list(value_sql)
  x_data = [k['weather'] for k in key_data]
  sqlManager.close()
  return {
    
    'x': x_data, 'y': value_data}

# 风向分类
def wd_category_data(city):
  sqlManager = SQLManager()
  key_sql = "select wd from historyweather where cityname ='" + city + "' group by wd"
  value_sql = "select count(id) as `value`,wd as `name` from historyweather where cityname ='" + city + "'  group by wd"
  key_data = sqlManager.get_list(key_sql)
  value_data = sqlManager.get_list(value_sql)
  x_data = [k['wd'] for k in key_data]
  sqlManager.close()
  return {
    
    'x': x_data, 'y': value_data}
# 风速分类
def ws_category_data(city):
  sqlManager = SQLManager()
  key_sql = "select ws from historyweather where cityname ='" + city + "'  group by ws"
  value_sql = "select count(id) as `value`,ws as `name` from historyweather where cityname ='" + city + "'  group by ws"
  key_data = sqlManager.get_list(key_sql)
  value_data = sqlManager.get_list(value_sql)
  x_data = [str(k['ws']) + '级' for k in key_data]
  y_data = [{
    
    'value': i['value'], 'name': str(i['name']) + '级'} for i in value_data]
  sqlManager.close()
  return {
    
    'x': x_data, 'y': y_data}

7. 데이터베이스 설계

테이블 이름: 도시

분야 명 데이터 유형 필수인가요? 논평
ID 정수(11)
도시 이름 varchar(50) 아니요 도시 이름
도시_코드 varchar(50) 아니요 도시 코드
city_py varchar(50) 아니요 도시 병음

테이블 이름: 현재 날씨

분야 명 데이터 유형 필수인가요? 논평
ID 정수(11)
varchar(255) 아니요
도시 이름 varchar(50) 아니요 도시 이름
기록_날짜 날짜 아니요 날씨 시간
기록_시간 varchar(50) 아니요 실시간 시간
온도 정수(11) 아니요 현재온도
WD varchar(20) 아니요 바람의 방향
ws 정수(11) 아니요 펑리
wse 정수(11) 아니요 바람 속도
SD 정수(11) 아니요 습기
날씨 varchar(20) 아니요 날씨
십진수(10,2) 아니요 강우
aqi 정수(11) 아니요 공기질
생성_시간 날짜 시간 데이터 생성 시간
is_old 정수(11) 아니요 기존 데이터 1개, 새 데이터 0개

테이블 이름: DetailWeather

분야 명 데이터 유형 필수인가요? 논평
ID 정수(11)
varchar(255) 아니요
도시 이름 varchar(50) 아니요 도시 이름
기록_날짜 날짜 아니요 날씨 시간
기록_시간 varchar(50) 아니요 실시간 시간
온도 정수(11) 아니요 현재온도
WD varchar(20) 아니요 바람의 방향
ws 정수(11) 아니요 펑리
wse 정수(11) 아니요 바람 속도
SD 정수(11) 아니요 습기
날씨 varchar(20) 아니요 날씨
십진수(10,2) 아니요 강우
aqi 정수(11) 아니요 공기질
생성_시간 날짜 시간 데이터 생성 시간
is_old 정수(11) 아니요 기존 데이터 1개, 새 데이터 0개

테이블 이름: Historyweather

분야 명 데이터 유형 필수인가요? 논평
ID 정수(11)
varchar(255) 아니요
도시 이름 varchar(50) 아니요 도시 이름
기록_날짜 날짜 아니요 날씨 시간
높은 정수(11) 아니요 최고 기온
낮은 정수(11) 아니요 최저온
날씨 varchar(20) 아니요 날씨
WD varchar(20) 아니요 바람의 방향
ws 정수(11) 아니요 풍력
생성_시간 날짜 시간 데이터 생성 시간

테이블 이름 : 공지사항

분야 명 데이터 유형 필수인가요? 논평
ID 정수(11)
제목 varchar(255) 아니요 공지사항 제목
콘텐츠 긴 텍스트 아니요 공지사항
사용자 이름 varchar(50) 아니요 발행자
생성_시간 날짜 시간 아니요 출시 시간

테이블 이름: slog

분야 명 데이터 유형 필수인가요? 논평
ID 정수(11)
통나무 varchar(255) 아니요
생성_시간 날짜 시간 아니요

8. 소스코드 획득

소스 코드, 설치 튜토리얼 문서, 프로젝트 소개 문서 및 기타 관련 문서가 Yunyuan Practical Combat 공식 웹사이트에 업로드되었으며, 아래 공식 웹사이트를 통해 프로젝트를 얻을 수 있습니다!

추천

출처blog.csdn.net/m0_47220500/article/details/132350952