目录
1.HS-排序返回前n行
2.HS-相关性
3.缺失值处理
4.时间
5.时间索引
6.分组聚合
7.离散分箱
8.Concat关联(索引关联)
9.Merge关联(字段关联)
10.join合并(左字段,右索引)
11.行列转置及透视表
12.数据可视化-面向过程
13.数据可视化-面向对象
14.快速生成柱状图
15.快速生成散点图
16.中文显示
17.众图表归类
箱线图数值展示如下:
数据较大,生成超级饼图如下:
一图胜千言,人是一个视觉敏感的动物,大多数人对数字无法在较短的时间内找到规律和业务意义,可视化就势在必行。视觉化效应 (Visual effects) 是指人类认知过程中,只要将非视觉性信息转化成视觉信息,可以大大增强海马体的记忆与前额叶皮质的思维反应速度。
Pandas的数据可视化依赖于matplotlib模块的pyplot类,在安装Pandas时会自动安装Matplotlib,Matplotlib是一个专门的绘图可视化包,可以对图形做细节控制,绘制出出版质量级别的图形,通过Matplotlib,可以简单地绘制出常用的统计图形。
除了Matplotlib以外还有很多用于可视化的包,比如Seaborn等。
=========================================================================
1.HS-排序返回前n行
# 按指定列降序排序并输出前n行
表名.nlargest(n,'指定列')
# 按指定列升序排序并输出前n行
表名.nsmallest(n,'指定列')
# 一二级排序(False降序/True升序)
表名.sort_values(by=['一级排序列','二级排序列'],ascending=[False,True])
2.HS-相关性
# 计算数值列之间的相关性
表名.corr()
# 正数是正相关,负数是负相关
# 0-0.3是弱相关,0.3-0.7稳定,0.7-1是强相关
# 面积和价格呈现正相关, 面积越大, 价格越贵
3.缺失值处理
# NAN 即缺失值 特殊浮点数 啥也不是 也都不想等
# 改成False后缺失值则不显示
pd.read csv('c:../city_day.csv',keep default_na=False)
# 为空则True/False
表名.isnull()/notnull()
# 将缺失值用指定数据填充
表名.fillna(数据)
# 将平均值填充缺失值并替换旧列并select*
名称 = 表名['列名'].mean()
表名['列名']=表名['列名'].fillna(名称)
# 删除缺失值
表名.dropna().shape
# 一整行全空的情况下才会删掉该行
表名.dropna(how='all').shape
# 指定某两列为空的话删除该行
表名.dropna(subdet=['列1','列2'],how='all').shape
4.时间
from datetime import datetime
# 显示当前时间
datetime.now()
# 将其他格式的时间列转化为时间格式的时间列
表名['Date']= pd.to_datetime(表名['Date'])
表名.info()
# 子格式(年月日季度)
print(表名['Date'].dt.year)
print(表名['Date'].dt.month)
print(表名['Date'].dt.day)
表名['Date'].dt.quarter
# 返回星期几,从日开始计数,0对应星期一
表名['Date'].dt.dayofweek
# Timestamp 时间戳
名字 = pd.to_datetime('2024-06-06 14:48:50')
名字.year
# 每个时间和最小时间的时间差
表名['Date']-表名['Date'].min()
s_.dt.days # int型无单位
5.时间索引
# 将时间列干成索引
表名.set_index('列名',inplace=True)
# 将索引再干回去
表名.reset_index(inplace=True)
# 筛选为某时间的数据
表名.loc['2018-01-01']
# 筛选时间FW指定
表名.loc['2018-02-01 00:00:00':'2018-02-02 23:59:59']
6.分组聚合
# 按某列分组后求平均值
表名.groupby(by=['分组列名']).mean()
# 按某列分组后对指定列求平均值
print(表名.groupby(by=['分组列名'])['操作列'].mean())
# 按某列分组后对指定列求平均值,并显示字段名
print(表名.groupby(by=['分组列名'])[['操作列']].mean())
# 按某列分组后对指定两列求平均值
print(表名.groupby(by=['分组列名'])[['操作列1','操作列2']].mean())
# 按某列分组后对指定两列求平均值和最大值
print(表名.groupby(by=['分组列名'])[['操作列1','操作列2']].agg(['mean','max']))
# 按某列分组后对列1求平均值和对列2求最大值
print(表名.groupby(by=['分组列名']).agg({'操作列1':'mean','操作列2':'max'}))
# 按某两列二级分组后对列1求平均值和对列2求最大值
print(表名.groupby(by=['分组列1','分组列2']).agg({'操作列1':'mean','操作列2':'max'}))
7.离散分箱
# 对某列均分成n个FW
pd.cut(表名['列名'],bins = n)
# 显示每一组数据的个数
pd.cut(表名['列名'],bins = n).value_counts()
# 自定义FW,FW左开右闭
pd.cut(表名['列名'],bins = [0,10,20,30]).value_counts()
# 按照某列进行分箱归类作新列(暂不计数)
表名['新列名'] = pd.cut(表名['列名'],bins = [0,10,20,30],labels=['名称1','名称2','名称3'])
# 对每个FW命名
pd.cut(表名['列名'],bins = [0,10,20,30],labels=['名称1','名称2','名称3']).value_counts()
8.Concat关联(索引关联)
# 竖着关联(值不够,NaN来凑)
pd.concat([表1,表2],axis=0)
# 横着关联(值不够,NaN来凑)
pd.concat([表1,表2],axis=1)
# join指定关联方式
pd.concat([表1,表2],axis=0,join='inner')
9.Merge关联(字段关联)
# 按照指定字段内连接(左右相同才算)
左表.merge(右表,on='关联字段',how='inner')
# 按照指定字段左外连接(保留左表,值不够,NaN来凑)
左表.merge(右表,on='关联字段',how='left')
# 按照指定字段右外连接(保留右表,值不够,NaN来凑)
左表.merge(右表,on='关联字段',how='right')
# 按照指定字段左右连接(保留左右表,值不够,NaN来凑)
左表.merge(右表,on='关联字段',how='outer')
# 两关联字段不同名,按照指定字段内连接(值不够,NaN来凑)
左表.merge(右表,left_on='关联字段1',right_on='关联字段2',how='inner')
# 指定sufhixes后缀,当关联结果中,出现了同名的字段,用于区分哪个字段来自于哪一张表,默认是('_x,_y')
左表.merge(右表,left_on='关联字段1',right_on='关联字段2',how='inner',suffixes=('_left','_right'))
10.join合并(左字段,右索引)
# 指定后缀
左表.join(右表,lsuffix='_left',rsuffix='_right')
# 左表的某列和右表的index做join,左表的一列数据和右表的行索引进行合并
左表.join(右表,on='某列',lsuffix='left',rsuffix='right')
11.行列转置及透视表
index 分组字段之一,在结果中作为行索引
columns 分组字段之一,在透视表结果中作为列名
values 聚合字段,在透视表的结果中展示在值的位置上
aggfunc 聚合函数,对聚合字段使用的统计函数名字
需要注意的是,index、columns、values都可以传列表,aggfunc可以针对不同的value选择不同的聚合方式,此时需要传入字典,但是不推荐把表做的过于复杂。
# 转置
print(表名.T)
# 计算的结果可以通过分组聚合来实现,只不过是展示的方式跟分组聚合有差异
表名.pivot_table(index='作行索引的列名',columns='作行索引字段名的列名',values='作数据的列名',aggfunc='作数据的列的操作方式')
# 例子
uniqlo_df.pivot_table(index='城市',columns=['产品名称'],values='销售金额',aggfunc='sum')
# 也可以对多个字段进行展示
uniqlo_df.pivot_table(index='城市',columns=['产品名称','销售渠道'],values='销售金额',aggfunc='sum')
12.数据可视化-面向过程
# 导包
import pandas as pd
import matplotlib.pyplot as plt
# 准备数据的x轴坐标
x = [-3, 5, 7]
# 准备数据的y轴坐标
y = [10, 2, 5]
# figure 创建画布,figsize指定画布大小
plt.figure(figsize=(15,3))
# plot 绘图
plt.plot(x, y)
# xlim 设置x轴坐标的显示范围
plt.xlim(-5, 10)
# ylim 设置y轴坐标的显示范围
plt.ylim(-3, 15)
# 设置x轴标签 size字体,大小
plt.xlabel('X Axis',size=20)
# 设置y轴标签
plt.ylabel('Y axis')
# 设置标题内容, size字体大小
plt.title('o',size=30)
# 设置网格线
plt.grid(True)
# 显示图片
plt.show()
13.数据可视化-面向对象
# 创建坐标轴对象
fig, ax = plt.subplots(figsize=(15,3))
# 调用坐标轴的绘图方法
ax.plot(x, y)
# 调用坐标轴的设置x轴上下限的方法
ax.set_xlim(0, 10)
ax.set_ylim(-3, 8)
# 调用坐标轴的设置x轴标签的方法
ax.set_xlabel('X axis')
# 调用坐标轴的设置y轴标签的方法
ax.set_ylabel('Y axis',size = 20)
# 调用坐标轴的设置标题的方法
ax.set_title('Line Plot',size = 30)
plt.show()
14.快速生成柱状图
import pandas as pd
import matplotlib.pyplot as plt
名称 = pd.read_csv('D:/Yuanman/day01/02_代码/data/seaborn-data/tips.csv')
# 创建画布
plt.figure(figsize=(16,8))
# 显示列
plt.hist(名称['列名'],bins=10)
# 显示网格线
plt.grid(True)
plt.show()
15.快速生成散点图
# 查看两列数据是否有关系
import pandas as pd
import matplotlib.pyplot as plt
名称 = pd.read_csv('D:/Yuanman/day01/02_代码/data/seaborn-data/tips.csv')
# 创建画布
plt.figure(figsize=(16,8))
# 显示列(两个变量之间是否有关联)
plt.scatter(名称['列1'],名称['列2'])
# 显示网格线
plt.grid(True)
plt.show()
16.中文显示
# 用来正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
# 用来正常显示负号
plt.rcParams['axes.unicode_minus']=False
# 快速画折线图,定义网格线、画布、标题并中文显示
表名.plot(grid=True,figsize=(10,6),title='狗')
plt.show()
17.众图表归类
# 折线图的全写方式,也可以自定义指定xy轴对应的列
表名.plot.line(x='列名', y='列名')
# 柱状图,加stacked=True多列合一
表名.plot.bar(stacked=True)
# 横向柱状图(条形图),加stacked=True多列合一
表名.plot.barh(stacked=True)
# 直方图
表名.plot.hist()
# 箱形图
表名.plot.box()
# 核密度估计图
表名.plot.kde()
# 面积图
表名.plot.area()
# 饼图,y='列名',显示百分比,图大小,画布大小
表名.plot.pie(y='列名',autopct='%.2f%%',radius=0.9,figsize=(16,8))
# 散点图
表名.plot.scatter()
# 气泡图(更高维度的散点图),参数s控制点的大小,实现三维数据展示
表名.plot.scatter(x='第1维度列',y='第2维度列',grid=True,s=表名['第3维度列']*10,figsize=(16,8))
# 箱线图(图形注释见下图所示)
表名.boxplot()
# 六边形箱体图,或简称六边形图,颜色深浅表示该值出现的频率
# gridsize设定蜂箱格子的大小,数字越小格子越大
表名.plot.hexbin(x='横坐标列', y='纵坐标列', gridsize=12)
plt.show()
箱线图数值展示如下:
数据较大,生成超级饼图如下:
Python绘图展示介绍到这里,希望对读者有所帮助,感谢大家的支持😍!!!