我正在使用jupyter读取excel,读取链接为df = pd.read_excel(r'data\广州房屋成交信息.xlsx'),利用以上的信息绘制广州市各区成交房源分布地图
时间: 2024-09-26 19:06:52 浏览: 37
Python读取excel 文件操作说明.zip_excel_morningy2h_python 处理excel_python操
在Jupyter Notebook环境中,你首先需要导入必要的库,如pandas(pd)用于数据处理,geopandas(gpd)用于地理空间分析,以及matplotlib或seaborn等绘图库。这里假设已经安装了这些库。
```python
import pandas as pd
import geopandas as gpd
from matplotlib import Basemap
# 读取Excel文件
df = pd.read_excel(r'data\广州房屋成交信息.xlsx')
# 确保数据包含地理位置信息,例如经纬度或者行政区编码
# 如果直接从Excel中获取,可能需要检查数据列名,常见有'区县名称'和'经度'、'纬度'或'行政区编码'
assert '区县名称' in df.columns and ('经度' in df.columns and '纬度' in df.columns) or '行政区编码' in df.columns
# 如果数据中没有直接的地理坐标,可能需要外部数据源或API来查找对应位置
# 地理编码服务如Geocoders (百度、高德) 或者使用GIS数据库(如ArcGIS)
if not all(['经度', '纬度'] in df.columns):
# 示例:使用百度地图API
from geopy.geocoders import Baidu
geolocator = Baidu()
def get_location(address):
location = geolocator.geocode(address)
return (location.latitude, location.longitude)
# 将地址转换为经纬度
df['经度'], df['纬度'] = zip(*df.apply(get_location, axis=1))
# 创建GeoDataFrame,地理数据通常会有一列'geometry',如果没有,可以使用坐标列创建
if 'geometry' not in df:
df['geometry'] = gpd.points_from_xy(df['经度'], df['纬度'])
# 加载广州市行政区划数据(通常作为基础地图)
admin_data = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
# 合并地理信息到主数据集
merged_df = gpd.GeoDataFrame(df, geometry='geometry').merge(admin_data, on='区县名称', how='left')
# 绘制地图
m = Basemap(projection='lcc', resolution='i', lat_0=23.5, lon_0=113.25) # 设置地图投影
m.drawcoastlines(linewidth=0.5)
m.fillcontinents(color='lightgray')
m.drawmapboundary(fill_color='white')
# 根据需要,选择合适的标记样式和颜色绘制成交房源点
merged_df.plot(column='成交数量', markersize=df['成交数量'].values / 100, cmap='viridis', linewidth=0.5, ax=m)
plt.show()
```
注意:这个过程可能会因为数据格式、网络请求等因素导致错误。在实际操作中,可能需要根据实际情况调整代码,并处理可能出现的问题,例如数据清洗、缺失值处理等。
阅读全文