轻松学Python数据分析4-数据可视化图表

阅读本文大约需要 3 分钟

轻松学Python数据分析4-数据可视化图表_第1张图片

摘 要

轻松学Python数据分析4-数据可视化图表_第2张图片

不要把生命献给平庸低俗,工作应该是快乐的,如果你不喜欢,就放下,无所谓的。经历了2020-2021年的这些时光,OF越来越希望将自己的时间用在喜欢的事上,比如分享这些可能毫不起眼的数据分析知识,哪怕是有一位读者能够被我们的上进态度所激励,或者能学到一个知识点,OF都会心满意足。

言归正传,经过了01-03这3篇文章的积累,相信大家对Python数据分析也有了一定的认知,今天OF向大家介绍轻松学Python数据分析系列的第4部分:数据可视化图表(1读取数据集->2数据处理->3数据可视化图表)。

轻松学Python数据分析4-数据可视化图表_第3张图片

  • 主要内容:Excel 办公自动化和数据分析

  • 适用人群:办公室职员 / Python 初学者 / 有志从事数据分析工作的人员

  • 准备内容:Anaconda-Spyder,pandas、seaborn、matplotlib.pyplot库

不会安装库的可以参考如下教程:

Anaconda如何安装Python库​

轻松学Python数据分析4-数据可视化图表_第4张图片

一、读取数据集

OF在第03篇文章中已经介绍过了如何下载、读取数据集(文末有01-03篇的链接),就不再赘述。先读取一个目标数据集,以下例子的数据集是在Kaggle下载的(澳大利亚的房产数据),如果需要该数据集也可以私信我。

import pandas as pd
house = pd.read_csv(r'D:\XX\housetest.csv')

拿到这样一个数据集,我们先看看里面有些什么样的数据(把我们要分析的数据列展现出来):

轻松学Python数据分析4-数据可视化图表_第5张图片

二、数据处理

承接03篇的数据处理方式,我们先观察地下室总面积列的数据。

import pandas as pd house = pd.read_csv(r'D:\XX\housetest.csv') 

print(house["TotalBsmtSF"].isnull().sum())

输出结果:

1

我们可以看到,该列有一个数据是空值,处理缺失值可以分为两类:删除缺失值和缺失值插补。我们以平均数插补为例:

import pandas as pd 
house = pd.read_csv(r'D:\XX\housetest.csv') 
#将house数据集中"地下室总面积"列数组赋给price_null 
price_null = pd.isnull(house["TotalBsmtSF"]) 
#将house数据集中"地下室总面积"不为空值的数组赋给good_price 
good_price = house[price_null == False]["TotalBsmtSF"] 
#计算good_price的平均值 
mean_price = good_price.mean() 
#补充所有缺失值以mean_price这个数值 
house.loc[price_null == True, "TotalBsmtSF"] = mean_price

三、读取可视化图表

经过了数据处理,我们可以开始对数据进行分析了。举个例子,想要统计各种HouseStyle房子的数量,我们可以采用seaborn的barplot。(seaborn教程:https://seaborn.pydata.org/examples/index.html)

知识点1:完整的数据分析步骤(1读取数据集->2数据处理->3可视化图表呈现)

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
#1 读取数据集
house = pd.read_csv(r'D:\XX\housetest.csv')

#2 数据处理
#将house数据集中"地下室总面积"列数组赋给price_null
price_null = pd.isnull(house["TotalBsmtSF"])    
#将house数据集中"地下室总面积"不为空值的数组赋给good_price
good_price = house[price_null == False]["TotalBsmtSF"]    
#计算good_price的平均值
mean_price = good_price.mean()       
#补充所有缺失值以mean_price这个数值
house.loc[price_null == True, "TotalBsmtSF"] = mean_price     

#3 可视化图表
df = house.copy()
#统计各种房子样式的数量并按降序排序
house_count = df.groupby('HouseStyle')['TotalBsmtSF'].count().sort_values(ascending=False).reset_index()
sns.barplot(x="HouseStyle", y="TotalBsmtSF", data=house_count)
plt.show()

输出结果:

轻松学Python数据分析4-数据可视化图表_第6张图片

上述这个例子为大家快速简单地呈现了可视化的效果,接下来OF要通过这个数据集和seaborn库,来呈现一些常用的图表。

轻松学Python数据分析4-数据可视化图表_第7张图片

知识点2:柱形图countplot/barplot

1)countplot比较简单,计数并画成柱状图。

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
house = pd.read_csv(r'D:\XX\housetest.csv')
   
# 建立matplotlib图表
f, ax1 = plt.subplots(1, 1, figsize=(10, 6), sharex=True)

# 生成柱形图
x1 = house["HouseStyle"]
sns.countplot(x=x1, ax=ax1, palette="Greens_d")

# 展现图表
plt.show()

输出结果:

轻松学Python数据分析4-数据可视化图表_第8张图片

2)barplot,呈现两列数据的关系,这里有个要注意的,因为x,y轴设置了中文字体显示,所以需要加两行代码,否则x,y轴的标题就不显示了。

plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False   #这两行需要手动设置

完整代码如下:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
house = pd.read_csv(r'D:\XX\housetest.csv')
#将house数据集中"地下室总面积"列数组赋给price_null
price_null = pd.isnull(house["TotalBsmtSF"])    
#将house数据集中"地下室总面积"不为空值的数组赋给good_price
good_price = house[price_null == False]["TotalBsmtSF"]    
#计算good_price的平均值
mean_price = good_price.mean()       
#补充所有缺失值以mean_price这个数值
house.loc[price_null == True, "TotalBsmtSF"] = mean_price     

# 建立matplotlib图表
f, ax1 = plt.subplots(1, 1, figsize=(12, 7), sharex=True)
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False   #这两行需要手动设置

# 生成Sequential类型的柱形图
x1 = house["HouseStyle"]
y1 = house["TotalBsmtSF"]
sns.barplot(x=x1, y=y1, ax=ax1, data=house)
ax1.set_title('HouseStyle各户型地下室面积情况', fontsize=20)
ax1.set_xlabel("户型")
ax1.set_ylabel("地下室面积")

# 展现图表
plt.show()

输出结果:

轻松学Python数据分析4-数据可视化图表_第9张图片

看了上图,大家会看到黑色的一条柱子,这条柱子指的是y轴(地下室总面积)的范围,可能数据呈现的并不直观,那么我们用boxplot更好些。

知识点3:箱形图,它能显示出一组数据的 最大值、最小值、中位数及上下四分位数。

轻松学Python数据分析4-数据可视化图表_第10张图片

代码,也比较简单,直接将柱形图代码中的sns.barplot,改为sns.boxplot。

输出结果:

轻松学Python数据分析4-数据可视化图表_第11张图片

如果需要再增加一个区域维度,呈现各区域各户型的地下室面积情况,我们需要使用hue属性。

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
house = pd.read_csv(r'D:\Mechtouch\Pyproject\historypro\datadiagram\housetest.csv')
#将house数据集中"地下室总面积"列数组赋给price_null
price_null = pd.isnull(house["TotalBsmtSF"])    
#将house数据集中"地下室总面积"不为空值的数组赋给good_price
good_price = house[price_null == False]["TotalBsmtSF"]    
#计算good_price的平均值
mean_price = good_price.mean()       
#补充所有缺失值以mean_price这个数值
house.loc[price_null == True, "TotalBsmtSF"] = mean_price     

# 建立matplotlib图表
f, ax1 = plt.subplots(1, 1, figsize=(12, 7), sharex=True)
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False   #这两行需要手动设置

# 生成柱形图
x1 = house["HouseStyle"]
y1 = house["TotalBsmtSF"]
hue1 = house["MSZoning"]
sns.boxplot(x=x1, y=y1, ax=ax1, hue=hue1, data=house)
ax1.set_title('HouseStyle各户型地下室面积情况', fontsize=20)
ax1.set_xlabel("户型")
ax1.set_ylabel("地下室面积")

# 展现图表
sns.despine(offset=10, trim=True)

输出结果:

轻松学Python数据分析4-数据可视化图表_第12张图片

知识点4:直方图和密度图的集合体、线性回归图

如果我们想把几张图一起显示(横向或纵向),在建立matplotlib时,把参数调整成对应数量

#纵向数量改第一个参数,横向数量改第二个参数
f, [ax1, ax2] = plt.subplots(1, 2, figsize=(15, 5))

完整代码如下:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
house = pd.read_csv(r'D:\XX\housetest.csv')
columns = ['LotArea', 'TotalBsmtSF']
df = pd.DataFrame(house, columns=columns)
# 建立matplotlib图表
f, [ax1, ax2] = plt.subplots(1, 2, figsize=(15, 5))
# 建筑面积的分布情况
sns.distplot(df['LotArea'], bins=20, ax=ax1, color='r')
sns.kdeplot(df['LotArea'], shade=True, ax=ax1)
# 各建筑面积和地下室面积的关系
sns.regplot(x='LotArea', y='TotalBsmtSF', data=df, ax=ax2)
plt.show()

输出结果:

轻松学Python数据分析4-数据可视化图表_第13张图片

结 语

今天,OF简要介绍了制作数据可视化图表的流程和几种图表的作法,在第5篇关于项目实战的文章中我们将实战一些小项目。OF主要为大家介绍最完整、最简单、最实用的方法来学习办公自动化和数据分析,用Pandas对Excel的数据处理已经足够了。预计还有最后一期展现一个完整的项目实战,尽请期待!

1、Pandas的数据结构,即基础原理

轻松学Python数据分析1-最简单实用的Pandas讲解

2、数据读取和生成

轻松学Python数据分析2-Excel读取和生成

3、Pandas的数据处理

轻松学Python数据分析3-数据处理

4、数据可视化图表(本篇文章)

5、项目实战

  • 若有读者对选材和内容有任何建议,请随时评论或私信我,只要是好的建议,OF一定不会辜负大家,会有惊喜送上。

  • 若学员对知识点有疑问或想学习更有用的知识,也请随时评论或私信我,请相信OF的诚意,一定会努力帮助大家发现-解决问题,提高自身的核心竞争力。

你可能感兴趣的:(ofter数据科学,python,数据分析,数据可视化)