• 【CSDN创作话题 】丨 竞赛那些事


    前言/背景

    我参加过的数学建模比赛没拿过奖,我准备大量的参加数学建模比赛,不断的积累经验,虽然我现在很菜,但我就是那种又菜又爱玩的人,输了又能怎么样,我只在乎过程中我学到了什么,当然得奖才是我的动力。我相信在未来我能拿到一个属于自己认可的奖。

    大赛简介

     我就参加过这一个比赛。

    参赛流程

    首先,需要一个有能力的队伍,一个可以编程能力,一个可以论文演讲,一个可以数学算法。然后每个人又对其他两个有点了解,这样的队伍我觉得就很舒服。其次,就是三个人都要有激情,不能有负能量,团队要有凝聚力,这样大家在冲刺时,遇到问题时,熬夜时,才不会抱怨,影响大家的热情。最后,这个非常重要,就是比赛前的准备,要准备些什么呢,比如比赛的常用算法代码可以准备一下吧,还有写论文的工具的使用方法,排版等。

    参赛经历

    我比赛时,没有团队,因为要求要两个人以上才能参加,我就拉了一个人来凑数。所以我一个人在完成编程后,就没有什么时间去写论文了,最后还有很多点都没有写完,就连排版都没有做好,问题是解决了,但论文写不好,都是白扯。

    经验心得

    团队很重要!团队很重要!团队很重要!

    资料分享

    下面分享一下数据分析部分内容。

     首先是加载数据

    略…………

     将特征表与标签表聚合拼接

    1. # 聚合数据
    2. df_1 = pd.merge(bhv_train,cust_train)
    3. train = pd.merge(df_1,train_label)
    4. test = pd.merge(bhv_test,cust_test)

     查看维度

    1. # 样本个数和特征维度
    2. train.shape #(7206, 34)
    3. test.shape #(1655, 34)

    .查看特征名

    1. # 查看特征名
    2. train.columns
    3. test.columns

    因为比赛提供的是脱敏数据,所以我们就不知道这些特征具体是什么意思。

    1. # 查看数据集的一些基本信息
    2. train.info()

    train.head().T

    1. # 查看一下数据的描述性分析
    2. train.describe().T

     以上可以让我们更了解数据

    下面对数据类型分析

    1. # 数值类型
    2. numerical_feature = list(train.select_dtypes(exclude=['object']).columns)
    3. numerical_feature
    len(numerical_feature)  ## 34
    
    1. # 连续型变量
    2. serial_feature = []
    3. # 离散型变量
    4. discrete_feature = []
    5. # 单值变量
    6. unique_feature = []
    7. for fea in numerical_feature:
    8. temp = train[fea].nunique()# 返回的是唯一值的个数
    9. if temp == 1:
    10. unique_feature.append(fea)
    11. # 自定义变量的值的取值个数小于10就为离散型变量
    12. elif temp <= 10:
    13. discrete_feature.append(fea)
    14. else:
    15. serial_feature.append(fea)
    1. import numpy as np
    2. import pandas as pd
    3. import seaborn as sns
    4. import matplotlib.pyplot as plt
    5. #每个数字特征得分布可视化
    6. f = pd.melt(train, value_vars=serial_feature)
    7. g = sns.FacetGrid(f, col="variable", col_wrap=3, sharex=False, sharey=False)
    8. g = g.map(sns.distplot, "value")

    1. plt.figure(1 , figsize = (8 , 5))
    2. sns.distplot(train.A3,bins=40)
    3. plt.xlabel('A3')

    discrete_feature

    ['label']

    1. import seaborn as sns
    2. import matplotlib.pyplot as plt
    3. df_ = train[discrete_feature]# 离散型变量
    4. sns.set_style("whitegrid") # 使用whitegrid主题
    5. fig,axes=plt.subplots(nrows=1,ncols=1,figsize=(8,10))# nrows=4,ncols=2,括号加参数4x2个图
    6. for i, item in enumerate(df_):
    7. plt.subplot(4,2,(i+1))
    8. ax=sns.countplot(item,data = df_,palette="Pastel1")
    9. plt.xlabel(str(item),fontsize=14)
    10. plt.ylabel('Count',fontsize=14)
    11. plt.xticks(fontsize=13)
    12. plt.yticks(fontsize=13)
    13. #plt.title("Churn by "+ str(item))
    14. i=i+1
    15. plt.tight_layout()
    16. plt.show()

    1. label=train.label
    2. label.value_counts()/len(label)

    1. train_positve = train[train['label'] == 1]
    2. train_negative = train[train['label'] != 1]
    3. f, ax = plt.subplots(len(numerical_feature),2,figsize = (10,80))
    4. for i,col in enumerate(numerical_feature):
    5. sns.distplot(train_positve[col],ax = ax[i,0],color = "blue")
    6. ax[i,0].set_title("positive")
    7. sns.distplot(train_negative[col],ax = ax[i,1],color = 'red')
    8. ax[i,1].set_title("negative")
    9. plt.subplots_adjust(hspace = 1)

     缺失值查看

    1. # 去掉标签
    2. # X_missing = train.drop(['label'],axis=1)
    3. X_missing =test
    4. # 查看缺失情况
    5. missing = X_missing.isna().sum()
    6. missing = pd.DataFrame(data={'特征': missing.index,'缺失值个数':missing.values})
    7. #通过~取反,选取不包含数字0的行
    8. missing = missing[~missing['缺失值个数'].isin([0])]
    9. # 缺失比例
    10. missing['缺失比例'] = missing['缺失值个数']/X_missing.shape[0]
    11. missing.to_csv("2455.csv")
    1. # 可视化
    2. s=(train.isnull().sum()/len(train)).plot.bar(figsize = (20,6),color=['#d6ecf0','#a3d900','#88ada6','#ffb3a7','#cca4e3','#a1afc9'])
    3. # 可以看到,所有的特征缺失值都在10%以内,这里考虑全部保留。

    异常值处理

    1. # 数值类型
    2. numerical_feature = list(train.select_dtypes(exclude=['object']).columns)
    3. def find_outliers_by_3segama(data,fea):
    4. data_std = np.std(data[fea])
    5. data_mean = np.mean(data[fea])
    6. outliers_cut_off = data_std * 3
    7. lower_rule = data_mean - outliers_cut_off
    8. upper_rule = data_mean + outliers_cut_off
    9. data[fea+'_outliers'] = data[fea].apply(lambda x:str('异常值') if x > upper_rule or x < lower_rule else '正常值')
    10. return data
    11. data_train = train.copy()
    12. for fea in numerical_feature:
    13. data_train = find_outliers_by_3segama(data_train,fea)
    14. print(data_train[fea+'_outliers'].value_counts())
    15. print(data_train.groupby(fea+'_outliers')['label'].sum())
    16. print('*'*10)

    1. # 检索异常值
    2. fig,ax=plt.subplots(figsize=(15,5))
    3. train.boxplot()

    1. #使用拉依达准则(3σ准则)
    2. import numpy as np
    3. import pandas as pd
    4. #设置需读取文件的路径
    5. data =train
    6. # 记录方差大于3倍的值
    7. #shape[0]记录行数,shape[1]记录列数
    8. sigmayb = [0]*data.shape[0]
    9. for i in range(1,data.shape[1]):
    10. print("处理第"+str(i)+"行")
    11. # 循环 每一列
    12. lie = data.iloc[:, i].to_numpy()
    13. print(lie)
    14. mea = np.mean(lie)
    15. s = np.std(lie, ddof=1)
    16. # 计算每一列 均值 mea 标准差 s
    17. print("均值和标准差分别为:"+str(mea)+" "+str(s))
    18. #统计大于三倍方差的行
    19. for t in range(1,data.shape[0]):
    20. if (abs(lie[t]-mea) > 3*s):
    21. print(">3sigma"+" "+str(t)+" "+str(i))
    22. #将异常值置空
    23. if i != 33:
    24. data.iloc[t,i]= np.nan
    25. # 将处理后的数据存储到原文件中
    26. train=data

    数据相关关系

    1. f, ax = plt.subplots(1,1, figsize = (20,20))
    2. cor = train[numerical_feature].corr()
    3. sns.heatmap(cor, annot = True, linewidth = 0.2, linecolor = "white", ax = ax, fmt =".1g" )

    1. #查看变量与标签的相关性
    2. train.corr()["label"].sort_values()

    以上就是数据分析EDA的一些部分过程分享。

    具体分析就不说了,只能分享操作。

  • 相关阅读:
    Elastic Observability 8.11:ES|QL、APM 中的通用分析和增强的 SLOs
    (附源码)计算机毕业设计SSM奖助学金评审系统
    Win10杀死进程方式
    入门【网络安全/黑客】启蒙教程
    智能基座昇腾高校行 | 昇思MindSpore携手清华大学共同培养新时代科技人才
    MySQL笔记2(函数,约束,多表查询,事务)
    算法竞赛备赛进阶之状态机模型训练
    计算摄影——妆造迁移
    浅谈线程池的拓容、判断、限速技巧
    python web服务器部署
  • 原文地址:https://blog.csdn.net/qq_21402983/article/details/126598877