2catycm commited on
Commit
2307f32
·
1 Parent(s): 8846ec1

feat: 第一题基本完成

Browse files
Files changed (1) hide show
  1. app.py +86 -2
app.py CHANGED
@@ -1,4 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import streamlit as st
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
- x = st.slider('Select a value')
4
- st.write(x, 'squared is', x * x)
 
 
 
 
1
+ """
2
+ TODO
3
+ """
4
+ # 首先计算相对路径
5
+ from pathlib import Path
6
+ this_file = Path(__file__).resolve()
7
+ this_directory = this_file.parent
8
+ data_cangzhou_folder = this_directory / "data/Cangzhou"
9
+ data_static_folder = data_cangzhou_folder / "static"
10
+
11
+ # 数据文件夹路径
12
+ data_folder = data_static_folder
13
+
14
+ # 然后
15
  import streamlit as st
16
+ import pandas as pd
17
+ import os
18
+ from datetime import datetime
19
+
20
+ # 设置页面配置为宽屏模式,以便更好地显示三个图表
21
+ st.set_page_config(layout="wide")
22
+
23
+ # 设置应用标题
24
+ st.title("多图表可视化展示")
25
+
26
+ # 创建三个等宽的列
27
+ col1, col2, col3 = st.columns(3)
28
+
29
+
30
+ # 加载和过滤数据的函数
31
+ def load_and_filter_data(file_path):
32
+ # 根据提供的CSV格式,第一列是时间戳但没有列名
33
+ df = pd.read_csv(file_path, header=0, names=['timestamp', 'pm2d5', 'lat', 'lon'])
34
+
35
+ # 确保时间戳列是datetime格式
36
+ df['timestamp'] = pd.to_datetime(df['timestamp'])
37
+
38
+ # 过滤2019-01-01 00:00:00到2019-01-01 12:00:00之间的数据
39
+ start_time = datetime(2019, 1, 1, 0, 0, 0)
40
+ end_time = datetime(2019, 1, 1, 12, 0, 0)
41
+ filtered_df = df[(df['timestamp'] >= start_time) & (df['timestamp'] <= end_time)]
42
+
43
+ return filtered_df
44
+
45
+ # 第一列:PM2.5随时间变化的折线图
46
+ with col1:
47
+ st.header("PM2.5随时间变化")
48
+
49
+ # 获取数据文件夹中的所有CSV文件
50
+ csv_files = [f for f in os.listdir(data_folder) if f.endswith('.csv')]
51
+
52
+ # 创建字典存储每个传感器的数据
53
+ sensor_data = {}
54
+
55
+ # 加载并过滤每个传感器的数据
56
+ for file in csv_files:
57
+ file_path = os.path.join(data_folder, file)
58
+ sensor_name = file.split('.')[0] # 从文件名提取传感器名称
59
+ sensor_data[sensor_name] = load_and_filter_data(file_path)
60
+
61
+ # 准备可视化数据
62
+ # 创建一个以时间戳为索引,每个传感器的PM2.5值为列的数据框
63
+ chart_data = pd.DataFrame()
64
+
65
+ for sensor, data in sensor_data.items():
66
+ # 使用pm2d5列作为PM2.5数据
67
+ chart_data[sensor] = data.set_index('timestamp')['pm2d5']
68
+
69
+ # 绘制折线图
70
+ st.line_chart(
71
+ chart_data,
72
+ x=None, # 使用索引(timestamp)作为x轴
73
+ y=list(sensor_data.keys()), # 使用所有传感器名称作为y列
74
+ x_label="时间",
75
+ y_label="PM2.5水平"
76
+ )
77
+
78
+ # 第二列:第二个图表(您可以根据需要自定义)
79
+ with col2:
80
+ st.header("第二个图表")
81
+ # 这里添加第二个图表的代码
82
+ st.write("在这里添加您的第二个图表")
83
 
84
+ # 第三列:第三个图表(您可以根据需要自定义)
85
+ with col3:
86
+ st.header("第三个图表")
87
+ # 这里添加第三个图表的代码
88
+ st.write("在这里添加您的第三个图表")