wuww
2025-05-07 fd659f0013b866f6cad1580a2577d92b4cb9f9e0
生成降雨文件.py
已添加1个文件
113 ■■■■■ 文件已修改
data/CreatRainfall.py 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
data/CreatRainfall.py
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,113 @@
import sys
import numpy as np
import pandas as pd
def generate_normal_distribution(rainfall_total, max_intensity, duration):
    """
    ç”Ÿæˆæ­£æ€åˆ†å¸ƒçš„降雨数据
    :param rainfall_total: é™é›¨æ€»é‡
    :param max_intensity: æœ€å¤§é›¨å¼º
    :param duration: é™é›¨æ—¶é—´ï¼ˆåˆ†é’Ÿï¼‰
    :return: é™é›¨æ•°æ®åˆ—表
    """
    mean = rainfall_total / duration
    std_dev = (max_intensity - mean) / 3
    rainfall = np.random.normal(mean, std_dev, duration)
    rainfall = np.clip(rainfall, 0, None)  # ç¡®ä¿é™é›¨å¼ºåº¦éžè´Ÿ
    rainfall = rainfall * rainfall_total / rainfall.sum()  # å½’一化
    return rainfall
def generate_increasing_distribution(rainfall_total, max_intensity, duration):
    """
    ç”Ÿæˆé€æ¸ä¸Šå‡çš„降雨数据
    :param rainfall_total: é™é›¨æ€»é‡
    :param max_intensity: æœ€å¤§é›¨å¼º
    :param duration: é™é›¨æ—¶é—´ï¼ˆåˆ†é’Ÿï¼‰
    :return: é™é›¨æ•°æ®åˆ—表
    """
    rainfall = np.linspace(0, max_intensity, duration)
    rainfall = rainfall * rainfall_total / rainfall.sum()  # å½’一化
    return rainfall
def generate_uniform_distribution(rainfall_total, max_intensity, duration):
    """
    ç”Ÿæˆå¹³å‡åˆ†å¸ƒçš„降雨数据
    :param rainfall_total: é™é›¨æ€»é‡
    :param max_intensity: æœ€å¤§é›¨å¼º
    :param duration: é™é›¨æ—¶é—´ï¼ˆåˆ†é’Ÿï¼‰
    :return: é™é›¨æ•°æ®åˆ—表
    """
    rainfall = np.full(duration, rainfall_total / duration)
    return rainfall
def generate_fluctuating_distribution(rainfall_total, max_intensity, duration):
    """
    ç”Ÿæˆæ³¢åŠ¨åˆ†å¸ƒçš„é™é›¨æ•°æ®
    :param rainfall_total: é™é›¨æ€»é‡
    :param max_intensity: æœ€å¤§é›¨å¼º
    :param duration: é™é›¨æ—¶é—´ï¼ˆåˆ†é’Ÿï¼‰
    :return: é™é›¨æ•°æ®åˆ—表
    """
    rainfall = np.random.uniform(0, max_intensity, duration)
    rainfall = rainfall * rainfall_total / rainfall.sum()  # å½’一化
    return rainfall
def save_to_file(rainfall, filename):
    """
    å°†é™é›¨æ•°æ®ä¿å­˜åˆ°æ–‡ä»¶
    :param rainfall: é™é›¨æ•°æ®åˆ—表
    :param filename: æ–‡ä»¶å
    """
    df = pd.DataFrame({'rainfall': rainfall})
    df.to_csv(filename, index=False)
if __name__ == "__main__":
    # æ£€æŸ¥å‚数数量(sys.argv[0] æ˜¯è„šæœ¬åç§°ï¼‰
    if len(sys.argv) != 6:
        print("错误:请提供5个参数!")
        print(
            "用法:python è„šæœ¬å.py <参数1-csv文件名> <参数2-降雨模式:正态分布|平均分布|波动平均分布|持续上升> <参数3-降雨总量> <参数4-最大雨强> <参数5-降雨时间(分钟)>")
        sys.exit(1)  # éžé›¶é€€å‡ºç è¡¨ç¤ºé”™è¯¯
    rainfall_total = float(sys.argv[3])
    max_intensity = float(sys.argv[4])
    duration = int(sys.argv[5])
    match sys.argv[2]:
        case "正态分布":
            normal_rainfall = generate_normal_distribution(rainfall_total, max_intensity, duration)
            save_to_file(normal_rainfall, sys.argv[1])
        case "持续上升":
            increasing_rainfall = generate_increasing_distribution(rainfall_total, max_intensity, duration)
            save_to_file(increasing_rainfall, sys.argv[1])
        case "平均分布":
            uniform_rainfall = generate_uniform_distribution(rainfall_total, max_intensity, duration)
            save_to_file(uniform_rainfall, sys.argv[1])
        case "波动平均分布":
            fluctuating_rainfall = generate_fluctuating_distribution(rainfall_total, max_intensity, duration)
            save_to_file(fluctuating_rainfall, sys.argv[1])
        case _:  # æ­£æ€åˆ†å¸ƒï¼Œé»˜è®¤åˆ†æ”¯
            normal_rainfall = generate_normal_distribution(rainfall_total, max_intensity, duration)
            save_to_file(normal_rainfall, sys.argv[1])
    # rainfall_total = 100  # é™é›¨æ€»é‡
    # max_intensity = 10  # æœ€å¤§é›¨å¼º
    # duration = 120  # é™é›¨æ—¶é—´ï¼ˆåˆ†é’Ÿï¼‰
    # ç”Ÿæˆä¸åŒåˆ†å¸ƒçš„降雨数据
    # normal_rainfall = generate_normal_distribution(rainfall_total, max_intensity, duration)
    # increasing_rainfall = generate_increasing_distribution(rainfall_total, max_intensity, duration)
    # uniform_rainfall = generate_uniform_distribution(rainfall_total, max_intensity, duration)
    # fluctuating_rainfall = generate_fluctuating_distribution(rainfall_total, max_intensity, duration)
    # ä¿å­˜åˆ°æ–‡ä»¶
    # save_to_file(normal_rainfall, 'normal_rainfall.csv')
    # save_to_file(increasing_rainfall, 'increasing_rainfall.csv')
    # save_to_file(uniform_rainfall, 'uniform_rainfall.csv')
    # save_to_file(fluctuating_rainfall, 'fluctuating_rainfall.csv')