当前位置: 首页 > news >正文

【DeepSeek开发】Python实现纽约房价热力图

​软件环境:PyCharm 2022.3.1和Jupyter Notebook (anaconda3)

数据源:Kaggle的纽约Airbnb开放数据集(含价格、评论、地理位置)

​分析方向:挖掘热门区域、价格影响因素(如评分与预订率的关系)

工具:Pandas + Seaborn(相关性热力图),可生成房源分布热力图

        最近接入DeepSeek的第三方软件层出不穷,像华为云可以在线体验DeepSeek,推理过程几乎无限制生成,但导致因为文本长度受限而无法正常生成结果,界面功能也比较少,只提供文本生成功能。纳米AI搜索接入的模型种类很丰富,不过之前只有移动端,最近才有网页版,而且移动端文本无法复制。

        最后使用下来腾讯元宝的效果比较好,界面很清爽,联网搜索时检索数据库中包含微信公众号里的优质好文,这一点非常有特点,这也能为很多创作者的文章引流。

        而且生成效果相比其他家要好很多,它的推理过程与DeepSeek官网的推理过程非常相似,比如经典的开头“嗯,用户想......”句式,推理过程较长,能比较好的回答问题。生成速度也比较快,没有询问次数限制,不像DeepSeek官网问两句就服务器繁忙了,导致之前感觉DeepSeek的debug功能比较弱。

        但是依旧限制文本生成长度,最多生成200-300行左右的代码,太长了就会直接显示代码长度超过600行无法生成。而且上下文联系和记忆力能力不行,应该是被砍了,希望以后限制能放宽。


一、数据源

        为了继续检测DeepSeek的代码生成能力,我挑选了Kaggle上热度很高、比较经典的数据集——纽约市房源数据集(2019)。

New York City Airbnb Open Datahttps://www.kaggle.com/datasets/dgomonov/new-york-city-airbnb-open-data        根据DeepSeek提供的方案,给出了分析方向和所需工具。

分析方向挖掘热门区域、价格影响因素(如评分与预订率的关系)
工具Pandas + Seaborn(相关性热力图),可生成房源分布热力图

二、纽约房源分析

2.1数据集分析

2.1.1热门区域分析

1.房源集中度

        曼哈顿布鲁克林是房源最集中的区域,占纽约市Airbnb房源总量的70%以上。曼哈顿的房源密度最高,尤其在时代广场、中央公园周边及金融区形成显著热点。皇后区房源数量约为曼哈顿的1/3,但雷哥公园(Rego Park)等新兴区域因性价比高(月租约$2590)、靠近地铁和华人超市,近年需求增长较快。

2.价格分布特征

        曼哈顿平均房价最高(约170/天),细分区域如金融区、上东区可达200-300/天;布鲁克林次之(100−200/天),皇后区部分区域低至50/天。高价房源多集中在市中心和景点周边,如曼哈顿中城(Midtown)和威廉斯堡(Williamsburg)的Loft公寓(日均$400+)。

2.1.2价格影响因素分析

1.核心变量相关性

        房型:整户出租(Entire Home)价格显著高于独立房间(Private Room),相关系数达0.65。例如,曼哈顿整户房源占比超60%,均价200+,而合住房间(SharedRoom)仅占550。

        ​地理位置:纬度(曼哈顿中南部)和经度(靠近哈德逊河)与房价呈强正相关(r=0.42),通过热力图可见深色高密度高价区集中在曼哈顿下城。

        可预订天数(availability_365)​:与价格负相关(r=-0.38),全年可订房源多属长租低价类型,而稀缺性高的短租房源(如旺季限时房源)价格更高。

2.评分与预订率关系

        高评分房源(>4.8)​的预订率比低评分房源(<4.0)高25%,但价格差异仅10%。这表明用户更倾向为高评分支付溢价,但评分对价格的直接影响弱于房型和位置。

        ​评论数量:月均评论数每增加1条,价格提升约$5(r=0.21),反映活跃房源的市场认可度。

2.2代码

纽约市房源热力图数据可视化代码https://download.csdn.net/download/m0_53095310/90437233        下面给出纽约市房源分析部分代码:

# 导入依赖库
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 1. 数据加载与清洗
# 注意:文件路径需替换为实际路径
df = pd.read_csv('AB_NYC_2019.csv')

# 处理价格异常值(删除超过1000美元的数据)
df = df[(df['price'] > 0) & (df['price'] <= 1000)]

# 2. 热门区域分析
plt.figure(figsize=(10,6))
sns.countplot(data=df, x='neighbourhood_group', order=df['neighbourhood_group'].value_counts().index)
plt.title('各区域房源数量分布')
plt.xlabel('区域')
plt.ylabel('房源数量')
plt.show()

# 3. 房源分布热力图(需安装folium或使用seaborn kdeplot)
plt.figure(figsize=(12,8))
sns.kdeplot(
    x=df['longitude'],
    y=df['latitude'],
    cmap='viridis',
    fill=True,
    thresh=0.05,
    alpha=0.5
)
plt.title('纽约Airbnb房源地理分布密度图')
plt.xlabel('经度')
plt.ylabel('纬度')
plt.xlim(-74.05, -73.75)  # 限制为纽约市范围
plt.ylim(40.6, 40.9)
plt.show()

2.3结果图

2.3.1价格影响因素相关性分析

2.3.2纽约Airbnb房源地理分布密度图

2.3.3不同房型价格分布对比

2.4商业启示

        1.房东策略:曼哈顿房东可通过整户出租和动态定价(如旺季提价20%)最大化收益;布鲁克林房东可突出性价比和交通便利性吸引长租客。

        2.平台优化:推荐算法可结合地理位置和房型权重,优先展示高评分、高稀缺性房源。

三、纽约房价热力图

3.1代码

        经过反复的询问和修改以后,大体上生成了较为满意的结果。部分代码如下:

# 1. 数据加载与清洗
# 注意:文件路径需替换为实际路径
df = pd.read_csv('../../AB_NYC_2019.csv')

# 数据预览与基本检查
print("原始数据概览:")
print(df.info())
print("\n缺失值统计:")
print(df.isnull().sum())

# 处理异常值
df = df[
    (df['price'] > 0) & (df['price'] <= 1000) &  # 价格范围
    (df['minimum_nights'] <= 30) &               # 最大住宿天数限制
    (df['availability_365'] <= 365)              # 可用天数验证
].copy()  # 创建副本避免链式赋值警告

# 缺失值处理(填充评论相关列为0)
df['reviews_per_month'] = df['reviews_per_month'].fillna(0)

# 2. 热门区域分析
# 修改后的热门区域分析代码
plt.figure(figsize=(10,6))
ax = sns.countplot(
    data=df,
    x='neighbourhood_group',
    hue='neighbourhood_group',  # 新增hue参数
    order=df['neighbourhood_group'].value_counts().index,
    palette='viridis',
    legend=False  # 禁用图例
)
plt.title('纽约Airbnb各区域房源数量分布', fontsize=14, pad=20)
plt.xlabel('行政区域', fontsize=12)
plt.ylabel('房源数量', fontsize=12)

# 添加数据标签
for p in ax.patches:
    ax.annotate(f'{p.get_height():,.0f}',
                (p.get_x()+p.get_width()/2., p.get_height()),
                ha='center', va='center',
                xytext=(0, 5),
                textcoords='offset points')
plt.tight_layout()
plt.savefig('区域房源分布.png', dpi=300)  # 保存图表
plt.close()

# 3. 房源分布热力图
plt.figure(figsize=(12,8))
sns.kdeplot(
    x=df['longitude'],
    y=df['latitude'],
    cmap='viridis',
    fill=True,
    thresh=0.05,
    alpha=0.6,
    bw_adjust=0.5  # 调整带宽平滑度
)
plt.title('纽约Airbnb房源地理分布密度图', fontsize=14, pad=20)
plt.xlabel('经度', fontsize=12)
plt.ylabel('纬度', fontsize=12)
plt.xlim(-74.05, -73.75)
plt.ylim(40.6, 40.9)
plt.tight_layout()
plt.savefig('地理分布.png', dpi=300)
plt.close()

# 4. 价格影响因素分析
# 重新构造分析数据集(包含原始区域列)
analysis_df = df[[
    'price',
    'number_of_reviews',
    'reviews_per_month',
    'availability_365',
    'minimum_nights',
    'neighbourhood_group'  # 包含区域列用于后续处理
]].copy()

# 使用独热编码处理区域(替代数值编码)
area_dummies = pd.get_dummies(
    analysis_df['neighbourhood_group'],
    prefix='area'
)
analysis_df = pd.concat([analysis_df, area_dummies], axis=1)

# 删除原始区域列和缺失值
analysis_df = analysis_df.drop('neighbourhood_group', axis=1).dropna()

# 计算相关系数矩阵
corr_matrix = analysis_df.corr()

# 绘制相关性热力图(仅显示价格相关部分)
plt.figure(figsize=(12,8))
sns.heatmap(
    corr_matrix[['price']].sort_values(by='price', ascending=False),
    annot=True,
    cmap='coolwarm',
    linewidths=0.5,
    annot_kws={'size':10},
    vmin=-0.5, vmax=0.5,  # 统一颜色标尺
    cbar_kws={'label': '相关系数'}
)
plt.title('价格影响因素相关性分析', fontsize=14, pad=20)
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig('价格相关性.png', dpi=300)
plt.close()

3.2结果图

3.2.1区域房源分布图

3.2.2价格相关性

3.2.3地理分布

3.2.4房源分布热力图

3.2.5加强版热力图

3.2.6评论价格关系

四、 交互式热力图

4.1代码

# 1. 数据加载(需准备两个文件)
# Airbnb房源数据(确保包含经纬度)
df = pd.read_csv('AB_NYC_2019.csv')
# 行政区划GeoJSON数据(可从政府开放数据平台获取)
nyc_geo = gpd.read_file('tl_2024_us_county.json')  # 需替换为实际边界文件

# 2. 数据预处理
# 筛选有效坐标点(纽约市范围)
df = df[(df['longitude'].between(-74.05, -73.75)) &
        (df['latitude'].between(40.5, 40.9))]

# 3. 创建基础地图
m = folium.Map(location=[40.7128, -74.0060],  # 纽约市中心坐标
               zoom_start=11,
               tiles='CartoDB positron',  # 浅色底图适配行政区划
               control_scale=True)

# 4. 添加行政区划边界层
folium.GeoJson(
    nyc_geo,
    name='行政区划',
    style_function=lambda feature: {
        'fillColor': '#d3d3d3',  # 浅灰填充
        'color': '#4a4a4a',      # 深灰边界
        'weight': 1.5,
        'fillOpacity': 0.2
    }
).add_to(m)

# 5. 生成热力图层
heat_data = df[['latitude', 'longitude']].values.tolist()
HeatMap(heat_data,
        name='房源密度',
        min_opacity=0.3,
        max_opacity=0.8,
        radius=15,
        blur=25,
        gradient={0.4: 'blue', 0.6: 'lime', 1: 'red'},  # 自定义颜色梯度
        ).add_to(m)

 4.2结果图

        行政区划需要下载tl_2024_us_county.json以此描绘出各区边界,美国人口普查局(US Census Bureau)提供全美各级行政区划数据(含县、市边界),该数据源由DeepSeek给出。下载的Shapefile文件可通过QGIS或在线工具(如mapshaper.org)转换为GeoJSON格式,这里我选用了在线工具mapshaper。

相关文章:

  • 基于LangChain4j调用火山引擎DeepSeek R1搭建RAG知识库实战指南
  • FreeRTOS-计数型信号量
  • 【OpenCV C++】图像增强:三种锐化方式,图像清晰度增强
  • TCP基本入门-简单认识一下什么是TCP
  • 关于“你对 Spring Cloud 的理解”
  • SpringBoot 中的 Redis 序列化
  • 【全栈开发】从0开始搭建一个图书管理系统【一】框架搭建
  • DeepSeek开源周 Day04:从DualPipe聊聊大模型分布式训练的并行策略
  • 微信小程序细小知识累计记录
  • 1. HTTP 数据请求
  • 期权帮|国内期权交易投资人做卖出期权价差交易收取的保证金是单边的还是双向的?
  • SpringBoot3—快速入门
  • 大白话css第三章实践与提升
  • seacmsv9报错注入管理员账号密码,order by 注入,如何解决 information_schema关键字被过滤掉了
  • AF3 _make_msa_df函数解读
  • Java语言Leetcode中常用的一些基础语法
  • 【洛谷贪心算法题】P1094纪念品分组
  • (八)Java-Collection
  • Ray生产集群配置
  • 图像处理基础(8):图像的灰度直方图、直方图均衡化、直方图规定化(匹配)
  • AI赋能科学红毯,机器人与科学家在虚实之间叩问“科学精神”
  • 上市公司重大资产重组新规九要点:引入私募“反向挂钩”,压缩审核流程
  • 2025年“新时代网络文明公益广告”征集展示活动在沪启动
  • 媒体:“重病老人银行取款身亡”涉事家属称已和解,银行将支付十万
  • 江西3人拟提名为县(市、区)长候选人
  • 长三角首次,在铁三赛事中感受竞技与生态的共鸣