【数据科学项目1】:构建你的第一个数据科学项目_health index(1)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

你可以从官方来源收集预先存在的数据集,你可以从数据库中导入数据,你可以直接从网页上抓取数据,你可以通过一些社交媒体渠道收集数据,你还可以利用在线表格进行数据收集。还有许多其他来源,你的数据收集方法取决于你的数据科学项目。如果你是第一次从事数据科学项目,请选择你感兴趣的数据集。它可以与运动、电影或音乐有关——任何你感兴趣的东西。在这里我推荐几个我平时获取数据的网站:

在这里,我选择了一个数据集来练习预测分析。我从 Kaggle 网站上提取了数据集

我的github上也上传了该项目的数据集: 数据集

# 首先安装kaggle
! pip install -q kaggle
# 将kaggle的json文件导入
!mkdir -p ~/.kaggle
!cp /content/kaggle.json ~/.kaggle/
!chmod 600 ~/.kaggle/kaggle.json
!kaggle config set -n path -v /content
# 下载数据集并解压。
! kaggle datasets download -d mirichoi0218/insurance
! unzip insurance.zip -d health-insurance

2.选择一个IDE

工欲善其事,必先利其器

在有了数据之后,我们下一步考虑使用什么工具来对数据进行处理,建模。选择一个你最熟悉的 IDE。如果你使用 Python语言,这里有几个常见的IDE

  • Pycharm – 它是一个旨在编写 Python 代码的 IDE。它提供了各种生产功能,例如智能代码完成、错误检查和代码修复。它通过提供与版本控制功能的集成,支持 Web 开发以及数据科学,使项目维护变得容易
  • Jupyter Notebook – 它是一个开源 Web 应用程序,允许您创建和共享包含实时代码、可视化的文档。它有助于简化工作并使协作更容易
  • Google Colab – 它允许用户编写和执行 Python 代码。它非常适合机器学习和数据科学项目,因为它免费提供计算资源。你可以在这里轻松运行重型机器学习算法,而不必担心基础设施或成本。
  • 带有 .py 扩展名的简单文本文件 ,尽管上述选项很容易获得并且易于使用,但如果你最喜欢使用记事本编写代码,你可以使用它并使用 .py 扩展名保存文件。然后,你可以使用语法为“python .py”的命令行运行相同的命令。这将执行你的程序,但对于数据科学工作,这可能不是最佳选择,因为你无法即时看到代码或可视化的输出。

在这里,我选择了 Google Colab 作为工作环境

获取要使用的数据后,下一步是通过检查数据质量来获得对数据的第一印象。此阶段的主要目标是对数据进行完整性检查,而完成此任务的最佳方法是寻找不可能或极不可能的事情。检查异常值和缺失值,检查数据类型是否正确,并检查最极端的情况。它们有意义吗?一个好的做法是对数据运行一些简单的统计测试并将其可视化,以快速了解数据的统计属性并检测可能的异常值。

3.列出在数据集要进行的活动

列出要在数据集上进行的操作,以便在开始之前有一个清晰的路径。我们在数据科学项目中执行的常见操作是

数据读取、数据清理、数据转换、探索性数据分析、模型构建、模型评估和模型部署。下面简要介绍这些步骤。

数据读取将数据读入到一个dataframe的结构,使用pandas

# 导入基本库
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.cbook import boxplot_stats  
import statsmodels.api as sm
from sklearn.model_selection import train_test_split,GridSearchCV, cross_val_score, cross_val_predict
from statsmodels.stats.outliers_influence import variance_inflation_factor 
from sklearn.tree import DecisionTreeRegressor
from sklearn import ensemble
import numpy as np
import pickle

# 读取数据,并总览一下数据情况。
health_ins_df = pd.read_csv("health-insurance/insurance.csv")
health_ins_df.head()

indexagesexbmichildrensmokerregioncharges
019female27.90yessouthwest16884.924
118male33.771nosoutheast1725.5523
228male33.03nosoutheast4449.462
333male22.7050nonorthwest21984.47061
432male28.880nonorthwest3866.8552

数据清洗:识别和消除数据集中缺失值和异常值

# 查看缺失值
health_ins_df.isnull().sum()
# 可以看出数据集中没有缺失值

age         0
sex         0
bmi         0
children    0
smoker      0
region      0
charges     0
dtype: int64

数据转换——它涉及更改列的数据类型、创建派生列或删除重复数据等等

探索性数据分析——对数据集执行单变量和多变量分析,以发现其中隐藏的一些关系

下面我们来对数值和分类变量进行数据清理和探索性数据分析。

探索性数据分析

对于数值型变量的分析

#数值型变量的可视化
# 直方图绘制

fig,axes = plt.subplots(1,2,figsize=(12,6))
plt.style.use('ggplot')#使用ggplot主题,R语言的一个绘图包
sns.histplot( health_ins_df['age'] , color="skyblue",ax=axes[0])
sns.histplot( health_ins_df['bmi'] , color="olive",ax=axes[1])
plt.show()

image-20220817095825845

  • 我们可以把年龄进行分组转换为年龄段
  • BMI接近正态分布
# 箱线图
fig,axes=plt.subplots(1,2,figsize=(10,5))
sns.boxplot(x = 'age', data = health_ins_df, ax=axes[0])
sns.boxplot(x = 'bmi', data = health_ins_df, ax=axes[1])
plt.show()

可以看出BMI存在一些离群值 , 现在我们来看一下这些点

outlier_list = boxplot_stats(health_ins_df.bmi).pop(0)['fliers'].tolist()
print(outlier_list)
#查找包含异常值的行数
outlier_bmi_rows = health_ins_df[health_ins_df.bmi.isin(outlier_list)].shape[0]
print("bmi 中包含异常值的行数:", outlier_bmi_rows)

#离群值占比
#Percentage of rows which are outliers
percent_bmi_outlier = (outlier_bmi_rows/health_ins_df.shape[0])\*100
print("bmi离群值异常值的百分比 : ", percent_bmi_outlier)

[49.06, 48.07, 47.52, 47.41, 50.38, 47.6, 52.58, 47.74, 53.13]
bmi 中包含异常值的行数: 9
bmi离群值异常值的百分比 :  0.672645739910314

数值变量的数据转换

# 将年龄转换为分桶的
print("Minimum value for age : ", health_ins_df['age'].min(),"\nMaximum value for age : ", health_ins_df['age'].max())

'''
18至40岁的年龄将属于青年
41至58岁的年龄将低于中年
58岁以上将落入老年
'''
health_ins_df.loc[(health_ins_df['age'] >=18) & (health_ins_df['age'] <= 40), 'age\_group'] = '青年'
health_ins_df.loc[(health_ins_df['age'] >= 41) & (health_ins_df['age'] <= 58), 'age\_group'] = '中年'
health_ins_df.loc[health_ins_df['age'] > 58, 'age\_group'] = '老年'

Minimum value for age :  18 
Maximum value for age :  64

# 去除BMI中的异常值
health_ins_df_clean = health_ins_df[~health_ins_df.bmi.isin(outlier_list)]
sns.boxplot(x = 'bmi', data = health_ins_df_clean)

image-20220817100340013

对于分类型变量的分析

fig,axes=plt.subplots(1,5,figsize=(20,8))
sns.countplot(x = 'sex', data = health_ins_df_clean, palette = 'magma',ax=axes[0])
sns.countplot(x = 'children', data = health_ins_df_clean, palette = 'magma',ax=axes[1])
sns.countplot(x = 'smoker', data = health_ins_df_clean, palette = 'magma',ax=axes[2])
sns.countplot(x = 'region', data = health_ins_df_clean, palette = 'magma',ax=axes[3])
sns.countplot(x = 'age\_group', data = health_ins_df_clean, palette = 'magma',ax=axes[4])

image-20220817101258434

数据准备完成后,下一阶段是建模。选择合适的算法将取决于数据的类型。例如,如果数据是连续的,您将应用回归建模,如果数据是分类的,您将应用分类算法建模。作为一名数据科学家,您将尝试许多模型来获得最合适的模型。

模型构建

在根据业务/技术限制选择正确的模型之前,尝试并测试数据集上所有可能的模型。在这个阶段,你也可以尝试一些 bagging 或 boosting 技术。在这里,我分别构建了线性回归模型、决策树回归、Gradient Boosting Regression.

简单的线性回归模型

在这里,我们首先使用线性回归模型作为基准模型。

from sklearn.linear_model import LinearRegression
lm = LinearRegression()
X = health_ins_df_processed.loc[:, health_ins_df_processed.columns != 'charges']#自闭哪里
y = health_ins_df_processed['charges']#因变量
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)#划分训练集和测试集


lm.fit(X_train,y_train)
print("R-Squared on train dataset={}".format(lm.score(X_train,y_train)))#训练集R2
lm.fit(X_test,y_test)   
print("R-Squaredon test dataset={}".format(lm.score(X_test,y_test)))#测试集R2

R-Squared on train dataset=0.7494776882061486
R-Squaredon test dataset=0.7372938495110573

从结果来看,使用简单的线性回归

R

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

hkza-1715367935411)]
[外链图片转存中…(img-speTl5Xq-1715367935412)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值