您的位置:首页 > 其它

数据分析 Part 2 | Datawhale

2020-08-21 15:10 16 查看

一切尽在代码之中
我们拿到的数据通常是不干净的,
所谓的不干净,就是数据中有缺失值,有一些异常点等,
需要经过一定的处理才能继续做后面的分析或建模,
所以拿到数据的第一步是进行数据清洗

# 加载所需的库
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt

# 核心代码,设置显示的最大列、宽等参数,消掉打印不完全中间的省略号
pd.set_option('display.max_columns', 1000)
pd.set_option('display.width', 1000)
pd.set_option('display.max_colwidth', 1000)

# 加载数据集
df = pd.read_csv(r'D:\WIN10桌面文件\titanic\train.csv')
# df_3=df.head(3)
# print(df_3)

'''
我们拿到的数据通常是不干净的,
所谓的不干净,就是数据中有缺失值,有一些异常点等,
需要经过一定的处理才能继续做后面的分析或建模,
所以拿到数据的第一步是进行数据清洗
'''

# 缺失值的观察与处理
# 1、缺失值观察
# df.info()  # 方法一

# df_n=df.isnull().sum()  # 方法二
# print(df_n)

# 2 查看列的数据
# df_10=df[['Age','Cabin','Embarked']].head(10)
# print(df_10)

# 对缺失值进行处理
# df_chuli=df.dropna().head(10)
# print(df_chuli)

# df_chuli_2=df.fillna(0).head()
# print(df_chuli_2)

# df[df['Age']==None]=0
# print(df.head())

'''
思考:dropna和fillna有哪些参数,分别如何使用呢?
'''

# 请查看数据中的重复值
# df_check=df[df.duplicated()]
# print(df_check)

# 重复值进行处理
# df=df.drop_duplicates().head()
# print(df)
# 保存处理过的数据
# df.to_csv('test_clear.csv')

# 对年龄进行分箱(离散化)处理
# 将连续变量Age平均分箱成5个年龄段,并分别用类别变量12345表示
# df['AgeBand'] = pd.cut(df['Age'], 5, labels=['1', '2', '3', '4', '5'])
# print(df.head())
# df.to_csv('test_ave.csv')

# 将连续变量Age划分为[0,5) [5,15) [15,30) [30,50) [50,80)五个年龄段,并分别用类别变量12345表示
# df['AgeBand'] = pd.cut(df['Age'],[0,5,15,30,50,80],labels=['1','2','3','4','5'])
# print(df.head())
# df.to_csv('test_cut.csv')

# 将连续变量Age按10% 30% 50 70% 90%五个年龄段,并用分类变量12345表示
# df['AgeBand'] = pd.qcut(df['Age'],[0,0.1,0.3,0.5,0.7,0.9],labels=['1','2','3','4','5'])
# print(df.head())
# df.to_csv('test_pr.csv')

# 对文本变量进行转换
# 查看类别文本变量名及种类
# 方法一: value_counts
# print(df['Sex'].value_counts())

# print(df['Cabin'].value_counts())

# print( df['Embarked'].value_counts())

# 方法二: unique
# print(df['Sex'].nunique())

# print(df['Sex'].unique())

# 将类别文本转换为12345
# 方法一: replace
# df['Sex_num'] = df['Sex'].replace(['male','female'],[1,2])
# print(df.head())

# 方法二: map
# df['Sex_num']=df['Sex'].map({'male':1,'female':2})
# print(df.head())

# 方法三: 使用sklearn.preprocessing的LabelEncoder
from sklearn.preprocessing import LabelEncoder

# for feat in ['Cabin','Ticket']:
#     lbl = LabelEncoder()
#     label_dict = dict(zip(df[feat].unique(),range(df[feat].nunique())))
#     df[feat + "_labelEncode"] = df[feat].map(label_dict)
#     df[feat + "_labelEncode"] = lbl.fit_transform(df[feat].astype(str))
# print(df.head())

# 将类别文本转换为one-hot编码
# 方法一: OneHotEncoder
# for feat in ["Age", "Embarked"]:
#     # x = pd.get_dummies(df["Age"] // 6)
#     # x = pd.get_dummies(pd.cut(df['Age'],5))
#     x = pd.get_dummies(df[feat], prefix=feat)
#     df = pd.concat([df, x], axis=1)
# # df[feat] = pd.get_dummies(df[feat], prefix=feat)
# print(df.head())

# 从纯文本Name特征里提取出Titles的特征 (所谓的Titles就是Mr,Miss,Mrs等)
# df['Titile']= df.Name.str.extract('([A-Za-z]+)\.',expand=False)
# print(df.head())

# df = df['Fare'].groupby(df['Sex'])
# means = df.mean()
# print(means)
#
# survived_sex = df['Survived'].groupby(df['Sex']).sum()
# print(survived_sex.head())

text = pd.read_csv(r"D:\WIN10桌面文件\titanic\train.csv")
# 可视化展示泰坦尼克号数据集中男女中生存人数分布 情况(用柱状图试试)。
# sex = text.groupby('Sex')['Survived'].sum()
# sex.plot.bar()
# plt.title('survived_count')
# plt.show()

# text.groupby(['Sex','Survived'])['Survived'].count().unstack().plot(kind='bar',stacked='True')
# plt.title("survived_count")
# plt.ylabel('count')
# plt.show()

# 计算不同票价中生存与死亡人数 1表示生存,0表示死亡
fare_sur = text.groupby(['Fare'])['Survived'].value_counts().sort_values(ascending=False)
# print(fare_sur)

# 排序后绘折线图
# fig = plt.figure(figsize=(20,18))
# fare_sur.plot(grid = True)
# plt.legend()
# plt.show()

# pclass_sur = text.groupby(['Pclass'])['Survived'].value_counts()
import seaborn as sns
# sns.countplot(x='Pclass',hue='Survived',data=text)
# plt.show()

# facet = sns.FacetGrid(text,hue='Survived',aspect=3)
# facet.map(sns.kdeplot,'Age',shade=True)
# facet.set(xlim=(0,text['Age'].max()))
# facet.add_legend()
# plt.show()

text.Age[text.Pclass == 1].plot(kind='kde')
text.Age[text.Pclass == 2].plot(kind='kde')
text.Age[text.Pclass == 3].plot(kind='kde')
plt.xlabel("age")
plt.legend((1,2,3),loc="best")
plt.show()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐