Python项目实战
Python项目实战 —— 00. 数据分析试题分享
大家可以关注知乎或微信公众号的share16,我们也会同步更新此文章。
写在前面的话
本文内容是在参加了’和鲸社区-数据分析闯关‘活动后,总结的一些答错的试题及相关知识点,以供大家参考。若有侵权,请及时联系!
一、概率论与统计学基础
涉及内容有二项分布、超几何分布等。
二、Python
涉及内容有完美数、水仙花数、回文素数、斐波那契数列、排队报数、分解质因数(含最大公约数/最小公倍数)、Series.str.函数、Series.dt.函数、分箱(cut/qcut)等。
三、数据分析思维
四、泰坦尼克号生存数据特征处理
Titanic数据集:点此下载
4.1 合并训练集与测试集
import pandas as pd
train = pd.read_csv('/xxxxxx/train.csv')
test = pd.read_csv('/xxxxxx/test.csv')
df = pd.concat([train,test])
df.head()
''' 此外,还有merge、join两种方法'''
4.2 缺失值处理
'''
Embarked : 用众数填充;
Fare : 用均值填充;
Cabin : 座位号,用'no-ticket'填充;
'''
df.Embarked = df.Embarked.fillna(df.Embarked.mode()[0])
df.Fare = df.Fare.fillna(df.Fare.mean())
df.Cabin = df.Cabin.fillna('no-ticket')
#df.loc[df.Cabin.isna(),'Cabin'] = 'no-ticket'
4.3 不同特征字段的数据处理
①票价分级处理(分箱-分类编码)
X = df[['PassengerId','Survived','Pclass','Embarked','Name','Cabin','Ticket','Sex','Fare','Age']]
dict_name = {"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"}
X['fare_'] = pd.factorize(pd.qcut(X.Fare,5))[0]
②名字处理-提取名字的称呼
X['name_'] = X.Name.str.split(',').str[1].str.split('.').str[0].str.strip().map(dict_name)
#X['name_'] = X.Name.apply(lambda x:x.split(',')[1].split('.')[0].strip()) # apply也可换成map
X['name_length'] = X.Name.agg(len)
③Cabin处理
# Cabin:no-ticket用0表示,其他用1表示
X['cabin_'] = X.Cabin.apply(lambda x:0 if x == 'no-ticket' else 1)
④Ticket处理(只保留其中字母,并对字母进行数字转换)
X['ticket_'] = X.Ticket.str.split().str[0]
X['ticket_'] = pd.factorize(X.ticket_.apply(lambda x:'U0' if x.isnumeric() else x))[0]
⑤对Embarked、Sex及Pclass等等,用dummy处理
X.drop(columns=['PassengerId','Name','Cabin','Ticket','Fare'],axis=1,inplace=True)
x = pd.get_dummies(X,columns=['Pclass','Embarked','Sex','fare_','cabin_','name_'])
4.4 利用随机森林预测Age缺失值
''' 预测的是Age,所以此处用的是回归 '''
from sklearn.ensemble import RandomForestRegressor
forest = RandomForestRegressor(n_estimators=1000,n_jobs=-1)
x_train = x[x.Age.notnull()]
x_test = x[x.Age.isnull()]
forest.fit(x_train.iloc[:,2:],x_train.iloc[:,1])
x_test.iloc[:,1] = forest.predict(x_test.iloc[:,2:]).round(1)
x_new = pd.concat([x_train,x_test])
4.5 各特征与Survived的相关系数排序
x_new.corr().Survived.abs().sort_values(ascending=False)
谢谢大家 🌹