python基础整理三(pandas,matplotlib)

通过指定url安装指定包

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scipy #引入scipy的目的是plot.kde()需要用

pandas[数据处理]

1. 准备

导入使用的包
import pandas as pd
# %matplotlib.pyplot as pit
%matplotlib inline
导入数据
titanic = pd.read_csv("train.csv")
#train.csv数据可以从一下地方获取
#https://gitee.com/sdau20171754/machelearning2/blob/master/train.csv

在这里插入图片描述
快速浏览数据

titanic.head(2) #显示几条数据
titanic.head()

在这里插入图片描述

标题名字中文意思
PassengerId旅客编号
Survived是否幸存
Pclass社会阶层(1.精英 2.中层 3.船员/劳苦大众)
Name姓名
Sex性别
Age年龄
SibSp兄弟姐妹配偶 个数
Parch父母儿女 个数
Ticket船票号
Fare船票价格
Cabin船舱
Embarked登船口

数据信息

titanic.info() #查看数据信息
titanic.describe() #所有数值类型的字段数据做个简单的统计

在这里插入图片描述
在这里插入图片描述
统计null的数据

在这里插入代码片
titanic.isnull()
titanic.isnull().sum()

在这里插入图片描述

2. 处理null值

# 可以填充整个dataFrame里的Null值为o
#titanic.fillna(0)

# 可以填充某列的null值
#titanic.Age.fillna(0)

# 求中位数
titanic.median()
#年龄的中位数

titanic.Age.median()
#填充年龄的中位数
#type(titanic.Age.fillna(titanic.Age.median())) # pandas.core.series.Series

#直接填充并不返回新的Series
titanic.Age.fillna(titanic.Age.median(), inplace=True)

填充完毕后查看

titanic.Age.isnull().sum()

在这里插入图片描述

3.尝试从性别开始分析生还者

做简单的汇总统计

# 做简单的汇总统计
titanic.Sex.value_counts()

在这里插入图片描述
生还者中男女的人数

#titanic[titanic.Survived==1].Sex
#生还者中男女的人数
titanic[titanic.Survived==1].Sex.value_counts()

在这里插入图片描述
未生还者中男女的人数

titanic[titanic.Survived==0].Sex.value_counts()

在这里插入图片描述
合成一个新的dataframe

survived = titanic[titanic.Survived==1].Sex.value_counts()
dead = titanic[titanic.Survived==0].Sex.value_counts()
df = pd.DataFrame([survived, dead])
df

在这里插入图片描述

df = pd.DataFrame([survived, dead],index=['survived','dead'])
df

在这里插入图片描述
画图

df.plot(kind='bar') #等价于df.plot.bar()

在这里插入图片描述
转置dataframe

#转置dataframe
df = df.T
df.plot.bar() # 等价于df.plot(kind='bar')

在这里插入图片描述
另外一种效果图

df.plot(kind='bar', stacked='True') 

在这里插入图片描述
显示百分比

df['p_survived'] = df.survived / df.survived.sum()
df['p_dead'] = df.dead /df.dead.sum()
df

在这里插入图片描述

df['p_survived'] = df.survived / (df.survived + df.dead)
df['p_dead'] = df.dead /(df.survived + df.dead)
df
df[['p_survived','p_dead']].plot(kind='bar', stacked='True') 

在这里插入图片描述
通过上图可以看出,性别对是否生还的影响还是挺大的

4.从年龄分析生还者

# 简单统计
# titanic.Age.value_counts()
survived = titanic[titanic.Survived==1].Age
dead = titanic[titanic.Survived==0].Age
df = pd.DataFrame([survived, dead],index=['survived','dead']).T
df.plot.hist(stacked='True')

在这里插入图片描述
直方图

# 直方图柱子多一点
df.plot.hist(stacked='True',bins=30)
# 中间很高的柱子是因为把null值都替换为中位数

在这里插入图片描述
密度图

#密度图
df.plot.kde()

在这里插入图片描述

# 查看年龄的分布,来决定横轴的取值范围
titanic.Age.describe()

在这里插入图片描述

df.plot.kde(xlim=(0,80))

在这里插入图片描述
区分成年人和未成年人以16岁为界

# 区分成年人和未成年人以16岁为界
age = 16
young = titanic[titanic.Age<=16]['Survived'].value_counts()
old = titanic[titanic.Age>16]['Survived'].value_counts()
df = pd.DataFrame([young, old],index=['young', 'old'])
df

在这里插入图片描述

df.columns=['dead', 'survived']
df

在这里插入图片描述

df.plot.bar(stacked=True)

在这里插入图片描述

df['p_survived'] = df.survived / (df.survived + df.dead)
df['p_dead'] = df.dead /(df.survived + df.dead)
df
df[['p_survived','p_dead']].plot(kind='bar', stacked='True') 

在这里插入图片描述

5.票价特征

#票价特征和年龄相似
# titanic.Fare
survived = titanic[titanic.Survived == 1].Fare
dead = titanic[titanic.Survived == 0].Fare
df = pd.DataFrame([survived, dead], index = ['survived','dead']).T
df.plot.kde()

在这里插入图片描述

#设定x轴的范围
titanic.Fare.describe()

在这里插入图片描述

df.plot.kde(xlim=(0,513))

在这里插入图片描述

6.组合特征 使用matplotlib[绘图]

# 同时查看年龄和票价对生还率的影响
import matplotlib.pyplot as plt
titanic[titanic.Survived == 0].Age
plt.scatter(titanic[titanic.Survived == 0].Age, titanic[titanic.Survived == 0].Fare)

在这里插入图片描述

# 不美观
age = titanic[titanic.Survived == 0].Age
fare = titanic[titanic.Survived == 0].Fare
plt.scatter(age, fare, s = 10)

在这里插入图片描述

# 查看函数用法
plt.scatter?
#继续设置x轴y轴显示
ax = plt.subplot()
age = titanic[titanic.Survived == 0].Age
fare = titanic[titanic.Survived == 0].Fare
plt.scatter(age, fare, s = 10)
ax.set_xlabel('age')
ax.set_ylabel('fare')

在这里插入图片描述

#继续设置alpha透明度,linewidths,edgecolors,c(颜色)
ax = plt.subplot()
age = titanic[titanic.Survived == 0].Age
fare = titanic[titanic.Survived == 0].Fare
plt.scatter(age, fare, s = 10, alpha = 0.5, linewidths=20, edgecolors='red', c='yellow')
ax.set_xlabel('age')
ax.set_ylabel('fare')

在这里插入图片描述
合成同一个图形

#合成同一个图形
ax = plt.subplot()
#未生还者
age = titanic[titanic.Survived == 0].Age
fare = titanic[titanic.Survived == 0].Fare
plt.scatter(age, fare, s = 10, alpha = 0.5)
#生还者
age = titanic[titanic.Survived == 1].Age
fare = titanic[titanic.Survived == 1].Fare
plt.scatter(age, fare, s = 10, alpha = 0.5, c='red')
ax.set_xlabel('age')
ax.set_ylabel('fare')

在这里插入图片描述

7.隐含特征

#titanic.Name.value_counts()
#titanic.Name.describe()

titanic['title'] = titanic.Name.apply(lambda name: name.split(',')[1].split('.')[0].strip())

s = "Andersson, Miss. Ebba Iris Alfrida"
print(s.split(','))
print(s.split(',')[1])
print(s.split(',')[1].split('.'))
print(s.split(',')[1].split('.')[0])
print(s.split(',')[1].split('.')[0].strip())
titanic.title.value_counts()
# 比如被称为Mr,而年龄是未知的,可以采用Mr称为的年龄平均值来填充并不是采用所有人的年龄平均值

在这里插入图片描述

8.寻找隐含数据

# 夜光图,简单用灯光图的亮度来模拟gdp,学会已有的特征寻找数据
titanic['family_size'] = titanic.SibSp + titanic.Parch + 1
titanic.family_size.value_counts()

在这里插入图片描述

def func(family_size):
    if family_size==1:
        return 'Singleton'
    if family_size<=4 and family_size>=2:
        return 'SmallFamily'
    if family_size>4:
        return 'LargeFamily'

titanic['family_type'] = titanic.family_size.apply(func)
    

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值