使用R语言从Air_condition.csv文件中读取数据并将数据分配给不同的变量

90 篇文章 ¥59.90 ¥99.00
本文介绍了如何在R语言中读取Air_condition.csv文件,并将数据分配给不同的变量。首先设置工作目录,然后使用read.csv函数读取CSV文件到数据框,最后将数据框的列分配给temperature和humidity两个变量。

使用R语言从Air_condition.csv文件中读取数据并将数据分配给不同的变量

在R语言中,我们可以使用read.csv()函数来读取CSV文件中的数据。首先,确保你已经将Air_condition.csv文件放置在当前工作目录中。然后,可以按照以下步骤读取数据并将其分配给不同的变量。

步骤1: 设置工作目录
首先,我们需要设置工作目录来指定CSV文件所在的位置。你可以使用setwd()函数来设置工作目录。假设CSV文件位于名为"data"的文件夹中,你可以使用以下代码设置工作目录:

setwd("path_to_folder/data")

请确保将"path_to_folder"替换为包含CSV文件的实际文件夹路径。

步骤2: 读取CSV文件
接下来,我们使用read.csv()函数读取CSV文件的内容,并将其存储在一个数据框(data frame)中。数据框是R中一种常用的数据结构,用于存储和操作表格数据。以下是读取CSV文件并将其存储在数据框中的代码:

data <- read.csv("Air_condition.csv")

在这里,我们将CSV文件的内容读取到名为"data"的数据框中。

步骤3: 分配数据给不同的变量
一旦数据存储在数据框中,我们可以通过将数据框的列分配给不同的变量来访问和操作数据。假设CSV文件中包含两列数据,分别是"tempera

# 先检查 pandas 是否安装 try: import pandas as pd except ImportError: print("错误:未检测到 pandas 库,请先执行 'pip install pandas' 安装依赖!") import sys sys.exit(1) import os # 明确指定桌面路径(Windows 系统 ringyy 用户桌面) DESKTOP_PATH = r"C:\Users\ringyy\Desktop" # 使用原始字符串避免转义问题 # -------------------------- # 1. 数据预处理函数 # -------------------------- def preprocess_data(file_name): """ 功能:读取传感器数据,清洗异常值、填充缺失值,提取关键特征 参数:file_name → 传感器数据文件名(如 'sensor_data.csv',文件需放在桌面) 返回:预处理后的特征数据(DataFrame) """ # 拼接桌面路径和文件名 file_path = os.path.join(DESKTOP_PATH, file_name) try: # 读取 CSV 数据 data = pd.read_csv(file_path) except FileNotFoundError: print(f"错误:找不到文件 {file_path},请检查路径或文件名!") return pd.DataFrame() # 返回空 DataFrame # 清洗异常值(温度、湿度设合理范围) valid_data = data[ (data['温度'] > -20) & (data['温度'] < 80) & # 温度:-20~80℃(合理范围) (data['湿度'] > 0) & (data['湿度'] < 100) # 湿度:0~100%RH(合理范围) ] # 填充缺失值(前向填充 + 后向填充,简单有效) cleaned_data = valid_data.fillna(method='ffill').fillna(method='bfill') # 提取关键特征(温度、湿度、AQI) features = cleaned_data[['温度', '湿度', 'AQI']] return features # -------------------------- # 2. 空调状态推理函数 # -------------------------- def control_air_condition(temperature, humidity, aqi, season): """ 功能:根据环境数据 + 季节,推理空调应执行的状态 参数: - temperature → 温度(℃) - humidity → 湿度(%RH) - aqi → 空气质量指数 - season → 季节(字符串:'夏季' 或 '冬季',可扩展) 返回:空调状态(字符串:'制冷'/'制热'/'净化'/'待机') """ if season == '夏季': # 夏季逻辑:高温低湿 → 制冷;空气质量差 → 净化 if temperature > 30 and humidity < 40: return "制冷" elif aqi > 150: return "净化" elif season == '冬季': # 冬季逻辑:低温高湿 → 制热;空气质量差 → 净化 if temperature < 20 and humidity > 60: return "制热" elif aqi > 150: return "净化" # 无匹配规则 → 待机 return "待机" # -------------------------- # 3. 模型验证函数 # -------------------------- def evaluate_model(test_data): """ 功能:用测试用例验证空调推理逻辑是否正确 参数:test_data → 列表,每个元素是(温度, 湿度, AQI, 季节, 预期状态) 返回:准确率(正确数/总用例数) """ correct_count = 0 total_cases = len(test_data) for temp, humi, aqi, season, expected in test_data: # 调用推理函数 result = control_air_condition(temp, humi, aqi, season) # 打印测试过程 print(f"测试用例:温度{temp}℃, 湿度{humi}%, AQI{aqi}, 季节{season}") print(f"预期状态:{expected} → 实际输出:{result}") print("-" * 30) # 统计正确数 if result == expected: correct_count += 1 # 计算准确率 accuracy = correct_count / total_cases if total_cases > 0 else 0 print(f"模型准确率:{accuracy:.2%}({correct_count}/{total_cases})") return accuracy # -------------------------- # 4. 主程序(整合流程) # -------------------------- def main(): """ 完整流程: 1. 预处理传感器数据(从桌面读取) → 2. 用第一条数据推理空调状态 → 3. 用测试用例验证逻辑 """ # --- 步骤 1:数据预处理 --- # 替换为你实际的数据文件名,确保文件在桌面路径下 sensor_file_name = "test.csv" # 修改为 test.csv sensor_data = preprocess_data(sensor_file_name) if sensor_data.empty: print("数据预处理失败,程序终止!") return # --- 步骤 2:用真实数据推理空调状态 --- # 取第一条预处理后的数据 first_data = sensor_data.iloc[0] temp = first_data['温度'] humi = first_data['湿度'] aqi = first_data['AQI'] season = '夏季' # 可扩展为自动获取季节(如从系统时间) # 推理打印结果 air_status = control_air_condition(temp, humi, aqi, season) print(f"\n=== 实时环境推理 ===") print(f"当前环境:温度{temp}℃, 湿度{humi}%, AQI{aqi}(季节:{season})") print(f"空调应执行状态:{air_status}\n") # --- 步骤 3:用测试用例验证逻辑 --- test_cases = [ # (温度, 湿度, AQI, 季节, 预期状态) (32, 35, 80, '夏季', '制冷'), # 高温低湿 → 制冷 (18, 65, 200, '冬季', '制热'), # 低温高湿 → 制热 (25, 50, 120, '夏季', '待机'), # 正常环境 → 待机 (22, 45, 180, '冬季', '净化') # 空气质量差 → 净化 ] print(f"\n=== 模型验证({len(test_cases)} 条用例)===") evaluate_model(test_cases) # -------------------------- # 5. 程序入口 # -------------------------- if __name__ == "__main__": main() 读取不到桌面.csv文件怎么办
06-18
``` import os import pandas as pd from prophet import Prophet from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score import matplotlib.pyplot as plt import numpy as np # 数据加载与清洗函数 def load_and_clean_data(folder_path): all_files = [ os.path.join(folder_path, f) for f in os.listdir(folder_path) if f.endswith('.csv') and '阜阳' in f ] list_df = [] for filename in all_files: try: # 读取CSV文件,假设列之间由多个空格分隔 df = pd.read_csv( filename, delim_whitespace=True, header=None, names=[ 'Year', 'Month', 'Day', 'Hour', 'Air Temperature', 'Dew Point Temperature', 'Sea Level Pressure', 'Wind Direction', 'Wind Speed Rate', 'Sky Condition Total Coverage Code', 'Liquid Precipitation 1H', 'Liquid Precipitation 6H' ], dtype={'Year': int, 'Month': int, 'Day': int, 'Hour': int} ) # 处理温度数据 df['Air Temperature'] = pd.to_numeric(df['Air Temperature'], errors='coerce') / 10 df.replace(-999.9, np.nan, inplace=True) # 假设-9999/10为缺失值 # 生成时间戳 df['Datetime'] = pd.to_datetime( df[['Year', 'Month', 'Day', 'Hour']], format='%Y%m%d%H', errors='coerce' ) # 删除无效时间和缺失值 df = df.dropna(subset=['Datetime', 'Air Temperature']) df = df[['Datetime', 'Air Temperature']].set_index('Datetime') list_df.append(df) except Exception as e: print(f"Error processing {filename}: {str(e)}") # 合重采样为3小时频率 full_df = pd.concat(list_df).sort_index() full_df = full_df.resample('3H').mean().ffill() # 前向填充缺失值 return full_df # 加载数据 folder_path = 'E:/11/阜阳气象数据' df = load_and_clean_data(folder_path).reset_index() df.columns = ['ds', 'y'] # 划分数据集 train_df = df[df['ds'] < '2021-01-01'] test_df = df[df['ds'] >= '2021-01-01'] # 初始化Prophet模型 model = Prophet( yearly_seasonality=True, weekly_seasonality=True, daily_seasonality=False, changepoint_prior_scale=0.05 # 调整趋势变化灵敏度 ) # 添加自定义季节性 model.add_seasonality(name='quarterly', period=91.25, fourier_order=8) model.add_seasonality(name='monthly', period=30.5, fourier_order=5) # 训练模型 model.fit(train_df) # 生成未来数据框(预测到2023年底) future = model.make_future_dataframe( periods=int(3 * 365 * 24 / 3), # 3年数据(2021-2023) freq='3H', include_history=False ) # 执行预测 forecast = model.predict(future) # 评估性能 merged = test_df.merge(forecast[['ds', 'yhat']], on='ds', how='inner') mse = mean_squared_error(merged['y'], merged['yhat']) mae = mean_absolute_error(merged['y'], merged['yhat']) r2 = r2_score(merged['y'], merged['yhat']) print(f""" Model Performance: - MSE: {mse:.2f} - MAE: {mae:.2f} - R²: {r2:.2f} """) # 可视化结果 fig1 = model.plot(forecast) plt.title('Temperature Forecast') fig2 = model.plot_components(forecast) # 提取趋势变化点 changepoints = model.changepoints trend_changes = forecast.loc[changepoints, 'trend'].diff().dropna() print("Significant trend changes at:") print(trend_changes[abs(trend_changes) > 0.5]) # 显示显著变化点 # 保存预测结果 forecast[['ds', 'yhat']].to_csv('fuyang_forecast_2021-2023.csv', index=False)```Error processing E:/11/阜阳气象数据\2003阜阳.csv: invalid literal for int() with base 10: ‘2003,1,1,0,-38,-48,10338,90,20,0,-9999,0’
03-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值