数据科学实验总复习(最终版)

实验1:

(1)iris_sepal_length = np.loadtxt("./data/iris_sepal_length.csv", delimiter=",") 
    这里运用函数读取文件转换为NumPy数组,delimiter=","在csv文件中数据通常是以“,”分隔的,所以这里用逗号,默认Excel表格数据另存为CSV格式时,
Excel会将表格中的每列数据用逗号分隔开

(2)df = pd.DataFrame(data=np.c_[iris['data'], iris['target']],
                  columns=iris['feature_names'] + ['target'])
    DataFrame是pandas中的一种主要数据结构,用于表示二维表格数据,类似于电子表格或 SQL表.这里的np.c_函数用于按列连接数组,data是DataFrame的
数据源,columns作为新的列名

(3)print("\n花萼长度的统计信息:\n",df['sepal length (cm)'].describe() )
    describe()函数可以表示DataFrame指定列的统计信息

(4)target_counts = df['target'].value_counts()
    .value_counts():这是一个pandas方法,用于计算一个Series对象中不同值的出现次数,并以出现次数降序返回一个包含不同值及其出现次数的Series对象

(5)    petal_length_avg = df.groupby('target')['petal length (cm)'].mean()
    df.groupby('target'):这部分使用pandas的groupby方法,按照DataFrame对象df中的'target'列的值进行分组。例如,如果'target'列代表不同的鸢
尾花品种,那么这行代码会将数据根据不同品种进行分组。['petal length (cm)']:在分组后的对象上选择 “花瓣长度” 这一列。
.mean():计算所选列在每个分组中的平均值。

(6)# 定义一个自定义函数,计算每一行中'sepal length (cm)'和'petal length (cm)'的比值
def sepal_ratio(row):
   try:
       return  row['sepal length (cm)']/row['petal length (cm)']
   except ZeroDivisionError:
       return np.nan
# 计算不同类别比值的平均值
df['sepal_ratio'] = df.apply(sepal_ratio, axis = 1)
dfGroup = df.groupby('target')
mean_sepal_ratio = dfGroup['sepal_ratio'].mean()
print(mean_sepal_ratio)
    apply方法用于将sepal_ratio函数应用到DataFrame(df)的每一行。axis = 1表示按行操作
    
    
实验2:

(1)#查看当前工作目录 import os
                            os.getcwd()
        这行代码导入了 Python 的os模块。os模块提供了许多与操作系统交互的函数,getcwd是os模块中的一个函数,全称为 “get current working directory”,即获取当前工作目录      
        
(2)salaries = pd.read_csv('data/salaries.csv', index_col=0)    
    pd.read_csv()是pandas库中的一个函数,用于读取 CSV(Comma Separated Values)文件,index_col=0表示将 CSV 文件中的第一列设置为DataFrame的索引列。索引在pandas中用于标
识和访问数据行,类似于数据库中的主键。设置索引可以方便地进行数据的查询和操作。

(3)# 显示前六行
        salaries.head(6)
    显示显示前几行的方法有两种,一种是head()函数,另一种是[:6]的形似
    
(4) #用sns.stripplot()绘制散点图
        strip_plot = sns.stripplot(x = 'rank', y = 'salary',data = salaries)
        strip_plot.set_title('title1111')
        strip_plot.set(xlabel = 'rank1' , ylabel = 'salary1')    
    用stripplot绘制分类分类散点图,'x'代表是把数据集的哪一列作为散点图的横坐标,'y'代表把数据集中的哪一列作为散点图的纵坐标,'data'代表绘制图形所需的数据来源
    
(5)#用boxplot继续绘制【箱线图】
        box_plot = sns.boxplot(x = 'rank' , y = 'salary' ,data = salaries)    
    绘制箱线图知识点同上


实验3:
(1)    deaths = pd.read_excel('data/deaths.xlsx')
        code = pd.read_excel('data/icd-main.xlsx')
        print(deaths.columns,'\n',code.columns)
    real_excel()从文件中读取数据并将其放入一个DataFrame数据集中,columns是DataFrame的一个属性,表示数据集所有的列名
    
(2)    mexico_deaths_2008 = deaths[(deaths['yod'] == 2008) & (deaths['mod'] != 0) & (deaths['dod'] != 0)].dropna()
    从原来的表进行筛选创建了一个新的表,不同条件你之间用一个'&',每个条件都要用括号,.dropna()用于去掉包含空值的行或者列
    
(3)mexico_deaths_2008.shape
    shape是DataFrame(数据框)的一个属性。它返回一个包含两个元素的元组,第一个元素表示数据框的行数,第二个元素表示数据框的列数。
    
(4)m_d = mexico_deaths.groupby(['hod' , 'cod']).size().reset_index().rename(columns = {0:'freq' , 'cod':'code'}).dropna()    
    groupby()函数通过指定列进行分组,指定的列放在一个中括号中,如果有多个,用逗号隔开。size()计算每个分组的频数,此时是一个series对象,可以用reset_index()函数转化为DataFrame对象,
    此时有三列,包含其中分组时指定的列,还有一列是计算的频数。此时频数列的列名默认为0,通过rename()函数可以将列名重新命名columns={'旧的列名1' :'新的列名1' , '旧的列名2' : '新的列名2'}
    
(5)m_d = pd.merge(left=m_d, right=code, on='code')
        merge()函数用于将两个数据框按指定的列连接。三个参数 'left'指定左边要连接的数据框,'right'指定右边要连接的数据框,'on'指定合并的依据是两个数据框中都有的列名。这意味着将
        根据这个列的值来匹配两个数据框中的行,并将匹配的行合并在一起。

(6) # 计算不同原因导致的死亡人数
        code_sum = mexico_deaths['cod'].dropna().value_counts()        
    value_counts()方法是pandas.Series对象的一个方法,它会统计Series中每个不同值出现的次数,并返回一个新的pandas.Series对象,其中索引是hod列中的不同值,值是这些值出现的相应次数。这个结果被赋
    值给hour_sum变量
    
(7)m_d['n'] = m_d.apply(lambda row:code_sum[row['code']], axis=1)    
    apply是pandas中DataFrame和Series对象的一个方法,它允许你对数据集中的每一行或每一列应用一个函数,axis=1表示对每一行应用一个函数
    lambda row: code_sum[row['code']]定义了一个匿名函数,这个函数接收一个参数row,代表m_d数据框中的每一行
    
(8)     m_d_hour = m_d.drop_duplicates('hod').sort_values('hod') #计算总死亡人数
    m_d.drop_duplicates()函数从m_d数据框中删除重复的指定列的值,即只保留每个小时的一行数据    
    sort_values('hod')默认是按照hod列的值从小到大进行排序

(9)plt.plot(m_d_hour['hod'], m_d_hour['freq_all'], marker='o', mec='r', mfc='w')
    plot()函数根据传入不同的参数可以画不同的图形,这里的参数分别为:x轴数据、y轴数据、marker表示节点采用圆圈标记、mec设置标记边缘颜色为,mfc设置标记填充颜色为
    
(10)#【提示】根据死因筛选出总死亡人数大于50的数据
    m_d_50 = m_d[m_d['n'] >= 50]
    从一个数据框中筛选出满足特定条件的行,创建一个新的数据框。注意代码的格式
    
(11)    plt.figure()
        axes1 = plt.subplot(1,2,1)
        m_d_50.plot(x = 'n' , y = 'dist' , kind = 'scatter' , s=1 , c = 'b' , marker = 'o' ,ax =axes1)
        axes1.set_title('Linear scale scatter')    
    plt.figure():创建一个新的图形窗口。
    axes1 = plt.subplot(1,2,1):将图形窗口划分为 1 行 2 列的子图布局,并选择第一个子图进行操作。
    m_d_50.plot(x='n',y='dist',kind='scatter',s=1, c='b',marker='o',ax=axes1):
    使用经过筛选后的数据框 m_d_50 进行绘图。
    x='n'指定 m_d_50 中的 'n' 列作为散点图的 x 轴数据,代表每小时每种死因导致的死亡人数。
    y='dist'指定 'dist' 列作为散点图的 y 轴数据,代表 prop 与 prop_all 的距离。
    kind='scatter'明确表示绘制散点图。
    s=1设置散点的大小为 1。
    c='b'将散点的颜色设置为蓝色。
    marker='o'使用圆形标记表示散点。
    ax=axes1将散点图绘制在第一个子图上。
    
(12)parameter = np.polyfit(x_log, y_log, 1)
        使用 numpy 的 polyfit 函数进行多项式拟合。这里参数 1 表示进行一次多项式拟合(即线性拟合),函数返回拟合的参数并存储在 parameter 中,拟合的目的是在x,y数据中得出最接近数据的方程式


实验4:
(1)df_heights = pd.read_table("data/Pearson.txt")
    使用 pandas 库的 read_table() 函数来读取一个文本文件,并将其存储在一个名为 df_heights 的 DataFrame 对象中

(2)df_heights.tail()
    tail ()方法用于显示数据的最后几行。默认情况下,它会显示最后 5 行数据,但你可以通过传入参数来指定要显示的行数。例如,df_heights.tail(10) 将显示最后 10 行数据
    
(3)df_heights.describe()
    describe()用于生成名为df_heights的DataFrame的描述性统计信息。它会返回一个新的DataFrame,包含以下统计信息(如果数据中的列是数值类型):
        count:非空值的数量。
        mean:平均值。
        std:标准差。
        min:最小值。
        25%:第一四分位数。
        50%:中位数。
        75%:第三四分位数。
        max:最大值。

(4)import matplotlib.pyplot as plt
    %matplotlib inline
    plt.scatter(df_heights['Father'], df_heights['Son'])    
        import matplotlib.pyplot as plt:导入 matplotlib 库中的 pyplot 模块,并别名为 plt。matplotlib 是一个强大的 Python 绘图库,可以用于创建各种类型的静态、动态和交互式图形
        plt.scatter() 函数绘制散点图。这个函数接受两个参数,分别是 x 轴数据和 y 轴数据。
        
(5)#用z-score值发现异常点
    from scipy import stats
    import numpy as np
    z = np.abs(stats.zscore(df_heights))
    print(np.where(z>3))
        调用stats的zscore()方法求出df_heights每个数据的z值,然后用np.abs()函数对他们取绝对值并且把他们赋给z,此时z是一个有很多行很多列的容器,然后np.where()函数可以找到指定
    的元素,而且这个函数的返回值是两个元素,其中一个元素包含了所有满足条件元素的行,另一个元素包含了列
    
(6)#根据z-score值删除异常点
    zscored_df_heights= df_heights[(z<3).all(axis=1)]    
        z容器各个值的位置和df_heights各个值的位置是一一对应的,借用z容器筛选出来满足条件值的位置,然后返回df_heights在这些位置上的值
        .all(axis = 1)它检查每行中的所有元素,只有当这一行中的所有元素都是True时,这一行对应的结果才是True。只要这一行中有一个元素是False,那么这一行最终的结果就是False
        
(7)import statsmodels.api as sm
        导入statsmodels库,并将其别名为sm。statsmodels是一个用于统计建模和计量经济学的 Python 库。它提供了许多功能,包括线性回归、时间序列分析、假设检验等。
        
(8)X_add_const=sm.add_constant(X.to_numpy()) 
        to_numpy()函数将DataFrame类型的X转换为 numpy 数组。numpy 数组在数值计算中效率较高,并且一些特定的函数可能需要 numpy 数组作为输入。 add_constant 函数用于给输入的数据添加一个常数项。
    在回归分析中,通常需要一个截距项(即常数项),它表示当所有自变量都为零时的因变量的值。通过添加常数项,可以使回归模型更加灵活,能够更好地拟合数据    
    
(9)myModel = sm.OLS(y, X_add_const)    
    创建了一个普通最小二乘(Ordinary Least Squares,OLS)回归模型对象。y是因变量,X_add_const是自变量
    
(10)results = myModel.fit()
      print(results.summary())    
    .fit()是这个模型对象的一个方法。调用这个方法的作用是使用给定的因变量y和自变量X_add_const进行模型拟合,
    results是一个包含拟合结果的对象。这个对象包含了很多关于模型的信息,
    .summary()会提供丰富的模型统计信息,包括回归系数、标准误差、t 值、p 值、拟合优度(R-squared)等
    
(11)results.params    
    是一个包含回归模型系数估计值的pandas.Series对象,其中包括截距项和各个自变量的系数。
    results.params[0]将给出截距项 , 在模型y = a + b1*x1 + b2*x2 +... + bn*xn中,results.params[1]将给出x1的系数b1,results.params[2]将给出x2的系数b2,以此类推此时斜率为results.params[1]
    
(12)# 评价回归直线的拟合优度
        results.rsquared    
    0-1之间,越大拟合越好

(13)# 查看F统计量的p值
        results.f_pvalue    
        通过拟合后的results对象可以获取 F 统计量的 p 值,它帮助我们决定是否拒绝原假设,从而判断模型是否具有统计学意义, p 值小一点。如果 p 值小,就说明模型这个团队整体是比较靠谱的,能对因
    变量的变化给出一个合理的解释。要是 p 值大,那这个模型可能就不太能让人满意,我们就得想办法改进这个模型,让它能更好地完成 “解释因变量” 这个任务。
    
(14)# 查看Durbin-Watson统计量
        sm.stats.stattools.durbin_watson(results.resid)    
            sm.stats.stattools.durbin_watson是statsmodels库中的一个函数,用于计算 Durbin - Watson 统计量。这个统计量主要用于检测回归模型残差序列的自相关性。
        results.resid是回归模型拟合后的残差序列
        
(15)# 查看JB统计量及其p值
        sm.stats.stattools.jarque_bera(results.resid)    
            同上
            
(16)# 用模型results重新进行预测
        y_predict = results.predict(X_add_const)    
            使用这个回归结果对象的predict()方法来进行预测。这个方法接受新的输入数据(这里是X_add_const),并根据回归模型计算出对应的预测值
            
(17)    h = 70
        results.predict([1,h])        
        是使用已经训练好的回归模型results对给定的数据进行预测。这里传入的参数[1,h]是一个包含两个元素的列表,其中第一个元素1对应模型中的常数
    项(截距项),第二个元素h(这里值为 70)是要预测时对应自变量的值。
    
(18)import matplotlib.pyplot as plt
        plt.rcParams['font.family'] = 'simHei'
        plt.plot(zscored_df_heights['Father'],zscored_df_heights['Son'],'o')
        plt.plot(zscored_df_heights['Father'],y_predict)
        plt.title('父子身高数据的回归分析')
        plt.xlabel('父亲')
        plt.ylabel('儿子')
    记住plt设定字体,设置标题和x,y坐标的函数    

实验5:

(1)bc_data = pd.read_csv('data/bc_data.csv', header=0)
        header=0表示将 CSV 文件的第一行作为列名

(2)data = bc_data.drop(['id'], axis=1)
        drop方法是用于从pandas数据框中删除特定的行或列。
        ['id']是要删除的列名列表,这里表示删除名为id的列。
        axis=1指定了删除的是列而不是行(当axis=0时表示删除行)·
                
(3)y_data = np.ravel(data['diagnosis'])
        np.ravel()是numpy库中的一个函数,它的主要作用是将多维数组展平为一维数组例如,如果你有一个形状为(m, n)的二维数组,np.ravel()会将它转换为一个长度为m * n的一维数组。
        
(4)from sklearn.model_selection import train_test_split
    X_trainingSet, X_testSet, y_trainingSet, y_testSet = train_test_split(X_data ,y_data, random_state=1,test_size = 0.25)
        train_test_split函数来自scikit - learn(sklearn)库的model_selection模块。在机器学习项目中,我们通常需要将数据集划分为两部分:一部分用于训练模型(训练集),另一部
    分用于评估模型的性能(测试集) ps:train_test_split函数会按照顺序返回四个值。这些值的顺序是固定的,分别是训练集特征数据、测试集特征数据、训练集目标数据、测试集目标数据
        X_data是包含特征(也称为自变量、输入变量)的数据结构,通常是一个二维数组(如numpy数组)或者pandas的DataFrame
        y_data是包含目标(也称为因变量、输出变量)的数据结构,通常是一个一维数组或者pandas的DataFrame的一列
        当你设置一个固定的整数作为random_state的值(如random_state = 1)时,函数每次划分数据集的结果都是相同的。这对于实验的可重复性非常重要。如果不设置random_state或者设
    置为None,每次运行代码时数据集的划分都会不同
        test_size:用于指定测试集占原始数据集的比例。在这个例子中,test_size = 0.25表示测试集占总数据集的 25%,那么训练集就占 75%。
        
(5)    train_test_split?
        当你在交互式环境中输入train_test_split?时,它会显示train_test_split函数的文档字符串,其中包含了函数的功能描述、参数说明、返回值说明等信息
        
(6)    from sklearn.neighbors import KNeighborsClassifier
    myModel = KNeighborsClassifier(algorithm='kd_tree')
        scikit-learn库的neighbors模块中导入KNeighborsClassifier类。这个类实现了 K 近邻(K-Nearest Neighbors,KNN)分类算法,
        创建了一个KNeighborsClassifier对象,algorithm='kd_tree'是创建分类器对象时的一个参数设置。这个参数指定了在计算最近邻居时使用的算法
        当设置为'kd_tree'时,表示使用 kd-tree(k-dimensional tree,k 维树)算法来查找最近邻居。kd-tree 是一种数据结构,它可以有效地组织高维数据,使得在搜索最近邻居时更加高效。
        
(7)    from sklearn.metrics import accuracy_score
    print(accuracy_score(y_testSet, y_predictSet))
    from sklearn.metrics import accuracy_score:从scikit-learn的metrics模块中导入accuracy_score函数。这个函数用于计算分类任务中的准确率,即正确分类的样本数占总样本数的比例。
这个函数接受两个参数,分别是真实的目标值(标签)和模型预测的目标值。    

(8)myModel.fit(X_trainingSet, y_trainingSet).score(X_testSet, y_testSet)
    首先,myModel.fit(X_trainingSet, y_trainingSet)使用训练集数据X_trainingSet和对应的目标标签y_trainingSet对模型myModel进行训练。
    接着,.score(X_testSet, y_testSet)在训练后的模型上,使用测试集数据X_testSet和对应的目标标签y_testSet来评估模型的性能。
    
(9)from sklearn.neighbors import KNeighborsClassifier
    NumberOfNeighbors = range(1,23)
    KNNs = [KNeighborsClassifier(n_neighbors=i) for i in NumberOfNeighbors]
        NumberOfNeighbors = range(1, 23):这里创建了一个整数范围对象,从 1 开始到 22 结束(不包括 23)。这个范围表示要尝试的不同邻居数量。在 KNN 算法中,n_neighbors参数决定了在
    进行分类预测时考虑的最近邻居的数量。通过尝试不同的邻居数量,可以找到在特定数据集上表现最佳的参数值。
        KNNs = [KNeighborsClassifier(n_neighbors=i) for i in NumberOfNeighbors]:这是一个列表推导式,用于创建一个包含多个KNeighborsClassifier对象的列表。
    
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值