统计学习一:数据的图表展示

在这里插入图片描述
本周内容总结:
在这里插入图片描述
参加此统计学习小组主要是巩固python语言,故所有笔记都以python代码实现

一、数据预处理

1.数据审核、筛选、排序

表一:

姓名 统计学成绩 数学成绩 英语成绩 经济学成绩
张松 69 68 84 86
王翔 91 75 95 94
田雨 54 88 67 78
李华 81 60 86 64
赵颖 75 96 81 83
宋媛 83 72 66 71
袁方 75 58 76 90
陈风 87 76 92 77
# 找出统计学成绩等于75的学生
df1 = df[df['统计学成绩'] == 75]
# 找出英语成绩最高的前三名学生
df2 = df.nlargest(3, columns='英语成绩')
# df2 = df.nsmallest(3, columns='英语成绩')  #英语成绩最低的前三名学生
# 找出四门课程成绩都大于70分的学生
df3 = df[(df['统计学成绩'] > 70) & 
         (df['数学成绩'] > 70) & 
         (df['英语成绩'] > 70) & 
         (df['经济学成绩'] > 70)]
# 排序,升序ascending=False,降序ascending=Trued
df4 = df.sort_values(by='统计学成绩', ascending=False)

2.数据透视表

表二:

编号 性别 家庭所在地区 平均月生活费(元) 月平均衣物支出(元) 买衣物首选因素
1 大型城市 800 200 价格
2 中小城市 600 180 款式
3 大型城市 1000 300 品牌
4 中小城市 400 40 价格
5 中小城市 500 150 款式
6 乡镇地区 800 80 品牌
7 中小城市 600 180 品牌
8 乡镇地区 400 120 价格
9 中小城市 1000 300 款式
10 大型城市 600 180 款式
11 中小城市 500 150 价格
12 乡镇地区 300 30 价格
13 乡镇地区 500 50 价格
14 中小城市 300 35 价格
15 中小城市 1000 300 款式
16 大型城市 800 350 款式
17 中小城市 500 150 款式
18 乡镇地区 1000 100 价格
19 中小城市 800 80 价格
20 乡镇地区 800 240 品牌
21 大型城市 500 50 品牌
22 大型城市 300 30 价格
23 大型城市 500 150 款式
24 中小城市 500 150 价格
25 大型城市 300 30 价格
26 大型城市 400 200 价格
27 中小城市 1000 300 品牌
28 中小城市 500 50 款式
29 大型城市 700 70 款式
30 中小城市 500 50 价格
# 数据透视表,行变量为性别,列变量为家庭所在地区
df1 = df.pivot_table(index='性别', columns='家庭所在地区', values='平均月生活费(元)')

二、品质数据的分类与展示

品质数据:包括分类数据和顺序数据,一般为非数字型数据。分类数据一般为无序数据,顺序数据一般为有序数据。

表三(部分):

顾客性别 饮料类型
碳酸饮料
绿茶
矿泉水
矿泉水
碳酸饮料
矿泉水
碳酸饮料
绿茶
果汁
碳酸饮料
矿泉水

1.条形图

频数:df.value_count()

# 频数分布表
data = [(df.loc[:, x].value_counts()) for x in df.columns]
# 条形图
fig = plt.figure()
fig.set(alpha=0.2)  # 设定图表颜色alpha参数
plt.subplot2grid((1, 2), (0, 0))  # 在一张大图里分列几个小图,位置是(0,0)
data1 = df['顾客性别'].value_counts(ascending=True)
data1.plot(kind='bar',           
           title='顾客性别')
print(data1)
plt.xlabel("顾客性别")
plt.ylabel("频数")
plt.subplot2grid((1, 2), (0, 1))
data2 = df['饮料类型'].value_counts(ascending=True)
data2.plot(kind='bar',           
           title='饮料类型')
plt.xlabel("顾客性别")
plt.ylabel("频数")

在这里插入图片描述

注:

条形图:条形图用长条形表示每一个类别,长条形的长度表示类别的频数,宽度表示表示类别。多用于分类数据。

直方图:直方图是一种统计报告图,形式上也是一个个的长条形,但是直方图用长条形的面积表示频数。多用于数值型数据。

2.饼图

# 饼图
# 控制饼图为正圆
plt.axes(aspect='equal')
# plot方法对序列进行绘图
data2.plot(kind='pie',  # 选择图形类型           
		   autopct='%.1f%%',  # 饼图中添加数值标签           
		   radius=1,  # 设置饼图的半径           
		   startangle=180,  # 设置饼图的初始角度           
		   counterclock=False,  # 将饼图的顺序设置为顺时针方向           
		   title='不同类型饮料构成的饼图',  # 为饼图添加标题           
		   wedgeprops={'linewidth': 1.5, 'edgecolor': 'green'},  # 设置饼图内外边界的属性值    			  textprops={'fontsize': 10, 'color': 'black'})  # 设置文本标签的属性值
plt.show()

在这里插入图片描述

三、数值型数据的整理与展示

数值型数据:数字尺度测量的观察值,通常用数值来表现。

表四(部分):

销售量
234
143
187
161
150
228
153
166
154
174
156
203
159
198
160

1.直方图

# 按照固定区间长度绘制频率分布直方图
# bins_interval 区间的长度
# margin        设定的左边和右边空留的大小
def probability_distribution(data, bins_interval=1, margin=1):
    bins = range(min(data), max(data) + bins_interval - 1, bins_interval)
    print(len(bins))
    for i in range(0, len(bins)):
        print(bins[i])
    plt.xlim(min(data) - margin, max(data) + margin)
    plt.title("Probability-distribution")
    plt.xlabel('Interval')
    plt.ylabel('Probability')
    # 频率分布density=True,频次分布density=False
    prob,left,rectangle = plt.hist(x=data, bins=bins, density=False, histtype='bar', color=['r'])
    plt.show()
    
if __name__ == '__main__':
    df = pd.read_excel('data/1_table4.xlsx')
    data = df['销售量'].values
    # print(data)
    probability_distribution(data=data, bins_interval=10, margin=10)

在这里插入图片描述

2.茎叶图

# 茎叶图
def stem(data, n):
    for k,g in groupby(sorted(data),key = lambda x: math.floor(x/n)):
        lst = map(str, [d % n for d in list(g)])
        print(k, '|', ' '.join(lst))

注:此茎叶图有点点问题,待解决。

3.箱线图

# 箱线图
def boxplot(data):
    plt.boxplot(data, labels=['销售量(台)'])
    plt.title('某电脑公司销售量数据的箱线图')
    plt.show()

在这里插入图片描述

4.散点图

散点图:两个变量之间的关系。一个变量放在横轴,另一个变量放在纵轴。

表五:

温度 降雨量 产量
6 25 2250
8 40 3450
10 58 4500
13 68 5750
14 110 5800
16 98 7500
21 120 8250
# 散点图
# 输入产量与温度数据
rainfall = df['降雨量'].values
production = df['产量'].values
colors = np.random.rand(len(rainfall))  # 颜色数组
plt.scatter(rainfall, production, s=200, c=colors)  # 画散点图,大小为 200
plt.xlabel('降雨量')  # 横坐标轴标题
plt.ylabel('产量')  # 纵坐标轴标题
plt.title('小麦产量与降雨量的散点图')
plt.show()

在这里插入图片描述

5.气泡图

气泡图:三个变量之间的关系。一个变量放在横轴,一个变量放在纵轴,另一个变量用气泡的大小来表示。

# 气泡图
tem = df['温度'].values
size = production
plt.scatter(tem, rainfall, s=production, c=colors, alpha=0.6)  # 画散点图, alpha=0.6 表示不透明度为 0.6
plt.xlabel('温度')  # 横坐标轴标题
plt.ylabel('降雨量')  # 纵坐标轴标题
plt.title('小麦产量与降雨量和温度的气泡图(气泡大小表示产量)')
plt.show()
# 气泡图
tem = df['温度'].values
size = production
plt.scatter(tem, rainfall, s=production, c=colors, alpha=0.6)  # 画散点图, alpha=0.6 表示不透明度为 0.6
plt.xlabel('温度')  # 横坐标轴标题
plt.ylabel('降雨量')  # 纵坐标轴标题
plt.title('小麦产量与降雨量和温度的气泡图(气泡大小表示产量)')
plt.show()

发布了34 篇原创文章 · 获赞 9 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Shine_rise/article/details/102837696