python数据分析与可视化二

公共部分

```

# 引入数据分析工具 Pandas

import pandas as pd

# 引入数据可视化工具 Matplotlib

import matplotlib.pyplot as plt

# 引入科学计算库numpy

import numpy as np

from scipy import stats

#解决输出时列名对齐问题

pd.set_option('display.unicode.east_asian_width', True)

# 解决输出中文乱码问题

plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置显示中文字体

plt.rcParams['axes.unicode_minus'] = False  # 设置正常显示符号

# 读取成绩表数据

data = pd.read_excel('E:\\practiceCode\\pythonCode\\source\\成绩表.xlsx')

# 计算男女生总成绩

data['总成绩'] = data.iloc[:, 2:-1].sum(axis=1)

# 获取列

subjects = data.columns[2:]

```

平均成绩与标准差

```

# 计算男生和女生在每个科目的平均成绩 标准差

subjects = data.columns[2:]

for subject in subjects:

   male_mean = data[data['性别'] == ''][subject].mean()

   male_std = data[data['性别'] == ''][subject].std()

   female_mean = data[data['性别'] == ''][subject].mean()

   female_std = data[data['性别'] == ''][subject].std()

   print(f'{subject} 男生平均成绩: {male_mean}, 标准差: {male_std}')    

   print(f'{subject} 女生平均成绩: {female_mean}, 标准差: {female_std}')


 

```

总成绩差异(平均值/标准差/中位数)

```

# 计算男女生的总成绩

data['总成绩'] = data.iloc[:,2:-1].sum(axis=1)

# 比较男女生总成绩差异 (平均值/中位数/标准差)

male_total_mean = data[data['性别'] == '']['总成绩'].mean()

male_total_median = data[data['性别'] == '']['总成绩'].median()

male_total_std = data[data['性别'] == '']['总成绩'].std()

female_total_mean = data[data['性别'] == '']['总成绩'].mean()

female_total_median = data[data['性别'] == '']['总成绩'].median()

female_total_std = data[data['性别'] == '']['总成绩'].std()

# 输出比较结果  

print(f'男生总成绩平均值:{male_total_mean:.2f}')

print(f'男生总成绩中位数:{male_total_median:.2f}')

print(f'男生总成绩标准差:{male_total_std:.2f}')

print(f'女生总成绩平均值:{female_total_mean:.2f}')

print(f'女生总成绩中位数:{female_total_median:.2f}')    

print(f'女生总成绩标准差:{female_total_std:.2f}' )

```

按性别统计各个科目成绩的中位数

```

subjects = data.columns[2:]

# 按性别统计各个科目成绩的中位数

subjects_median = data.groupby('性别')[subjects].median()

print(subjects_median)

```

使用t检验 计算男生与女生在每个科目上的成绩差异性
```

from scipy import stats

#解决输出时列名对齐问题

pd.set_option('display.unicode.east_asian_width', True)

# 读取成绩表数据

data = pd.read_excel('E:\\practiceCode\\pythonCode\\source\\成绩表.xlsx')

subjects = data.columns[2:]

# 计算男生和女生在每个科目上成绩的差异显著性(例如使用t检验),即使用PandasSxiPy库计算

for subject in subjects:

    t_stat,p_value=stats.ttest_ind(data[data['性别']==''][subject],data[data['性别']==''][subject])

    print(f'{subject} t检验统计量 : {t_stat:.2f} , p :{p_value:.2e}')

```

男女生在各科目的成绩分布直方图

```

subjects = data.columns[2:]

# 绘制男生 女生 在各个科目上的成绩分布直方图 , 使用Matplotlib

for subject in subjects:

    plt.figure(figsize=(10,6))

    plt.hist(data[data['性别'] == ''][subject], alpha=0.5, label='')

    plt.hist(data[data['性别'] == ''][subject], alpha=0.5, label='')

    plt.xlabel(subject)

    plt.ylabel('频数')

    plt.legend()

    plt.show()

```

用箱型图表示男女生总成绩

```

# 绘制男女生总成绩的箱型图 , 使用matplotlib

data.boxplot(column='总成绩',by='性别')

plt.ylabel('总成绩')

plt.show()

```

绘制男生女生在各个科目上的平均成绩雷达图

```

# 绘制男女生 在各个科目上的平均成绩雷达图

labels = np.array(subjects)

num_vars = len(labels)

angles = np.linspace(0, 2 * np.pi, num_vars, endpoint=False).tolist()

male_means = [data[data['性别'] == ''][subject].mean() for subject in subjects]

female_means = [data[data['性别'] == ''][subject].mean() for subject in subjects]

fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True))

ax.fill(angles, male_means, color='blue', alpha=0.25)

ax.fill(angles, female_means, color='red', alpha=0.25)

ax.set_yticklabels([])

ax.set_xticks(angles)

ax.set_xticklabels(labels)

plt.show()

```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值