爱尔兰住宅房价注册数据Plotly空图问题技术求助
问题排查与解决方案
一、非都柏林郡空图问题
1. 抽样数据覆盖不足
从你的数据探索输出可见,当前抽样后的5.8万条数据仅包含Donegal、Westmeath、Galway、Cork、Meath这几个郡的样本,而绘图代码中指定的Wicklow、Kildare在当前抽样集里无匹配数据,直接导致空图。
- 验证:执行
print(df['county'].unique())查看当前抽样数据包含的所有郡 - 解决:调整抽样策略(如按郡分层抽样),确保每个目标郡都有样本;或扩大抽样比例,覆盖更多郡的观测值
2. 字符串匹配精度问题
检查数据中county列的格式是否与代码中完全一致:
- 可能存在格式差异,比如数据中是
Co Wicklow、wicklow(全小写),而代码中用首字母大写的Wicklow,导致isin过滤失效 - 验证:执行
df[df['county'].str.contains('Wicklow', case=False)]查看是否有匹配数据 - 解决:统一
county列格式,比如转成首字母大写:df['county'] = df['county'].str.title(),再进行过滤
3. Groupby后无有效数据
若目标郡有样本但绘图为空,可在循环中添加print(county_grouped),确认聚合后是否有数据输出。若为空,需检查date_of_sale列的datetime格式是否正常(你的数据探索显示格式为datetime64[ns],此问题概率较低)
二、Jupyter及绘图运行缓慢问题
1. 优化抽样策略
当前5.8万条样本仍可能带来计算负担,建议:
- 先聚合再抽样:先按郡+年份计算房价中位数,再基于聚合后的数据绘图,大幅减少数据量
- 分层抽样:按郡分层,每个郡抽取固定比例样本,既保证代表性,又避免单郡样本过多
2. 优化Plotly绘图逻辑
原循环中多次重复过滤+Groupby的效率较低,改为一次性聚合所有目标郡的数据后再绘图:
# 统一county格式 df['county'] = df['county'].str.title() # 筛选目标郡 target_counties = ['Wicklow', 'Kildare', 'Meath', 'Cork'] df_filtered = df[df['county'].isin(target_counties)] # 一次性聚合所有郡的年度中位数 grouped_data = df_filtered.groupby(['county', df_filtered['date_of_sale'].dt.year])['price'].median().reset_index(name='median_price') # 生成子图 fig = make_subplots(rows=len(target_counties), cols=1, subplot_titles=target_counties) # 循环添加轨迹 for i, county in enumerate(target_counties): county_data = grouped_data[grouped_data['county'] == county] fig.add_trace(go.Scatter(x=county_data['date_of_sale'], y=county_data['median_price'], name=county), row=i+1, col=1) # 更新布局并展示 fig.update_layout(height=800, width=800, title='Median Property Prices Over Time', showlegend=False) fig.show()
3. Jupyter环境优化
- 关闭多余内核和浏览器标签,释放内存
- 配置Plotly默认渲染器:
plotly.io.renderers.default = 'notebook' - 超大数据集可改用Dask替代Pandas,避免内存溢出卡顿
内容的提问来源于stack exchange,提问作者CRM
相关产品推荐
相关产品推荐

