def forecast(request): ctx = {'points': []} if request.POST: try: location = request.POST['位置'] la, lo = getCoordinate(request.POST['位置']) except: la = 104.23726561721571 # 所有二手房的均值 lo = 30.520141715355887 location = "不明" keys = ['区', '所处楼层级别', '总楼层数', '建造年份', '面积', '朝向', '是否近地铁'] parameters = [] for i in range(7): value = request.POST[keys[i]] if value == "": parameters.append(-1) elif i == 4: parameters.append(float(value)) else: parameters.append(int(value)) parameters.extend([datetime.datetime.now().year, datetime.datetime.now().month, datetime.datetime.now().day, la, lo]) ctx['预测价格'] = CART(parameters)[0].round(decimals=2) ctx['points'] = json.dumps([{"lng": lo, "lat": la, "name": location}]) # 避免被转义 return render(request, "forecast.html", ctx)
时间: 2024-02-15 21:28:07 浏览: 78
这段代码是一个 Python 函数,用于预测二手房的价格。它首先定义了一个空的字典 `ctx`,以便在后续代码中向其添加键值对。然后,它检查是否有 POST 请求,如果有,则获取请求中的位置信息,并使用 `getCoordinate()` 函数获取对应的经纬度。如果位置信息无法获取,则使用所有二手房的经纬度平均值代替。接下来,函数从 POST 请求中获取输入变量的值,并将这些值存储在一个列表 `parameters` 中。如果某个输入变量的值为空,则将其替换为 -1。如果输入变量是面积,则将其转换为浮点数。否则,将其转换为整数。接着,函数将当前的年、月、日以及经纬度添加到 `parameters` 中。最后,函数使用 `CART()` 函数预测二手房的价格,并将结果四舍五入到小数点后两位。它还将经纬度和位置信息添加到字典 `ctx` 中,并使用 `json.dumps()` 函数将这些信息转换为 JSON 格式。最后,函数将 `ctx` 字典作为上下文变量传递给模板,并使用 `render()` 函数将模板渲染为 HTML 页面。
相关问题
<?xml version="1.0" encoding="utf-8"?> <androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawerLayout" android:layout_width="match_parent" android:layout_height="match_parent"> <androidx.swiperefreshlayout.widget.SwipeRefreshLayout android:id="@+id/swipeRefresh" android:layout_width="match_parent" android:layout_height="match_parent"> <ScrollView android:id="@+id/weatherLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:overScrollMode="never" android:scrollbars="none" android:visibility="invisible"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <include layout="@layout/now" /> <include layout="@layout/forecast" /> <include layout="@layout/life_index" /> </LinearLayout> </ScrollView> </androidx.swiperefreshlayout.widget.SwipeRefreshLayout> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="start" android:clickable="true" android:focusable="true" android:background="@color/colorPrimary"> <fragment android:id="@+id/placeFragment" android:name="com.coldweather.android.ui.place.PlaceFragment" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="25dp"/> </FrameLayout> </androidx.drawerlayout.widget.DrawerLayout>
这是一个 Android 布局文件,使用 DrawerLayout 容器来包含一个 SwipeRefreshLayout 和一个 FrameLayout。SwipeRefreshLayout 包含一个 ScrollView,其中包含一个垂直排列的 LinearLayout,该 LinearLayout 包含了三个布局文件:now、forecast、life_index。而 FrameLayout 则包含了一个名为 "placeFragment" 的 Fragment,该 Fragment 的类为 "com.coldweather.android.ui.place.PlaceFragment"。DrawerLayout 的宽度和高度都设置为 match_parent,以填充整个屏幕。SwipeRefreshLayout 和 FrameLayout 的宽度和高度也都设置为 match_parent。FrameLayout 的重力属性设置为 start,意味着它位于屏幕左侧。而 Fragment 设置了一个 marginTop 属性为 25dp,以在顶部留出一些空间。
def get_algo_sequence(farm_id, start_time, end_time): path = f'forecast/forecast_LGB_MEDIUM/{farm_id}.csv' forecast = [] for pub_time in pd.date_range(start_time, end_time): res = get_short_alg_forecast(farm_id, 'LGB_MEDIUM', pub_time) tmp_power = res['projectPower'] tmp_speed = res['projectWeather'] tmp = pd.DataFrame({'power': tmp_power, 'speed':tmp_speed}, index=pd.date_range(pub_time, periods=len(tmp_power), freq='15min')) tmp['forecast_date'] = pub_time forecast.append(tmp) forecast = pd.concat(forecast) forecast.index += timedelta(hours=8) os.makedirs('forecast/forecast_LGB_MEDIUM/', exist_ok=True) forecast.to_csv(path)
这个函数接受三个参数:`farm_id`、`start_time`和`end_time`。它定义了一个名为`path`的变量,其值是一个字符串,包含了一个文件路径,这个路径包含了`farm_id`作为文件名的一部分,同时指定了一个目录名。接下来,定义了一个名为`forecast`的空列表。然后,使用`for`循环遍历从`start_time`到`end_time`之间的日期范围。在每次循环中,使用`get_short_alg_forecast`函数获取短期算法的预测结果,其中`farm_id`是设施的ID,`'LGB_MEDIUM'`是使用的算法类型,`pub_time`是预测的发布时间。然后将预测结果中的`projectPower`和`projectWeather`数据存储到`tmp_power`和`tmp_speed`变量中。接下来,使用`pd.DataFrame`函数创建一个名为`tmp`的新数据框,其中包含两列,一列是名为`power`的列,其值为`tmp_power`,另一列是名为`speed`的列,其值为`tmp_speed`。数据框的索引是从`pub_time`开始,长度为`len(tmp_power)`,频率为15分钟的时间序列。然后,为`tmp`数据框添加一个名为`forecast_date`的列,其值为`pub_time`。最后将`tmp`数据框添加到`forecast`列表中。在循环结束后,使用`pd.concat`函数将`forecast`列表中的所有数据框连接成一个数据框,并将结果存储到`forecast`变量中。然后,将`forecast`数据框的索引增加8个小时(即将其从UTC时间转换为北京时间)。接下来,使用`os.makedirs`函数创建一个名为`'forecast/forecast_LGB_MEDIUM/'`的目录(如果该目录不存在),用于存储数据框。最后,使用`to_csv`方法将`forecast`数据框保存为CSV文件,文件路径为`path`。
阅读全文