用 Python 画如此漂亮的插图 ,So easy

人生苦短,快学Python!

今天我们进行一次实战案例分享,以全球预期寿命与人均 GPD数据为例,写一篇 Python 中漂亮散点图的快速指南。除了正常的数据清洗/处理、还会进行简单的统计分析,实现数据处理-统计分析-可视化一条龙。

你会发现,用 Python 画如此漂亮的专业插图 ,So easy!

数据处理

所用数据:全球预期寿命与人均 GPD数据(已校正通货膨胀和跨国价格差异)

数据来源:https://ourworldindata.org/

本文所用数据和代码已打包,获取方式见文末。

导入数据:

import pandas as pdexpectancy_data = pd.read_csv("life-expectancy-vs-gdp-per-capita.csv")# 为方便起见,重命名列
expectancy_data.rename(columns={"Entity":"Country", "Life expectancy at birth (historical)": "Expectancy","GDP per capita": "GDP", "Population (historical estimates)": "Population"}, inplace=True)
expectancy_data

输出:

该数据表中的最新数据是2021年,但由于“均国内生产总值”这列数据只有道2018年的,所以我们本文便以2018年的数据为基础进行分析和可视化。同时,由于我们无法对缺失值进行分析,注意删除缺失值。

GDP_data = expectancy_data[~expectancy_data["GDP"].isna()]
GDP_data = GDP_data[GDP_data["Year"] == 2018]
GDP_data = GDP_data[GDP_data["Country"] != "World"]
GDP_data

输出:

这样我们便完成了最基本的数据处理工作。

可视化

今天的可视化还会用到seaborn,它是一个调用 matplotlib 的统计绘图库

(https://github.com/mwaskom/seaborn)

导入所需Python库:

import numpy as np 
import seaborn as sns
import matplotlib.pyplot as plt 
from matplotlib.lines import Line2D
import matplotlib.patches as mpatchessns.set_style('darkgrid', {'font.sans-serif': ['simhei','FangSong']})

注意,上述代码最后一行是为了解决中文乱码。

接下来我们便可以使用Matplotlib+seaborn制作漂亮的散点图,其中重要的一步是我们将Population列缩放一百万倍并乘以 2,这可以在绘制散点图时控制点的大小,人口越多,点越大。此外,我们还可以注释人口密度高的点,我们可以使用该plt.annotate()方法来完成。

df_new = pd.DataFrame(imputted_data, columns=["Expectancy", "GDP", "Population"])
df_new["Country"] = GDP_data.Country.tolist()
df_new = df_new[["Country", "Expectancy", "GDP", "Population"]]
for col in df_new.columns: if col != "Country": df_new[col] = df_new[col].apply(lambda x: round(x, 3))
df_country = df_new.groupby("Country").mean().reset_index()
df_country = df_country[["Country", "Expectancy", "GDP", "Population"]]
country = df_country["Country"]
GDP = df_country["GDP"]
life_exp = df_country["Expectancy"]
factor = 1000000
population = (df_country["Population"]/factor)*2
plt.figure(figsize=(15, 8)) 
plt.scatter(GDP, life_exp, s = population, alpha=0.9)
df_high_pop = df_country[df_country["Population"] >= 100000000]
for row in df_high_pop.to_dict(orient="records"): plt.annotate(row["Country"], (row["GDP"], row["Expectancy"]+0.3), fontsize=10)
plt.xscale('log') 
plt.xlabel('人均国内生产总值(美元)(对数尺度)') 
plt.ylabel('预期寿命[以年计]') 
plt.title('全球GDP与预期寿命(2018)',fontweight="bold")
plt.show() 

输出结果:

接下来还可以继续优化我们的散点图。比如在我们的数据中对每个国家/地区的人口密度点进行颜色编码,然后根据人数分配不同的颜色;

此外,我们还可以使用plt.legend()增加图例,如下图所示。

回归

进一步优化:基于KNN算法的新方法使得我们现在可以更便捷地处理缺失值,并且与直接用均值、中位数相比更为可靠。利用“近朱者赤”的KNN算法原理,这种插补方法借助其他特征的分布来对目标特征进行缺失值填充。

# sklearn 
from sklearn.impute import KNNImputer 
from sklearn.linear_model import ElasticNetCVimputer = KNNImputer(n_neighbors=3) 
imputted_data = imputer.fit_transform(df[["Expectancy", "GDP", "Population"]]) 

我们另外还想在散点图上画一条非常漂亮的线,用于帮助我们提供一种快速评估各个国家相对于总体趋势的状况的方法。我们可以使用Scikit-learn中的ElasticNet,它是一个使用 L1 和 L2 正则化训练的线性回归模型。它是 LASSO 和岭回归技术的混合体,因此它也非常适合显示严重多重共线性(特征彼此高度相关)的模型。

部分代码(完整下载见文末):

if regression: reg = ElasticNetCV(cv=5, random_state=0)X, y = np.array(GDP).reshape(-1, 1), life_expreg.fit(X,y) y_pred = reg.predict(X) reg_data = pd.DataFrame(X, columns=["X"]) reg_data["y_pred"] = y_pred reg_data = reg_data.sort_values(by="X").reset_index().drop("index", axis=1)reg_data = reg_data[reg_data["y_pred"] <= 90]

使用训练好的模型,绘制一条拟合曲线:

人生苦短,快学Python!

如果喜欢今天分享的文章,别忘了给我们点赞支持一下!

大家如果本文涉及的代码感兴趣,可以点击下方卡片,关注公众号【朱小五】(非本号)后台回复“花卉”即可获取对应【图片+完整代码】文件。


最近我花了两年写的新书已经上市,也算是我在CSDN博客分享Python知识3年的一个总结!

《快学Python:自动化办公轻松实战》点击蓝字查看书籍详情,感谢支持

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

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

相关文章

做个合格的吃货~Python爬取全国火锅店,并利用地图可视化展示~

导语&#xff1a;天越来越冷啦~ 前段时间又刮起了入冬四件套&#xff08;烤红薯、热奶茶、糖炒栗子、糖霜山楂&#xff09;的热风~ 小编也紧跟着潮流下班兴冲冲的跑去买~&#xff08;附近店面的排队的人实在是太多了~风还大&#x1f637;&#x1f637;&#xff09; 一到手…

美食杰项目(七)菜谱大全

本文目录 前言&#xff1a;1.具体样式2.实现的具体功能和代码思路3.element ui具体样式的网址4.相关代码5.总结&#xff1a; 前言&#xff1a; 本文给大家讲的是美食杰项目中菜谱大全项目的具体样式&#xff0c;代码思路和具体代码&#xff0c;希望能帮助到你 1.具体样式 2.实…

鱼香肉丝里到底有没有鱼?

鱼香肉丝&#xff0c;算是我最爱的一道菜了&#xff0c;无论饭店大小&#xff0c;他都是我首先就要找的菜&#xff0c;可谓痴迷&#xff0c;但是鱼香肉丝里到底有没有鱼&#xff1f;这是个千古之谜&#xff0c;这篇来自三个料理人的文章《千古之谜&#xff0c;鱼香肉丝里到底有…

Python爬虫:简单爬取粤菜菜谱

项目场景&#xff1a; 简单爬取粤菜菜谱。 实现思路&#xff1a; 访问主页&#xff0c;获取每个菜品的菜名、图片、详情页面网址。 访问上一步中获得的所有详情页面&#xff0c;获取工艺、口味、时间、主料、辅料信息。 清洗所获得的数据。 保存至本地文件。 实现过程&a…

文心一言的魔性作图,我头都笑掉了...

这几天看到网友们用文心一言作的图&#xff0c;看了后我都愣住了。。。 AI 作画 -- 三得利乌龙茶 AI 作画 -- 娃娃菜 AI 作画 -- 车水马龙 AI 作画 -- 驴肉2火烧 AI 作画 -- 唐伯虎点秋香 AI 作画 -- 鱼香肉丝 AI 作画 -- 胸有成竹 AI 作画 -- 夫妻肺片 AI 作画 -- 红烧狮子头 …

使用chrome浏览器插件postman模拟post、get请求

使用chrome浏览器插件postman模拟post、get请求 postman为chrome浏览器的一个插件&#xff0c;用来模拟post请求&#xff0c;get请求等。可以在chrome浏览器里安装插件&#xff08;前提是你得访问了Google应用商店&#xff09;。 如果不能访问Google&#xff0c;那个下载一个p…

chrome浏览器无法开启同步功能 request cancel

找了很多亲测最新100版本可用&#xff01;&#xff01;&#xff01; 步骤 1、从下面链接提取google插件【Chrome-Sync-Helper】 链接: https://pan.baidu.com/s/1FTxrQ-IRjRmYdW5HcNateA 提取码: htga &#xff08;如链接失效&#xff0c;请留言反馈&#xff01;&#xff09; …

Chrome 添加【微信 / QQ】内置浏览器(解决 “请在微信客户端打开链接” 提示)

前言 有些链接&#xff0c;是需要在微信客户端内才能打开的&#xff0c;那么想在 PC 端的浏览器上打开&#xff0c;怎么办呢&#xff1f; UA 不明白的话先不用管&#xff0c;继续往下看。 【安卓QQ内置浏览器UA】 Mozilla/5.0 (Linux; Android 5.0; SM-N9100 Build/LRX21V…

chrome浏览器控制台发送post请求

谷歌浏览器&#xff0c;点击F12&#xff0c;在控制台中输入下面代码&#xff0c;直接回车即可&#xff1a;&#xff08;需要修改一下Admin-Token的值即可&#xff09; 设置访问的Controller路径&#xff0c;“http://127.0.0.1:8090/api/dwStandard/superUploadBigFile” met…

和 if else说再见,SpringBoot 这样做参数校验才足够优雅!

大家好&#xff0c;我是老赵! 一、概述 当我们想提供可靠的 API 接口&#xff0c;对参数的校验&#xff0c;以保证最终数据入库的正确性&#xff0c;是 必不可少 的活。比如下图就是 我们一个项目里 新增一个菜单校验 参数的函数&#xff0c;写了一大堆的 if else 进行校验&…

全球诺贝尔奖得主最多的30所大学

自1901年以来&#xff0c;诺贝尔奖得主全球最多的30所大学&#xff0c;这些大学堪称是真正的世界一流大学。世界一流大学的指标很多&#xff0c;但是有一项重要指标不可缺失&#xff0c;那就是至少有10位以上诺贝尔奖得主。以下是笔者根据维基百科整理的1901年至2018年间&#…

【娜家花园养花小记】

种花的话&#xff0c;看花开花落&#xff0c;经历寒冬酷暑&#xff0c;都是生命的一个体验的过程。月季花很坚强&#xff0c;酷暑来了&#xff0c;寒冬来了&#xff0c;它休眠一下。然后在其他时间呢&#xff0c;它就尽情的拿生命去绽放。种花更多的感受它带给你的快乐。带给你…

一生必看的 100 幅世界名画

智慧与美&#xff0c;是我之最爱。 从早期的叙事性绘画&#xff0c;直至后期更加侧重抒情与抽象的现代派绘画。希望这篇用心的长文&#xff0c;可以成为你开启艺术之们的钥匙。如果有幸有一幅画面&#xff0c;能够触及你内心柔软的角落抑或隐秘的激情&#xff0c;也请你静下心来…

2022-09-11 stonedb-宣讲-第二讲-一条SQL在Tianmu引擎中的运行

摘要: 记录列存储引擎第二讲的绸缪规划。 宣传语: 标题: 一条查询SQL在Tianmu引擎中的代码实现 宣讲语: 你是否只读过数据库理论的书籍, 但是一遇到代码就头疼呢? 你是否只会在理论上和数学公式上推导数据库内核, 但是从没亲自做过数据库内核的实现呢? 你是否对于数据库…

「上帝粒子」发现10周年

来源&#xff1a;FUTURE | 远见 选编&#xff1a;闵青云 2012年7月4日&#xff0c;欧洲核子研究中心&#xff08;CERN&#xff09;宣布发现了「上帝粒子」&#xff08;希格斯玻色子&#xff09;。希格斯玻色子是粒子物理学标准模型预言的一种玻色子&#xff0c;正是它的存在&…

全球诺贝尔奖得主最多的30所大学排名

上一篇&#xff1a;再见了阿里巴巴&#xff0c;希望以后不再有福报 100多年来&#xff0c;诺贝尔奖&#xff0c;尤其是自然科学领域的几种奖项&#xff0c;始终是全球范围内最受瞩目的科学荣誉。我们为您盘点1901-2019年全球诺贝尔获得者&#xff08;包括毕业生及职员&#xff…

SignalPlus 2023宏观经济展望:洞见机遇,迎接挑战

1. 2022 年市场回顾 (Markets in Review) 虽然理由不尽相同&#xff0c;但对于宏观资产和加密资产而言&#xff0c; 2022 年都是值得铭记的一年&#xff0c;Luna、FTX、Genesis 等机构的崩塌对加密货币生态系造成了灾难性的破坏&#xff0c;同时宏观市场也见证了一个强硬的美联…

python-微信自动发送信息2

《《由于女朋友最近打算考编&#xff0c;作为一名合格的男票肯定要天天督促啦。》》 实现目标&#xff1a;利用python实现微信自动发送教育学or心理学题目 实现思路&#xff1a; 1.从本地读取教育学心理学题目&#xff0c;并随机抽取一题。 2.使用python自带模块os.system模…

20145237 《Java程序设计》第七周学习总结

20145237 《Java程序设计》第七周学习总结 教材学习内容总结 第十三章 一、认识时间与日期 1.时间的度量 在正式认识Java提供了哪些时间处理API之前&#xff0c;得先来了解一些时间、日期的历史问题&#xff0c;这样你才会知道&#xff0c;时间日期确实是个很复杂的问题&…

GAMES101-现代计算机图形学入门-闫令琪 - lecture2 线性代数基础 - 课后笔记

向量的点乘 在图形学中&#xff0c;点乘的作用&#xff1a; 能够计算两个向量之间的角度&#xff0c;例如计算曲面和曲线之间的角度&#xff0c;用于计算两个方向向量之间距离有多近&#xff0c;越近其cos值越大&#xff0c;越小则越远&#xff0c;值为-1~1.能够将一个向量投影…