python数据分析&可视化

【目录】

1.jupyter

2.pandas

2.数据分析

3.数据展现与报告撰写

4.Apriori算法

5.RFM模型

6.NumPy

7.可视化进阶

8.机器学习导论

(一)Jupyter

(二)pandas

import pandas as pd

1. pandas 库的基本数据结构

1. Series

①组成

Series 主要由一组数据及其对应的索引组成。

②创建

pd.Series() 就是创建 Series 对象的方法。这个方法包含的参数有很多。

​ 主要先讲解一种借助列表来创建 Series 对象的方法,也就是:pd.Series(data)。当我们将列表传给参数 data 之后,在默认情况下,pd.Series(data)会自动为列表中的每一个元素分配对应的数字索引。默认索引是从 0 开始,以 0, 1, 2, 3,… 的形式按序分配给列表中的元素。当然,也可以人为设定 Series 对象的索引,只不过这不是这节课的重点。

输入;

# 创建Series对象
surname = pd.Series(['赵', '钱', '孙', '李'], index = ['学生1', '学生2', '学生3', '学生4'])
# 查看surname
surname

输出:

​ 但其实除了列表以外,还有很多其他的方式可以创建Series:

2.DataFrame
①结构

DataFrame对象是一种表格型的数据结构,包含行索引、列索引以及一组数据。

②创建

​ 创建 DataFrame 对象的方法是:pd.DataFrame()。和创建 Series 对象一样,创建 DataFrame 对象的参数也有很多。这节课会主要讲解一种借助字典来创建 DataFrame 对象的方法,也就是:pd.DataFrame(data)。这里需要将一组数据传给参数 data,数据的形式可以是字典。

​ 不过要注意:各键所对的值的长度如果不相等,就意味着数据是长短不一的,这样的字典如果传给了参数data,则会报错。

​ 方法一:传入字典

# 创建 DataFrame 对象
class_df = pd.DataFrame({'年龄': [25, 18, 23, 18],'性别': ['女', '女', '女', '男']})
# 查看 class_df
class_df

​ 方法二:传入n维数组

# 创建DataFrame对象
import numpy as np
class_df2 = pd.DataFrame(np.array([[25, '女'],[18, '女'],[23, '女'],[18, '男']]),columns = ['年龄', '性别'],index = [1, 2, 3, 4])
# 查看 class_df2
class_df2

​ 方法三:传入多个嵌套列表

goods_info = [['巧克力', 77.675, '47箱', '广东佛山仓'], ['牛奶', 58.755, '40箱', '广东揭阳仓'], ['威化饼干', 7.385, '285盒', '广西南宁仓'], ['火腿肠', 34.823, '20件', '广西柳州仓'], ['巧克力', 62.648, '30箱', '广东揭阳仓'], ['牛奶', 45.75, '12箱', '广西柳州仓'], ['威化饼干', 5.235, '148盒', '广东佛山仓'], ['火腿肠', 33.736, '28件', '广东佛山仓']
]goods_df = pd.DataFrame(goods_info)
goods_df

观察两个数据的内容,可以发现1.3的区别。

1)以字典作为数据传入时,字典的会作为 DataFrame 对象的列名显示,而字典的会作为对象的列数据显示。

2)以嵌套列表作为数据传入时,列表的元素会作为 DataFrame 对象的行数据显示,且会为数据默认生成从 0 开始的列名。

③列名设置

1 带列名直接创建

# 设置列表
students_info = [['小蓝', '语文', '79'], ['小邱', '数学', '83'], ['小李', '英语', '92']]# 使用列表创建 DataFrame 对象,同时设置列名
students_df = pd.DataFrame(students_info, columns=['姓名', '科目', '分数'])
students_df

2 补充、修改列名(赋值操作)

# 修改 goods_df 的列名
goods_df.columns = ['名称', '单价', '库存', '地址']
goods_df
3.Series 对象和 DataFrame 对象的联系

DataFrame 对象可以被看作是由 Series 对象所组成的。想要验证这层联系,可以通过 df['列索引'] 这个索引操作来实现。

2.导入数据文件

​ pandas 库为读取各种文件类型的数据提供了非常简便高效的方法。

1.csv

pd.read_csv(path, encoding) 就是其中一种高效读取 csv 文件的方法,返回的是一个 DataFrame 对象。这个方法有很多参数,这里先介绍两种最常用的:pathencoding

​ 对于参数 path,需要传一个文件路径给它。可以是相对路径,也可以是绝对路径。对于参数 encoding,需要传一个文件编码格式给它。文件编码格式的选取需要根据所读文件的编码格式来定。

2.excel

​ 它可以以 DataFrame 格式读取 Excel 文件的数据,并返回一个 DataFrame 对象。

3.部分总结

4.数据预处理

1.数据清洗

首先了解一下查看的方法:

  • 直接输入 DataFrame 对象的名称能查看数据的前后 5 行

  • 可以使用df.head()df.tail()方法查看数据。对DataFrame 对象使用 df.head() 方法默认可以查看数据的前 5 行,df.tail() 方法则默认可以查看数据的后 5 行。当然自己加进去数字,就是前、后几行的意思。

①处理缺失值

**1 查看基本信息 **

​ 在实际的数据分析项目中,面对庞大的数据我们自然不能依赖肉眼的观测。有一个工具能帮助我们提炼出基本的数据信息,从而能让我们对于整体的数据有一个大概的印象。这个方法就是df.info()

当非空数据与数据总量不一致时,说明这份数据有可能存在缺失值,处理这些缺失值的第一步,就是找到它们。

2 查找缺失值

​ 在 pandas 库中,我们可以使用 isna() 方法来查找 DataFrame 对象以及 Series 对象中的缺失值。它可以将查找结果以 DataFrame 对象或者 Series 对象的形式进行返回。df.isna()返回的是 DataFrame 对象,Series.isna() 返回的就是 Series 对象。返回对象中的内容都是布尔值,缺失数据会用 True 来表示,False 则代表这里的数据不缺失。

3 删除缺失值(!记得一定要进行赋值操作,把它重新赋给原来那个)

# 删除所有缺失值
mask_data = mask_data.dropna()
# 查看数据基本信息总结
mask_data.info()

​ 如果我们需要针对某几列的缺失数据进行删除,就需要用到df.dropna()subset 参数。它可以指定 dropna() 方法删除一列或多列数据中含有缺失值的行。我们可以把要指定的列名写进中括号[]中,然后赋值给 subset 参数,就可以限定 dropna() 方法的删除范围。

# 删除'品牌', '上牌时间', '里程数(km)', '保值率'四列数据缺失的行
test_data = test_data.dropna(subset=['品牌', '上牌时间', '里程数(km)', '保值率'])
# 查看 test_data 的基本信息总结
test_data.info()

②处理重复值

1 查找重复值

​ 我们可以直接使用 df.duplicated()(中文意思:重复的)方法来查找 DataFrame 对象中的重复数据。

​ 可以看到,这里的返回结果很长,我们完全没有办法用肉眼进行观察。

​ 我们可以将 mask_data.duplicated() 返回的结果放入中括号 [] 中,用来索引 mask_data 数据,查看 mask_data 数据中重复的行。

2 删除重复行

​ 可以使用 pandas 库的 df.drop_duplicates() 方法直接删除 DataFrame 对象中重复出现的整行数据。

​ 我们能看见 mask_data 的表头下面是空的,说明到这里已经没有重复数据了。

​ 值得一提的是,df.drop_duplicates() 方法并不会将所有重复的行都删除。这里你要弄清重复出现的行与重复的行之间的区别,在 pandas 库中只有重复出现的数据才会被判定为重复数据.,df.drop_duplicates() 方法删除的也都是重复出现的行,因此所有重复数据的第一行都会保留。

######③处理异常值

1 检查异常值

​ 介绍一个检查数据是否存在异常的方法 —— describe()。describe 单词在英语里是描述的意思,而在 pandas 库中 describe() 方法则可以查看 Series 对象或者DataFrame 对象的 描述性统计信息。

​ 在计算机系统里,e+n 代表的是 10 的 n 次方。

2 抽取数据范围(布尔索引)

​ 在pandas库中,有一种筛选数据的方法叫做布尔索引。之前我们有学过使用 df['列索引'] 来提取某一列的信息。在 pandas 库中,我们还可以在 df[] 中通过表达式的形式来提取一定范围的数据。比如我们想选择 mask_data 数据中,单价一列小于等于 200 的数据,就可以设置条件表达式 mask_data['单价'] <= 200。把它加入括号中索引:mask_data[mask_data['单价'] <= 200],就可以选取 mask_data 数据中单价这一列小于等于 200 的数据。

# 筛选单价小于等于 200 的数据
mask_data = mask_data[mask_data['单价'] <= 200]

​ 要注意,布尔索引用的也是中括号嗷。

总结:

2.数据整理
1.日期datetime

① 转换日期数据

​ 在 pandas 库中我们可以使用 pd.to_datetime(arg, format) 来将 DataFrame 对象或者 Series 对象的数据类型转换成 datetime 类型。其中的 arg 参数为我们要转换的数据,它可以是DataFrame 对象或 Series 对象。我们这次要转换的数据为 mask_data 中的’日期’字段,所以对应的 arg 参数就是 mask_data[‘日期’]。format 参数为 datetime 类型的日期格式,比如说这份数据,它是以年-月-日的形式出现的,那么它对应的 format 就是 ‘%Y-%m-%d’(year-month-day的缩写)。

# 转换日期数据,并设置对应的日期格式
date_data = pd.to_datetime(mask_data['日期'], format = '%Y-%m-%d')
# 查看 date_data
date_data

​ 将’日期’字段转换成 datetime 类型后,我们就可以直接从中提取月份信息。

② 提取月份信息

​ 这一步需要用到 Series.dt.month。其中的 Series 指的就是刚才日期数据转换完后的 Series 对象,我将它赋值到了变量 date_data。Series.dt 可以把 datetime 类型的数据转成一种方便我们提取日期或时间的对象。这种对象包含多种属性,其中有 year(年)、month(月)、day(日)等。想要获取这份数据的年、月、日的信息,可以通过 Series.dt.yearSeries.dt.month 以及 Series.dt.day 来获取。

# 提取日期数据中的月份信息
month_data = date_data.dt.month

③ 添加新列

​ 在 pandas 库中,我们可以直接用 df['colname'] = Series 的方式来为原数据添加新的一列。colname 指的是要添加的新列的列名。在这个案例中,colname 就是月份。也就是说直接对新增的这列数据进行赋值,就能为 DataFrame 对象添加新列。因此最后添加’月份’字段到原数据的代码就是:mask_data['月份'] = month_data

# 将月份数据添加到原数据中
mask_data['月份'] = month_data
# 查看原数据
mask_data

④ 总结

2.数据排序

①排序sort_values

sort_values() 方法,可以对指定列进行排序操作。(默认是升序排列)

#根据某列的值进行升序排序
sorted_goods=newgoods_df.sort_values(by='单价')
#如果我们不想对上面的数据集进行排序,只想提取出【单价】列,单独进行排序
newgoods_df['单价'].sort_values()

​ 另外,不单是 DataFrame 对象可以调用 sort_values() 方法,Series 对象也能调用该方法。但要注意的是,使用 DataFrame 对象调用 sort_values() 方法时,可以通过参数 by 来指定某一列。而 Series 对象调用该函数时,函数没有参数 by。原因是 Series 对象不具备列索引(列名)。这一细节点,在书写代码时需要多加留意。

②重置索引

# 重置数据 sorted_goods 的行索引
reset_goods = sorted_goods.reset_index(drop=True)
reset_goods
3.数据四舍五入

# 保留【体重】列的数据到一位小数
humans_df['体重']=round(humans_df['体重'],1)
humans_df

​ 这里有两个是一定要注意的,一个是注意第一行是把df里的某一列重新赋值,而不是对整个df赋值;还要注意round是独立函数,并不需要跟在什么再加个点的后面。

4.函数处理 s.agg(func)

①单个函数处理

​ 方法 agg() 中的参数 func 可以为自定义的函数名,这里在使用时需要注意,传入自定义的函数时,只需要写上函数名,不需要加上括号以及函数的参数。

#定义一个切掉最后一个字符的函数(可用来去掉数值后的单位)
def new_fuc(data):number=data[:-1]return int(number)# 使用 agg() 方法对【库存】列的数据进行切片处理
reset_goods['库存'] = reset_goods['库存'].agg(new_func)
reset_goods

​ 其实这个传入的数据类型是要很重视的!!对吧因为这个稍微有那么一点点奇怪至少超出我现有的底层逻辑范围,我暂时就只能构建一下中层逻辑了。

​ 虽说这个函数对传入的data切去了最后一个字符,但我们要认清data的本质,它是某一列中的一个,也就是说,这是对待某一个对象的函数,不是对某一列的函数,所以必然用不到for i in xxx的循环去遍历某一个列呀,因为它在被agg使用的时候就包含了这样的逐个取出了。也就是说,agg这个函数的使用,本身就是对这一列的每一个元素逐个使用了!所以下面这段代码一定是不对的!同时还忘记了非常关键的return!

#错误代码示例
## 定义函数,以替换【数量】列的“-”为 0
#def exchange(data):
#    for i in range(len(data)):
#        if data[i]='-':
#            data[i]=0
#foods_df['数量'].agg(exchange)#正确代码示范
def exchange(data):if data='-':data=0return data
foods_df['数量'].agg(exchange)

②多个函数处理(传入字典、且只支持部分特定函数)

# 定义字典 dict_2 !! 注意后面不带括号嗷
dict_2 = {'单价': 'mean', '库存': 'sum'
}
# 同时计算各食品的平均单价和总库存量
reset_goods.groupby('名称').agg(dict_2)

​ 代码可分为3步进行理解:

1)使用 reset_goods.groupby('名称') 让数据按【名称】列进行分组;

2)定义一个字典 dict_2,字典的键为我们需要操作的列名,如 '单价''库存'。字典的值为我们需要操作的函数名,这里我们需要求平均值函数 mean(),求和函数 sum()。(可使用的函数可参照下表:)同样需要注意的是,操作的函数只需要函数名,不需要函数名后的括号以及函数的参数

3)分组后的数据调用 agg() 方法时,为方法的参数 func 传入字典 dict_2,可以同时得到各食品的平均单价和总库存量。

5.数据类型转换

​ Python 提供了一个 astype() 方法,该方法可以将 Series/DataFrame 对象转换为指定的数据类型。astype() 方法中的参数 dtype,我们可以为其赋上需要的数据类型,如 int、str 等。其中,由于参数 dtype 是 astype() 方法的第一个位置参数,所以我们在使用时无需写为 astype(dtype=int),可以直接写为 astype(int)

6.数据批量替换

​ replace() 方法中的参数 to_replace 可以是一个字典,字典可以将指定的列数据替换为不同的值。

乱入阶段小小结:

5.数据写入

1.csv

​ 使用 df.to_csv() 方法,将清洗好的数据写入 csv 文件中。

# 保存清洗干净的数据
mask_data.to_csv('./工作/mask_data_clean.csv', encoding = 'utf-8')

​ 打开文件后你会发现,最左侧多了一列数据。这个数据是 DataFrame 对象的行索引。pandas 库将 csv 文件读取为 DataFrame对象 时都会自动生成行索引。所以我们写入时也会把行索引单独作为一列写进数据文件中。这里我们可以使用 df.to_csv() 方法的 index 参数来限制 DataFrame 对象的行索引是否写入到 csv 文件。它的默认值为 True,会让你写入的 csv 文件包含一列行索引。如果我们把这个参数设置为 index = False 就可以取消写入行索引,不用将行索引那一列写入 csv 文件。

# 保存清洗干净的数据,并取消写入行索引
mask_data.to_csv('./工作/mask_data_clean.csv', index = False)

2.excel

​ to_excel() 函数可以以 DataFrame 格式将数据写入到 Excel 文件。

​ 因为 Excel 表中默认有行索引,所以如果数据的行索引在工作簿中不具备参考价值,建议不写入到工作簿中。

阶段性小总结:

1.基本的数据处理

2.较为进阶的数据处理

6. 数据分析(分组聚合)

1.单层分组聚合

​ 单层分组聚合操作指的是针对某一个组进行聚合操作。

df.groupby(by)['列索引'].mean()即为按某列索引分组并求出该组的平均值的方法。

​ 注意,那个by的地方,圆括号里带不带方括号都可,结果一样。但是一定要理解原理,这里的方括号可行只是因为可以看作一个只有一个内容的列表吧,因为有多层分组的存在才导致了它可行,但你可以看到,它绝对不是作为col那样的含义,因为在多层里再套方括号,它就不行了。

grade_df2 =grade_df.groupby(['性别'])['成绩'].median()
grade_df2 = grade_df.groupby('性别')['成绩'].median()

​ 求平均值只是聚合操作的一种,聚合操作还有很多,几个常用的聚合操作方法如下:

2. 多层分组聚合

​ 唯一的不同点在于索引的层数上。层数的不同体现在参数 by 的赋值方式上。在单层分组聚合操作的时候,只需要将一个列索引传给参数 by 就可以了。而多层分组聚合操作需要传多个列索引给参数 by。

​ 需要注意的是,这些列索引在传进参数 by 之前,需要先被放进一个“容器”里,这个容器可以是列表。

# 获取不同性别的学生处于不同班级时的平均分
grade_df4 = grade_df.groupby(['性别', '班级'])['成绩'].mean()
# 查看grade_df4
grade_df4

​ 注意,里面可不能再套方括号啦。

如果再多一层:

​ 虽然通过多层分组聚合的方法,可以求出不同组别下的学生考试成绩的情况,但是返回的结果看起来却有些冗杂,所有的组别信息都扎堆出现在了一个 Series 对象的索引中。

s.unstack() 函数就是解决这个问题的常见方法。它可以将一个多层分组聚合后的 Series 对象转变成 DataFrame 对象。

# 对grade_df5使用unstack函数
grade_df5.unstack()

s.unstack() 这个方法是针对多层分组聚合后的 Series 对象来使用的。作用就是将其索引的最后一列转变成 DataFrame 对象的列索引,而剩下的索引则转变成 DataFrame 对象的行索引。

# 获取上图所示的表格
grade_df6 = grade_df.groupby(['班级', '眼镜', '性别'])['成绩'].mean().unstack()
# 查看grade_df6
grade_df6

7.数据可视化

1.导入中文字体
# 导入matplotlib库的pyplot模块
from matplotlib import pyplot as plt
# 设置中文字体
plt.rcParams['font.family'] = ['Source Han Sans CN']

plt.rcParams['font.family'] 可以获取 matplotlib 库中的字体,'Source Han Sans CN' 指的是我们课程系统自带的中文字体。plt.rcParams['font.family'] = ['Source Han Sans CN'] 意味着我们将课程中自带的中文字体添加到了 matplotlib 的字体库中。

​ 而不同系统下自带的中文字体是不一样的,以下为Windows 和 Mac OS 系统下的常用中文字体。

2.单条折线图
series.plot(kind='line', figsize=(7, 7), title='此人月考成绩')

​ 绘制单条折线图的代码是:s.plot()。同样的,这个方法有很多可以传入的参数,主要的是以下三个参数:

3.多条折线图
# 创建三位学生成绩的df
students_grade = pd.DataFrame({'李健': [80, 85, 89, 91, 88, 95],'王聪': [95, 92, 90, 85, 75, 80],'过凡': [90, 91, 92, 91, 90, 91]}, index=['2月', '3月', '4月', '5月', '6月', '7月'])
# 绘制多条折线图
students_grade.plot(kind='line', figsize=(7, 7), title='月考成绩')

多条折线图的绘制方法是:df.plot()。它和单条折线图相比,最大的区别就在于:多条折线图是针对一个 DataFrame 对象来绘制的,而单条折线图是针对一个 Series 对象来绘制的.df.plot() 默认会将每一列数据用 s.plot() 绘制成单条折线图,然后合并到同一张图上。而刚才提到的三个参数:kind、figsize、title 以及补充给你的几个参数,df.plot() 都是可以沿用的,效果也相同。

4.饼图
# 导入数据
my_data = pd.read_csv('./工作/clean_data.csv', encoding='utf-8')
# 查看my_data
my_data
# 获取行业的频率分布
profession = my_data['行业'].value_counts()/my_data['行业'].value_counts().sum()
# 绘制行业频率分布的饼图
profession.plot(kind='pie', autopct='%.2f%%', figsize=(7, 7), title='行业频率分布图', label='')

5.条形图
# 获取岗位的频率分布
position = my_data['岗位'].value_counts()/my_data['岗位'].value_counts().sum()
# 绘制岗位的频率分布条形图
position.plot(kind='bar', figsize=(13, 6), title='岗位频率分布条形图')

(三)matplotlib

0.数据可视化工具

​ 首先介绍一下数据可视化的主流工具:

​ Tableau 和 PowerBI 均为数据可视化工具的头部选手,它们的功能比较接近,主要是制作数据看板。其中 Tableau 偏商业分析,可视化偏标准化,需要付费。PowerBI 适合所有类型的用户,可视化更具定制化,但是自定义和共享仪表板需要付费。而 Python 作为一种编程语言,通过调用第三方可视化库作图,覆盖的图表种类很多,定制化非常强,并且免费。再加上 Python 基本涵盖了数据分析的整个流程:从数据处理到数据分析,再到数据展现。可以说是行云流水,一气呵成。

​ 在 Python 中有几个常用的第三方可视化库:pandas、matplotlib 以及 seaborn。

​ 更倾向于推荐 matplotlib 库,主要原因是:

1)matplotlib 库相较于 pandas 绘图以及 seaborn 绘图工具更为底层,因此,matplotlib库中的绘图函数、参数相对更多,我们可以根据自己的风格自由选择。

2)从应用范围上来看,在 python 数据分析领域,matplotlib 库是与 numpy 库、pandas 库并驾齐驱的三库之一,被称作 python 数据分析的“三剑客”,由此可见其应用范围之广。

1.导入库
from matplotlib import pyplot as plt
2.画布的生成与保存

​ 生成画布用到的是 pyplot 模块下的 figure 函数,即 plt.figure()。其中的参数 figsize 可以控制画布的长和宽,一般用元组的形式进行赋值。

# 生成画布,并设置画布的大小
plt.figure(figsize=(6, 6))

​ 输出结果<Figure size 432x432 with 0 Axes>表示生成了一个空白的画布对象。画布大小为 6 英寸x6 英寸,默认分辨率为 72 像素/英寸,所以像素为 432x432。

​ 如果要将 jupyter 沙盒中生成的图形保存到本地,可以用 plt.savefig()对画布进行保存,这里只需要设置它的路径参数。

# 前面已经作完图了哈
# 保存画布,并设置保存路径
plt.savefig('./工作/各月总订单量趋势图.png')
3.设置x/y坐标值
1.直接用列表创建series对象

​ x 是指坐标点的横坐标(简称 x 坐标值),y 是指坐标点的纵坐标(简称 y 坐标值),它们均为可迭代对象,你可以理解为有序的元素序列,比如 x = (x1, x2, x3, ……, xn)y = (y1, y2, y3, ……, yn)

​ 这里以 Series 对象为例设置 x/y 坐标值。

# 设置 x/y 坐标值
x = pd.Series(['第一季度', '第二季度', '第三季度', '第四季度'])
y = pd.Series([160, 200, 180, 155])
2.读取已有的series对象
# 设置 x 坐标值
x=series.index
# 设置 y 坐标值
y=series.values
4.绘制图表
1.折线图
# 生成画布,并设置画布的大小
plt.figure(figsize=(6, 6))
# 设置 x/y 坐标值
x = pd.Series(['第一季度', '第二季度', '第三季度', '第四季度'])
y = pd.Series([59, 70, 68, 56])# 绘制折线图,并调整线条颜色为湖蓝色
plt.plot(x, y, color='dodgerblue')

相关常用参数:

matplotlib相关颜色:

​ 参数 marker 可以设置数据标记点的形状,有点、圆、加号等,常见为字符串类型,有以下这些:

2.柱状图

​ 和折线图一样,绘制柱状图也需要设置 x/y 坐标值,不同的是柱状图绘图函数 plt.bar()的参数是 xheightheight 表示柱子的高,对应 y 坐标值。

# 生成画布,并设置画布的大小
plt.figure(figsize=(6, 6))
# 设置 x/y 坐标值
x = pd.Series(['第一季度', '第二季度', '第三季度', '第四季度'])
y = pd.Series([59, 70, 68, 56])# 绘制柱状图,并调整颜色为深橘色,透明度为 60%
plt.bar(x, height=y, color='darkorange', alpha=0.6)

3.饼图

​ 饼图和折线图、柱状图在图像特征方面差异蛮大的,它只用到了 x 表示饼图中各个扇形面积的大小。

# 生成画布,并设置画布的大小
plt.figure(figsize=(6,6))
# 设置扇形面积值(x值)
x=pd.Series([59,70,68,56])
# 设置百分比小数的位数:保留百分比小数点后两位
autopct='%.2f%%'
# 设置百分比字体大小和颜色
textprops={'fontsize':12,'color':'black'}
# 设置饼图的“爆炸效果”:让扇形远离圆心
explode=[0.1,0,0,0]
# 设置不同扇形的颜色
colors=['cornflowerblue', 'salmon', 'yellowgreen', 'orange']
# 绘制饼图
plt.pie(x,autopct=autopct,textpros=textpros,explode=explode,colors=colors)

5.设置图表标题

​ 图表标题默认放在图表顶部,向读者传递图表的名称。设置图表标题用的是 plt.title()函数,包含两个参数:第一个参数 label 设置图表的标题名,常见为字符串类型;第二个参数 fontsize 设置标题的字体大小,需要向它传入一个代表字体大小的数值。

# 生成画布,并设置画布的大小
plt.figure(figsize=(6, 6))
# 绘制柱状图
plt.bar(x, height=y, color='darkorange', alpha=0.6)# 设置图表标题名及字体大小
plt.title('2020年各季度研发费用分布图', fontsize=20)

​ 稍稍拓展一下,如果想设置更丰富的字体样式,可以用 fontdict 参数代替 fontsize。fontdict 是一个包含许多参数的字典,以思源黑体字体为例,详见以下表格

python数据分析可视化相关推荐

  1. python数据分析可视化项目——游戏销售量

    python数据分析可视化项目--video游戏销售量 数据来源 可视化 数据准备 游戏出版年份和销量统计--折线图 游戏类型.出版商.游玩平台销量统计--柱形图 游戏类型比例--饼图 数据来源 本项 ...

  2. python数据分析可视化实例_Python数据分析及可视化实例之基于Kmean分析RFM进行用户关怀...

    系列文章总目录:Python数据分析及可视化实例目录 数据集下载 Python数据分析及可视化实例之全国各城市房价分析(含数据采集) Python数据分析及可视化实例之帝都房价预测 Python数据分 ...

  3. python数据分析可视化实例-Python数据分析与可视化从入门到精通

    (1)没有高深理论,每章都以实例为主,读者参考书中源码运行,就能得到与书中一样的结果.(2)专注于Python数据分析与可视化操作中实际用到的技术.相比大而全的书籍资料,本书能让读者尽快上手,开始项目 ...

  4. python 数据分析可视化实战 超全 附完整代码数据

    代码+数据:https://download.csdn.net/download/qq_38735017/87379914 1.1 数据预处理 1.1.1 异常值检测 ①将支付时间转为标准时间的过程中 ...

  5. python数据分析可视化大作业——对地铁数据的简单数据分析

    一.选题意义 随着我国经济的快速发展,我们国家的地铁事业正在快速发展,很多城市都拥有了地铁.自1969年北京开通第一条地铁线路建成通车,到2021年全国总线路总长达7253.73公里,我们只用了40年 ...

  6. 【毕业设计】 大数据二手房数据爬取与分析可视化 -python 数据分析 可视化

    1 前言

  7. python数据分析可视化大众点评网餐厅口碑包含数据

    部分代码 import pandas as pd import numpy as np import matplotlib.pyplot as plt plt.rcParams["font. ...

  8. 【毕业设计】 大数据上海租房数据爬取与分析可视化 -python 数据分析 可视化

    1 前言

  9. python数据分析培训内容可以_Python数据分析师

    阶段一 学完后能达到什么水平? 数据分析师认知篇 说 明:0基础入学,5大进阶之路,8大课程阶段,35+课程,1000+学时, 18大行业经典案例,两大商业项目实战!人工智能是你的终极目标! 课程时长 ...

最新文章

  1. ubuntu 16.0.4 opencv 3.4.1 + opencv_contrib 3.4.1 cmake-gui 安装
  2. Linux操作系统选择:Debian or Ubuntu
  3. IMEI, ESN, MEID
  4. notify_one() 或 notify_all() 在c++中的使用要点
  5. 03、C语言——顺序结构
  6. linux自学笔记--DNS服务器
  7. go set up on ubuntu
  8. Synopsys MetaWare for Linux 安装与编译指南
  9. 记住没:永远不要在 MySQL 中使用 UTF-8
  10. Linux 系统中用户切换(su user与 su - user 的区别)
  11. kali linux 桌面消失_Kali安装好后,需要修改的一些常用配置
  12. C:\Program Files (x86)\SogouInput\Components\程序异常结束 ,QT
  13. Mac好用的RSS阅读器Reeder使用方法
  14. UML建模和开发预演
  15. 花生壳覆盖安装,完全卸载,注册表
  16. 如何重新扫描 Emulex FC 控制器上的新 LUN
  17. 1419D2 Sage‘s Birthday
  18. 保护海洋主题的微信公众号图文排版必备素材集锦
  19. C++与lua的结合,LuaBridge的使用及遇到的坑
  20. Flutter-Container详解

热门文章

  1. 该如何提升自己的编程能力?
  2. NCX SQL编程规范
  3. python按回车_python中回车键
  4. 定义一个类,提供显示圆的周长的方法,提供显示圆的面积的方法
  5. 刷脸支付市场未来想象空间进一步增加
  6. pyqt5练习小项目
  7. 秦王扫六合,虎视何雄哉
  8. 多工序、多机台(产线)环境下的排程要点
  9. JSON 格式化和校验工具
  10. Coursera 学习记录:Tomorrow never knows?(实现日期加一的操作)