#补全1--平均值填充 from flask import Flask, request, jsonify import numpy as np import pandas as pd import os import requests from sklearn.impute import KNNImputer app = Flask(__name__) @app.route('/ave_data', methods=['POST']) def process_data1(): try: # 检查请求体中是否包含文件地址 data = request.json if 'file_url' not in data: return jsonify({'code': 400, 'msg': 'No file URL provided'}) file_url = request.json.get('file_url') result_file_path = request.json.get('result_file_path') # 读取数据集 df = pd.read_csv('{0}'.format(file_url)) # 检查是否存在时间列 if 'Time' in df.columns: # 提取时间列并转换为 datetime 类型 df['Time'] = pd.to_datetime(df['Time'], errors='coerce') # 对时间列进行排序,确保时间顺序 df.sort_values('Time', inplace=True) # 使用 interpolate 方法进行线性插值填充缺失的时间值 df['Time'] = df['Time'].interpolate(method='time') # 如果时间列经过填充后,需要重新排序以保持原有的顺序(如果需要的话) # df.sort_index(inplace=True) # 分离数值型数据 numerical_cols = df.select_dtypes(include=[np.number]).columns # 填充数值型数据的缺失值,使用均值填充 for col in numerical_cols: df[col].fillna(df[col].mean(), inplace=True) # 分离分类型数据 categorical_cols = df.select_dtypes(include=['object']).columns # 填充分类型数据的缺失值,使用众数填充 for col in categorical_cols: df[col].fillna(df[col].mode()[0], inplace=True) # 将结果保存为CSV文件 df.to_csv(result_file_path, index=False, header=False) # 构建返回数据,只返回文件路径 return jsonify({ 'code': 200, 'msg': '文件处理完成', }) except Exception as e: return jsonify({ 'code': 500, 'msg': str(e) }) # #补全2--中位数填充 @app.route('/upper_data', methods=['POST']) def process_data2(): try: # 检查请求体中是否包含文件地址 data = request.json if 'file_url' not in data: return jsonify({'code': 400, 'msg': 'No file URL provided'}) file_url = request.json.get('file_url') result_file_path = request.json.get('result_file_path') # 读取数据集 df = pd.read_csv('{0}'.format(file_url)) # 检查是否存在时间列 if 'Time' in df.columns: # 提取时间列并转换为 datetime 类型 df['Time'] = pd.to_datetime(df['Time'], errors='coerce') # 对时间列进行排序,确保时间顺序 df.sort_values('Time', inplace=True) # 使用 interpolate 方法进行线性插值填充缺失的时间值 df['Time'] = df['Time'].interpolate(method='time') # 分离数值型数据 numerical_cols = df.select_dtypes(include=[np.number]).columns # 填充数值型数据的缺失值,使用中位数填充 for col in numerical_cols: df[col].fillna(df[col].median(), inplace=True) # 分离分类型数据 categorical_cols = df.select_dtypes(include=['object']).columns # 填充分类型数据的缺失值,使用众数填充 for col in categorical_cols: df[col].fillna(df[col].mode()[0], inplace=True) # 将结果保存为CSV文件 df.to_csv(result_file_path, index=False, header=False) # 构建返回数据,只返回文件路径 return jsonify({ 'code': 200, 'msg': '文件处理完成', }) except Exception as e: return jsonify({ 'code': 500, 'msg': str(e) }) # 补全3--众数填充 @app.route('/mode_data', methods=['POST']) def process_data3(): try: # 检查请求体中是否包含文件地址 data = request.json if 'file_url' not in data: return jsonify({'code': 400, 'msg': 'No file URL provided'}) file_url = request.json.get('file_url') result_file_path = request.json.get('result_file_path') # 读取数据集 df = pd.read_csv('{0}'.format(file_url)) # 检查是否存在时间列 if 'Time' in df.columns: # 提取时间列并转换为 datetime 类型 df['Time'] = pd.to_datetime(df['Time'], errors='coerce') # 对时间列进行排序,确保时间顺序 df.sort_values('Time', inplace=True) # 使用 interpolate 方法进行线性插值填充缺失的时间值 df['Time'] = df['Time'].interpolate(method='time') # 分离数值型数据 numerical_cols = df.select_dtypes(include=[np.number]).columns # 填充数值型数据的缺失值,使用众数填充 for col in numerical_cols: df[col].fillna(df[col].mode()[0], inplace=True) # 分离分类型数据 categorical_cols = df.select_dtypes(include=['object']).columns # 填充分类型数据的缺失值,使用众数填充 for col in categorical_cols: df[col].fillna(df[col].mode()[0], inplace=True) # 将结果保存为CSV文件 df.to_csv(result_file_path, index=False, header=False) # 构建返回数据,只返回文件路径 return jsonify({ 'code': 200, 'msg': '文件处理完成', }) except Exception as e: return jsonify({ 'code': 500, 'msg': str(e) }) # #补全4--常数填充 @app.route('/constant_data', methods=['POST']) def process_data4(): try: # 检查请求体中是否包含文件地址 data = request.json if 'file_url' not in data: return jsonify({'code': 400, 'msg': 'No file URL provided'}) file_url = request.json.get('file_url') result_file_path = request.json.get('result_file_path') # 读取数据集 df = pd.read_csv('{0}'.format(file_url)) # 检查是否存在时间列 if 'Time' in df.columns: # 提取时间列并转换为 datetime 类型 df['Time'] = pd.to_datetime(df['Time'], errors='coerce') # 对时间列进行排序,确保时间顺序 df.sort_values('Time', inplace=True) # 使用 interpolate 方法进行线性插值填充缺失的时间值 df['Time'] = df['Time'].interpolate(method='time') # 分离数值型数据和分类型数据 numerical_cols = df.select_dtypes(include=[np.number]).columns categorical_cols = df.select_dtypes(include=['object']).columns # 定义常数填充值,这里以0为例 constant_value = 0 # 填充数值型数据的缺失值,使用常数填充 for col in numerical_cols: df[col].fillna(constant_value, inplace=True) # 填充分类型数据的缺失值,使用常数0填充 constant_value_categorical = '0' # 或者其他认为合适的值 for col in categorical_cols: df[col].fillna(constant_value_categorical, inplace=True) # 将结果保存为CSV文件 df.to_csv(result_file_path, index=False, header=False) # 构建返回数据,只返回文件路径 return jsonify({ 'code': 200, 'msg': '文件处理完成', }) except Exception as e: return jsonify({ 'code': 500, 'msg': str(e) }) # #补全5--K-最近邻填充 @app.route('/K_data', methods=['POST']) def process_data5(): try: # 检查请求体中是否包含文件地址 data = request.json if 'file_url' not in data: return jsonify({'code': 400, 'msg': 'No file URL provided'}) file_url = request.json.get('file_url') result_file_path = request.json.get('result_file_path') # 读取数据集 df = pd.read_csv('{0}'.format(file_url)) # 检查是否存在时间列并处理 if 'Time' in df.columns: df['Time'] = pd.to_datetime(df['Time'], errors='coerce') df.sort_values('Time', inplace=True) df['Time'] = df['Time'].interpolate(method='time') # 分离数值型数据 numerical_cols = df.select_dtypes(include=[np.number]).columns # 使用 KNN 填充数值型数据的缺失值 imputer = KNNImputer(n_neighbors=2) df[numerical_cols] = imputer.fit_transform(df[numerical_cols]) # 分离分类型数据 categorical_cols = df.select_dtypes(include=['object']).columns # 填充分类型数据的缺失值,使用众数填充 for col in categorical_cols: df[col].fillna(df[col].mode()[0], inplace=True) # 将结果保存为CSV文件 df.to_csv(result_file_path, index=False, header=False) # 构建返回数据,只返回文件路径 return jsonify({ 'code': 200, 'msg': '文件处理完成', }) except Exception as e: return jsonify({ 'code': 500, 'msg': str(e) }) if __name__ == '__main__': app.run(debug=True, port=10000, host='0.0.0.0')