【Pandas】18 小练习

news2024/9/27 15:17:21

#【Pandas】18 小练习
2023.1.16 两个pandas小练习

18.1 疫情数据分析

18.1.1 观察数据

import pandas as pd
import os

df = pd.read_csv("data/covid19_day_wise.csv")
df
DateConfirmedDeathsRecoveredActiveNew casesNew deathsNew recoveredDeaths / 100 CasesRecovered / 100 CasesDeaths / 100 RecoveredNo. of countries
02020-01-2255517285100003.065.0560.716
12020-01-23654183060699122.754.5960.008
22020-01-249412636879287862.763.8372.229
32020-01-251434423913534931632.932.72107.6911
42020-01-2621185652201068414132.642.46107.6913
.......................................
1832020-07-23155104816335068710969616600628275699661697144.0856.167.27187
1842020-07-24157916456396508939705621229028116461442287364.0556.617.16187
1852020-07-25160471906445179158743624393025554548672190384.0257.077.04187
1862020-07-26162517966486219293464630971120460641041347213.9957.186.98187
1872020-07-27164804856540369468087635836222869354151746233.9757.456.91187

188 rows × 12 columns

*我的输入错误:readcsv

  • 观察一下head
df.head()
DateConfirmedDeathsRecoveredActiveNew casesNew deathsNew recoveredDeaths / 100 CasesRecovered / 100 CasesDeaths / 100 RecoveredNo. of countries
02020-01-2255517285100003.065.0560.716
12020-01-23654183060699122.754.5960.008
22020-01-249412636879287862.763.8372.229
32020-01-251434423913534931632.932.72107.6911
42020-01-2621185652201068414132.642.46107.6913

18.1.2 完成以下数据处理

  • 获取 2020 年 2 月 3 日的所有数据
  • 2020 年 1 月 24 日之前的累积确诊病例有多少个?
  • 2020 年 7 月 23 日的新增死亡数是多少?
  • 从 1 月 25 日到 7 月 22 日,一共增长了多少确诊病例?
  • 每天新增确诊数和新恢复数的比例?平均比例,标准差各是多少?
  • 画图展示新增确诊的变化曲线
  • 画图展示死亡率的变化曲线

练习读取数据

  1. 获取 2020 年 2 月 3 日的所有数据
df[df["Date"]=="2020-02-03"]
DateConfirmedDeathsRecoveredActiveNew casesNew deathsNew recoveredDeaths / 100 CasesRecovered / 100 CasesDeaths / 100 RecoveredNo. of countries
122020-02-0319887426604188573100641452.143.0470.5325

*注意就是日期格式 0203

  1. 2020 年 1 月 24 日之前的累积确诊病例有多少个?

我们发现有个Confirmed 通过数字发现应该是之前确诊的

# 方法1
df[df["Date"]=="2020-01-24"]["Confirmed"]
2    941
Name: Confirmed, dtype: int64
# 方法2
df.loc[df["Date"]=="2020-01-24","Confirmed"]
2    941
Name: Confirmed, dtype: int64

*注意和python区别 ,如果用索引查找 要用loc

  1. 2020 年 7 月 23 日的新增死亡数是多少?
    也是读取 NewCaes
df.loc[df["Date"]=="2020-07-23","New deaths"]
183    9966
Name: New deaths, dtype: int64

时间序列练习
4. 从 1 月 25 日到 7 月 22 日,一共增长了多少确诊病例?

我们观察这个New cases是每天的,不是累计,所以要求和

创建成时间序列 就可以计算了 data_range

#创建时间序列
date = pd.to_datetime(df["Date"])

date_range = (date >= "2020-01-25") & (date <= "2020-07-22")
date_range
0      False
1      False
2      False
3       True
4       True
       ...  
183    False
184    False
185    False
186    False
187    False
Name: Date, Length: 188, dtype: bool
new_cases = df.loc[date_range,"New cases" ]
overall = new_cases.sum()
print("共新增:", overall)

共新增: 15247802

我们发现用确诊的相减 和新增加总和是不一致的 分析可能有人重阳了

我们每次提取都是有索引的,所以有时候需要加value

confirmed = df.loc[:, "Confirmed"]
conf_0722 = confirmed.loc[df["Date"] == "2020-07-22"].values
conf_0125 = confirmed.loc[df["Date"] == "2020-01-25"].values
print("格式时代索引的:",confirmed.loc[df["Date"] == "2020-07-22"])

overall2 = conf_0722 - conf_0125
print("共新增:", overall2)
格式时代索引的: 182    15227725
Name: Confirmed, dtype: int64
共新增: [15226291]

一些计算
5. 每天新增确诊数和新恢复数的比例?平均比例,标准差各是多少?

per= df["New cases"]/df["New recovered"]
per
0             NaN
1       49.500000
2       47.833333
3      164.333333
4       52.615385
          ...    
183      1.666074
184      1.229207
185      1.166670
186      1.518739
187      1.309638
Length: 188, dtype: float64

一些值有问题NaN

# 有些值是有问题的
per.isna()
0       True
1      False
2      False
3      False
4      False
       ...  
183    False
184    False
185    False
186    False
187    False
Length: 188, dtype: bool
not_zero_per=per[~per.isna()]

ratio_mean = not_zero_per.mean()
ratio_std = not_zero_per.std()
print("平均比例:", ratio_mean, ";标准差:", ratio_std)
平均比例: 7.049556348053247 ;标准差: 19.145284932105497

联系画图

  1. 画图展示新增确诊的变化曲线
df["New cases"].plot()
<AxesSubplot:>

在这里插入图片描述

  1. 画图展示死亡率的变化曲线
df["Deaths / 100 Cases"].plot()
<AxesSubplot:>

在这里插入图片描述

18.2 机器学习数据预处理

  • 数据导入
  • 异常值处理
  • 训练集和测试集数据准备

18.2.1 数据导入

import pandas as pd

data=data1 = pd.read_csv("data/iris.csv",names= ["sepal length", "sepal width", "petal length", "petal width", "class"])
data
sepal lengthsepal widthpetal lengthpetal widthclass
05.13.51.40.2Iris-setosa
14.93.01.40.2Iris-setosa
24.73.21.30.2Iris-setosa
34.63.11.50.2Iris-setosa
45.03.61.40.2Iris-setosa
..................
1456.73.05.22.3Iris-virginica
1466.32.55.01.9Iris-virginica
1476.53.05.22.0Iris-virginica
1486.23.45.42.3Iris-virginica
1495.93.05.11.8Iris-virginica

150 rows × 5 columns

18.2.2 异常值处理

【NaN】

data.isna()
sepal lengthsepal widthpetal lengthpetal widthclass
0FalseFalseFalseFalseFalse
1FalseFalseFalseFalseFalse
2FalseFalseFalseFalseFalse
3FalseFalseFalseFalseFalse
4FalseFalseFalseFalseFalse
..................
145FalseFalseFalseFalseFalse
146FalseFalseFalseFalseFalse
147FalseFalseFalseFalseFalse
148FalseFalseFalseFalseFalse
149FalseFalseFalseFalseFalse

150 rows × 5 columns

这种看不出来,用df.isna().any()查看这一批数据中是否存在空值

  • df.isna().any() 只要有一个就是’True’
data.isna().any()
sepal length    False
sepal width     False
petal length    False
petal width      True
class           False
dtype: bool
data.loc[pd.isna(data["petal width"])]
sepal lengthsepal widthpetal lengthpetal widthclass
255.03.01.6NaNIris-setosa

上面找到了Nan值

  1. 对它进行处理:删掉或者平均

【删掉】

  • .dropna(axis=0, how="any"):
  • any有一个就删除和all全是删除
  • axis=0:行方向上变化
data = data.dropna(axis=0, how="any")
data.isna().any()
sepal length    False
sepal width     False
petal length    False
petal width     False
class           False
dtype: bool

【填充】平均值 填充

  • 算平均值
  • 把平均值插入到新列中
  • 新列赋值到原数据表
data1.isna().any()
sepal length    False
sepal width     False
petal length    False
petal width      True
class           False
dtype: bool
pepal_width_mean=data1["petal width"].mean()
print(pepal_width_mean)
new_col = data1["petal width"].fillna(pepal_width_mean)
print(new_col)
data1["petal width"]=new_col
data1.isna().any()
1.3946308724832226
0      0.2
1      0.2
2      0.2
3      0.2
4      0.2
      ... 
145    2.3
146    1.9
147    2.0
148    2.3
149    1.8
Name: petal width, Length: 150, dtype: float64





sepal length    False
sepal width     False
petal length    False
petal width     False
class           False
dtype: bool
  1. 看值的合理性
    不合理的一般去掉 或者 做一些处理
data.plot()
<AxesSubplot:>

在这里插入图片描述

data["sepal length"].plot()
<AxesSubplot:>

在这里插入图片描述

  • 我们发现 这个值小于0是违反常理的 我们可以去掉.drop()
index=data[data["sepal length"]<0].index
index
data_drop=data.drop(index)
data_drop["sepal length"].plot()
<AxesSubplot:>

在这里插入图片描述

或者上一章知识 设定个阈值范围data["sepal length"].clip(lower=0, upper=8)

18.2.3 训练集和测试集

我们假设0.8作为训练集

  • 取长度
n = len(data)
150
  • 切片:如果我们如果直接切片tain = data.iloc[:n*0.8]会报错,因为格式不是整数m
tain_n= int(n*0.8)
tain = data.iloc[:tain_n]
test = data.iloc[tain_n:]
test
sepal lengthsepal widthpetal lengthpetal widthclass
1206.93.25.72.3Iris-virginica
1215.62.84.92.0Iris-virginica
1227.72.86.72.0Iris-virginica
1236.32.74.91.8Iris-virginica
1246.73.35.72.1Iris-virginica
1257.23.26.01.8Iris-virginica
1266.22.84.81.8Iris-virginica
1276.13.04.91.8Iris-virginica
1286.42.85.62.1Iris-virginica
1297.23.05.81.6Iris-virginica
1307.42.86.11.9Iris-virginica
1317.93.86.42.0Iris-virginica
1326.42.85.62.2Iris-virginica
1336.32.85.11.5Iris-virginica
1346.12.65.61.4Iris-virginica
1357.73.06.12.3Iris-virginica
1366.33.45.62.4Iris-virginica
1376.43.15.51.8Iris-virginica
1386.03.04.81.8Iris-virginica
1396.93.15.42.1Iris-virginica
1406.73.15.62.4Iris-virginica
1416.93.15.12.3Iris-virginica
1425.82.75.11.9Iris-virginica
1436.83.25.92.3Iris-virginica
1446.73.35.72.5Iris-virginica
1456.73.05.22.3Iris-virginica
1466.32.55.01.9Iris-virginica
1476.53.05.22.0Iris-virginica
1486.23.45.42.3Iris-virginica
1495.93.05.11.8Iris-virginica
  • 这里面**class都相同,我们想打乱顺序。:.sample() **
data3 = data.sample(frac=1)
tain = data3.iloc[:tain_n]
test = data3.iloc[tain_n:]
test
sepal lengthsepal widthpetal lengthpetal widthclass
815.52.43.71.0Iris-versicolor
185.73.81.70.3Iris-setosa
75.03.41.50.2Iris-setosa
1246.73.35.72.1Iris-virginica
1097.23.66.12.5Iris-virginica
1057.63.06.62.1Iris-virginica
1326.42.85.62.2Iris-virginica
1206.93.25.72.3Iris-virginica
626.02.24.01.0Iris-versicolor
155.74.41.50.4Iris-setosa
935.02.33.31.0Iris-versicolor
195.13.81.50.3Iris-setosa
805.52.43.81.1Iris-versicolor
474.63.21.40.2Iris-setosa
526.93.14.91.5Iris-versicolor
705.93.24.81.8Iris-versicolor
344.93.11.50.1Iris-setosa
905.52.64.41.2Iris-versicolor
675.82.74.11.0Iris-versicolor
454.83.01.40.3Iris-setosa
405.03.51.30.3Iris-setosa
546.52.84.61.5Iris-versicolor
995.72.84.11.3Iris-versicolor
435.03.51.60.6Iris-setosa
795.72.63.51.0Iris-versicolor
836.02.75.11.6Iris-versicolor
1486.23.45.42.3Iris-virginica
856.03.44.51.6Iris-versicolor
845.43.04.51.5Iris-versicolor
965.72.94.21.3Iris-versicolor
  • 切分标签
def get_xy(df):
    return df[["sepal length", "sepal width", "petal length", "petal width"]], df[["class"]]

train_x, train_y = get_xy(tain)
test_x, test_y = get_xy(test)
test_y
class
81Iris-versicolor
18Iris-setosa
7Iris-setosa
124Iris-virginica
109Iris-virginica
105Iris-virginica
132Iris-virginica
120Iris-virginica
62Iris-versicolor
15Iris-setosa
93Iris-versicolor
19Iris-setosa
80Iris-versicolor
47Iris-setosa
52Iris-versicolor
70Iris-versicolor
34Iris-setosa
90Iris-versicolor
67Iris-versicolor
45Iris-setosa
40Iris-setosa
54Iris-versicolor
99Iris-versicolor
43Iris-setosa
79Iris-versicolor
83Iris-versicolor
148Iris-virginica
85Iris-versicolor
84Iris-versicolor
96Iris-versicolor
  • DataFrame to Numpy
    有的机器学习框架、模型可以直接使用 Pandas 数据类型,有的不一定可以,但是基本上都可以支持 Numpy array。 所以我们还可以进一步将 Pandas 的 DataFrame 转成 Numpy array。
train_x_array, train_y_array = train_x.values, train_y.values

# 前三个实例
print(train_x_array[:3])
print(train_y_array[:3])
[[5.8 2.7 5.1 1.9]
 [6.3 2.7 4.9 1.8]
 [4.8 3.1 1.6 0.2]]
[['Iris-virginica']
 ['Iris-virginica']
 ['Iris-setosa']]

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

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

相关文章

日常渗透刷洞的一些小工具

SecurityServiceBox&#xff1a;一个Windows平台下既可以满足安服仔日常渗透工作也可以批量刷洞的工具盒子 0x00 更新题外话—终端选取 在盒子的tools当中&#xff0c;很多工具运行都是带有颜色标识的&#xff0c;例如nuclei&#xff0c; vulmap&#xff0c;原生的cmd终端虽然…

MD5有哪些特性,常用的MD5加密真的安全吗

在密码学中&#xff0c;MD5是比较常用的算法之一。大家都知道MD5曾一度被认为十分安全&#xff0c;并且在国内外得到广泛适用。然而&#xff0c;王小云教授的研究证明利用MD5算法的磕碰能够严重威胁信息体系安全&#xff0c;因此引发了密码学界的轩然大波。那么&#xff0c;关于…

为什么JDK中String类的indexof不使用KMP或者Boyer-Moore等时间复杂度低的算法编辑器

indexOf底层使用的方法是典型的BF算法。 1、KMP算法 由来 外国人&#xff1a; Knuth&#xff0c;Morris和Pratt发明了这个算法&#xff0c;然后取它三个的首字母进行了命名。所以叫做KMP。 KMP真的很难理解&#xff0c;建议多看几遍 B站代码随想录&#xff0c;文章也的再好 …

【蓝桥杯备赛系列 | 真题 | 简单题】2014年第五届真题-分糖果

&#x1f935;‍♂️ 个人主页: 计算机魔术师 &#x1f468;‍&#x1f4bb; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 蓝桥杯竞赛专栏 | 简单题系列 &#xff08;一&#xff09; 作者&#xff1a; 计算机魔术师 版本&#xff1a; 1.0 &#xff08…

【博客597】iptables如何借助连续内存块通过xt_table结构管理流量规则

iptables如何借助连续内存块通过xt_table结构管理流量规则 1、iptables 分为两部分&#xff1a; 用户空间的 iptables 命令向用户提供访问内核 iptables 模块的管理界面。内核空间的 iptables 模块在内存中维护规则表&#xff0c;实现表的创建及注册。 2、iptables如何管理众…

第十二章 数据库设计

前言 本文章为看视频所写。 视频链接&#xff1a;168. 14.1 数据库设计前言_哔哩哔哩_bilibili 目录 前言 章节提要 一、数据库设计过程 二、E-R模型 三、答题技巧 四、案例分析 1、案例1 二、案例2 章节提要 一、数据库设计过程 ER模型&#xff1a;是实体联系模型&#x…

第一章 数据结构绪论

数据结构&#xff1a;是相互之间存在一种或多种特定关系的数据元素的集合。数据结构是一门研究非数值计算的程序设计问题中的操作对象&#xff0c;以及它们之间关系和操作等相关问题的学科。程序设计数据结构算法数据&#xff1a;是描述客观事物的符号&#xff0c;是计算机中可…

2.2、进程的状态与转换

整体框架 1、三种基本状态 进程是程序的一次执行。在这个执行过程中&#xff0c;有时进程正在被 CPU 处理&#xff0c;有时又需要等待 CPU 服务&#xff0c; 可见进程的状态是会有各种变化。 为了方便对各个进程的管理&#xff0c;操作系统需要将进程合理地划分为几种状态 ①…

随机梯度下降法的数学基础

梯度是微积分中的基本概念&#xff0c;也是机器学习解优化问题经常使用的数学工具&#xff08;梯度下降算法&#xff09;。因此&#xff0c;有必要从头理解梯度的来源和意义。本文从导数开始讲起&#xff0c;讲述了导数、偏导数、方向导数和梯度的定义、意义和数学公式&#xf…

SpringBoot-自动配置-切换内置web服务器

SpringBoot-自动配置-切换内置web服务器 介绍 SpringBoot的web环境中默认使用tomcat作为内置服务器其实SpringBoot提供了4种内置服务器供我们选择分别为&#xff1a;Jetty&#xff0c;Netty&#xff0c;Tomcat&#xff0c;Undertow我们可以很方便的进行切换 实例演示 在pom文件…

简单了解操作系统、进程内存管理

目录 前言&#xff1a; 一、操作系统&#xff1a; 操作系统的定位&#xff1a; 应用程序&#xff1a; 系统调用&#xff1a; 操作系统内核&#xff1a; 驱动程序&#xff1a; 硬件设备&#xff1a; 二、进程&#xff1a; 什么是进程&#xff1f; 进程的描述与组…

自定义类型,结构体、枚举、联合(C语言)

目录 结构体 结构体的基础知识&#xff1a; 结构体的声明&#xff1a; 特殊声明&#xff1a; 结构体的自引用 结构体变量的定义和初始化 结构体内存对齐&#xff1a; 修改默认对齐数&#xff1a; 结构体传参 结构体的柔型数组 柔型数组的书写 柔性数组的特点 柔性数组的使用 柔…

【Java寒假打卡】JavaWeb-Tomcat

【Java寒假打卡】JavaWeb-Tomcat服务器Tomcat下载和安装Tomcat的目录结构基本使用控制台乱码的问题IDEA集成TomcatJavaWeb项目的目录结构Tomcat-idea发布项目Tomcat-WAR包发布项目Tomcat配置文件的介绍Tomcat配置虚拟目录Tomcat配置虚拟主机服务器 Tomcat下载和安装 将下载好的…

干货 | 数据安全和个人信息保护审计的方法研究

以下内容整理自清华大学《数智安全与标准化》课程大作业期末报告同学的汇报内容。第一部分&#xff1a;概述我们的研究核心是个人信息保护合规审计&#xff0c;具体指个人信息处理活动是否遵守我国相关法律法规的监督性审计。在个保法出台后&#xff0c;我国形成了以内部审计为…

我用ChatGPT写神经网络:一字不改,结果竟很好用

自从去年底推出以来&#xff0c;对话式 AI 模型 ChatGPT 火遍了整个社区。 ChatGPT 的确是一个了不起的工具&#xff0c;就像一个「潘多拉魔盒」。一旦找到正确的打开方式&#xff0c;你或许会发现&#xff0c;自己再也离不开它了。 作为一个全能选手&#xff0c;人们给 Chat…

Fedora 38发布Budgie与Sway定制版

导读两款新的 Fedora 定制版将在 Fedora 38 发布时首次亮相。我们期待着它们在 Fedora 37 时出现&#xff0c;但在 Fedora 38 中终于来了&#xff01; 早在 2022 年 5 月&#xff0c;Budgie 项目的主要开发者 Joshua Strobl ​​宣布​​&#xff0c;Budgie 已被提交到 Fedora…

第五届字节跳动青训营 前端进阶学习笔记(四)TypeScript入门

文章目录前言TypeScript概要1.什么是TypeScript2.TypeScript基本语法基础数据类型对象类型函数类型函数重载数组类型补充类型泛型约束和泛型默认参数类型别名和类型断言高级类型1.联合类型2.交叉类型3.类型守卫类型谓词总结前言 课程重点&#xff1a; TypeScript概要TypeScri…

Kubernets核心介绍及实战

1、资源创建方式 命令行YAML 2、Namespace 名称空间用来隔离资源 “namespace"通常被翻译为「命名空间」&#xff0c;听起来好像比较抽象&#xff0c;其实重点是在这个"space”。它和描述进程的虚拟地址空间的address space一样&#xff0c;都是提供一种独占的视角…

linux引导和启动程序

1.BIOS/Bootloader: 一上电&#xff0c;硬件强制让cpu的cs:ip寄存器指向bios程序的位置&#xff0c;从bios程序开始执行&#xff0c;由pc机的BIOS &#xff08;0xFFFFO是BIOs存储的总线地址&#xff09;把bootsect从某个固定的地址拿到了内存中的某个固定地址&#xff08;0x90…

SpringAMQP快速入门

介绍Spring AMQP 项目将核心 Spring 概念应用于基于 AMQP 的消息传递解决方案的开发它提供了一个“模板”作为发送和接收消息的高级抽象它还通过“侦听器容器”为消息驱动的 POJO 提供支持这些库促进了 AMQP 资源的管理&#xff0c;同时促进了依赖注入和声明性配置的使用包含两…