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

mac2024-05-09  5

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

一、数据预处理

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

表一:

姓名统计学成绩数学成绩英语成绩经济学成绩张松69688486王翔91759594田雨54886778李华81608664赵颖75968183宋媛83726671袁方75587690陈风87769277 # 找出统计学成绩等于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男大型城市800200价格2女中小城市600180款式3男大型城市1000300品牌4男中小城市40040价格5女中小城市500150款式6女乡镇地区80080品牌7男中小城市600180品牌8女乡镇地区400120价格9男中小城市1000300款式10女大型城市600180款式11女中小城市500150价格12男乡镇地区30030价格13男乡镇地区50050价格14女中小城市30035价格15男中小城市1000300款式16女大型城市800350款式17男中小城市500150款式18男乡镇地区1000100价格19女中小城市80080价格20男乡镇地区800240品牌21女大型城市50050品牌22女大型城市30030价格23男大型城市500150款式24女中小城市500150价格25男大型城市30030价格26女大型城市400200价格27男中小城市1000300品牌28男中小城市50050款式29女大型城市70070款式30女中小城市50050价格 # 数据透视表,行变量为性别,列变量为家庭所在地区 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()

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

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

表四(部分):

销售量234143187161150228153166154174156203159198160

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.散点图

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

表五:

温度降雨量产量62522508403450105845001368575014110580016987500211208250 # 散点图 # 输入产量与温度数据 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()

最新回复(0)