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()

image-20220518001123011

柱状图

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()

image-20220518001200124

散点图

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()

image-20220518001235791

箱线图

4.plotly画图

输出是一个网页,可以展现两个班各自成绩的分布情况

sheet_name:选择sheet表

go.Bar()条形图,go.Scatter散点图,等等等。。。。

  • x,y:x轴刻度,y轴的数据

  • text:标识

  • textposition:标识位置

  • name:图例名称

  • yaxisy2设置双纵轴

  • mode:设置线条样式,markers:点,line:线

go.Layout:设置布局

  • title:标题
  • xaxisx轴标签
  • yaxisy轴标签
  • 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()

image-20220518001654715

直方图,折线图

5. value_counts计数

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

image-20220518001412853

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

image-20220518001430810

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

image-20220518001450002

posted @ 2022-05-20 14:08  wengu  阅读(124)  评论(0)    收藏  举报