机器学习和可视化还能一起这样用?Python教你全搞定

news/发布时间2024/5/14 10:31:45

今天这篇推文,我们继续空间数据可视化的最后一个系列-类别插值(categorical-spatial-interpolation) 可视化绘制的推文教程,这期我们使用Python进行绘制,涉及的知识点如下:

  • sklearn.KNeighborsClassifier()机器学习应用

  • plotnine 多数值映射绘图设置

  • 所有完整代码都已整理之我们的线上课程,有需要的同学+v yidianshuyulove 咨询

(两大知识点,其中还会涉及几个小点知识,会明确指出)

sklearn.KNeighborsClassifier()

终于这篇推文将机器学习可视化完美的结合起来,即:机器学习处理数据,数据可视化技术展现、美化数据(以后的深度学习部分也会延续这个风格,只不过比重不同而已)。首先,我们给出我们今天的数据:散点数据和四川省的地图文件,python读取操作如下:

import pandas as pd
import numpy as np
from sklearn.neighbors import KNeighborsClassifierdata = pd.read_excel(r"sichuan_df_label.xlsx")
import geopandas as gpd
si_map = gpd.read_file(r"四川省.json")

预览如下: 散点:

地图文件

计算网格插值

这一步之前的推文中已说了很多次,这次我们设置800x800的网格,边界设置依据还是我们地图文件的经纬度范围,代码如下:

bounds = si_map.total_bounds
grid_size = 800
grid_lon = np.linspace(bounds[0],bounds[2],grid_size)
grid_lat = np.linspace(bounds[1],bounds[3],grid_size)
xgrid, ygrid = np.meshgrid(grid_lon, grid_lat)
#将插值网格数据整理
df_grid =pd.DataFrame(dict(lon=xgrid.flatten(),lat=ygrid.flatten()))
df_grid.head()

结果如下:

接下来,我们就是使用机器学习技术在基于点数据属性的基础上构建分类模型,再将训练好的模型应用到我们插值生成的数据上(尽量大白话,让你们更加好理解)

构建knn类模型

这一部分,我们将使用机器学习中最常用的sklearn包进行分类模型的构建及在新数据(网格插值数据)上的应用。详细代码如下:

from sklearn.neighbors import KNeighborsClassifier
neigh = KNeighborsClassifier(n_neighbors=100,weights="distance")
neigh_al = neigh.fit(X.values,y.values)

这样我们就构建了一个机器学习的分类模型了,其中KNeighborsClassifier的其他属性,大家可以去 sklearn 官网 进行查看哈。接下来,我们将使用构建好的neigh_al模型应用在我们的插值数据上,代码如下:

x_test = df_grid[["lon",'lat']].values
knn_result = neigh_al.predict(x_test)
knn_result
##
#array([2, 2, 2, ..., 1, 1, 1], dtype=int64)

可以看到,我们已经对每一组数据生成相应的分类结果了,由于我们作图还需使用到分类可能性数据,我们使用predict_proba方法计算其分类结果在不同类别上的可能性(最终的分类结果是取可能性最大的对应结果的)。

knn_result_pro = neigh_al.predict_proba(x_test)

我们需要将结果保存,则需要对knn_result_pro结果进行操作,即筛选出每一个结果的最大值,这里使用np.amax() 方法操作,代码如下:

knn_result_pro_max = np.amax(knn_result_pro,axis=1)

结果另存:

df_grid["knn_result"] = knn_result
df_grid["knn_result_pro"] = knn_result_pro_max
df_grid.head()

plotnine 可视化绘制

使用分类模型将结果计算出,并规整完毕,接下来就可以进行可视化绘制了,这里我们使用Plotnine 包进行绘制,代码如下:

「散点分布图:」

import plotnine
from plotnine import *
plotnine.options.figure_size = (5, 4.5)
point_map = (ggplot() + geom_map(sichuan,fill='none',color='gray',size=0.4) +geom_point(data,aes(x='lon',y='lat',color='label'),size=1) +scale_color_cmap_d(name = "Dark2")+xlim(97,109)+ylim(25.8,34.5)+scale_x_continuous(breaks=[98,100,102,104,106,108])+scale_y_continuous(breaks=[26,28,30,32,34,36,38])+labs(title="Map Charts in Python Exercise 03: Map point",)+#添加文本信息annotate('text',x=97,y=35.3,label="processed map charts with plotnine",ha="left",size=10)+annotate('text',x=104.5,y=26,label="Visualization by DataCharm",ha="left",size=9)+theme(text=element_text(family="Roboto Condensed"),#修改背景panel_background=element_blank(),axis_ticks_major_x=element_blank(),axis_ticks_major_y=element_blank(),axis_text=element_text(size=12),axis_title = element_text(size=14),panel_grid_major_x=element_line(color="gray",size=.5),panel_grid_major_y=element_line(color="gray",size=.5),))

可视化结果如下:

「插值网格可视化:」

import plotnine
from plotnine import *
plotnine.options.figure_size = (5, 4.5)#mycolor = ["#1B9E77","#D95F02","#7570B3","#E7298A","#66A61E"]
knn_map_grid = (ggplot(data=knn_grid) + geom_map(sichuan,fill='none',color='gray',size=0.4) +aes(fill="knn_result")+geom_tile(knn_grid,aes(x="lon",y="lat",color='knn_result',alpha="knn_result_pro"),size=.1,show_legend={'alpha': False}) +scale_color_cmap_d(name = "Dark2")+xlim(97,109)+ylim(25.8,34.5)+scale_x_continuous(breaks=[98,100,102,104,106,108])+scale_y_continuous(breaks=[26,28,30,32,34,36,38])+labs(title="Map Charts in Python Exercise 03: Categorical Interpolation Grid",)+#添加文本信息annotate('text',x=97,y=35.3,label="processed map charts with plotnine",ha="left",size=10)+annotate('text',x=104.5,y=26,label="Visualization by DataCharm",ha="left",size=9)+theme(text=element_text(family="Roboto Condensed"),#修改背景panel_background=element_blank(),axis_ticks_major_x=element_blank(),axis_ticks_major_y=element_blank(),axis_text=element_text(size=12),axis_title = element_text(size=14),panel_grid_major_x=element_line(color="gray",size=.5),panel_grid_major_y=element_line(color="gray",size=.5),))
knn_map_grid

可视化结果如下:

这里由于将类别(label)和可能性(pro)分别映射在color(颜色和)alpha(透明度),注意如下代码(与ggplot2绘制有所不同):

(ggplot(data=knn_grid) + geom_map(sichuan,fill='none',color='gray',size=0.4) +aes(fill="knn_result")+geom_tile(knn_grid,aes(x="lon",y="lat",color='knn_result',alpha="knn_result_pro"),size=.1,show_legend={'alpha': False}) +

若是采用类似ggplot2的映射理念绘图,即采用如下代码绘制:

ggplot() + geom_map(sichuan,fill='none',color='gray',size=0.4) +geom_tile(knn_grid,aes(x="lon",y="lat",color='knn_result',alpha="knn_result_pro"),size=.1,show_legend={'alpha': False}) 

得到的可视化结果如下:

图中红框部分怎不能很好的表达图表含义。

裁剪操作

这一步也是说了很多次了,将模型预测结果转换geopandas 数据 类型,再使用clip() 方法裁剪即可,我们直接给出绘图代码:

#绘图
import plotnine
from plotnine import *
plotnine.options.figure_size = (5, 4.5)#mycolor = ["#1B9E77","#D95F02","#7570B3","#E7298A","#66A61E"]
knn_map_grid_clip = (ggplot(data=knn_grid_clip) + geom_map(sichuan,fill='none',color='gray',size=0.7) +aes(fill="knn_result")+geom_tile(knn_grid_clip,aes(x="lon",y="lat",color='knn_result',alpha="knn_result_pro"),size=.1,show_legend={'alpha': False}) +scale_color_cmap_d(name = "Dark2")+xlim(97,109)+ylim(25.8,34.5)+scale_x_continuous(breaks=[98,100,102,104,106,108])+scale_y_continuous(breaks=[26,28,30,32,34,36,38])+labs(title="Map Charts in Python Exercise 03: Categorical Interpolation",)+#添加文本信息annotate('text',x=97,y=35.3,label="processed map charts with plotnine",ha="left",size=10)+annotate('text',x=104.5,y=26,label="Visualization by DataCharm",ha="left",size=9)+theme(text=element_text(family="Roboto Condensed"),#修改背景panel_background=element_blank(),axis_ticks_major_x=element_blank(),axis_ticks_major_y=element_blank(),axis_text=element_text(size=12),axis_title = element_text(size=14),panel_grid_major_x=element_line(color="gray",size=.5),panel_grid_major_y=element_line(color="gray",size=.5),))

最终我们的可视化结果如下:

注意:

由于以上数据的*类别列(label)*是直接随机生成的,可能是连续性数值,所以在绘图之前,需要添加如下类型转换操作代码:

knn_grid["knn_result"] = knn_grid["knn_result"].astype("object")

总结

这一期的可视化绘制推文,我们加入了机器学习的内容(也算是机器学习相关的第一篇推文),原理性的东西我这边尽量少介绍,我们关注的是实际应用,无论是可视化的数据处理、各个领域的应用等,希望这篇推文对大家的可视化设计或者机器学习等知识面都有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.bcls.cn/HipB/7656.shtml

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

java面试设计模式篇

面试专题-设计模式 前言 在平时的开发中,涉及到设计模式的有两块内容,第一个是我们平时使用的框架(比如spring、mybatis等),第二个是我们自己开发业务使用的设计模式。 面试官一般比较关心的是你在开发过程中&#…

图扑数字孪生技术在航空航天方面的应用

"数字孪生"这一概念最早就是在航空航天领域使用,目的在于处理航天器的健康维护和保护问题。图扑软件依托自主研发的 HT for Web 产品,实现对民航机场、民航飞机、火箭发射、科技展馆的数字孪生展示。 图扑 HT 数字孪生技术助力航空航天数字孪…

Java 基于微信小程序的农产品自主供销小程序

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

mysql的日志文件在哪?

阅读本文之前请参阅----MySQL 数据库安装教程详解(linux系统和windows系统) MySQL的日志文件通常包括错误日志、查询日志、慢查询日志和二进制日志等。这些日志文件的位置取决于MySQL的安装和配置。以下是一些常见的日志文件位置和如何找到它们&#xff…

3分钟看懂设计模式02:观察者模式

一、什么是观察者模式 观察者模式又叫做发布-订阅模式或者源-监视器模式。 结合它的各种别名大概就可以明白这种模式是做什么的。 其实就是观察与被观察,一个对象(被观察者)的状态改变会被通知到观察者,并根据通知产生各自的不…

AI:139-基于深度学习的语音指令识别与执行

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带关键代码,详细讲解供大家学习,希望…

Linux的ACL权限以及特殊位和隐藏属性

前言: ACL是什么? ACL(Access Control List)是一种权限控制机制,用于在Linux系统中对文件和目录进行细粒度的访问控制。传统的Linux权限控制机制基于所有者、所属组和其他用户的三个权限类别(读、写、执行…

网络原理——HTTPS

HTTPS是 在HTTP的基础上,引入了一个加密层(SSL)。 1. 为什么需要HTTPS 在我们使用浏览器下载一些软件时,相信大家都遇到过这种情况:明明这个链接显示的是下载A软件,点击下载时就变成了B软件,这种情况是运…

idea设置

全局配置 proxy 一般公司网络是局域网络,需要配置proxy keyMap 设置自己习惯的快捷键模式 auto Import 自动添加和移除jar包 console 编码格式 (有可能会造成乱码) java编码格式设置 Tab size File and Code Templates 进公司必设 File…

【xss跨站漏洞】xss漏洞利用工具beef的安装

安装环境 阿里云服务器,centos8.2系统,docker docker安装 前提用root用户 安装docker yum install docker 重启docker systemctl restart docker beef安装 安装beef docker pull janes/beef 绑定到3000端口 docker run --rm -p 3000:3000 janes/beef …

sql-labs25-28a

一、环境 网上都有不过多阐述 二、sql-labs第25关 它说你的OR和and属于它,那就是过滤了OR和and 注入尝试 不用or和and进行爆破注入,很明显是有注入点的 ?id-1 union select 1,2,3-- 查看数据库 ok,此道题算是解了但是如果我们用了and了呢 ?id-1 and updatex…

设计模式四-简单工厂模式

请直接看原文:设计模式(四)简单工厂模式 | BATcoder - 刘望舒 (liuwangshu.cn) --------------------------------------------------------------------------------------------------------------------------- 1.简单工厂模式简介 定义 简单工厂…

2024国际生物发酵产品与技术展-五星自动化控制

参展企业介绍 山东五星自动化控制技术有限公司是一家专业从事工业自动化系统工程设计、安装、调试及技术服务的高新技术性企业,位于孔孟之乡、运河之都——济宁市。 我公司拥有优秀的PLC、DCS、SIS自控系统和MES数字化工厂的设计、制作和安装、调试能力&#xff0…

LeetCode--72

72. 编辑距离 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 示例 1: 输入:word1 "horse", word2 …

html5盒子模型

1.边框的常用属性 border-color 属性 说明 示例 border-top-color 上边框颜色 border-top-color:#369; border-right-color 右边框颜色 border-right-color:#369; border-bottom-color 下边框颜色 border-bottom-color:#fae45b; border-left-color 左边框颜色…

Python学习 --- 面向对象

1.什么是对象 1.Python中创建类的关键字是 class 2.类的成员方法 1.函数是写在类外面的,方法则是写在类里面的 1.上面这一段代码中就展示了如何在方法中访问类的成员变量: self.成员变量名 3.魔术方法 魔术方法其实就是python中的类中的内置方法,下面这几个只是我们比较常…

多输入时序预测|GWO-CNN-LSTM|灰狼算法优化的卷积-长短期神经网络时序预测(Matlab)

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、算法介绍: 灰狼优化算法: 卷积神经网络-长短期记忆网络: 四、完整程序下载: 一、程序及算法内容…

清华系2B模型杀出支持离线本地化部署,可以个人电脑或者手机上部署的多模态大模型,超越 Mistral-7B、LLaMA-13B

清华系2B模型杀出支持离线本地化部署,可以个人电脑或者手机上部署的多模态大模型,超越 Mistral-7B、LLaMA-13B。 2 月 1 日,面壁智能与清华大学自然语言处理实验室共同开源了系列端侧语言大模型 MiniCPM,主体语言模型 MiniCPM-2B …

Vue前端对请假模块——请假开始时间和请假结束时间的校验处理

开发背景:Vueelement组件开发 业务需求:用户提交请假申请单,请假申请的业务逻辑处理 实现:用户选择开始时间需要大于本地时间,不得大于请假结束时间,请假时长根据每日工作时间实现累加计算 页面布局 在前…

iOS App 上架指南及关键

引言 上架App Store是将iOS应用提交申请并上线的过程,旨在让应用在App Store上展示,吸引用户并获取流量。本文将介绍iOS上架的整体流程,并提供一些建议和注意事项。 一、iOS上架的整体流程 1. 申请开发者账号 首先,需要申请苹…
推荐文章