假设检验以及数据清洗

本文分享了一位分析师在处理孕检数据时的经验,强调了数据清洗和假设检验的重要性。通过使用Python进行初步的数据清洗,然后转向SPSS进行专业的假设检验,如独立样本T检验和卡方检验。作者建议对专业知识保持熟悉,即使遗忘也能更快地重新掌握。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近给一个医生做个孕检的数据分析,特别简单,用到了我本科时候的一点知识,几乎都快忘光了,现在整理一下。

硕士的时候还记得万老师给我们上概率论与数理统计的时候说“你们专业课上学的东西才是最重要的,跟你们老板做的那些东西你有兴趣搞研究弄一弄,不要把精力放错了位置” 哈哈哈哈哈,当初还觉得老师是看我们在他课上不听讲就低头看打印的论文引起了他的不满才说的,现在觉得是清醒的劝告啊,虽然当时学的并不认真,但好歹接受过熏陶,现在捡起来也会比别人快。所以,对自己专业的东西一定要夯实,强化技能。

首先,我拿到的数据是一个excel表,虽然数据量很小,样本只有68个,指标大概5、6个吧,但是数据的格式并不好,因此,需要进行数据的清理。我做数据的清理用的是python,但有些命令还是需要百度之后才行,因为不是经常用到一些命令,所以忘记掉是很正常的,我觉得学习应该要正视自己的不足,长久不做就会遗忘是人的通性啊,所以忘了不要紧,我一次次做这个任务,加强记忆,多用几次就会了,另外好记性不如烂笔头,我也需要对每次遇到过的问题进行一个整理,因为下次还有可能遇到,这次我遇到了怎么解决的记录下来,下次遇到这个问题,我虽然不记得怎么解决的了,但我记得我之前遇到过这样的问题,而且我还记录了我怎么解决的,不是特别节省时间嘛。

  1. 如果绘图时出现中文不显示的问题,加上
plt.rcParams['font.family']='SimHei'
plt.rcParams['font.sans-serif']=['SimHei']
  1. 怎么遍历pandas数据
for i in data.index.tolist():
  1. 如果每个值是空值,怎么判断呢? 不能用‘NaN’字符串来判断
pd.isnull(left[i])

整个代码:

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import statsmodels.stats.weightstats as st
from scipy import stats

def desc(data):
    length = len(data)
    mini = np.min(data)
    maxi = np.max(data)
    mean = round(np.average(data), 4)
    std = round(np.std(data, ddof=1), 4)
    return length, mini, maxi, mean, std

plt.rcParams['font.family']='SimHei'
plt.rcParams['font.sans-serif']=['SimHei']

data = pd.read_excel('school/dataclean/data/data.xlsx')
# print(data.head())
left = data['左侧mm']
right = data['右侧mm']
double = list()
sleft = list()
sright = list()
invisable = list()
for i in data.index.tolist():
    if not pd.isnull(left[i]) and not pd.isnull(right[i]):
        double.append(left[i])
        double.append(right[i])
    if not pd.isnull(left[i]) and pd.isnull(right[i]):
        sleft.append(left[i])
    if not pd.isnull(right[i]) and pd.isnull(left[i]):
        sright.append(right[i])
# # 单左侧
# length, mini, maxi, mean, std = desc(sleft)
# print('sleft:', length, mini, maxi, mean, std, sep='\t')
# # 单右侧
# length, mini, maxi, mean, std = desc(sright)
# print('sright:', length, mini, maxi, mean, std, sep='\t')
# # 双侧
# length, mini, maxi, mean, std = desc(double)
# print('double:', length, mini, maxi, mean, std, sep='\t')

# # 囊内可见
# newdata = pd.DataFrame()
# newdata['visible'] = data['可见']
# # 囊内未见
# newdata['invisible'] = data['未见']
# print(newdata.describe())
 
# fig, axes = plt.subplots(ncols=2)
# fig.set_size_inches(10, 5)
# sns.kdeplot(data=newdata['visible'], legend=False, ax=axes[0])
# sns.kdeplot(data=newdata['invisible'], legend=False, ax=axes[1])
# axes[0].set(title='visible的数据分布')
# axes[1].set(title='invisible的数据分布')
# plt.subplots_adjust(wspace=0.2)
# plt.show()

# 年龄
# age_list = list()
# age = data['年龄']
# for i in data.index.tolist():
#     age_list.append(int(age[i].split('岁')[0]))
# length, mini, maxi, mean, std = desc(age_list)
# print('age:', length, mini, maxi, mean, std, sep='\t')

#孕周
# week_list = list()
# week = data['首次发现孕周']
# print(week.describe())

# 诊断
diagnose_list_zhong = list()
diagnose_list_wan = list()
diagnose = data['临床诊断']
for i in data.index.tolist():
    if '中孕' in diagnose[i]:
        diagnose_list_zhong.append(int(diagnose[i].split('W')[0].split('(')[1]))
    else:
        diagnose_list_wan.append(int(diagnose[i].split('W')[0].split('(')[1]))
length, mini, maxi, mean, std = desc(diagnose_list_zhong)
print('diagnose1:', length, mini, maxi, mean, std, sep='\t')
length, mini, maxi, mean, std = desc(diagnose_list_wan)
print('diagnose2:', length, mini, maxi, mean, std, sep='\t')

虽然这些数据清洗和描述性统计我是用python做的,另外也尝试用python做独立样本T检验,但是做出来的结果怎么看都不太专业,所以我换成了SPSS,感觉做假设检验还是用比较专业的统计软件比较好,python还是更适合工程。

  1. 独立样本T检验
    我参考的是这篇博客独立样本T检验
  2. 卡方检验
    SPSS系列|手把手教你做卡方检验

不要害怕知识忘记了是学了没用,学进去的东西都是有用的,就算忘了你再学也会比别人更轻松地捡起来~加油,共勉!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值