日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据分析-kaggle泰坦尼克号生存率分析

發布時間:2023/12/18 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据分析-kaggle泰坦尼克号生存率分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

1912年4月15日,泰坦尼克號在首次航行期間撞上冰山后沉沒,2224名乘客和機組人員中有1502人遇難。沉船導致大量傷亡的原因之一是沒有足夠的救生艇給乘客和船員。雖然幸存下來有一些運氣因素,但有一些人比其他人更有可能生存,比如婦女,兒童和上層階級。在本文中將對哪些人可能生存作出分析,特別是運用Python和機器學習的相關模型工具來預測哪些乘客幸免于難,最后提交結果。從kaggle泰坦尼克生存預測項目下載相關數據。

實施步驟

1.提出問題

什么樣的人在泰坦尼克號中更容易存活?

2.理解數據

2.1 采集數據

從Kaggle泰坦尼克號項目頁面下載數據:https://www.kaggle.com/c/titanic

2.2 導入數據
#導入處理數據包 import numpy as np import pandas as pd #導入數據 #訓練數據集 train = pd.read_csv('E:\kaggle\\train.csv') #測試數據集 test = pd.read_csv('E:\kaggle\\test.csv') print ('訓練數據集:',train.shape,'測試數據集:',test.shape)

rowNum_train=train.shape[0] rowNum_test=test.shape[0] print('kaggle訓練數據集有多少行數據:',rowNum_train,',kaggle測試數據集有多少行數據:',rowNum_test,)

#合并數據集,方便同時對兩個數據集進行清洗 full = train.append( test , ignore_index = True ) print ('合并后的數據集:',full.shape)

2.3 查看數據集信息
#查看數據 full.head()

#獲取數據類型列的描述統計信息 full.describe()

describe只能查看數據類型的描述統計信息,對于其他類型的數據不顯示

# 查看每一列的數據類型,和數據總數 full.info()

我們發現數據總共有1309行。
其中數據類型列:年齡(Age)、船艙號(Cabin)里面有缺失數據:
1)年齡(Age)里面數據總數是1046條,缺失了1309-1046=263,缺失率263/1309=20%
2)船票價格(Fare)里面數據總數是1308條,缺失了1條數據
字符串列:
1)登船港口(Embarked)里面數據總數是1307,只缺失了2條數據,缺失比較少
2)船艙號(Cabin)里面數據總數是295,缺失了1309-295=1014,缺失率=1014/1309=77.5%,缺失比較大
這為我們下一步數據清洗指明了方向,只有知道哪些數據缺失數據,我們才能有針對性的處理。

3.數據清洗

3.1 數據預處理

缺失值處理
在前面,理解數據階段,我們發現數據總共有1309行。 其中數據類型列:年齡(Age)、船艙號(Cabin)里面有缺失數據。 字符串列:登船港口(Embarked)、船艙號(Cabin)里面有缺失數據。這為我們下一步數據清洗指明了方向,只有知道哪些數據缺失數據,我們才能有針對性的處理。很多機器學習算法為了訓練模型,要求所傳入的特征中不能有空值。

  • 如果是數值類型,用平均值取代
  • 如果是分類數據,用最常見的類別取代
  • 使用模型預測缺失值,例如:K-NN
  • print('處理前:') full.info() #年齡(Age) full['Age']=full['Age'].fillna( full['Age'].mean() ) #船票價格(Fare) full['Fare'] = full['Fare'].fillna( full['Fare'].mean() ) print('處理紅后:') full.info()

    #檢查數據處理是否正常 full.head()

    總數據是1309
    字符串列:
    1)登船港口(Embarked)里面數據總數是1307,只缺失了2條數據,缺失比較少
    2)船艙號(Cabin)里面數據總數是295,缺失了1309-295=1014,缺失率=1014/1309=77.5%,缺失比較大
    登船港口(Embarked):
    出發地點:S=英國南安普頓Southampton
    途徑地點1:C=法國 瑟堡市Cherbourg
    途徑地點2:Q=愛爾蘭 昆士敦Queenstown #登船港口(Embarked):查看里面數據長啥樣 full['Embarked'].head()

    #分類變量Embarked,看下最常見的類別,用其填充 full['Embarked'].value_counts()

    從結果來看,S類別最常見。我們將缺失值填充為最頻繁出現的值:
    S=英國南安普頓Southampton

    full['Embarked'] = full['Embarked'].fillna( 'S' ) #缺失數據比較多,船艙號(Cabin)缺失值填充為U,表示未知(Uknow) full['Cabin'] = full['Cabin'].fillna( 'U' ) #檢查數據處理是否正常 full.head()

    #查看最終缺失值處理情況,記住生成情況(Survived)這里一列是我們的標簽,用來做機器學習預測的,不需要處理這一列 full.info()

    3.2 特征提取
    3.2.1數據分類
    查看數據類型,分為3種數據類型。并對類別數據處理:用數值代替類別,并進行One-hot編碼。
    1.數值類型:
    乘客編號(PassengerId),年齡(Age),船票價格(Fare),同代直系親屬人數(SibSp),不同代直系親屬人數(Parch)
    2.時間序列:無
    3.分類數據:
    1)有直接類別的
    乘客性別(Sex):男性male,女性female
    登船港口(Embarked):出發地點S=英國南安普頓Southampton,途徑地點1:C=法國 瑟堡市Cherbourg,出發地點2:Q=愛爾蘭 昆士敦Queenstown
    客艙等級(Pclass):1=1等艙,2=2等艙,3=3等艙
    2)字符串類型:可能從這里面提取出特征來,也歸到分類數據中
    乘客姓名(Name)
    客艙號(Cabin)
    船票編號(Ticket)
    有直接類別-性別(Sex)
    #查看性別數據這一列 full['Sex'].head()

    將性別的值映射為數值
    男(male)對應數值1,女(female)對應數值0

    sex_mapDict={'male':1,'female':0} #map函數:對Series每個數據應用自定義的函數計算 full['Sex']=full['Sex'].map(sex_mapDict) full.head()

    有直接類別-登船港口(Embarked)

    使用get_dummies進行one-hot編碼,產生虛擬變量(dummy variables),列名前綴是Embarked

    #存放提取后的特征 embarkedDf = pd.DataFrame() embarkedDf = pd.get_dummies( full['Embarked'] , prefix='Embarked' ) embarkedDf.head()

    因為已經使用登船港口(Embarked)進行了one-hot編碼產生了它的虛擬變量(dummy variables)
    所以這里把登船港口(Embarked)刪掉

    #添加one-hot編碼產生的虛擬變量(dummy variables)到泰坦尼克號數據集full full = pd.concat([full,embarkedDf],axis=1) full.drop('Embarked',axis=1,inplace=True) full.head()

    有直接類別-客艙等級(Pclass)

    客艙等級(Pclass):
    1=1等艙,2=2等艙,3=3等艙

    #存放提取后的特征 pclassDf = pd.DataFrame()#使用get_dummies進行one-hot編碼,列名前綴是Pclass pclassDf = pd.get_dummies( full['Pclass'] , prefix='Pclass' ) pclassDf.head()

    #添加one-hot編碼產生的虛擬變量(dummy variables)到泰坦尼克號數據集full full = pd.concat([full,pclassDf],axis=1) #刪掉客艙等級(Pclass)這一列 full.drop('Pclass',axis=1,inplace=True) full.head()

    字符串類型-乘客姓名(Name)
    注意到在乘客名字(Name)中,有一個非常顯著的特點:
    乘客頭銜每個名字當中都包含了具體的稱謂或者說是頭銜,將這部分信息提取出來后可以作為非常有用一個新變量,可以幫助我們進行預測。
    例如:
    Braund, Mr. Owen Harris
    Heikkinen, Miss. Laina
    Oliva y Ocana, Dona. Fermina
    Peter, Master. Michael J
    定義函數:從姓名中獲取頭銜 def getTitle(name):str1=name.split( ',' )[1] #Mr. Owen Harrisstr2=str1.split( '.' )[0]#Mr#strip() 方法用于移除字符串頭尾指定的字符(默認為空格)str3=str2.strip()return str3 #存放提取后的特征 titleDf = pd.DataFrame() #map函數:對Series每個數據應用自定義的函數計算 titleDf['Title'] = full['Name'].map(getTitle) titleDf.head()

    定義以下幾種頭銜類別:
    Officer政府官員
    Royalty王室(皇室)
    Mr已婚男士
    Mrs已婚婦女
    Miss年輕未婚女子
    Master有技能的人/教師

    #姓名中頭銜字符串與定義頭銜類別的映射關系 title_mapDict = {"Capt": "Officer","Col": "Officer","Major": "Officer","Jonkheer": "Royalty","Don": "Royalty","Sir" : "Royalty","Dr": "Officer","Rev": "Officer","the Countess":"Royalty","Dona": "Royalty","Mme": "Mrs","Mlle": "Miss","Ms": "Mrs","Mr" : "Mr","Mrs" : "Mrs","Miss" : "Miss","Master" : "Master","Lady" : "Royalty"}#map函數:對Series每個數據應用自定義的函數計算 titleDf['Title'] = titleDf['Title'].map(title_mapDict)#使用get_dummies進行one-hot編碼 titleDf = pd.get_dummies(titleDf['Title']) titleDf.head()

    #添加one-hot編碼產生的虛擬變量(dummy variables)到泰坦尼克號數據集full full = pd.concat([full,titleDf],axis=1) #刪掉姓名這一列 full.drop('Name',axis=1,inplace=True) full.head()

    字符串類型-客艙號(Cabin)

    python 使用 lambda 來創建匿名函數。
    所謂匿名,意即不再使用 def 語句這樣標準的形式定義一個函數,預防如下:
    lambda 參數1,參數2:函數體或者表達式
    客場號的類別值是首字母,例如:
    C85 類別映射為首字母C

    #存放客艙號信息 cabinDf = pd.DataFrame() full[ 'Cabin' ] = full[ 'Cabin' ].map( lambda c : c[0] ) ##使用get_dummies進行one-hot編碼,列名前綴是Cabin cabinDf = pd.get_dummies( full['Cabin'] , prefix = 'Cabin' ) cabinDf.head()

    #添加one-hot編碼產生的虛擬變量(dummy variables)到泰坦尼克號數據集full full = pd.concat([full,cabinDf],axis=1) #刪掉客艙號這一列 full.drop('Cabin',axis=1,inplace=True) full.head()

    建立家庭人數和家庭類別
    家庭人數=同代直系親屬數(Parch)+不同代直系親屬數(SibSp)+乘客自己
    (因為乘客自己也是家庭成員的一個,所以這里加1)
    家庭類別:
    小家庭Family_Single:家庭人數=1
    中等家庭Family_Small: 2<=家庭人數<=4
    大家庭Family_Large: 家庭人數>=5 #存放家庭信息 familyDf = pd.DataFrame() familyDf[ 'FamilySize' ] = full[ 'Parch' ] + full[ 'SibSp' ] + 1 #if 條件為真的時候返回if前面內容,否則返回0 familyDf[ 'Family_Single' ] = familyDf[ 'FamilySize' ].map( lambda s : 1 if s == 1 else 0 ) familyDf[ 'Family_Small' ] = familyDf[ 'FamilySize' ].map( lambda s : 1 if 2 <= s <= 4 else 0 ) familyDf[ 'Family_Large' ] = familyDf[ 'FamilySize' ].map( lambda s : 1 if 5 <= s else 0 ) familyDf.head()

    #添加one-hot編碼產生的虛擬變量(dummy variables)到泰坦尼克號數據集full full = pd.concat([full,familyDf],axis=1) full.head()

    到現在我們已經有了33個特征了

    3.3 特征選擇

    相關系數法:計算各個特征的相關系數

    #相關性矩陣 corrDf = full.corr() corrDf ''' 查看各個特征與生成情況(Survived)的相關系數, ascending=False表示按降序排列 ''' corrDf['Survived'].sort_values(ascending =False)

    根據各個特征與生成情況(Survived)的相關系數大小,我們選擇了這幾個特征作為模型的輸入:

    頭銜(前面所在的數據集titleDf)、客艙等級(pclassDf)、家庭大小(familyDf)、船票價格(Fare)、船艙號(cabinDf)、登船港口(embarkedDf)、性別(Sex)

    #特征選擇 full_X = pd.concat( [titleDf,#頭銜pclassDf,#客艙等級familyDf,#家庭大小full['Fare'],#船票價格cabinDf,#船艙號embarkedDf,#登船港口full['Sex']#性別] , axis=1 ) full_X.head()

    4.構建模型

    用訓練數據和某個機器學習算法得到機器學習模型,用測試數據評估模型

    4.1 建立訓練數據集和測試數據集
    1)坦尼克號測試數據集因為是我們最后要提交給Kaggle的,里面沒有生存情況的值,所以不能用于評估模型。
    我們將Kaggle泰坦尼克號項目給我們的測試數據,叫做預測數據集(記為pred,也就是預測英文單詞predict的縮寫)。
    也就是我們使用機器學習模型來對其生存情況就那些預測。
    2)我們使用Kaggle泰坦尼克號項目給的訓練數據集,做為我們的原始數據集(記為source),
    從這個原始數據集中拆分出訓練數據集(記為train:用于模型訓練)和測試數據集(記為test:用于模型評估)。
    sourceRow是我們在最開始合并數據前知道的,原始數據集有總共有891條數據
    從特征集合full_X中提取原始數據集提取前891行數據時,我們要減去1,因為行號是從0開始的。 #原始數據集:特征 source_X = full_X.loc[0:sourceRow-1,:] #原始數據集:標簽 source_y = full.loc[0:sourceRow-1,'Survived'] #預測數據集:特征 pred_X = full_X.loc[sourceRow:,:] ''' 確保這里原始數據集取的是前891行的數據,不然后面模型會有錯誤 ''' #原始數據集有多少行 print('原始數據集有多少行:',source_X.shape[0]) #預測數據集大小 print('原始數據集有多少行:',pred_X.shape[0])

    從原始數據集(source)中拆分出訓練數據集(用于模型訓練train),測試數據集(用于模型評估test)
    train_test_split是交叉驗證中常用的函數,功能是從樣本中隨機的按比例選取train data和test data
    train_data:所要劃分的樣本特征集
    train_target:所要劃分的樣本結果
    test_size:樣本占比,如果是整數的話就是樣本的數量 from sklearn.cross_validation import train_test_split #建立模型用的訓練數據集和測試數據集 train_X, test_X, train_y, test_y = train_test_split(source_X ,source_y,train_size=.8)#輸出數據集大小 print ('原始數據集特征:',source_X.shape, '訓練數據集特征:',train_X.shape ,'測試數據集特征:',test_X.shape)print ('原始數據集標簽:',source_y.shape, '訓練數據集標簽:',train_y.shape ,'測試數據集標簽:',test_y.shape)

    4.2 選擇機器學習算法
    #第1步:導入算法 from sklearn.linear_model import LogisticRegression #第2步:創建模型:邏輯回歸(logisic regression) model = LogisticRegression() #隨機森林Random Forests Model #from sklearn.ensemble import RandomForestClassifier #model = RandomForestClassifier(n_estimators=100) #支持向量機Support Vector Machines #from sklearn.svm import SVC, LinearSVC #model = SVC() #Gradient Boosting Classifier #from sklearn.ensemble import GradientBoostingClassifier #model = GradientBoostingClassifier() #K-nearest neighbors #from sklearn.neighbors import KNeighborsClassifier #model = KNeighborsClassifier(n_neighbors = 3) # Gaussian Naive Bayes #from sklearn.naive_bayes import GaussianNB #model = GaussianNB()
    4.3 訓練模型
    #第3步:訓練模型 model.fit( train_X , train_y )
    5.評估模型
    # 分類問題,score得到的是模型的正確率 model.score(test_X , test_y )

    6.方案實施(Deployment)

    6.1 得到預測結果上傳到Kaggle

    使用預測數據集到底預測結果,并保存到csv文件中,上傳到Kaggle中,就可以看到排名。

    #使用機器學習模型,對預測數據集中的生存情況進行預測 pred_Y = model.predict(pred_X)''' 生成的預測值是浮點數(0.0,1,0) 但是Kaggle要求提交的結果是整型(0,1) 所以要對數據類型進行轉換 ''' pred_Y=pred_Y.astype(int) #乘客id passenger_id = full.loc[sourceRow:,'PassengerId'] #數據框:乘客id,預測生存情況的值 predDf = pd.DataFrame( { 'PassengerId': passenger_id , 'Survived': pred_Y } ) predDf.shape predDf.head() #保存結果 predDf.to_csv( 'titanic_pred.csv' , index = False )

    ?

    ?

    ?

    轉載于:https://www.cnblogs.com/python-1807/p/10645170.html

    總結

    以上是生活随笔為你收集整理的数据分析-kaggle泰坦尼克号生存率分析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 秋霞午夜鲁丝一区二区 | 波多野结衣导航 | 中文字幕在线观看不卡 | 天天天天色 | 婷婷.com| 91精品国产综合久久久密臀九色 | 亚洲精品va | 九九九九九九精品 | 午夜国产在线观看 | 肉丝袜脚交视频一区二区 | 欧美一区二区三区久久成人精品 | 国产福利免费看 | 男女交性视频播放 | 天天操人人 | 经典一区二区 | 亚洲日本在线观看视频 | 国产熟妇搡bbbb搡bbbb | 亚洲精品1区2区3区 国产丝袜网站 | 黑人巨大精品欧美一区二区 | 国产香蕉尹人视频在线 | 91精品久久久久久综合五月天 | 日韩视频一区二区三区 | 边吃奶边添下面好爽 | 这里只有久久精品 | 国产一区二区高清视频 | 国产视频精品在线 | 日韩精品成人 | 国产精品久久久久久在线观看 | 自拍偷拍亚洲综合 | 国产成人在线一区二区 | 日韩欧美激情视频 | 久久国产一区二区 | 国产伦理在线 | 三级影片在线免费观看 | www黄色在线观看 | 对白超刺激精彩粗话av | 国产精品jizz | 视频三区在线 | 亚洲日本欧美 | 丝袜老师办公室里做好紧好爽 | 午夜精品极品粉嫩国产尤物 | 91精品久久久久久久久 | 日韩黄色网页 | 婷婷深爱网 | 女人下边被添全过视频 | 天堂va欧美ⅴa亚洲va一国产 | 性欧美又大又长又硬 | 2019年中文字幕 | 噜噜在线视频 | 丝袜诱惑一区 | 伊人99热 | 中日韩欧美在线观看 | 黄色免费在线网址 | 国产免费视屏 | av我不卡 | 国产女主播一区二区 | 黄色网址国产 | 日韩精品一区二区三区电影 | 精品3p| 91在线免费观看网站 | 国产第99页 | 国产一二精品 | 午夜剧场福利 | 中文成人无字幕乱码精品区 | 欧美一级片播放 | 日皮在线观看 | 美女脱了内裤喂我喝尿视频 | 午夜污污 | 啪啪免费视频网站 | 国产12页| 中文字幕9 | 伊人亚洲影院 | 性欧美ⅹxxxx极品护士 | 91精品国产综合久久久蜜臀九色 | 18+视频在线观看 | 亚洲美女一区二区三区 | 麻豆网站免费观看 | 看毛片的网站 | 不卡在线播放 | 久久精品二区 | 特a级黄色片 | 明星双性精跪趴灌满h | 天堂√ | 国产三级久久久 | 成人做爰视频www网站小优视频 | 中文字幕免费在线播放 | 打美女屁股网站 | 日本黄色片免费看 | 日韩视频精品一区 | 亚洲成人久久精品 | 好吊妞一区二区三区 | 操综合网 | 国产精品偷乱一区二区三区 | 国产精品久久久久蜜臀 | 精品一区二区三区免费毛片爱 | 在线观看91av | 4438x亚洲最大| 爱爱一区 | 欧美13p |