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:图例名称

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

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  阅读(130)  评论(0)    收藏  举报