第一课 导入库 - 创建数据集 - CSV读取 - 导出 - 查找最大值 - 绘制数据
第1课
创建数据 - 我们从创建自己的数据集开始分析。这可以防止阅读本教程的最终用户为得到下面的结果而不得不下载许多文件。我们将把这个数据集导出到一个文本文件中,这样您就可以获得从文本文件中一些拉取数据的经验。
获取数据 - 我们将学习如何阅读文本文件。这些数据包括婴儿的姓名和1880年出生的婴儿的数量。
准备数据 - 在这里,我们将简单地看一下数据并确保它是干净的。干净,我的意思是我们会看看文本文件的内容并发现任何异常。可能包括缺失的数据,数据中的不一致或任何其他不合适的数据。如果发现这些问题,我们将不得不决定如何处理这些记录。
分析数据 - 我们将简单地找出特定年份中流行的取名倾向。
呈现数据 - 通过表格数据和图表,清楚地向最终用户显示特定年份中最受欢迎的取名。
pandas库用于所有数据分析,不包括一小部分的数据呈现部分。 数据呈现部分需要引入 matplotlib 库。导入库是我们在本课中采取的第一步。
#导入本教程所需的所有库
#在库中导入特定函数的一般语法:
## from(库) import(特定库函数) from pandas import DataFrame, read_csv
#导入一个库但没有函数的一般语法:
## import(库)as(给库取一个昵称/别名)
import matplotlib.pyplot as plt
import pandas as pd #我通常这样导入pandas
import sys #确定Python版本号时需要的库
import matplotlib #仅用于确定Matplotlib版本号
print('Python version ' + sys.version)
print('Pandas version ' + pd.__version__)
print('Matplotlib version ' + matplotlib.__version__)
Python version 3.5.1 |Anaconda custom (64-bit)| (default, Feb 16 2016, 09:49:46) [MSC v.1900 64 bit (AMD64)]
Pandas version 0.20.1
Matplotlib version 1.5.1
创建数据
数据集将包括5个宝宝的名字和当年记录的出生人数(1880年)。
# 初始化宝宝姓名和出生人数
names = ['Bob','Jessica','Mary','John','Mel']
births = [968, 155, 77, 578, 973]
为了将这两个列表合并到一起,我们将使用 zip 函数。
zip?
BabyDataSet = list(zip(names,births))
BabyDataSet
[('Bob', 968), ('Jessica', 155), ('Mary', 77), ('John', 578), ('Mel', 973)]
我们基本上完成了创建数据集。我们现在将使用 pandas 库将此数据集导出到csv文件中
df 是一个 DataFrame 对象。您可以将此对象视为类似于SQL表或Excel电子表格的格式保存了BabyDataSet的内容。下面让我们看看df的内容 。
df = pd.DataFrame(data = BabyDataSet, columns=['Names', 'Births'])
df
Names | Births | |
---|---|---|
0 | Bob | 968 |
1 | Jessica | 155 |
2 | Mary | 77 |
3 | John | 578 |
4 | Mel | 973 |
将这个数据帧导出到 csv 文件。我们可以命名为文件 births1880.csv。函数 to_csv 用于导出文件。除非另有说明,否则该文件将保存在当前目录下。
df.to_csv?
我们仅使用的参数是 index 和 header。将这些参数设置为False将会阻止导出索引和标题名称。更改这些参数的值以更好地了解它们的用法
df.to_csv('births1880.csv',index=False,header=False)
获取数据
要读入csv文件,我们将使用pandas函数 read_csv。让我们看看这个函数如何使用。
read_csv?
虽然这个函数有很多参数,我们这里只简单地传递文本文件的位置。
文件位置在 C:\Users\ENTER_USER_NAME.xy\startups\births1880.csv
Note: 当然,你存放的文件位置不一样,你就需要修改它
Location = r'C:\Users\david\notebooks\update\births1880.csv'
df = pd.read_csv(Location)
注意字符串前面的r。由于斜线"\"是特殊转义字符,因此在字符串前加一个 r 将会忽略整个字符串的转义。
df
Bob | 968 | |
---|---|---|
0 | Jessica | 155 |
1 | Mary | 77 |
2 | John | 578 |
3 | Mel | 973 |
这给我们带来了这个练习的第一个问题。该 read_csv 函数处理的第一个记录在CSV文件中为头名。这显然是不正确的,因为文本文件没有为我们提供标题名称。
为了纠正这个问题,我们将传递 header 参数给 read_csv 函数并将它设置为 None (在python中表示为null)。
df = pd.read_csv(Location, header=None)
df
0 | 1 | |
---|---|---|
0 | Bob | 968 |
1 | Jessica | 155 |
2 | Mary | 77 |
3 | John | 578 |
4 | Mel | 973 |
.如果我们想给列指定名字,我们必须传递另一个参数names 。我们也可以省略 header 参数。
df = pd.read_csv(Location, names=['Names','Births'])
df
Names | Births | |
---|---|---|
0 | Bob | 968 |
1 | Jessica | 155 |
2 | Mary | 77 |
3 | John | 578 |
4 | Mel | 973 |
您可以将数字[0,1,2,3,4]视为Excel文件中的行号。在pandas中,这些是 数据帧 index 的一部分 。您可以将index视为sql表的主键,但 index 是允许重复值的。
[Names, Births] 可以视为列标题,类似于Excel电子表格或sql数据库中的列标题。
使用过不再需要的csv文件我们可以这样删除它
import os
os.remove(Location)
准备数据
我们的数据由1880年的婴儿姓名和出生人数组成。我们已经知道我们有5条记录,并且没有记录丢失(非空值)。
names列是由字母数字(宝贝名称)组成的字符串。本列中有不良数据的可能性,但在分析时我们不需担心。在 Births 列应该只包含代表出生在一个特定年份具有特定名称的婴儿数目的整数。我们可以检查所有数据是是否是数据类型整数。这个列有一个浮点数据类型是没有意义的。在分析时,我们不需担心任何可能的异常值。
意识到我们无需在“names”列上做的检查之外,简单地看一下数据帧里面的数据应该是我们在这个目标阶段所需要的。随着我们在数据分析生命周期中的继续,我们将有大量的机会来发现数据集的任何问题。
# 检查每列数据类型
df.dtypes
Names object
Births int64
dtype: object
# 检查 Births 列类型
df.Births.dtype
dtype('int64')
正如你可以看到 Births 列的类型是 int64,所以在这个列中不会出现浮点数(十进制数)或字母数字字符。
分析数据
要找出最常见的名字或婴儿出生率最高的名字,我们可以执行以下操作之一。
- 对数据帧排序并选择第一行
- 使用 max() 属性来查找最大值
# 方法 1:
Sorted = df.sort_values(['Births'], ascending=False)
Sorted.head(1)
Names | Births | |
---|---|---|
4 | Mel | 973 |
# 方法 2:
df['Births'].max()
973
呈现数据
在这里,我们可以绘制 Births 列,并标记图形以显示最终用户图上的最高点。与表格一起,最终用户清楚地知道 Mel 是数据集中最受欢迎的婴儿名称。
plot() 是一个方便的属性,pandas可以让你无痛苦地绘制数据帧中的数据。上一节中我们学习了如何找到 Births 列的最大值。现在找到 最大出生数973值的婴儿姓名看起来有点棘手,让我们回过头来看看。
回顾一下:
df ['Names'] - 这是婴儿名字的整个列表,整个名字列
df ['Births'] - 这是1880年出生数的整个列表,整个Births列
df [‘Births’].max() - 这是在 Births 列中找到的最大值
[df ['Births'] == df ['Births'].max()] 等于 [查找Births列中等于973的所有记录]
df ['Names'] [df ['Births'] == df ['Births'].max()] 等于 选择Names列中的所有记录条件是 [Births列等于973]
另一种方法我们可以使用 Sorted 数据帧:
Sorted ['Names'].head(1).value
str()函数简单方便地将对象转换成一个字符串。
In [19]:
# Create graph
df['Births'].plot() # Maximum value in the data set
MaxValue = df['Births'].max() # Name associated with the maximum value
MaxName = df['Names'][df['Births'] == df['Births'].max()].values # Text to display on graph
Text = str(MaxValue) + " - " + MaxName # Add text to graph
plt.annotate(Text, xy=(1, MaxValue), xytext=(8, 0),
xycoords=('axes fraction', 'data'), textcoords='offset points') print("The most popular name")
df[df['Births'] == df['Births'].max()]
#Sorted.head(1) can also be used
The most popular name
Names | Births | |
---|---|---|
4 | Mel | 973 |
第一课 导入库 - 创建数据集 - CSV读取 - 导出 - 查找最大值 - 绘制数据的更多相关文章
- ChartControl第一课简短的控件初步设计
WinForms Controls >Controls > Chart Control > Getting Started This document gives you a qui ...
- 第三课 创建函数 - 从EXCEL读取 - 导出到EXCEL - 异常值 - Lambda函数 - 切片和骰子数据
第 3 课 获取数据 - 我们的数据集将包含一个Excel文件,其中包含每天的客户数量.我们将学习如何对 excel 文件进行处理.准备数据 - 数据是有重复日期的不规则时间序列.我们将挑战数 ...
- GIt学习第一天之安装和版本库创建
搬运自 ‘廖雪峰的官方网站’ 1.git安装 官网下载地址:https://git-scm.com/download/win 百度网盘下载地址:https://pan.baidu.com/s/1k ...
- Nehe OpenGL教程第一课-创建一个OpenGL窗口(Win32)
原文英文地址为:Creating an OpenGL Window (Win32),翻译的chm中文格式文档下载地址为:OpenGL教程电子书(chm格式)中文版,源代码在官网上也可以下载到,每 ...
- SlidingMenu第一篇 --- 导入SlidingMenu库
1. 下载地址:https://github.com/jfeinstein10/SlidingMenu 2. 找到下载好的SlidingMeun的library目录 3. 导入库(将上述地址复制到 ...
- 第二课 TXT读取 - 导出 - 选择顶部/底部记录 - 描述性统计 - 分组/排序
第2课 创建数据 - 我们从创建自己的数据集开始分析.这可以防止阅读本教程的最终用户为得到下面的结果而不得不下载许多文件.我们将把这个数据集导出到一个文本文件中,这样您就可以获得从文本文件中一些拉取数 ...
- MXNet学习-第一个例子:训练MNIST数据集
一个门外汉写的MXNET跑MNIST的例子,三层全连接层最后验证率是97%左右,毕竟是第一个例子,主要就是用来理解MXNet怎么使用. #导入需要的模块 import numpy as np #num ...
- NeHe OpenGL教程 第一课:OpenGL窗口
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- 【C++探索之旅】开宗明义+第一部分第一课:什么是C++?
内容简介 1.课程大纲 2.第一部分第一课:什么是C++? 3.第一部分第二课预告:C++编程的必要软件 开宗明义 亲爱的读者,您是否对C++感兴趣,但是C++看起来很难,或者别人对你说C++挺难的, ...
随机推荐
- Xshell连接linux服务器不成功的乌龙问题
一般xshell连接linux服务器不成功有以下几个问题: linux防火墙拦截,导致Xshell不能访问linux 操作方法: firewalld(CentOS7):启动 :systemctl st ...
- 转载:Java中的Checked Exception——美丽世界中潜藏的恶魔?
转自 Amber-Garden 的 博客 https://www.cnblogs.com/loveis715/p/4596551.html 在使用Java编写应用的时候,我们常常需要通过第三方类库来帮 ...
- UNIX C 进程Part2
1.获取进程ID #include <unistd.h> pid_t getpid(void); //获取子进程id pid_t getppid(void);//获取父进程id 2.获取实 ...
- 39.exact value and full text
主要知识点 1.exact value 2.full text 在es中有两种搜索方式,exact value(精确匹配),full text(全文检索) 一.exact value 比如有一 ...
- Java基础学习总结(66)——配置管理库typesafe.config教程
Typesafe的Config库,纯Java写成.零外部依赖.代码精简.功能灵活.API友好.支持Java properties.JSON.JSON超集格式HOCON以及环境变量.它也是Akka的配置 ...
- 将会改变未来IT世界的十种编程语言
这里要说的都是革新,说这些的目的就是要保持关注最新技术.如果你是一个程序员,想要探寻未来技术,那这篇文章就是你的必读之选.我们这里列出了10种编程语言,10种将会改变IT世界工作方式的编程语言.这些语 ...
- 网上有一种错误的做法是:因为每一个双连通分量内的点low[]值都是相同的,则dfs()时,对于一条边(u,v),只需low[u]=min(low[u],low[v]),这样就不用缩点,最后求度数的时候
- 【ACM】nyoj_7_街区最短路径问题_201308051737
街区最短路径问题时间限制:3000 ms | 内存限制:65535 KB 难度:4描述 一个街区有很多住户,街区的街道只能为东西.南北两种方向. 住户只可以沿着街道行走. 各个街道之间的间隔相等. ...
- asp.net--webconfg指南
原文链接 花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法.很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点.所以这里只介绍一些比较常用的节点. ...
- VMware 12安装CentOS 6.9时出现:The centos disc was not found in any of your drives.Please insert the centos disc and press OK to retry
错误: The centos disc was not found in any of your drives.Please insert the centos disc and press OK t ...