Python數據分析|泰坦尼克邏輯回歸

2021-01-07 Glennnnnn

Python數據分析學習筆記,今天分享下利用Python進行邏輯回歸,預測鐵達尼號乘客生存情況。

#導入2個Python常用數據分析的庫import numpy as npimport pandas as pd

#將數據源文件讀取#注意Windows環境下,需要用r轉義一下,不然讀取不進來train = pd.read_csv(r"C:\\Users\\Administrator\\Desktop\\train.csv")test = pd.read_csv(r"C:\\Users\\Administrator\\Desktop\\test.csv")print('訓練數據集:',train.shape,'測試數據集:',test.shape)

結果:表示訓練數據集為891行,12列;測試數據集為418行,11列,測試集少了一列Survived即我們後續需要通過邏輯回歸進行預測的。

#初步觀察數據情況#Pclass客艙等級#SibSp同代直系親屬數#Parch不同代直系親屬數#Cabin客艙號#Embarked登船港口#Fare船票價格full.head()

結果:用head函數可以默認查看前5行數據,便於我們初步掌握數據概況。

#描述性數據統計full.describe()

結果:用describe函數可以進行描述性數據統計,即我們常見的均值、標準差、中位數等。

#查看每一列數據類型和數據總數#Survived、Age、Fare、Cabin、Embarked有缺失full.info()

結果:用info函數可以查看各列的數據個數,便於我們快速定位那些列有缺失值。

#數據預處理,缺失值填充#數值型數據用均值或中位數填充,如Age#應用fillna函數,用於填充缺失值full['Age'] = full['Age'].fillna(full['Age'].mean())full['Fare'] = full['Fare'].fillna(full['Fare'].mean())

#分類型數據用最常見類別進行填充#先通過value_counts函數,查詢一下該列出現的各類型總數full['Embarked'].value_counts()

#看到量最多的是S,因此用它來填充確實項full['Embarked'] = full['Embarked'].fillna('S')

#因Cabin缺失較多,用新的『U』來表示(Unknow)full['Cabin'] = full['Cabin'].fillna('U')

#再次觀察一下數據,發現除Survived之外,都已經填充完成full.info()

#Sex為字符型欄位,需要轉換為數值型數據便於處理sex_mapDict = {'male':1,'female':0} #建立一個字典full['Sex'] = full['Sex'].map(sex_mapDict) #運用maple函數對Sex這一列進行重新編碼full.head()

#使用數據框的get-dummies( )對登船港口進行one-hot編碼embarkeddf = pd.DataFrame() #存放提取後的特徵embarkeddf = pd.get_dummies(full['Embarked'],prefix='Embarked') #使用get_dummies進行one-hot編碼,列名前綴是Embarkedembarkeddf.head(10)

結果:get_dummies函數的作用是將該列出現值的類型再重新劃分為子列,通過子列裡的布爾類型標識它的類型。

full = pd.concat([full,embarkeddf],axis=1) #添加one-hot編碼產生的虛擬變量(dummy variable)到full中full.head()

結果:通過concat函數將新增的列加到原數據表中。

full.drop('Embarked',axis=1,inplace=True) #將原Embarked列刪除full.head()

#對客艙等級Pclass進行同樣的one-hot編碼處理pclassdf = pd.DataFrame() #存放提取後的特徵pclassdf = pd.get_dummies(full['Pclass'],prefix='Pclass') #使用get_dummies進行one-hot編碼,列名前綴是Pclassfull = pd.concat([full,pclassdf],axis=1) #添加one-hot編碼產生的虛擬變量(dummy variable)到full中full.drop('Pclass',axis=1,inplace=True) #將原Pclass列刪除full.head()

#對姓名和頭銜做編碼處理#定義一個函數,從姓名中提取頭銜def gettitle(name): str1=name.split(',')[1] str2=str1.split('.')[0] str3=str2.strip() #strip用於移除字符串頭尾指定字符(默認為空格)return str3titleDf=pd.DataFrame() #存放提取後的特徵titleDf['title']=full['Name'].map(gettitle)titleDf.head()結果:

titleDf['title'].value_counts() #查詢頭銜的類別和數量結果:

#有些頭銜並不是常見頭銜,而且出現頻率比較低#這樣不利於機器學習,可將頭銜分為6類Officer,Royalty,Mrs,Miss,Mr,Master六種title_mapDict={ "Capt":"Officer", "Col":"Officer", "Major":"Officer", "Dr":"Officer", "Rev":"Officer", "Jonkheer":"Royalty", "Don":"Royalty", "Sir":"Royalty", "the Countess":"Royalty", "Dona":"Royalty", "Mme":"Mrs", "Mlle":"Miss", "Ms":"Mrs", "Mrs":"Mrs", "Mr":"Mr", "Miss":"Miss", "Master":"Master", "Lady":"Royalty"}titleDf['title']=titleDf['title'].map(title_mapDict)titleDf['title'].value_counts()結果:

titleDf = pd.get_dummies(titleDf['title']) titleDf.head()結果:

full = pd.concat([full,titleDf],axis=1) #添加one-hot編碼產生的虛擬變量(dummy variable)到full中full.head()結果:

#對船艙號Cabin進行同樣的one-hot編碼處理full['Cabin']=full['Cabin'].map(lambda c:c[0]) #取船艙號的首位做標識符cabindf = pd.DataFrame() #存放提取後的特徵cabindf = pd.get_dummies(full['Cabin'],prefix='Cabin') #使用get_dummies進行one-hot編碼,列名前綴是Cabinfull = pd.concat([full,cabindf],axis=1) #添加one-hot編碼產生的虛擬變量(dummy variable)到full中full.drop('Cabin',axis=1,inplace=True) #將原Cabin列刪除full.head()結果:

#家庭數據Parch、SibSp:對於家庭數據選擇計算家庭人數的方法提取特徵familydf=pd.DataFrame() #存放提取後的特徵familydf['family_size']=full['SibSp']+full['Parch']+1familydf['family_single']=familydf['family_size'].map(lambda a:1 if a==1 else 0)familydf['family_small']=familydf['family_size'].map(lambda a:1 if 2<=a<=4 else 0)familydf['family_large']=familydf['family_size'].map(lambda a:1 if 5<=a else 0)full = pd.concat([full,familydf],axis=1) #添加one-hot編碼產生的虛擬變量(dummy variable)到full中full.head()結果:

full.info()結果:

#查看相關性,使用corr生成相關係數矩陣corrDf = full.corr()corrDf結果:

#查看各個特徵與生存情況的相關性corrDf['Survived'].sort_values(ascending=False)結果:

#特徵選擇full_x=pd.concat([titleDf,pclassdf,familydf,full['Fare'],cabindf,embarkeddf,full['Sex']],axis=1)full_x.head()結果:

print(full_x.shape)結果:

#構建模型#原始數據集有891條數據sourceRow=891#原始數據集特徵source_x=full_x.loc[0:sourceRow-1,:]#原始數據集標籤source_y=full.loc[0:sourceRow-1,'Survived']#預測數據集特徵pre_x=full_x.loc[sourceRow:,:] #取sourceRow之後的數據source_x.head()結果:

#建立訓練數據和測試數據from sklearn.model_selection import train_test_splittrain_x,test_x,train_y,test_y=train_test_split(source_x,source_y,train_size=0.8)#數據集大小print('原始數據集特徵',source_x.shape, '訓練數據集特徵',train_x.shape, '測試數據集特徵',test_x.shape)print('原始數據集標籤',source_y.shape, '訓練數據集標籤',train_y.shape, '測試數據集標籤',test_y.shape)結果:

#導入機器算法from sklearn.linear_model import LogisticRegressionmodel=LogisticRegression() #創建邏輯回歸模型model.fit(train_x,train_y) #訓練模型#評估模型,查看正確率model.score(test_x,test_y)結果:可以看到這個正確率還是非常高的,可以用來後續的預測。

#通過機器學習模型,對預測數據生存情況進行預測pre_y=model.predict(pre_x)#將預測結果轉換為整數型pre_y=pre_y.astype(int)#乘客IDpassenger_ID=full.loc[sourceRow:,'PassengerId']#乘客名字passenger_Name=full.loc[sourceRow:,'Name']#數據框:乘客ID,預測結果preDf=pd.DataFrame({'PassengerId':passenger_ID,'Name':passenger_Name,'Survived':pre_y})preDf.head()結果:預測結果為乘客編號、乘客姓名與是否生存。

#將文件保存到本地preDf.to_csv('tintanic_prd.csv',index=False)

相關焦點

  • python數據分析--回歸函數及線性回歸分析
    2.工具數據分析有很多成熟的工具可以使用,如R、python、spss等。此處我們選用python進行分析。首先,我們需要安裝並導入python數據分析常用的庫。__version__)3.線性回歸分析Y= aX + b + e ,e表示殘差。
  • 大數據分析python自回歸模型
    那是因為我們在此類數據中遇到自相關。換句話說,通過了解當今產品的價格,我們經常可以對明天的產品價值做出大致的預測。因此,在大數據分析python自回歸模型中,我們將討論一個反映這種相關性的模型。–自回歸模型。
  • python數據分析專題 (7):python數據分析模塊
    python是一門優秀的程式語言,而是python成為數據分析軟體的是因為python強大的擴展模塊。
  • python金融風控評分卡模型和數據分析
    (原創課程,版權所有,項目合作QQ:231469242,微信公眾號:pythonEducation) 課程介紹python金融風控評分卡模型和數據分析微專業課包含《python信用評分卡建模(附代碼)》,《python風控建模實戰lendingClub》,《金融現金貸用戶數據分析和畫像》三套課程系列
  • python多重線性回歸分析
    python多重線性回歸分析多重線性回歸分析定義多重線性回歸模型:Mulitiple Linear Regression多元線性回歸模型:MultivariateLinear Regression數據準備#多重線性回歸#數據準備import pandas as pddf=pd.read_csv('e:/python/out/corr.csv',encoding='utf8')df根據預測目標,確定自變量和因變量#多重線性回歸
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    1-1課程導學 1-2 數據分析概述 2-1數據倉庫 2-2監視與抓取 2-3填寫,埋點,日誌,計算 2-4 數據學習網站 3-01數據案例介紹 3-02集中趨勢,離中趨勢 3-03數據分布-偏態與峰度 3-04抽樣理論 3-05編碼實現
  • 如何用邏輯回歸做數據分析?
    ,傳送門:如何用線性回歸做數據分析?接下來,我將用最簡單通俗的語言來為大家介紹邏輯回歸模型及其應用。邏輯回歸是解決二分類問題的監督學習算法,用來估計某個類別的概率。其直接預測值是表示0-1區間概率的數據,基於概率再劃定閾值進行分類,而求解概率的過程就是回歸的過程。
  • 量化交易之《Python數據分析》
    API,所以運算速度格外快3 與python標準的列表相比,Numpy數組使用的切片和索引方法更加高效。窗口函數(矩形窗、三角形窗、布萊克曼窗口bartlett window, 漢寧窗hanning window、巴特萊特窗)、協整(通過檢測兩個序列之間線性關係的殘差穩定性-ADF檢測)、自相關性、自回歸模型(ARMA模型)、生成周期信號(希爾伯特-黃變換)、傅立葉變換、譜分析、濾波(中值濾波器median filter 計算滾動窗口中數據的中值, wiener濾波器 通過統計數值來刪除噪音,detrend
  • 超適合Python小白的乾貨,Python數據分析50個實戰項目
    2.大話NBA | 用數據帶你回顧喬丹的職業生涯3.分析幾十萬條知乎數據,我挖掘出了這些秘密4.用(大)數據全方位解讀電視劇《大秦帝國之崛起》5.以虎嗅網4W+文章的文本挖掘為例,展現數據分析的一整套流程6.從大數據輿情傳播角度看《三生三世十裡桃花》7.北京二手房房價分析8.kaggle數據分析實踐項目練習
  • 【理論+案例實戰】Python數據分析之邏輯回歸(logistic regression)
    # 將prestige設為虛擬變量dummy_ranks = pd.get_dummies(df['prestige'], prefix='prestige')print (dummy_ranks.head())#   prestige_1  prestige_2  prestige_3  prestige_4#0           0
  • 小白數據分析——Python職位數據分析全鏈路
    所以我們在作分析前要關注數據質量,尤其數據量比較少的情況。本次分析的職位數有1w條左右,屬於比較小的數據量,所以在數據清洗這一步花了比較多的時間。因為薪資一定是跟某一類崗位相關的,人工智慧職位工資自然偏高;同樣地,工作經驗也是跟崗位類別相關,大數據剛起步的時候,職位的工作經驗自然就偏低。所以這倆維度從單維度上看沒有參考價值,一定是需要限定了某類職位後去看才有意義。我們在做統計分析時不要亂堆數據,要想清楚數據背後的邏輯,以及對決策人是否有價值。
  • Python大數據綜合應用 :零基礎入門機器學習、深度學習算法原理與案例
    尹老師,數據科學家,浙江大學物理學博士,浙江某高校數據科學專業負責人,兼任某網絡科技上市公司大數據總監,受聘擔任多家大數據教學機構主講教師,開發多套python高級編程、機器學習、網絡爬蟲與文本挖掘系列課程,10+年python軟體開發數據產品經驗,熟悉R \Javascript等多種程式語言,具有豐富的python統計建模、數據挖掘、大數據技術教學經驗
  • 機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用...
    尹老師,數據科學家,浙江大學物理學博士,浙江某高校數據科學專業負責人,兼任某網絡科技上市公司大數據總監,受聘擔任多家大數據教學機構主講教師,開發多套python高級編程、機器學習、網絡爬蟲與文本挖掘系列課程,10+年python軟體開發數據產品經驗,熟悉R Java等多種程式語言,具有豐富的python統計建模、數據挖掘、大數據技術教學經驗,先後為中國交通銀行,平安保險公司等數十家知名機構主講
  • Python數據分析|線性回歸
    Python數據分析學習筆記,今天分享下利用Python對業務進行數據預處理,並利用線性回歸進行數據預測。壹 數據導入Python下載及環境配置這裡就不贅述了哈,網上教程非常多,我們直接一開始就進入乾貨,打它一個開門見山。①導入Python常用數據分析庫:常用的numpy、pandas、matplotlib先導入。
  • python回歸分析總結--回歸模型及調優
    回歸分析及模型優化1、回歸分析概括目標值(因變量)是連續型數據,通過某種函數關係找到因變量和自變量之間的關係,進而預測目標。通過不斷擬合縮小預測值與真實值的差距:最終使得這個差距(誤差項)成為一組均值為0,方差為1的隨機數。
  • 邏輯(Logistic)回歸分析-補充
  • 邏輯回歸介紹與應用
    一、邏輯回歸簡介邏輯回歸又稱Logistic回歸分析,是一種廣義的線性回歸分析模型,常用於數據挖掘、疾病自動診斷、經濟預測等領域。邏輯回歸從本質來說屬於二分類問題。二分類問題是指預測的y值只有兩個取值(0或1)。
  • 用Python實現機器學習算法:邏輯回歸
    邏輯回歸
  • Python數據分析學習路線個人總結
    下面探討Python數據分析需要學習的知識範疇,結合自己的經歷和理解,總結的學習大綱,有些章節帶有解釋,有些沒有。當然,關於學習範疇,可能每個人的理解都不太一樣,以下僅供參考。數據分析屬於分析思維的一個子類,有專門的數據方法論。只有先養成正確的分析思維,才能使用好數據。
  • R數據分析:一般線性回歸的做法和解釋
    在R語言中我們可以非常方便地用基礎包中的lm方法做出線性回歸。參數的書寫也和數學方程一樣一樣的Y~X+X2,只不過將等號換成了~。我們用summary+回歸對象就可以得到回歸結果,如果要看模型的殘差直接$resid就可以。還是給大家寫一個活生生的例子吧:實例描述:我們有如圖的數據集,我想要用回歸分析做month, spend對sales的關係。