一起学数据分析_2

 写在前面:代码运行环境为jupyter,如果结果显示不出来的地方就加一个print()函数。

一、数据基本处理

缺失值处理:

import numpy as np
import pandas as pd

#加载数据train.csv
df = pd.read_csv('train_chinese.csv')
df.head()

# 查看数据基本信息(非空值数量、数据类型)
df.info()

# 查看每个数据是否为空值,每个特征中空值总数
df.isnull().sum()

# 年龄列填充缺失值为0,到一个副本
df.fillna({'年龄':0}).head(7)
df.loc[df['客舱'].isnull(), '客舱'] = 0
# 同理可以填充平均值,众数等……

df.isnull().sum()


# 整张表处理(缺失值处填0)
df = df.fillna(0)
df.head()

重复值(删除):

数据表里重复值其所有信息一样:(0行与1行重复)

nameagehobby
0xx20gg
1nn19f
2xx20gg
# 定义一个数据表
a = pd.DataFrame({'name':['xx','dd','ff','gg','xx'],'habits':[11,22,33,44,11]})
print(a)

# 查看是否有重复行(所有信息重复)
print(a.duplicated())

# 处理(删除陈重复行):
a.drop_duplicates()

 离散化处理(分箱):

# 将连续变量Age划分为[0,5) [5,15) [15,30) [30,50) [50,80)五个年龄段,并分别用类别变量12345表示
# 左闭右开:right=False
df['age_bins'] = pd.cut(df['年龄'], [0,15,25,35,45,80], right=False, labels = list('abcde'))

df.tail()

# 按百分比分段
df['age_binsPercent'] = pd.qcut(df['年龄'],[.1,.2,.3,.5,.7,.9],duplicates="drop",labels=list('12345'))
df.head()

 变换文本变量:

例如性别包括男和女,用0表示男,1表示女。

# 查看有哪些类型
df['性别'].unique()
df['客舱'].unique()
df['登船港口'].unique()


# 将男/女替换为0/1
# inplace默认为False,返回一个副本

df['性别'].replace({"male",'female'},{0,1}, inplace = True)
df.head()


# 按顺序替换为数字
from sklearn.preprocessing import LabelEncoder

df['客舱'] = LabelEncoder().fit_transform(df['客舱'])
df['登船港口'] = LabelEncoder().fit_transform(df['登船港口'])
df.head()

 

 one-hot编码:

# one-hot编码
for column in ['登船港口','性别']:
    # 函数
    x = pd.get_dummies(df[column],prefix=column)
    # 拼接在一起
    df = pd.concat([df,x],axis=1)
df.head()

 

 提取字符串里的某一部分:

这里用到正则表达式。里面的称呼特点是都有后缀(.)

df['title'] = df.姓名.str.extract('([A-Za-z]+)\.')
df

 

二、数据的横向与纵向合并

这里进行数据重构操作

横向合并:

hobby1hobby2
0gg11
1ff22
2gg33
nameage
0xx20
1nn19
2xx20
nameagehobby1hobby2
0xx20gg11
1nn19ff22
2xx20gg33
# 导入基本库
import numpy as np
import pandas as pd

# 载入data中的文件
left_up = pd.read_csv('data/train-left-up.csv')
left_down = pd.read_csv('data/train-left-down.csv')

right_up = pd.read_csv('data/train-right-up.csv')
right_down = pd.read_csv('data/train-right-down.csv')

#将两个数据横向合并
result_up = pd.concat([left_up, right_up], axis = 1)
result_down = pd.concat([left_down , right_down], axis = 1)

result_up.head()

# 横向合并
up = left_up.join(right_up)
down = left_down.join(right_down)

up.head()

纵向合并:

nameage
0xx20
nameage
1nn19
2xx20
nameage
0xx20
1nn19
2xx20
# 两个数据up和down
up = left_up.join(right_up)
down = left_down.join(right_down)

# 纵向合并
result1 = up.append(down)
result1.head()
# 横向连接
up2 = pd.merge(left_up,right_up, left_index=True, right_index=True)
up2.head()

down2 = pd.merge(left_down,right_down, left_index=True, right_index=True)
down2.head()

# 纵向合并
result2 = up.append(down)
result2.head()
result2.shape

result2.to_csv('result.csv')

 将DataFrame数据变为Series类型的数据:

data = pd.read_csv('result.csv')
data.head()

# 转换
data.stack()

三、数据重构

groupby函数:

# 载入data文件中的:result.csv
text = pd.read_csv('result.csv')
text.head()

# 查看性别中的0是什么:(所以女性的数据)
list(text.groupby('Sex'))[0]

# 找到不同性别的数据
group = text.groupby('Sex')
# 计算这些特征数据的统计描述
print(group.describe())

# 只想得到关于年龄的信息(加一个Age索引)
print(text.groupby('Sex')['Age'].describe())
# 只得到平均值
print(text.groupby('Sex')['Age'].mean())

# 计算泰坦尼克号男性与女性的平均票价
# 修改索引为票价
print(text.groupby('Sex')['Fare'].mean())
# method__2
df  = text['Fare'].groupby(text['Sex'])
means = df.mean()
means

# 统计泰坦尼克号中男女的存活人数
survived_sex = text.groupby('Sex')['Survived'].sum()

survived_sex = text['Survived'].groupby(text['Sex']).sum()
survived_sex.head()

# 计算客舱不同等级的存活人数
survived_pclass = text.groupby('Pclass')['Survived'].sum()

survived_pclass = text['Survived'].groupby(text['Pclass'])
survived_pclass.sum()

 agg函数:

# agg里面可以使用多个方法
survived_pclass = text.groupby('Pclass')['Survived'].sum()
survived_pclass = text.groupby('Pclass').agg({'Survived':'sum'})

# 性别中对费用求平均,对存活求和
text.groupby('Sex').agg({'Fare': 'mean', 'Survived': 'count'})

# 重命名方便阅读,显示为‘mean_fare’
text.groupby('Sex').agg({'Fare': 'mean', 'Pclass': 'count'}).rename(columns=
                            {'Fare': 'mean_fare', 'Pclass': 'count_pclass'})
# 统计在不同等级的票中的不同年龄的船票花费的平均值
# 再加一个Pclass
text.groupby(['Pclass','Age'])['Fare'].mean().head()
# 将任务二和任务三的数据合并,并保存到sex_fare_survived.csv
# 使用index查看列索引,相同则可以合并
# 我在上面没有赋值,使用这个元素不存在
means.index
survived_sex.index
# 确定类型,使用merge不能是series
type(means)

# 变为dataframe
means.to_frame()

# 保存起来使用merge
result = pd.merge(means,survived_sex,on='Sex')
result

result.to_csv('sex_fare_survived.csv')
# 得出不同年龄的总的存活人数,然后找出存活人数最多的年龄段,最后计算存活人数最高的存活率(存活人数/总人数

#不同年龄的存活人数
text.groupby(['Age'])['Survived'].sum()

survived_age = text['Survived'].groupby(text['Age']).sum()
survived_age.head()

#找出最大值的年龄段
survived_age[survived_age.values==survived_age.max()]

#首先计算总人数
_sum = text['Survived'].sum()

print("sum of person:"+str(_sum))

precetn =survived_age.max()/_sum

print("最大存活率:"+str(precetn))

 四、数据可视化

import numpy as np
import pandas as pd
# 画图用
import matplotlib.pyplot as plt

text = pd.read_csv(r'result.csv')
text.head()

# 男女中生存人数分布情况
sex = text.groupby('Sex')['Survived'].sum()
# 柱状图bar
sex.plot.bar()
# 标题
plt.title('survived_count')
plt.show()

 

# 男女中生存人与死亡人数的比例图


# unstack:旋转数据,转置
s = text.groupby(['Sex','Survived'])['Survived'].count().unstack()
# 绘制男女死亡人数柱状图
died = s[0]
died.plot.bar()
plt.title('died')

 

s.plot.bar()

# 提示:计算男女中死亡人数 1表示生存,0表示死亡
# 柱子叠起来,参数:stacked='True'
text.groupby(['Sex','Survived'])['Survived'].count().unstack().plot(kind='bar',stacked='True')
plt.title('survived_count')
plt.ylabel('count')

# 查看不同票价的生存死亡人数
c = text.groupby(['Fare','Survived'])['Survived'].count().unstack()
c
c.plot()

# 1表示生存,0表示死亡
# 不同仓位等级的人生存和死亡人员的分布情况
pclass_sur = text.groupby(['Pclass'])['Survived'].value_counts()
pclass_sur

import seaborn as sns
sns.countplot(x="Pclass", hue="Survived", data=text)

# 不同年龄的人生存与死亡人数分布情况
# 0表示死亡人数,1生存。不同年龄的死亡人数
# 画频率直方图。分区间:bins; alpha :颜色透明度
#  density密度
text.Age[text.Survived == 0].hist(bins=5, alpha = .5, density=1)
text.Age[text.Survived == 1].hist(bins=5,alpha = .5, density=1)

# 密度曲线
text.Age[text.Survived == 0].plot.density()
text.Age[text.Survived == 1].plot.density()

# 图例
plt.legend((0,1))
plt.xlabel('age')
# plt.ylabel('count')
plt.ylabel('density')

 

# 参考代码
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()

# 不同仓位等级的人年龄分布情况
# 查看种类
unique_placss = text.Pclass.unique()

print(unique_placss)

for i in unique_placss:
    # 密度曲线
    text.Age[text.Pclass == i].plot.density()
# 图例
plt.legend(unique_placss)
plt.xlabel('age')
# plt.ylabel('count')
plt.ylabel('density')

 

import  seaborn as sns
for i in unique_placss:
    # 密度曲线
    sns.kdeplot(text.Age[text.Pclass == i])


# 不同仓位等级的人年龄分布情况
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")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/463834.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue3-响应式基础:单文件和组合式文件

单文件&#xff1a;html <!DOCTYPE html> <html> <head><title>响应式基础</title> </head> <body><div id"app" ><!-- dynamic parameter:同样在指令参数上也可以使用一个 JavaScript 表达式&#xff0c;需要包…

简易版 RPC 框架实现 1.0 -http实现

RPC 是“远程过程调用&#xff08;Remote Procedure Call&#xff09;”的缩写形式&#xff0c;比较通俗的解释是&#xff1a;像本地方法调用一样调用远程的服务。虽然 RPC 的定义非常简单&#xff0c;但是相对完整的、通用的 RPC 框架涉及很多方面的内容&#xff0c;例如注册发…

离散时间傅里叶变换和离散傅里叶变换

离散时间傅里叶变换和离散傅里叶变换 { X ( k ) DFT [ x ( n ) ] ∑ n 0 N − 1 x ( n ) W N n k k 0 , 1 , . . . , N − 1 x ( n ) IDFT [ X ( k ) ] 1 N ∑ n 0 N − 1 x ( n ) W N − n k n 0 , 1 , . . . , N − 1 \begin{cases} X(k)\textbf{DFT}[x(n)]\sum\limi…

解决:IDEA编译Java程序时报编译失败

1、问题展示&#xff1a; 2、解决方法&#xff1a;

Magical Combat VFX

这个包包含30个可供游戏使用的VFX,有各种口味,为您的游戏增添趣味! 所有VFX都经过了很好的优化,可以在所有平台上使用。 这个包特别有一堆闪电魔法,有两种主要的变体,一种是深色的,另一种是浅色的。但它也提供了一系列其他视觉效果,如神圣咒语、音乐主题等等! 我们提供…

【CSP】2021-09-2 非零段划分 索引+递推/差分+前缀和

2021-09-2 非零段划分 索引递推/差分前缀和 2021-09-2 非零段划分 索引递推/差分前缀和索引递推思路差分前缀和思路遇到的问题索引递推完整代码差分前缀和完整代码 2021-09-2 非零段划分 索引递推/差分前缀和 一开始写的时候没有发现直接从a数组求q的规律&#xff0c;怎么也想…

NCV8705MTADJTCG稳压器芯片中文资料规格书PDF数据手册引脚图图片价格功能

产品概述&#xff1a; NCV8705 是一款低噪音、低功耗和低泄漏线性电压稳压器。该器件具有卓越的噪音和 PSRR 规格&#xff0c;适用于使用视频接收器、成像传感器、音频处理器或需要外部洁净电源的任何部件的产品。NCV8705 使用创新的自适应接地电流电路 可确保轻负载调节下的超…

基于DFA敏感词查询的算法简析

基于DFA敏感词查询的算法简析 1.背景 项目中需要对敏感词做一个过滤&#xff0c;首先有几个方案可以选择&#xff1a; a.直接将敏感词组织成String后&#xff0c;利用indexOf方法来查询。 b.传统的敏感词入库后SQL查询。 c.利用Lucene建立分词索引来查询。 d.利用DFA算法…

3.python安装Selenium框架

1. 命令安装 pip install selenium下载慢,可以换源: pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/查看是否换源成功 pip config get global.index-url安装好后,查看版本信息: pip show selenium2.下载对应的浏览器驱动 https://registry.npmm…

【Elasticsearch】windows安装elasticsearch教程及遇到的坑

一、安装参考 1、安装参考&#xff1a;ES的安装使用(windows版) elasticsearch的下载地址&#xff1a;https://www.elastic.co/cn/downloads/elasticsearch ik分词器的下载地址&#xff1a;https://github.com/medcl/elasticsearch-analysis-ik/releases kibana可视化工具下载…

Vue2 引入使用ElementUI详解

目录 1 安装2 引入2.1 全局引入2.1.1 引入2.1.2 使用 2.2 按需引入2.2.1 引入2.2.2 使用 3 总结 1 安装 推荐使用 npm 的方式安装&#xff0c;它能更好地和 webpack打包工具配合使用。&#xff08;本项目使用安装方式&#xff09; npm i element-ui -S也可以使用其他的包管理…

Notepad++从文件夹查找文本内容

目录 一、背景二、Notepad搜索2.1 测试用例2.2 操作说明 一、背景 在日常的办公、学习或编程中&#xff0c;我们时长会遇到需要在大量文件中搜索特定文本内容的情况&#xff1a; 无论是快速定位某个项目中的代码片段&#xff1b;还是检索文档资料库中的相关信息等。 掌握如何…

蓝桥杯:模拟、枚举

目录 引言一、修剪灌木二、特殊年份三、刷题统计 引言 本篇文章主要介绍蓝桥杯的模拟和枚举的题目&#xff0c;这种题在 B B B 组还是比较简单的&#xff0c;后续也会一直往里加新的真题&#xff0c;加油&#xff01; 一、修剪灌木 标签&#xff1a;第十三届蓝桥杯省赛C B组…

音乐创作利器FL Studio21水果软件助你轻松实现音乐创意

音乐创作利器——FL Studio21水果软件&#xff0c;让你的音乐梦想起航&#xff01; 副标题&#xff1a;一款强大的电脑数码编曲软件&#xff0c;助你轻松实现音乐创意&#xff01; 一、FL Studio21水果软件——音乐制作的得力助手** 在音乐创作的道路上&#xff0c;有一款得心…

uniapp样式穿透修改uview的按钮button图标

需求&#xff1a; 想给按钮icon和text改字体颜色&#xff0c;结果发现图标颜色并没有改变 .u-button{width: 300rpx;background-color: aliceblue;color: #aaaa7f;margin-top: 20rpx; }接下来用样式穿透解决 1、首先&#xff0c;给UI组件包裹一层view <view class"t…

Javaweb学习记录(一)Maven

Maven是一款Java项目管理工具&#xff0c;下面将介绍Maven的实际作用和相关的操作 Maven项目依赖的添加 在Maven项目中添加依赖&#xff0c;通过dependencies标签添加所有依赖&#xff0c;所有依赖都添加在里面&#xff0c;而单个依赖就使用dependency标签添加进项目&#xf…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑抽水蓄能电站参与容量交易辅助服务的双层优化策略》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

IntelliJ IDEA 2023.3.4创建JavaWeb应用和集成Tomcat服务器

1. 创建项目 如下图所示&#xff0c;只需要给项目起一个项目名称&#xff0c;然后点击Create即可&#xff1a; 2. Project Structure 设置 创建完成后如下图 3. 集成Tomcat服务器 4. 实现Servlet接口 当我们实现Servlet接口时&#xff0c;发现没有Servlet相关的依赖时&am…

碳素光线疗法与中医

看得见的穴位碳素光线疗法 最近日本的医疗随着科学技术的发达&#xff0c;在基础研究、临床各领域取得了显著的发展。日本人的平均寿命比战前大幅延长&#xff0c;结核及其他疑难杂症、癌症等疾病也在逐渐被压制。其中&#xff0c;作为癌症的辅助疗法&#xff0c;日本癌症学会等…

布隆过滤器原理介绍和典型应用案例

整理自己过去使用布隆过滤器的应用案例和理解 基本介绍 1970年由布隆提出的一种空间效率很高的概率型数据结构&#xff0c;它可以用于检索一个元素是否在一个集合中&#xff0c;由只存0或1的位数组和多个hash算法, 进行判断数据 【一定不存在或者可能存在的算法】 如果这些…