前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pandas 入门 1 :数据集的创建和绘制

pandas 入门 1 :数据集的创建和绘制

作者头像
用户6021891
发布2020-02-19 14:33:35
6K0
发布2020-02-19 14:33:35
举报
文章被收录于专栏:万能的小草万能的小草

创建数据- 首先创建自己的数据集进行分析。这可以防止阅读本教程的用户下载任何文件以复制下面的结果。我们将此数据集导出到文本文件,以便您可以获得的一些从csv文件中提取数据的经验

获取数据- 学习如何读取csv文件。数据包括婴儿姓名和1880年出生的婴儿姓名数量。

准备数据- 在这里,我们将简单地查看数据并确保它是干净的。干净的意思是我们将查看csv的内容并查找任何异常。这些可能包括缺少数据,数据不一致或任何其他看似不合适的数据。如果发现任何问题,我们将不得不决定如何处理这些记录。

分析数据- 我们将简单地找到特定年份中最受欢迎的名称。

现有数据- 通过表格数据和图表,清楚地向最终用户显示特定年份中最受欢迎的姓名。

代码语言:javascript
复制
#导入本教程所需的所有库#导入库中特定函数的一般语法:
## from(library)import(特定库函数)
from pandas import DataFrame , read_csv
import matplotlib.pyplot as plt
import pandas as pd
import sys
import matplotlib#输出Python Pandas Matplotlib 版本
print('Python version ' + sys.version)
print('Pandas version ' + pd.__version__)
print('Matplotlib version ' + matplotlib.__version__)#Python version 3.6.5 |Anaconda, Inc.| (default, Apr 26 2018, 08:42:37)
#[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)]
#Pandas version 0.23.0
#Matplotlib version 2.2.2

创建数据

该数据集将包括5个婴儿名称和该年度记录的出生人数(1880年)。

代码语言:javascript
复制
# The inital set of baby names and bith rates
names = ['Bob','Jessica','Mary','John','Mel']
births = [968, 155, 77, 578, 973]

要将这两个列表合并在一起,我们将使用zip函数。

代码语言:javascript
复制
zip?

我们基本上完成了数据集的创建。现在将使用pandas库将此数据集导出到csv文件中。

df将是一个 DataFrame对象。可以将此对象视为类似于sql表或excel电子表格的格式保存BabyDataSet的内容。让我们来看看 df里面的内容。

代码语言:javascript
复制
df = pd.DataFrame(data = BabyDataSet, columns=['Names', 'Births'])
dfOut[1]:
    Names  Births
0      Bob     968
1  Jessica     155
2     Mary      77
3     John     578
4      Mel     973

将dataframe导出为csv文件。可以将文件命名为births1880.csv。函数to_csv将用于导出文件。除非另有指明,否则文件将保存在运行环境下的相同位置。

代码语言:javascript
复制
df.to_csv?

我们将使用的唯一参数是索引标头。将这些参数设置为False将阻止导出索引和标头名称。更改这些参数的值以更好地了解它们的用法。

代码语言:javascript
复制
df.to_csv('births1880.csv',index=False,header=False)

获取数据

要导入csv文件,我们将使用pandas函数read_csv。我们来看看这个函数以及它需要什么输入。

代码语言:javascript
复制
read_csv?

即使这个函数有很多参数,我们也只是将它传递给文本文件的位置。

Location = /Users/mac/Desktop/births1880.csv

注意:根据文件保存在电脑的位置,您可能需要修改上面的位置。

代码语言:javascript
复制
Location =  '/Users/mac/Desktop/births1880.csv'
df = pd.read_csv(Location)
df
Out[1]:
      Bob  968
0  Jessica  155
1     Mary   77
2     John  578
3      Mel  973

这就把我们带到了练习的第一个问题。read_csv处理的第一个记录在CSV文件中为头名。这显然是不正确的,因为csv文件没有为我们提供标题名称。

为了纠正这个问题,我们将header参数传递给read_csv函数并将其设置为None(在python中表示null)

代码语言:javascript
复制
df = pd.read_csv(Location, header=None)
df
Out[1]:
        0    1
0      Bob  968
1  Jessica  155
2     Mary   77
3     John  578
4      Mel  973

如果我们想给列特定的名称,可以通过传递另一个名为name的参数。此时也可以省略header参数。

代码语言:javascript
复制
df = pd.read_csv(Location, names=['Names','Births'])
df
Out[1]:
    Names  Births
0      Bob     968
1  Jessica     155
2     Mary      77
3     John     578
4      Mel     973

您可以将数字[0,1,2,3,4]视为Excel文件中的行号。在pandas中,这些是dataframe索引的一部分。您可以将索引视为sql表的主键,但允许索引具有重复项。

[Names,Births]可以作为列标题,类似于Excel电子表格或sql数据库中的列标题。

代码语言:javascript
复制
#删除csv文件
import os
os.remove(Location)

准备数据

我们的数据包括婴儿的名字和1880年的出生人数。我们已经知道我们有5条记录而且没有任何记录丢失(非空值)。

此时的名称列无关紧要,因为它很可能只是由字母数字字符串(婴儿名称)组成。本专栏中可能存在不良数据,但在此分析时我们不会担心这一点。在出生栏应该只包含代表出生在一个特定年份具有特定名称的婴儿数目的整数。我们可以检查所有数据是否都是数据类型整数。将此列的数据类型设置为float是没有意义的。在此分析中,我不担心任何可能的异常值。 要意识到除了我们在“名称”列中所做的检查之外,简要地查看数据框内的数据应该是我们在游戏的这个阶段所需要的。随着我们在数据分析生命周期中的继续,我们将有很多机会找到数据集的任何问题。

代码语言:javascript
复制
# 检查数据列的类型
df.dtypesOut[1]:
Names     object
Births     int64
dtype: object#检查Births列
df.Births.dtype
Out[1]:
dtype('int64')

如您所见,Births列的类型为int64,因此此列中不会出现浮点数(十进制数字)或字母数字字符。

分析数据

要找到最受欢迎的姓名或婴儿出生率最高的名字,我们可以执行以下操作之一。

  • 对数据框进行排序并选择顶行
  • 使用max()属性查找最大值
代码语言:javascript
复制
# Method 1:
Sorted = df.sort_values(['Births'], ascending=False)
Sorted.head(1)Out[1]:
 Names  Births
4   Mel     973# Method 2:
df['Births'].max()
Out[1]:
 Names  Births
4   Mel     973

数据可视化

在这里,我们可以绘制出生者列并标记图表以向最终用户显示图表上的最高点。与该表一起,最终用户清楚地了解Mel是数据集中最受欢迎的婴儿名称。plot()是一个方便的属性,pandas可以让您轻松地在数据框中绘制数据。我们学习了如何在上一节中找到Births列的最大值。现在找到973值的实际宝贝名称看起来有点棘手,所以让我们来看看吧。

解释一下:df ['Names'] - 这是婴儿名字的整个列表,整个名字栏

df ['Births'] - 这是1880年的整个出生列表,整个出生列

df['Births'].max() - 这是Births列中的最大值 [df['Births'] == df['Births'].max()] 等于 [查找出生列中等于973的所有记录]

df ['Names'] [df [' Births'] == df ['Births'].max()] 等于选择Names列WHERE [Births列等于973]中的所有记录 另一种方法可能是使用Sorted dataframe: Sorted ['Names'].head(1).value

STR()函数简单地将对象转换成一个字符串。

代码语言:javascript
复制
#创建图表
df['Births'].plot()#数据集中的最大值
MaxValue = df['Births'].max()#与最大值相关联的名称
MaxName = df['Names'][df['Births'] == df['Births'].max()].values#文本显示在图形上
Text = str(MaxValue) + " - " + MaxName#将文字添加到图表
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)The most popular name
Out[19]:
 Names  Births
4   Mel     973
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小草学Python和SQL 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建数据
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档