本次我们介绍Pandas数据统计函数,如针对数值类型的统计(获取样本个数、平均值、标准差、极值等);针对非数值类型的统计(获取每个类型的个数)以及计算相关系数和协方差。
import pandas as pd
# 读取数据
data = pd.read_csv("./datas/04/Weather_2018.csv")
--------------------------------------------------------------------------------
# 查看数据前6行
data.head(6)
# 返回结果
ymd bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
0 2018-01-01 3℃ -6℃ 晴~多云 东北风 1-2级 59 良 2
1 2018-01-02 2℃ -5℃ 阴~多云 东北风 1-2级 49 优 1
2 2018-01-03 2℃ -5℃ 多云 北风 1-2级 28 优 1
3 2018-01-04 0℃ -8℃ 阴 东北风 1-2级 28 优 1
4 2018-01-05 3℃ -6℃ 多云~晴 西北风 1-2级 50 优 1
5 2018-01-06 2℃ -5℃ 多云~阴 西南风 1-2级 32 优 1
--------------------------------------------------------------------------------
# 替换掉温度的后缀℃,便于后续按数值计算
# 先将数据转化成字符串,再将"℃"替换为空,最后再转化为数值
data["bWendu"] = data["bWendu"].str.replace("℃", "").astype("int32")
data["yWendu"] = data["yWendu"].str.replace("℃", "").astype("int32")
--------------------------------------------------------------------------------
# 查看转化后数据框
data.head()
# 返回结果
bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
ymd
2018-01-01 3 -6 晴~多云 东北风 1-2级 59 良 2
2018-01-02 2 -5 阴~多云 东北风 1-2级 49 优 1
2018-01-03 2 -5 多云 北风 1-2级 28 优 1
2018-01-04 0 -8 阴 东北风 1-2级 28 优 1
2018-01-05 3 -6 多云~晴 西北风 1-2级 50 优 1
针对数值列,我们可以使用"df.describe()"将统计结果计算出来,返回结果有个数(count)、平均数(mean)、标准差(std)、最小值(min)、最大值(max)以及分位数(25%、50%、75%)。
# 数据统计
data.describe()
# 返回结果
bWendu yWendu aqi aqiLevel
count 365.000000 365.000000 365.000000 365.000000
mean 18.665753 8.358904 82.183562 2.090411
std 11.858046 11.755053 51.936159 1.029798
min -5.000000 -12.000000 21.000000 1.000000
25% 8.000000 -3.000000 46.000000 1.000000
50% 21.000000 8.000000 69.000000 2.000000
75% 29.000000 19.000000 104.000000 3.000000
max 38.000000 27.000000 387.000000 6.000000
--------------------------------------------------------------------------------
# 查看单个列某一统计值,以"bWendu"为例
data["bWendu"].mean()
# 返回结果
18.665753424657535
对于非数值类型,我们可以通过"unique"进行去重,获取列中有哪些类型值;
以及使用"value_counts"获取每个类型的个数。
# 获取唯一值
data["fengxiang"].unique()
# 返回结果
array(['东北风', '北风', '西北风', '西南风', '南风', '东南风', '东风', '西风'], dtype=object)
--------------------------------------------------------------------------------
# 按值计数
data["fengxiang"].value_counts()
# 返回结果(由高到低排序)
南风 92
西南风 64
北风 54
西北风 51
东南风 46
东北风 38
东风 14
西风 6
Name: fengxiang, dtype: int64
相关系数(corr):检查两个变量之间变化趋势的方向以及程度,值范围-1到+1,0表示两个变量不相关,正值表示正相关,负值表示负相关,值越大相关性越强。
协方差(cov):协方差可以反应两个变量的协同关系,变化趋势是否一致,同向还是反向变化。如果协方差为正,说明X,Y同向变化,协方差越大说明同向程度越高;如果协方差为负,说明X,Y反向运动,协方差越小说明反向程度越高。
# 计算协方差矩阵
data.cov()
# 返回结果
bWendu yWendu aqi aqiLevel
bWendu 140.613247 135.529633 47.462622 0.879204
yWendu 135.529633 138.181274 16.186685 0.264165
aqi 47.462622 16.186685 2697.364564 50.749842
aqiLevel 0.879204 0.264165 50.749842 1.060485
--------------------------------------------------------------------------------
# 计算相关系数矩阵
data.corr()
# 返回结果
bWendu yWendu aqi aqiLevel
bWendu 1.000000 0.972292 0.077067 0.071999
yWendu 0.972292 1.000000 0.026513 0.021822
aqi 0.077067 0.026513 1.000000 0.948883
aqiLevel 0.071999 0.021822 0.948883 1.000000
--------------------------------------------------------------------------------
# 单独查看两个列之间的相关系数
data["aqiLevel"].corr(data["bWendu"])
# 返回结果
0.07199861917696304