今天終於把泰坦尼克這個救援資料的基本情況拎出來了,現在把**貼進來,方便後續使用,同時也有一些作為純純的小白的傻傻的注釋。老手們就繞道吧。
import pandas as pd
import numpy as np
tantic_data = pd.read_csv(r"c:\mafengwo/titanic_train.csv")
#對資料整體情況做乙個檢視,每個變數的缺失程度是怎麼樣的
tantic_data_all = tantic_data.isnull().count().sort_values(ascending =false)
tantic_data_miss =tantic_data.isnull().sum().sort_values(ascending=false)
tantic_miss_percent = (tantic_data_miss/tantic_data_all).sort_values(ascending =false)
tantic_miss_final = pd.concat([tantic_data_all,tantic_data_miss,tantic_miss_percent],axis=1,keys=["data_total","data_miss","miss_percent"],
sort=true).sort_values(ascending=false,by = 'miss_percent')
#這個可以放在檢視缺失資料的前面,檢視資料的整體分布情況,這裡describe只會統計數值型的變數,且只會統計數值中的非空個數
tantic_data.describe()
#一些基本的統計資訊檢視和分布情況
tantic_data['pclass'].value_counts(dropna=false)
#這個函式非常重要 ,和sql中的groupby是相同的作用,基本的統計,使用非常頻繁
all_counts=tantic_data.groupby(['pclass'])['survived'].count()
sur_counts=tantic_data.groupby(['pclass'])['survived'].sum()
sur_percent = sur_counts/all_counts
sur_percent_final = pd.concat([all_counts,sur_counts,sur_percent],axis=1,keys=['all_counts','sur_counts','sur_percent'])
sur_percent_final
#難道真的是艙位越高使用者獲救的可能性就越大嗎
#每個艙位的人獲救情況是怎麼樣的,注意在pyhon中乙個等號表示的是賦值,兩個等號表示的關係判斷。
#例如:tantic_data['pclass'] == 1 表示艙位是否為1等,是返回true,否就返回false
#tantic_data[tantic_data['pclass'] == 1] 這個操作表示的是索引操作,類似sql裡面的where條件裡面的等於,where pclass =1取出來的所有資料
#tantic_data[tantic_data['pclass'] == 1]
#這個函式非常重要 ,和sql中的groupby是相同的作用,基本的統計,使用非常頻繁(這種情況下)
age_all_counts=tantic_data.groupby(['pclass'])['fare'].count()
age_counts=tantic_data.groupby(['pclass'])['fare'].sum()
age_mean=tantic_data.groupby(['pclass'])['fare'].mean()
age_sur_percent = sur_counts/all_counts
age_sur_percent_final = pd.concat([age_all_counts,age_counts,age_sur_percent,age_mean],axis=1,keys=['all_counts','sur_counts','sur_percent','age_mean'])
age_sur_percent_final
fares_by_class ={}
for cla in pclass_list:
pclass_rows = tantic_data[tantic_data['pclass']== cla]#取出來滿足條件的所有資料列,這裡注意,一定是兩個等號
pclsaa_fares = pclass_rows['fare']#這裡是取出來資料中的對應的**列的所有資料,類似where條件
fare_for_class = pclsaa_fares.mean()#直接計算均值
fares_by_class[cla] =fare_for_class#這裡是乙個空字典建立資料的方式?
print(fares_by_class)
passenger_survival = tantic_data.pivot_table(index = 'embarked',values =['age','survived','fare'],
aggfunc=np.sum)#func是按照某種函式進行操作,如果不指定,則預設也是按照均值計算的,判斷是index與values的關係
passenger_survival
#如果想把缺失值全部丟掉 怎麼處理
drop_na_columns = tantic_data.dropna(axis=1)#表示的是任何一行中有空值的時候,都刪掉,最終結果就沒有任何空值了。
drop_na_age_columns = tantic_data.dropna(axis=0,subset=['age','***'])#只把指定列裡面有空值的刪掉了,而沒有選擇的行裡面還是會有缺失的
#對資料整體情況做乙個檢視,每個變數的缺失程度是怎麼樣的
drop_data_all = drop_na_age_columns.isnull().count().sort_values(ascending =false)
drop_data_miss =drop_na_age_columns.isnull().sum().sort_values(ascending=false)
drop_miss_percent = (drop_data_miss/drop_data_all).sort_values(ascending =false)
drop_miss_final = pd.concat([drop_data_all,drop_data_miss,drop_miss_percent],axis=1,keys=["data_total","data_miss","miss_percent"],
sort=true).sort_values(ascending=false,by = 'miss_percent')
drop_miss_final
tantic_data_new = tantic_data.sort_values('age',ascending=false)#預設排序的是公升序的,所以反向的話應該用ascending=false
tantic_data_new = tantic_data_new.reset_index(drop =true)#對於新排序的資料,因為索引是按照原來的的,所以如果想要按照新的,則是如**操作
tantic_data_new.head(10)
#計算每乙個屬性的缺失值個數,首先需要定義乙個函式,這個函式的意義是如果屬性有缺失就拿出來,並且計算個數
def not_null_count(column):
column_null = pd.isnull(column)#這裡是把需要計算空值的屬性取出來。
null = column[column_null]#pandas索引方式獲取資料,布林型只是取出來true的值
return len(null)
#自定義乙個函式,來進行資料的轉化
def which_class(row):#自定義函式中的資料
pclass = row['pclass']#根據需要把需要轉化的列的資料取出來
if pd.isnull(pclass):
return 'unknown'#這裡需要注意下,返回的是乙個結果,也就是說是返回的乙個字串,需要加雙引號,否則就是報錯的
elif pclass == 1:
return 'first'
elif pclass == 2:
return 'second'
elif pclass == 3:
return 'third'
#對連續型變數進行離散化,這個就是什麼叫做連續值離散化
#解決問題思路 首先肯定是通過定義函式的方式實現的,想要的結果是:
#如果空值或缺失就定義為缺失,如果12歲以下的,則定義為child,如果12到20為青年young;20到50為 adult,50及以上為old
def age_mark(df):
age = df['age']
if pd.isnull(age):
return "unknown"
elif age < 12:
return "child"
elif age>=12 and age<18:
return "young"
elif age>=18 and age<50:
return "adult"
elif age>=50:
return "old"
tantic_data.pivot_table(index='age_mark',values =['survived']) #這裡預設的是獲救的情況,就是求均
pandas 資料處理
pandas中資料可以分為series,dataframe,panel分別表示一維至三維資料。其中在構造時,index表示行名,columns表示列名 構造方式 s pd.series data index index s pd series np random randn 5 index a b ...
pandas資料處理
dataframe.duplicated subset none,keep first 判斷dataframe中的資料是否有重複 必須一行中所有資料都重複才算重複,只能判斷行,不能判斷列 返回series dataframe.drop duplicates subset none,keep firs...
Pandas資料處理
資料處理 pandas from sklearn.preprocessing import minmaxscaler data 1,2 0.5,6 0.10 1,18 將 numpy 轉換成 pd 表 pd.dataframe data 歸一化 0,1 之間 scaler minmaxscaler ...