人工智能-seaborn单双多变量绘图、两案例:NBA球员数据分析、北京租房数据统
1、 seaborn
作用:更高效地绘图
#安装
pip3 install seaborn#导入
import seaborn as sns
单变量:直方图或核密度曲线
双变量:散点图、二维直方图、
主要函数:distplot()与joinplot()函数
1.1 单变量绘图
API
import seaborn as sns
import numpy as npnp.random.seed(0) #确定随机数种子
arr = np.random.rand(100)
sns.distplot(arr,bins=10,hist=True,kde=True,rug=True)
1.2 双变量绘图
散点图-kind = ‘scatter’
import pandas as pd
df = pd.DataFrame({'x':np.random.randn(500),'y':np.random.randn(500)})
df.head()
sns.joinplot('x','y',data = df)
核密度估计曲形-kind = ‘kde’
sns.joinplot('x','y',data = df,kind = 'kde')
颜色越深,表示数据越密集
二维直方图-kind = ‘hex’
sns.joinplot('x','y',data = df,kind = 'hex')
多个成对的双变量分布
dataset = sns.load_dataset('iris')sns.pairplot(dataset)
1.3 总结
- 绘制单变量分布图像:seaborn.distplot()
- 绘制双变量分布图像:seaborn.jointplot()
- 绘制成对的双变量分布图像:seaborn.pairplot()
2、分类数据绘图
2.1 类别散点图
data = sns.load_dataset('tips')
data.load()
sns.stripplot(x='day',y='total_bill',data=data)
sns.stripplot(x='day',y='total_bill',data=data,hue='time')
#hue='time'按time类别分颜色,这里只有两类
sns.stripplot(x='day',y='total_bill',data=data,hue='time',jitter=True)
#jitter=True不让数据重叠起来
sns.swarmplot('day','total_bill',data=data)
#swarmplot-完全没有重叠
2.2 类别内的数据发布
箱线图、小提琴图
小提琴图结合了箱线图和密度图的特征,主要用来显示数据的分布
箱线图API
seaborn.boxplot(x=None,y=None,hue=None,data=None,orient=None,color=None,saturation=0.9)
#hue--分组
#palette=['g','b','y',''b]设置颜色,是对hue分组类别的颜色
#saturation颜色设置的饱和度#举例
sns.boxplot('day','total_bill',data=data)
小提琴图
#API
seaborn.violinplot(x=None,y=None,hue=None,data=None)#举例
sns.violinplot('day','total_bill',data=data)
条形图sns.barplot与点图sns.pointplot
#条形图(及其置信区间)
sns.barplot(x='day',y='total_bill',data=tips)#点图(点估计及其置信区间)
sns.pointplot(x='day',y='total_bill',data=tips)
3、案例:NBA球员数据分析
NBA数据
3.1获取数据且初识数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns#获取数据且初识数据
data = pd.read_csv('F:/人工智能/nba_2017_nba_players_with_salary.csv')
data.head()
data.shape
data.describe()
3.2 热力图
#数据分析
##数据相关性
data_cor = data.loc[:,['RPM','AGE','SALARY_MILLIONS','ORB','DRB','TRB','AST','STL','BLK','TOV','PF','POINTS','GP','MPG','ORPM','DRPM']]
data_cor.head()
#列名太多,只对部分列求一下相关性
corr = data_cor.corr()
corr.head()
###热力图
plt.figure(figsize=(20,8),dpi=100)#设置图大小
sns.heatmap(corr,square=True,linewidths=0.1,annot=True)
#square=True调至方形,linewidths=0.1中间加宽度为0.1的线,annot=True显示数据
3.3数据排名分析
#基本数据排名分析
data.loc[:,['PLAYER','RPM','AGE']].sort_values(by='RPM',ascending=False).head()
#按照RPM降序排名
#按照球员薪资排名
data.loc[:,['PLAYER','RPM','AGE','SALARY_MILLIONS']].sort_values(by='SALARY_MILLIONS',ascending=False).head()
3.4seaborn常用的三个数据可视化方法
3.4.1单变量
#seaborn常用的三个数据可视化方法
##单变量
#利用seaborn中的distplot绘图来分别看薪水、效率值、年龄三个信息的分布情况
sns.set_style('darkgrid')#设置基本模式
plt.figure(figsize=(10,10))plt.subplot(3,1,1)
sns.distplot(data['SALARY_MILLIONS'])
plt.ylabel('salary')plt.subplot(3,1,2)
sns.distplot(data['RPM'])
plt.ylabel('RPM')plt.subplot(3,1,3)
sns.distplot(data['AGE'])
plt.ylabel('AGE')
3.4.2双变量-散点图
##双变量jointplot
#使用jointplot查看年龄和薪水之间的关系
sns.jointplot(data.AGE,data.SALARY_MILLIONS,kind='hex') #hex显示六边形形式
3.4.3多变量
##多变量
multi_data = data.loc[:,['RPM','SALARY_MILLIONS','AGE','POINTS']]
multi_data.head()
sns.pairplot(multi_data)
3.5 衍生变量的一些可视化实践-以年龄为例
自定义了一个年龄分层
#年龄划分
def age_cut(df):if df.AGE <=24:return 'young'elif df.AGE >=30:return 'old'else:return 'best'#使用apply对年龄进行划分
data['age_cut'] = data.apply(lambda x:age_cut(x),axis=1)
data.head()
分层散点图
#方便计数再加一个cut列
data['cut'] = 1data.loc[data.age_cut == 'best'].SALARY_MILLIONS.head()#通过年龄对球员薪水和效率值进行分析
sns.set_style('darkgrid')
plt.figure(figsize=(10,10),dpi=100)
plt.title('RPM and SALARY')x1 = data.loc[data.age_cut == 'old'].SALARY_MILLIONS
y1 = data.loc[data.age_cut == 'old'].RPM
plt.plot(x1,y1,"^")#"^"上三角形式x2 = data.loc[data.age_cut == 'best'].SALARY_MILLIONS
y2 = data.loc[data.age_cut == 'best'].RPM
plt.plot(x2,y2,"^")x3 = data.loc[data.age_cut == 'young'].SALARY_MILLIONS
y3 = data.loc[data.age_cut == 'young'].RPM
plt.plot(x3,y3,".")
成对双变量绘图pairplot
dat2 = data.loc[:,['RPM','POINTS','TRB','AST','STL','BLK','age_cut']]
sns.pairplot(dat2,hue='age_cut')
3.6 球队数据分析
查看不同类别下的情况,求均值,最值等—agg聚合函数
排名sort_values
data.groupby(by='age_cut').agg({"SALARY_MILLIONS":np.mean})
#利用agg函数输出各年龄段的平均薪资#按照球队分组,平均薪水降序排序
data_team = data.groupby(by='TEAM').agg({"SALARY_MILLIONS":np.mean}) #TEAM球队
data_team.sort_values(by='SALARY_MILLIONS',ascending=False).head(10)#按照分年龄段分球队,上榜球员数降序排列。若上榜球员数相同,则按效率值降序排列
data_rpm = data.groupby(by=['TEAM','age_cut']).agg({"SALARY_MILLIONS":np.mean,"RPM":np.mean,"PLAYER":np.size})
data_rpm.sort_values(by=['PLAYER','RPM'],ascending=False).head()
用图像来展示各球队的情况
#利用箱线图和小提琴图进行数据分析
sns.set_style('whitegrid')
plt.figure(figsize=(20,10))data_team2 = data[data.TEAM.isin(['GS','CLE','SA','LAC','OKC','UTAH','CHA','TOR','NO','BOS'])]#只取了部分球队名
#绘图箱线图
plt.subplot(3,1,1)
sns.boxplot(x='TEAM',y='SALARY_MILLIONS',data =data_team2) #部分球队的薪资分布plt.subplot(3,1,2)
sns.boxplot(x='TEAM',y='AGE',data =data_team2) #部分球队的年龄分布plt.subplot(3,1,3)
sns.boxplot(x='TEAM',y='MPG',data =data_team2)#部分球队的出场时间分布
#小提琴图
sns.set_style('whitegrid')
plt.figure(figsize=(20,10))plt.subplot(3,1,1)
sns.violinplot(x='TEAM',y='3P%',data =data_team2) #部分球队的3分球命中率分布plt.subplot(3,1,2)
sns.violinplot(x='TEAM',y='POINTS',data =data_team2) #部分球队的得分分布plt.subplot(3,1,3)
sns.violinplot(x='TEAM',y='eFG%',data =data_team2)#部分球队的真实命中率分布
4、案例:北京租房数据统计分析
需求:
链家北京租房数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns#获取数据
file_data = pd.read_csv('F:/淘宝-人工智能-课件/链家北京租房数据.csv')
file_datafile_data.shape
file_data.info()
file_data.describe()#只计算数值列的
数据基本处理
4.1重复值和空值处理
file_data = file_data.drop_duplicates()#删除重复值,第一次出现不删除,后面出现重复的会被删除
file_data.shape#空值处理
file_data = file_data.dropna()#删除空值
file_data.shape
4.2 数据类型转换
想把”面积列“转换成float类型
户型列的表达,有“几房间几厅”的表达,把该列统一为“几室几厅”的表达
#面积列
file_data['面积(㎡)'].values
file_data['面积(㎡)'].values[0][:-2]#创建一个空的数组,用来存储改格式后的面积列
data_new = np.array([])
data_area = file_data['面积(㎡)'].values
for i in data_area:data_new = np.append(data_new,np.array(i[:-2]))data_new#转换data_new中数据类型
data_new = data_new.astype(np.float64)
data_new
file_data.loc[:,'面积(㎡)'] = data_new #替换
file_data.head()
#户型表达方式替换
house_data = file_data['户型']
temp_list=[]
for i in house_data:new_info = i.replace('房间','室')temp_list.append(new_info)file_data.loc[:,"户型"] = temp_list
file_data
调整后的数据
4.3 图表分析
4.3.1 房源数量、位置分布分析
file_data["区域"].unique()
new_df = pd.DataFrame({"区域":file_data["区域"].unique(),"数量":[0]*13})
new_df#获取每个区域房源数量
area_count = file_data.groupby(by='区域').count()
new_df["数量"] = area_count.values
new_df.sort_values(by='数量',ascending=False)
4.3.2 户型数据分析
house_data = file_data["户型"]
house_data.head()def all_house(arr):key = np.unique(arr)result = {}for k in key:mask = (arr == k)arr_new = arr[mask]v = arr_new.sizeresult[k] = vreturn resulthouse_info = all_house(house_data)#去掉统计数量较少的值
house_data = dict((key,value) for key,value in house_info.items() if value >50)
pd.DataFrame({"户型":[x for x in house_data.keys()],"数量":[x for x in house_data.values()]})
show_houses
#图形展示房屋类型
house_type = show_houses['户型']
house_type_num = show_houses['数量']
plt.barh(range(11),house_type_num)
人工智能-seaborn单双多变量绘图、两案例:NBA球员数据分析、北京租房数据统相关推荐
- 综合案例 -- 北京租房数据统计分析
Table of Contents 1 获取数据 2 数据基本处理 2.1 重复值和空值处理 2.2 数据转换类型 2.2.1 面积数据类型转换 2.2.2 户型表达方式转换 3 图标分 ...
- 数据分析两场NBA比赛结果!大数据+NBA=?
本文长度为2976字,建议阅读4分钟 本文为你介绍大数据在NBA中的应用,并分析其缺陷和前景. 北京时间11月17日,NBA常规赛比赛继续进行,火箭队以142-116大胜太阳队.备受国人关注的周琦在本 ...
- java单双引号的区别
最近写springsecurity遇到单双引号共存的情况 @PreAuthorize("hasRole('经理') or hasAuthority('user:get')") 看上 ...
- 当当购书双十一钜惠,5折封顶!附图灵人工智能书单
关注公众号,发现CV技术之美 又到了双十一购物狂欢节.大家有没有想要的好书一直等到双十一打折一次抢购呢? 本次双十一人民邮电出版社图灵教育联合当当网为各位小伙伴们谋福利了! 超低折扣--当当网图灵教育 ...
- Java数据结构(1.1):数据结构入门+线性表、算法时间复杂度与空间复杂度、线性表、顺序表、单双链表实现、Java线性表、栈、队列、Java栈与队列。
数据结构与算法入门 问题1:为什么要学习数据结构 如果说学习语文的最终目的是写小说的话,那么能不能在识字.组词.造句后就直接写小说了,肯定是不行的, 中间还有一个必经的阶段:就是写作 ...
- 【数字基带信号】基于matlab实现单双极归零码和功率谱仿真
1 简介 数字基带信号是通信系统中最基本的信号之一,为了更好地学习和掌握该类信号,利用MATLAB软件从单双极性归零编码和不归零编码两个角度对其展开研究,并且求各自的功率谱密度. 2 部分代码 clo ...
- “清华大学国强研究院杯”全球人工智能与机器人双创大赛决赛在佛山完美收官
创新国强,智领未来 12月22日,首届"清华大学国强研究院杯"全球人工智能与机器人双创大赛决赛暨颁奖典礼在佛山顺德碧桂园总部举行,经过全天的激烈角逐,大赛最终决出了技术创新赛的冠军 ...
- 人工智能书单(机器学习实践篇)
导语:在这个特殊的假期里,宅在家里读书意味着健康平安,也会让你收获满满! 华章计算机AI板块小编将为你持续推送AI书单,从基础入门到AI的各个细分方向一网打尽,完备你的AI学习路线! 本期为大家带来的 ...
- SICK OD2位移测量传感器单双张检测调试实例
第一部分:现场问题描述 OD2 这款产品有着很高的性价比,在短量程激光测距中有这广泛的应用.此应用现场是应用两个 OD2 进行上下对称安装进行物料的厚度单双张测试的,客户选择 OD2-x50W10 ...
最新文章
- Date - Java处理日期和时间
- Sentinel如何通过限流实现服务的高可用性
- cmw500综合测试仪使用_网络性能测试仪该怎么选
- TelephoneManage开始了
- cocos creator 多张图片 椭圆运动_信阳液位测量图片
- 向张小龙开炮!百度祭出智能小程序
- 【文文殿下】[BZOJ4008] [HNOI2015] 亚瑟王
- 兵器类专业学c语言吗,第四轮学科评估C类学科如何?学姐:重点大学,热门专业放心读...
- RK3328 中文介绍
- LumaQQ.NET 试用
- 解决复制文件时出乱码
- 制作网页中弹出对话框的制作
- 15款替代微软产品的开源软件
- JS通过高德地图将经纬度转换为地理位置
- python实现下载网络视频资源
- 路由器接口管理 控制端口 辅助端口 物理端口 逻辑端口 局域网
- 简易的监控mysql_使用开源工具mysqlreport监控Mysql数据库-简易使用方法
- 基于钱搜索算法的BCH译码
- 重磅|棱镜七彩同CNCERT联合发布开源软件供应链安全风险研究报告了!!
- 正则表达式匹配 整数和正整数