python作业用过的函数

这一次作业是用数据画地图

所涉及的函数和python知识如下(每一个我都写成小标题格式,方便我以后自己查找

参考文档

手把手教你画数据地图之进阶篇 - Yuhao Zhu, Ph.D.

相关包

import matplotlib.pyplot as plt
import geopandas as gpd
from matplotlib_scalebar.scalebar import ScaleBar
import contextily as cx

将SHP文件进行读取,并且编码为“utf-8”

basemap_line = gpd.read_file(basemap_line_file,encoding='utf-8')

#basemap_line_file是文件地址

取数据表某一列数据

new_line_name=basemap_line["line_name"]

#line_name是列名

截取每个数据中的一部分内容

我用的方法比较负责,直接就暴力拆解

# To do: 由于line_name的名字太长,将其截断为几号线,并存储为新的列表new_line_name
new_line_name=basemap_line["line_name"]
n=0
for i in new_line_name:
    str1=str(i)[2:6]
    if str(i)[5]!='线':
        str1=str(i)[2:5]
    new_line_name.loc[n]=str1
    n=n+1
print(new_line_name)

将文字显示成中文格式

加入第一行代码即可

mpl.rcParams['font.sans-serif']=['SimHei']
或者
plt.rcParams['font.sans-serif'] = ['SimHei']

plt.rcParams['axes.unicode_minus'] = False #正常显示负号

用plt设置图像的大小

plt.figure(figsize=(10,8))

10是长,8是宽

去掉重复的内容

basemap_station['station_na'].unique()

表格提取两列

如果一个表格里面由lng84,lat84这两列,和其他列,而我们要提取lng84,lat84这两列,这个时候需要两个中括号

x = shenzhen_station_shp[["lng84","lat84"]]

KMeans聚类

# To do: 读取深圳_station.shp文件,利用经纬度的值进行聚类分析,并将结果画出来,需要画出聚类中心,lat纬度,lng经度
shenzhen_station_shp=gpd.read_file("D:\大学\大二上\数据科学导论\实验六\深圳_station.shp",encoding='utf-8')

x = shenzhen_station_shp[["lat84","lng84"]]
X=x.values.astype(float)

kmeans = KMeans(7)      # 构建聚类器
y_kmeans=kmeans.fit_predict(X)    # 训练聚类器

#找出最大最小经纬度
max_lat=shenzhen_station_shp["lat84"].max()
min_lat=shenzhen_station_shp["lat84"].min()
max_lng=shenzhen_station_shp["lng84"].max()
min_lng=shenzhen_station_shp["lng84"].min()

plt.figure(figsize=(10,6))
plt.scatter(kmeans.cluster_centers_[:, 0],kmeans.cluster_centers_[:, 1], s=20, color='black',label='Centroids')
plt.scatter(X[y_kmeans == 0, 0], X[y_kmeans == 0, 1], s = 5, c = 'red', label = 'Cluster 1')
plt.scatter(X[y_kmeans == 1, 0], X[y_kmeans == 1, 1], s = 5, c = 'g', label = 'Cluster 2')
plt.scatter(X[y_kmeans == 2, 0], X[y_kmeans == 2, 1], s = 5, c = 'm', label = 'Cluster 3')
plt.scatter(X[y_kmeans == 3, 0], X[y_kmeans == 3, 1], s = 5, c = 'c', label = 'Cluster 4')
plt.scatter(X[y_kmeans == 4, 0], X[y_kmeans == 4, 1], s = 5, c = 'y', label = 'Cluster 5')
plt.scatter(X[y_kmeans == 5, 0], X[y_kmeans == 5, 1], s = 5, c = 'b', label = 'Cluster 6')
plt.scatter(X[y_kmeans == 6, 0], X[y_kmeans == 6, 1], s = 5, c = 'orange', label = 'Cluster 7')
plt.xticks(np.arange(22.4,22.85, step=0.03))
plt.yticks(np.arange(113.75,114.40, step=0.03))

#图例设置
plt.title("Metro Stations in Shenzhen", fontsize=22)
plt.ylabel('Longitude', fontsize=18)
plt.xlabel('Latitude', fontsize=18)

搞了好几个小时,一开始画出的图是这样的

 一开始没加上括号里面的东西,搞了很久

X=x.values(.astype(float))

将不想要的取值的行去掉

x=data.loc[data["station_in"]!="None"]
x=x.loc[x["station_out"]!="None"]

统计一列数据出现次数 

station_in_num=pd.DataFrame(x.station_in.value_counts())
station_in_num

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值