pandas,seaborn,plotly画图
数据分析
表格
| 学号 | 姓名 | 性别 | 平时分 | 期末分 | 总评分 | 班级 |
|---|---|---|---|---|---|---|
| 200129501 | 学生501 | 女 | 100 | 98 | 99 | 软件205 |
| 200129502 | 学生502 | 女 | 99 | 97 | 98 | 软件205 |
| 200129503 | 学生503 | 男 | 98 | 98 | 98 | 软件205 |
| 200129504 | 学生504 | 女 | 99 | 90 | 95 | 软件205 |
| 200129505 | 学生505 | 男 | 95 | 95 | 95 | 软件205 |
| 200129506 | 学生506 | 男 | 97 | 89 | 93 | 软件205 |
| ... | ... | ... | ... | ... | ... | ... |
需要用到的库
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import plotly.graph_objects as go
中文显示
# 中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
1 .pandas柱状图
可以宏观的展现两个班所有人的成绩
plot():pandas画图函数:
kind='bar':柱状图,kind='scatter':散点图- 不填
kind默认是折线图
xticks():设置x轴刻度文字:
ticks:x轴刻度
labels:x轴文字
rotation:旋转角度
fontsize:字体大小
# 读取数据
data = pd.read_excel('期中考试成绩分析-数据脱敏-分析建议.xlsx',usecols = [1,3,4,5])
# 画柱状图
data.plot(kind='bar')
# 写入x轴文字
plt.xticks(range(len(data['姓名'])), data['姓名'], rotation=45, fontsize=8)
plt.xlabel("姓名")
plt.ylabel("成绩")
plt.title('学生成绩中期评估')
plt.show()

2. seaborn散点图
可以直观表现两个班成绩的分布
relplot():seaborn散点图函数:
x,y:横坐标变量,纵坐标变量
hue:分组
data:表格数据
data = pd.read_excel('期中考试成绩分析-数据脱敏-分析建议.xlsx')
# 选择x轴y轴,导入数据
sns.relplot(x='平时分',y='期末分',hue='班级',data=data)
plt.title('学生成绩中期评估')
plt.show()

3.seaborn箱线图
可以很直观的对比两个班的成绩
boxplot():seaborn箱线图函数:
x,y:横坐标变量,纵坐标变量
hue:分组
data:表格数据
data = pd.read_excel('期中考试成绩分析-数据脱敏-分析建议.xlsx')
# 选择x轴y轴,导入数据
sns.boxplot(x='班级', y='总评分', data=data)
plt.title('学生成绩中期评估')
plt.show()

4.plotly画图
输出是一个网页,可以展现两个班各自成绩的分布情况
sheet_name:选择sheet表
go.Bar()条形图,go.Scatter散点图,等等等。。。。
x,y:x轴刻度,y轴的数据
text:标识
textposition:标识位置
name:图例名称
yaxis:y2设置双纵轴
mode:设置线条样式,markers:点,line:线
go.Layout:设置布局
title:标题xaxis:x轴标签yaxis:y轴标签yaxis2:第二个y轴标签,和y轴的位置
go.Figure():生成对象
data:图表
layout:图表布局
data = pd.read_excel('期中考试成绩分析-数据脱敏-分析建议.xlsx',sheet_name='初始数据-建议')
# 画两张图
t1=go.Bar(
x=data['姓名'],
y=data['总评分'],
text=data['总评分'],
textposition='outside',
name='总评分')
t2 = go.Scatter(
x=data['姓名'],
y=data['分差'],
name='分差',
yaxis="y2",
mode='lines'
)
data=[t1,t2]
# 设置标签
layout=go.Layout(
title="期中考试成绩分析",
xaxis=dict(title="姓名"),
yaxis=dict(title="总评分"),
yaxis2=dict(title='方差',overlaying='y',side='right'))
fig = go.Figure(data=data,layout=layout)
fig.show()

5. value_counts计数
# 统计班级人数
print(data['班级'].value_counts())

# 统计各分出现的次数,默认降序
# 升序,添加asceding=True
print(data['总评分'].value_counts())

# 查看百分比
print(data['总评分'].value_counts(normalize=True))


浙公网安备 33010602011771号