概述
在看天地图服务资源的时候看到有个“幼儿园”的数据,好奇点开看了下,下载下来数据差看了下,数据质量还不错。本篇文章给大家分享一下这个数据的处理以及一些简单的统计分析结果。
数据下载
通过地址https://service.tianditu.gov.cn/#/Detail?mc=幼儿园&id=7495获取数据的信息与下载地址,如下图所示。点击服务地址下载数据。
数据处理
1. 转换为geojson
上述地址返回的是json
格式的数据,如下图所示。
通过js将其转为geojson
。转换代码如下:
class Geojson {
constructor(features = []) {
this.type = "FeatureCollection";
this.features = features;
}
}
fetch("./yry.json")
.then((res) => res.json())
.then((res) => {
res = res.data.results.map(({ gbcode, geojson, name }) => {
geojson.properties = { gbcode, name }
geojson.geometry = {
type: "Point",
coordinates: geojson.geometry.coordinates[0]
}
return geojson;
});
const json = new Geojson(res)
console.log(JSON.stringify(json))
});
2. 坐标转换
数据转换后用QGIS
打开,并叠加高德地图作为底图,发现数据有些偏移,借助Geohey
插件将坐标转换为火星坐标系。
转换前后位置示意比较图,转换后蓝色的点就跟高德地图的位置就一致了。
3. 数据处理
将转换后的数据导入到postgis数据库中,并添加prov
、city
两个字段,跟城市面数据进行空间关联,并赋值。
update base_youeryuan set prov = (
select a.province from base_city a where st_intersects(a.geom, base_youeryuan.geom) limit 1
), city = (
select a.name from base_city a where st_intersects(a.geom, base_youeryuan.geom) limit 1
) where 1=1;
4. 数据分析
先通过省做一个分组统计,统计sql如下:
-- 进行分省统计
select prov, count(1) as num from base_youeryuan
where prov is not null
group by prov
order by num desc;
统计后的结果如下图,不难看出:1.人后大省的幼儿园比较多;2.幼儿园比较多的省份小朋友比较多,新生儿出生率对应的也会比较高。3.北上的人口比较多,但是幼儿园比较少,说明小孩子比较少,大家生孩子的意愿或积极性明显很低。
根据省分析完了我们在根据市做一个分组统计,由于市比较多,我们只取了前20作为结果,统计sql如下:
select city, count(1) as num from base_youeryuan
where city is not null
group by city
order by num desc;
limit 20;
统计后结果如下图。做个简单的分析:1.重庆依然成为了人口、新生儿第一的城市;2.幼儿园的数量代表着小孩子的多少,在前二十的城市里面,广东有三个城市进入,分别是广州、深圳、湛江,也从另外一个侧面说明了南方人生孩子的意愿比较强。
**申明:**文章中的的数据和分析仅供教学学习,不代表实际的情况与分析结论。