wolfvoid commited on
Commit
2572fca
·
verified ·
1 Parent(s): 62aaa7e

Upload folder using huggingface_hub

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. README.md +7 -0
  2. preprocess.py +201 -0
  3. preprocess2.py +22 -0
  4. 深部位移/深部位移_0_新晃化溪.csv +0 -0
  5. 深部位移/深部位移_0_沅陵县五.csv +0 -0
  6. 深部位移/深部位移_0_洪江市黔.csv +0 -0
  7. 深部位移/深部位移_0_洪江市龙.csv +0 -0
  8. 深部位移/深部位移_0_溆浦县均.csv +0 -0
  9. 深部位移/深部位移_0_芷江县罗.csv +0 -0
  10. 深部位移/深部位移_0_芷江禾梨.csv +0 -0
  11. 深部位移/深部位移_0_辰溪孝坪.csv +0 -0
  12. 深部位移/深部位移_0_靖州流坪.csv +0 -0
  13. 深部位移/深部位移_0_麻阳岩门.csv +0 -0
  14. 深部位移/深部位移_1_新晃化溪.csv +0 -0
  15. 深部位移/深部位移_1_沅陵县五.csv +0 -0
  16. 深部位移/深部位移_1_洪江市黔.csv +0 -0
  17. 深部位移/深部位移_1_洪江市龙.csv +0 -0
  18. 深部位移/深部位移_1_溆浦县均.csv +0 -0
  19. 深部位移/深部位移_1_芷江县罗.csv +0 -0
  20. 深部位移/深部位移_1_芷江禾梨.csv +0 -0
  21. 深部位移/深部位移_1_辰溪孝坪.csv +0 -0
  22. 深部位移/深部位移_1_靖州流坪.csv +0 -0
  23. 深部位移/深部位移_1_麻阳岩门.csv +0 -0
  24. 深部位移/深部位移_2_新晃化溪.csv +0 -0
  25. 深部位移/深部位移_2_沅陵县五.csv +0 -0
  26. 深部位移/深部位移_2_洪江市黔.csv +0 -0
  27. 深部位移/深部位移_2_洪江市龙.csv +0 -0
  28. 深部位移/深部位移_2_溆浦县均.csv +0 -0
  29. 深部位移/深部位移_2_芷江县罗.csv +0 -0
  30. 深部位移/深部位移_2_芷江禾梨.csv +0 -0
  31. 深部位移/深部位移_2_辰溪孝坪.csv +0 -0
  32. 深部位移/深部位移_2_靖州流坪.csv +0 -0
  33. 深部位移/深部位移_2_麻阳岩门.csv +0 -0
  34. 深部位移/深部位移_3_新晃化溪.csv +0 -0
  35. 深部位移/深部位移_3_沅陵县五.csv +0 -0
  36. 深部位移/深部位移_3_洪江市黔.csv +0 -0
  37. 深部位移/深部位移_3_洪江市龙.csv +0 -0
  38. 深部位移/深部位移_3_溆浦县均.csv +0 -0
  39. 深部位移/深部位移_3_芷江县罗.csv +0 -0
  40. 深部位移/深部位移_3_芷江禾梨.csv +0 -0
  41. 深部位移/深部位移_3_辰溪孝坪.csv +0 -0
  42. 深部位移/深部位移_3_靖州流坪.csv +0 -0
  43. 深部位移/深部位移_3_麻阳岩门.csv +0 -0
  44. 深部位移/深部位移_4_新晃化溪.csv +0 -0
  45. 深部位移/深部位移_4_沅陵县五.csv +0 -0
  46. 深部位移/深部位移_4_洪江市黔.csv +0 -0
  47. 深部位移/深部位移_4_洪江市龙.csv +0 -0
  48. 深部位移/深部位移_4_溆浦县均.csv +0 -0
  49. 深部位移/深部位移_4_芷江县罗.csv +0 -0
  50. 深部位移/深部位移_4_芷江禾梨.csv +0 -0
README.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+
2
+
3
+ 这里对于5个特征分开,并对时间序列进行平滑,确保每10分钟都有一个数据点。
4
+
5
+ Total removed duplicates: 1926788
6
+ Total added smooth data: 6641770
7
+ Total final rows: 14093265
preprocess.py ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import re
3
+ import pandas as pd
4
+ from tqdm import tqdm
5
+ from datetime import datetime, timedelta
6
+
7
+ # 从分地点csv转换为分变量csv
8
+ def process_csv_files(input_dir, output_dir):
9
+ """
10
+ 遍历指定目录下的所有.csv文件,并按要求处理数据。
11
+ :param input_dir: 输入目录,包含原始.csv文件
12
+ :param output_dir: 输出目录,保存处理后的.csv文件
13
+ """
14
+ # 定义关键词列表
15
+ KEYWORDS = ["表面位移", "表面裂缝", "深部位移", "温度", "雨量"]
16
+ # 遍历输入目录中的所有文件
17
+ for file_name in os.listdir(input_dir):
18
+ # if file_name == "辰溪孝坪镇江东村山体滑坡.csv":
19
+ if file_name.endswith(".csv"): # 确保是.csv文件
20
+ # 获取文件名前4个字作为A
21
+ A = file_name[:4]
22
+ print(f"Processing file: {file_name}, A = {A}")
23
+
24
+ # 读取CSV文件
25
+ file_path = os.path.join(input_dir, file_name)
26
+ df = pd.read_csv(file_path)
27
+
28
+ # 遍历每个关键词
29
+ for keyword in KEYWORDS:
30
+ print(f"processing {keyword}")
31
+ # 创建一个空的字典,用于存储每个设备名称对应的数据
32
+ device_data_dict = {}
33
+ device_counter = 0 # 用于记录每个关键词下的设备名称编号
34
+
35
+ # 遍历每一行数据
36
+ for index, row in tqdm(df.iterrows(), total=len(df), desc=f"file_name={file_name}, keyword={keyword}"):
37
+ # 检查设备名称是否包含当前关键词
38
+ if re.search(keyword, row["设备名称"]):
39
+ # 如果设备名称包含关键词,提取设备名称、时间、采集值x、y、z
40
+ device_name = row["设备名称"]
41
+ data = row[["时间", "采集值x", "采集值y", "采集值z"]]
42
+
43
+ # 如果设备名称第一次出现,分配一个编号
44
+ if device_name not in device_data_dict:
45
+ device_data_dict[device_name] = {"data": [], "id": device_counter}
46
+ device_counter += 1
47
+
48
+ # 获取设备名称的编号
49
+ device_id = device_data_dict[device_name]["id"]
50
+
51
+ # 追加数据到对应设备名称的列表中
52
+ device_data_dict[device_name]["data"].append(data)
53
+
54
+ # 保存每个设备名称编号对应的数据为新的CSV文件
55
+ for device_name, info in device_data_dict.items():
56
+ device_id = info["id"]
57
+ data_list = info["data"]
58
+
59
+ # 将数据列表转换为DataFrame
60
+ device_df = pd.DataFrame(data_list, columns=["时间", "采集值x", "采集值y", "采集值z"])
61
+
62
+ # 确保输出目录存在
63
+ keyword_output_dir = os.path.join(output_dir, keyword)
64
+ os.makedirs(keyword_output_dir, exist_ok=True)
65
+
66
+ # 保存为新的CSV文件
67
+ output_file_name = f"{keyword}_{device_id}_{A}.csv"
68
+ output_file_path = os.path.join(keyword_output_dir, output_file_name)
69
+ device_df.to_csv(output_file_path, index=False)
70
+ print(f"Saved file: {output_file_path}")
71
+
72
+
73
+ # 函数1:删除完全相同的重复记录
74
+ def remove_duplicates(data_list):
75
+ seen = set()
76
+ result = []
77
+ duplicate_count = 0 # 用于统计删除的重复记录数
78
+ for item in data_list:
79
+ if item not in seen:
80
+ seen.add(item)
81
+ result.append(item)
82
+ else:
83
+ duplicate_count += 1
84
+ print(f"origin_len:{len(data_list)}")
85
+ print(f"after_duplication_len:{len(result)}")
86
+ print(f"Removed duplicates: {duplicate_count}")
87
+ return result, duplicate_count
88
+
89
+
90
+ # 函数2:对时间不连续的部分进行平滑过渡填充
91
+ def smooth_data(data_list):
92
+ if not data_list or len(data_list) < 2:
93
+ return data_list, 0
94
+
95
+ # 解析时间戳和值
96
+ def parse_timestamp_and_value(record):
97
+ parts = record.strip().split(',')
98
+ timestamp_str = parts[0]
99
+ values = [float(x) if x != 'NaN' and x != '' else 0.0 for x in parts[1:]] # 如果是NaN,转换为0
100
+ timestamp = datetime.fromisoformat(timestamp_str.replace('+08', '+0800'))
101
+ return timestamp, values
102
+
103
+ # 格式化为字符串
104
+ def format_record(timestamp, values):
105
+ timestamp_str = timestamp.strftime('%Y-%m-%d %H:%M:%S%z').replace('+0800', '+08')
106
+ values_str = ','.join(f"{v:.10f}" for v in values) # 使用通用格式化,保留足够的精度
107
+ return f"{timestamp_str},{values_str}\n"
108
+
109
+ header = data_list[0] # 提取表头
110
+ data_list = data_list[1:]
111
+ result = [header]
112
+ supply_count = 0 # 用于统计添加的平滑数据数
113
+ for i in tqdm(range(len(data_list) - 1), desc="Processing data", unit="step"):
114
+ current_timestamp, current_values = parse_timestamp_and_value(data_list[i])
115
+ next_timestamp, next_values = parse_timestamp_and_value(data_list[i + 1])
116
+ # 确保 current_values 和 next_values 的长度一致
117
+ if len(current_values) != len(next_values):
118
+ raise ValueError(f"数据行 {i} 和 {i+1} 的列数不一致")
119
+ result.append(format_record(current_timestamp, current_values))
120
+ # 如果时间差超过10分钟,进行平滑过渡填充
121
+ time_diff = (next_timestamp - current_timestamp).total_seconds() / 60
122
+ if time_diff > 10:
123
+ steps = int(time_diff / 10)
124
+ supply_count += steps - 1
125
+ value_steps = [(next_values[j] - current_values[j]) / steps for j in range(len(current_values))]
126
+ for step in range(1, steps):
127
+ new_timestamp = current_timestamp + timedelta(minutes=step * 10)
128
+ new_values = [current_values[j] + step * value_steps[j] for j in range(len(current_values))]
129
+ result.append(format_record(new_timestamp, new_values))
130
+ # 添加最后一个数据点
131
+ last_timestamp, last_values = parse_timestamp_and_value(data_list[-1])
132
+ result.append(format_record(last_timestamp, last_values))
133
+ print(f"supply_num={supply_count}")
134
+ return result, supply_count
135
+
136
+
137
+ # 对单个文件:读取文件、调用处理函数、写回文件
138
+ def dep_and_smooth(input_file, output_file):
139
+ try:
140
+ # 读取文件内容
141
+ with open(input_file, 'r') as file:
142
+ data_list = file.readlines()
143
+ # 删除重复记录
144
+ print("Removing duplicates...")
145
+ data_list, duplicate_count = remove_duplicates(data_list)
146
+ # 对时间不连续的部分进行平滑过渡填充
147
+ print("Smoothing data...")
148
+ data_list, supply_count = smooth_data(data_list)
149
+ # 写回文件
150
+ with open(output_file, 'w') as file:
151
+ file.writelines(data_list)
152
+ print(f"处理完成,结果已写入 {output_file}")
153
+ return duplicate_count, supply_count, len(data_list)
154
+ except Exception as e:
155
+ print(f"处理过程中发生错误:{e}")
156
+ return 0, 0, 0
157
+
158
+
159
+ # 函数4:遍历文件夹并处理所有文件
160
+ def process_folder(input_folder, output_folder):
161
+ total_duplicate_count = 0
162
+ total_supply_count = 0
163
+ total_final_row_count = 0
164
+
165
+ # 确保输出文件夹存在
166
+ if not os.path.exists(output_folder):
167
+ os.makedirs(output_folder)
168
+
169
+ # 遍历输入文件夹
170
+ for root, dirs, files in os.walk(input_folder):
171
+ for file in files:
172
+ if file.endswith('.csv'):
173
+ # 构建输入文件路径
174
+ input_file_path = os.path.join(root, file)
175
+ # 构建输出文件路径
176
+ relative_path = os.path.relpath(root, input_folder)
177
+ output_subfolder = os.path.join(output_folder, relative_path)
178
+ if not os.path.exists(output_subfolder):
179
+ os.makedirs(output_subfolder)
180
+ output_file_path = os.path.join(output_subfolder, file)
181
+ # 处理文件
182
+ print(f"Processing file: {input_file_path}")
183
+ duplicate_count, supply_count, final_row_count = dep_and_smooth(input_file_path, output_file_path)
184
+ total_duplicate_count += duplicate_count
185
+ total_supply_count += supply_count
186
+ total_final_row_count += final_row_count
187
+
188
+ print(f"Total removed duplicates: {total_duplicate_count}")
189
+ print(f"Total added smooth data: {total_supply_count}")
190
+ print(f"Total final rows: {total_final_row_count}")
191
+
192
+
193
+ if __name__ == "__main__":
194
+ process_folder(
195
+ input_folder="/home/mby/time-series-transformer-demo/datasets/category_data",
196
+ output_folder="/home/mby/time-series-transformer-demo/datasets/category_data_processed"
197
+ )
198
+
199
+ # dep_and_smooth(
200
+ # input_file="/home/mby/time-series-transformer-demo/datasets/category_data/表面裂缝/表面裂缝_0_辰溪孝坪.csv",
201
+ # output_file="/home/mby/time-series-transformer-demo/datasets/category_data/out.csv")
preprocess2.py ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import pandas as pd
3
+
4
+ def save_csv_files(folder_path):
5
+ # 遍历文件夹及其子文件夹
6
+ for root, dirs, files in os.walk(folder_path):
7
+ for filename in files:
8
+ # 检查文件是否为CSV文件
9
+ if filename.endswith(".csv"):
10
+ file_path = os.path.join(root, filename)
11
+ try:
12
+ # 读取CSV文件
13
+ df = pd.read_csv(file_path)
14
+ # 重新保存CSV文件(覆盖原文件)
15
+ df.to_csv(file_path, index=False, encoding="utf-8-sig")
16
+ print(f"Re-saved file: {file_path}")
17
+ except Exception as e:
18
+ print(f"Error processing file {file_path}: {e}")
19
+
20
+ # 指定要处理的文件夹路径
21
+ folder_path = input("请输入要处理的文件夹路径:")
22
+ save_csv_files(folder_path)
深部位移/深部位移_0_新晃化溪.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_0_沅陵县五.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_0_洪江市黔.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_0_洪江市龙.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_0_溆浦县均.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_0_芷江县罗.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_0_芷江禾梨.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_0_辰溪孝坪.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_0_靖州流坪.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_0_麻阳岩门.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_1_新晃化溪.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_1_沅陵县五.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_1_洪江市黔.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_1_洪江市龙.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_1_溆浦县均.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_1_芷江县罗.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_1_芷江禾梨.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_1_辰溪孝坪.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_1_靖州流坪.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_1_麻阳岩门.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_2_新晃化溪.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_2_沅陵县五.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_2_洪江市黔.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_2_洪江市龙.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_2_溆浦县均.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_2_芷江县罗.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_2_芷江禾梨.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_2_辰溪孝坪.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_2_靖州流坪.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_2_麻阳岩门.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_3_新晃化溪.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_3_沅陵县五.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_3_洪江市黔.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_3_洪江市龙.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_3_溆浦县均.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_3_芷江县罗.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_3_芷江禾梨.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_3_辰溪孝坪.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_3_靖州流坪.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_3_麻阳岩门.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_4_新晃化溪.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_4_沅陵县五.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_4_洪江市黔.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_4_洪江市龙.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_4_溆浦县均.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_4_芷江县罗.csv ADDED
The diff for this file is too large to render. See raw diff
 
深部位移/深部位移_4_芷江禾梨.csv ADDED
The diff for this file is too large to render. See raw diff