数据分析与可视化 上机实践2(Pandas 统计分析)


一、实践目的

1.了解 Pandas 库的基本功能。

2.掌握 Pandas 库的使用方法。


二、数据集介绍

本实验使用酒品消耗量数据集,其记录了全球 193 个国家某年的各类酒品消
耗数据,主要数据集变量如下:

img-202304301523886

drinks.csv 数据集下载


三、实践内容要求

  1. 数据预处理

(1)导入 excel 表格中的数据到 DataFrame 中;

(2)查看数据的前 5 行和后 8 行。

  1. 数据操作

(1)查看数据中各变量类型;

(2)将啤酒销量改成 object 类型;

(3)将列名的英文改为中文格式;

(4)初步查看数据类型和大小;

(5)查看数据数值统计情况;

(6)查看索引值;

(7)将索引值修改为所在的大洲;

(8)查看缺失值情况;

(9)采用恰当的方法对缺失值进行填充。

  1. 饮酒情况对比

(1)查找啤酒、烈酒和红酒的消耗量都高于相应酒种消耗量 75%分位数的
国家;

(2)统计(1)中各大洲国家的个数;

(3)统计各个大洲各类酒的消耗总量;

(4)计算各类酒占各大洲总消耗量的比重。

4.通过饮酒情况对比,对各大洲的饮酒习惯进行分析。


四、完成情况

1
2
3
4
5
6
7
# 1. 数据预处理
#(1)导入 excel 表格中的数据到 DataFrame 中;

import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
df = pd.read_csv('drinks.csv', sep ='|')
df.head() # 默认显示前5行

img-202304111800278

1
df.tail(8) # 查看数据的后8行

img-202304111801331


1
2
3
4
# 2. 数据操作
#(1)查看数据中各变量类型;

df.dtypes
country                          object
beer_servings                   float64
spirit_servings                 float64
wine_servings                   float64
total_litres_of_pure_alcohol    float64
continent                        object
dtype: object

1
2
3
4
#(2)将啤酒消耗量改成 object 类型;

df['beer_servings'] = df['beer_servings'].astype(object)
df.dtypes
country                          object
beer_servings                    object
spirit_servings                 float64
wine_servings                   float64
total_litres_of_pure_alcohol    float64
continent                        object
dtype: object

1
2
3
4
#(3)将列名的英文改为中文格式;

df.rename(columns = {'country':'国家', 'beer_servings':'啤酒消耗量', 'spirit_servings':'烈酒消耗量', 'wine_servings':'红酒消耗量', 'total_litres_of_pure_alcohol':'总酒精消耗量', 'continent':'所在大洲'}, inplace = True)
df.head()

img-202304111801050


1
2
3
#(4)初步查看数据类型和大小;

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 193 entries, 0 to 192
Data columns (total 6 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   国家      193 non-null    object 
 1   啤酒消耗量   190 non-null    object 
 2   烈酒消耗量   190 non-null    float64
 3   红酒消耗量   190 non-null    float64
 4   总酒精消耗量  193 non-null    float64
 5   所在大洲    170 non-null    object 
dtypes: float64(3), object(3)
memory usage: 9.2+ KB

1
2
3
#(5)查看数据数值统计情况;

df[['啤酒消耗量', '烈酒消耗量', '红酒消耗量', '总酒精消耗量']].describe()
img-202304111801126
1
2
3
4
#(6)查看索引值;

# list(df.index) # 行索引是0到192
list(df.columns)
['国家', '啤酒消耗量', '烈酒消耗量', '红酒消耗量', '总酒精消耗量', '所在大洲']

1
2
3
#(7)将索引值修改为所在的大洲;

df.set_index('所在大洲',drop=False) # 将列转化为行索引
img-202304111802383
1
2
3
#(8)查看缺失值情况;

df.isnull().sum() # 缺失值的统计
国家             0
啤酒消耗量       3
烈酒消耗量       3
红酒消耗量       3
总酒精消耗量     0
所在大洲        23
dtype: int64

1
2
3
4
5
6
7
8
#(9)采用恰当的方法对缺失值进行填充。

df['啤酒消耗量'] = df['啤酒消耗量'].fillna(df['啤酒消耗量'].mean()) # 对酒的消耗量缺失值用平均值填充
df['烈酒消耗量'] = df['烈酒消耗量'].fillna(df['烈酒消耗量'].mean())
df['红酒消耗量'] = df['红酒消耗量'].fillna(df['红酒消耗量'].mean())

# 对所在大洲的缺失值不做处理
df.isnull().sum() # 缺失值的统计
国家             0
啤酒消耗量       0
烈酒消耗量       0
红酒消耗量       0
总酒精消耗量     0
所在大洲        23
dtype: int64

1
2
3
4
5
6
7
8
9
# 3. 饮酒情况对比
#(1)查找啤酒、烈酒和红酒的消耗量都高于相应酒种消耗量 75%分位数的国家;

df['啤酒消耗量'].quantile(0.75) # 或者用des = df.describe(include="all") 和 des.loc['75%','啤酒消耗量'] 来取出各类酒对75%分位数的值

alcohol = df.loc[ (df['啤酒消耗量']>df['啤酒消耗量'].quantile(0.75)) & (df['烈酒消耗量']>df['烈酒消耗量'].quantile(0.75)) & (df['红酒消耗量']>df['红酒消耗量'].quantile(0.75)) ]
alcohol # 显示满足条件的每行详细记录(含国家名,各类酒的消耗量,所在大洲)

alcohol['国家'] # 显示满足条件的国家
3                 Andorra
25               Bulgaria
44                 Cyprus
45         Czech Republic
60                Finland
75                Hungary
93                 Latvia
99             Luxembourg
141    Russian Federation
151                Serbia
155              Slovakia
160                 Spain
184                   USA
Name: 国家, dtype: object

1
2
3
#(2)统计(1)中各大洲国家的个数;

alcohol['所在大洲'].value_counts()
EU    11
AS     1
Name: 所在大洲, dtype: int64

1
2
3
#(3)统计各个大洲各类酒的消耗总量;

df.groupby('所在大洲').sum()
img-202304111803376
1
2
3
4
5
#(4)计算各类酒占各大洲总消耗量的比重。

d = df.groupby('所在大洲').sum()
d.drop('总酒精消耗量',axis = 1,inplace = True) # axis=1,删除总酒精消耗量这一列
d.div(d.sum(axis=1), axis=0) # 按列(即投影到列)求和, 再按行(即投影到行)除法
img-202304111803314
1
2
3
4
5
6
7
# 4.通过饮酒情况对比,对各大洲的饮酒习惯进行分析。

d1 = df.groupby('所在大洲').sum()
d1['总酒精消耗量']
# 由上面(4)中的各类酒的占比分析及总酒精消耗量得知,
# 几乎所有大洲都对啤酒的消耗量较高,尤其是AF(非洲);但对红酒的消耗量较低
# 同时EU(欧洲)人群对酒精的依赖度最高,OC(大洋洲)人群对酒精的依赖度最低
所在大洲
AF    159.4
AS     95.5
EU    387.8
OC     54.1
SA     75.7
Name: 总酒精消耗量, dtype: float64

五、参考资料

drinks.csv 数据集下载

使用Pandas获取数据以及数据概览

DataFrame的修改方法(值、列、索引)

Pandas中计算分位数的方法describe、quantile

Pandas进一步实战_酒品数据初步探索

Pandas入门_探索酒类消费数据

遇到问题及解决方案

Python报错解决:TypeError: Cannot interpret ‘<attribute ‘dtype‘ of ‘numpy.generic‘objects>‘as a data type

成功更新pandas后,问题得到解决

img-202304301519590