机器学习每周挑战——全球心理健康调查

这是数据集,关于数据集的描述:

# Timestamp                       受访时间
# Gender                          受访者性别
# Country                         受访者居住的国家
# Occupation                      受访者的职业
# self_employed                   受访者是否为自雇人士?
# family_history                  受访者的家庭中是否有精神健康障碍史?
# treatment                       受访者是否接受过心理健康问题的治疗?
# Days_Indoors                    受访者每周待在室内的估计天数。
# Growing_Stress                  受访者当前感受到的压力程度
# Changes_Habits                  受访者的睡眠习惯或模式有任何变化吗?
# Mental_Health_History           受访者以前是否有精神健康障碍史?
# Mood_Swings                     受访者是否经历过突然的情绪波动?
# Coping_Struggles                受访者在应对压力或压力方面有困难吗?
# Work_Interest                   受访者对工作的兴趣和积极性
# Social_Weakness                 受访者是否觉得很难进行社交互动或维持关系?
# mental_health_interview         受访者是否愿意接受心理健康访谈?
# care_options                    受访者是否意识到或正在使用心理保健方案?

 

 问题描述
# 心理健康与个人特征的关系:通过分析性别、职业、是否自雇等个人特征与心理健康指标(如压力、抑郁、焦虑等)之间的关系,探究不同人群在心理健康上的差异和共性。
# 家庭背景与心理健康的关联:研究家庭精神健康史与个体心理健康状况之间的联系,探讨家庭因素对心理健康的影响。
# 心理健康治疗的接受情况:调查受访者是否接受过心理健康治疗与其它变量之间的关系,如家庭背景、个人特征、压力水平等,从而了解心理健康服务利用的情况及影响因素。
data = pd.read_csv("Mental Health Dataset.csv")
pd.set_option("display.max_columns",100)
# print(data.head(5))
# 读取数据后我们进行数据的预处理
# 首先查看其是否有缺失值
print(data.isnull().sum())

# self_employed              5202    我们可以看出这一行有5202个缺失值  有缺失值我们看其缺失值比例占整个数据集的比例

print("缺失值比例:",data["self_employed"].isnull().sum()/len(data)*100)

# 缺失值比例 1.7792888317303086 我们可以看到缺失值的比例占比并不高

print(data.info())

# self_employed属于标称属性,所以这里填充缺失值我们用众数(出现次数最多的)来填充,其实我感觉占比不高完全可以删除,但是这样会破坏其他列数据的完整性
data['self_employed'] = data['self_employed'].fillna(data['self_employed'].mode()[0])

# 还有我们从数据集中可以看到Timestamp是日期与时间,与我们的问题无任何关系,那我们将其删除即可

data = data.drop('Timestamp', axis=1)


# print(data.info())     # 处理后的数据没有了缺失值

之后我们通过图示来分析第一个问题:

gender_stress_data = pd.crosstab(data['Gender'], data['Growing_Stress'])
gender_stress_data.loc['Total'] = gender_stress_data.sum(axis=0)

gender_stress_data.plot(kind='bar', stacked=True, colormap='viridis', figsize=(10, 6))
plt.title("性别与是否有压力的关系图")
plt.xlabel("性别")
plt.ylabel("是否有压力")
# plt.show()

occupation_stress = pd.crosstab(data['Occupation'], data['Growing_Stress'])
occupation_stress.loc['Total'] = occupation_stress.sum(axis=0)

occupation_stress.plot(kind='bar', stacked=True, colormap='viridis', figsize=(10, 6))
plt.title("职业与是否有压力的关系图")
plt.xlabel("职业")
plt.ylabel("是否有压力")
# plt.show()


self_employed_stress = pd.crosstab(data['self_employed'], data['Growing_Stress'])
self_employed_stress.loc['Total'] = self_employed_stress.sum(axis=0)

self_employed_stress.plot(kind='bar', stacked=True, colormap='viridis', figsize=(10, 6))
plt.title("自雇人员与是否有压力的关系图")
plt.xlabel("是否为自雇人员")
plt.ylabel("是否有压力")
# plt.show()

 

 

之后我们分析第二个问题: 

plt.figure(figsize=(10,6))
ax = sns.histplot(x='family_history',y='treatment',data=data,color='red')
plt.title("家庭精神健康史与个体心理健康状况之间的联系")
# plt.show()

最后一个问题:

# 心理健康治疗的接受情况:调查受访者是否接受过心理健康治疗与其它变量之间的关系,如家庭背景、个人特征、压力水平等,从而了解心理健康服务利用的情况及影响因素
le = LabelEncoder()

columns = ['family_history','Gender','Growing_Stress','treatment']
for i in columns:
    data[i] = le.fit_transform(data[i])

X = data[['family_history','Gender','Growing_Stress']]
y = data['treatment']

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=42)
model = RandomForestClassifier(n_estimators=100,random_state=42)
model.fit(X_train,y_train)
feature_importance = model.feature_importances_
feature = X.columns

sort_index = feature_importance.argsort()
plt.figure(figsize=(12, 6))
plt.barh(range(len(sort_index)), feature_importance[sort_index])
plt.yticks(range(len(sort_index)), [feature[i] for i in sort_index])
plt.xlabel('特征重要性')
plt.title('特征重要性分析')

plt.show()

 

由此我们可以看出家庭的影响对人心理健康的影响较大 

  • 34
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值