ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Datawhale组队学习 2022年1月 动手学数据分析 第1章

2022-01-11 04:00:08  阅读:199  来源: 互联网

标签:... male pd read Datawhale 组队 2022 Mr csv


第一章:数据载入及初步观察

1.1 载入数据

数据集下载 https://www.kaggle.com/c/titanic/overview。

下载好以后把train.csv文件复制几份,使用excel,分别把格式另存为成为tsvxlsx,全都放到ipynb文件所在文件夹下。

1.1.0 安装numpy和pandas

以管理员身份打开命令行,根据实际情况输入下面两条指令中的一条即可。

#没安装Anaconda,一般都没安装
pip install numpy pandas

#已经安装了Anaconda
conda install numpy pandas

有时候会出现网络问题,这时需要手动将pip或Anaconda的仓库地址修改到国内:Anaconda换源方法pip换源方法,然后重新执行上面的指令。

1.1.1 任务一:导入numpy和pandas

以下代码运行环境均为jupyter notebook

import numpy as npy # 现实里没有npy,在这里弥补一下
import pandas as pd
import os #这个作用不大,只在查看当前路径时用到过一次

1.1.2 任务二:载入数据

【提示】相对路径载入报错时,尝试使用os.getcwd()查看当前工作目录。

  1. 使用相对路径载入数据
pd.read_csv("train.csv")

运行结果:

PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S
... ... ... ... ... ... ... ... ... ... ... ... ...
886 887 0 2 Montvila, Rev. Juozas male 27.0 0 0 211536 13.0000 NaN S
887 888 1 1 Graham, Miss. Margaret Edith female 19.0 0 0 112053 30.0000 B42 S
888 889 0 3 Johnston, Miss. Catherine Helen "Carrie" female NaN 1 2 W./C. 6607 23.4500 NaN S
889 890 1 1 Behr, Mr. Karl Howell male 26.0 0 0 111369 30.0000 C148 C
890 891 0 3 Dooley, Mr. Patrick male 32.0 0 0 370376 7.7500 NaN Q

891 rows × 12 columns


  1. 使用绝对路径载入数据
pd.options.display.max_rows=2#让pandas每次只展示头尾共2行数据,看着更清爽一点
print(os.getcwd())
pd.read_csv("d:/myData/Datawhale/202201-DataAnalysis/第一单元项目集合/train.csv")

运行结果:

D:\myData\Datawhale\202201-DataAnalysis\第一单元项目集合

PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
... ... ... ... ... ... ... ... ... ... ... ... ...
890 891 0 3 Dooley, Mr. Patrick male 32.0 0 0 370376 7.7500 NaN Q

891 rows × 12 columns


【思考】知道数据加载的方法后,试试pd.read_csv()和pd.read_table()的不同,如果想让他们效果一样,需要怎么做?了解一下'.tsv'和'.csv'的不同,如何加载这两个数据集?

下面尝试使用pd.read_csv读取tsv文件:

pd.read_csv('train.tsv')

运行结果:

PassengerId\tSurvived\tPclass\tName\tSex\tAge\tSibSp\tParch\tTicket\tFare\tCabin\tEmbarked
0 1\t0\t3\t"Braund\t Mr. Owen Harris"\tmale\t22...
... ...
890 891\t0\t3\t"Dooley\t Mr. Patrick"\tmale\t32\t0...

891 rows × 1 columns


尝试用pd.read_table读取csv文件:

pd.read_table('train.csv')

运行结果:

PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked
0 1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/...
... ...
890 891,0,3,"Dooley, Mr. Patrick",male,32,0,0,3703...

891 rows × 1 columns


由于文件中的分隔符与被调用方法的默认分隔符不同,文件被认为只有一个字段。

解决方法:通过sep参数设置分隔符,这可以让pd.read_csvpd.read_table表现一致。

pd.read_table('train.csv',sep=',')

运行结果:

PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
... ... ... ... ... ... ... ... ... ... ... ... ...
890 891 0 3 Dooley, Mr. Patrick male 32.0 0 0 370376 7.7500 NaN Q

891 rows × 12 columns


pd.read_csv('train.tsv',sep='\t')

运行结果:

PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund\t Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
... ... ... ... ... ... ... ... ... ... ... ... ...
890 891 0 3 Dooley\t Mr. Patrick male 32.0 0 0 370376 7.7500 NaN Q

891 rows × 12 columns


如上面两段代码执行结果所示,指定sep参数后,pandas能正确读取数据文件。

另外通过查阅资料发现,sep参数还支持正则表达式,可以用来处理更复杂混乱的数据文件。

使用pd.read_excel还可以读取Excel的xlsxxls文件:

pd.read_excel('train.xlsx')

运行结果:

PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
... ... ... ... ... ... ... ... ... ... ... ... ...
890 891 0 3 Dooley, Mr. Patrick male 32.0 0 0 370376 7.7500 NaN Q

891 rows × 12 columns


【总结】加载的数据是所有工作的第一步,我们的工作会接触到不同的数据格式(eg:.csv.tsv.xlsx),但是加载的方法和思路都是一样的,在以后工作和做项目的过程中,遇到之前没有碰到的问题,要多多查资料吗,使用google,了解业务逻辑,明白输入和输出是什么。

1.1.3 任务三:每1000行为一个数据模块,逐块读取

【思考】什么是逐块读取?为什么要逐块读取呢?

【提示】大家可以chunker(数据块)是什么类型?用for循环打印出来出处具体的样子是什么?

如果指定了chunksize参数,pd.read_csvpd.read_table会返回一个迭代器,该迭代器迭代时,每次读取文件的最多chunksize行(最后一次读取可能不够chunksize行)。

每次读取到的部分以DataFrame类型返回,遍历过程总共会返回\(\lceil \frac{n}{chunksize}\rceil\)个DataFrame,其中n是数据的总行数。

逐块读取可以用来读取大文件,防止将文件一次性读入,因为内存占用过多产生各种问题。

chunker=pd.read_csv('train.csv',chunksize=1000)
ar=[]
for i in chunker:#遍历chunker
    ar.append(i)#将每个小块放入数组ar中
ar[0]#查看第一个小块的内容

运行结果:

PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.25 NaN S
... ... ... ... ... ... ... ... ... ... ... ... ...
890 891 0 3 Dooley, Mr. Patrick male 32.0 0 0 370376 7.75 NaN Q

891 rows × 12 columns


1.1.4 任务四:将表头改成中文,索引改为乘客ID

【思考】所谓将表头改为中文其中一个思路是:将英文列名表头替换成中文。还有其他的方法吗?

对于某些英文资料,我们可以通过翻译来更直观的熟悉我们的数据,对于当前的泰坦尼克数据集:

PassengerId => 乘客ID
Survived => 是否幸存
Pclass => 乘客等级(1/2/3等舱位)
Name => 乘客姓名
Sex => 性别
Age => 年龄
SibSp => 堂兄弟/妹个数
Parch => 父母与小孩个数
Ticket => 船票信息
Fare => 票价
Cabin => 客舱
Embarked => 登船港口

这两个任务都有两种实现方式:

  1. 在读取是通过指定read_csv的参数来实现;
  2. 读取完成后调用DataFrame对象提供的方法来实现。

读取时修改字段名:read_csv函数的names参数可以接受一个List类型的对象,List对象中的字符串数量必须和原始数据中的字段数量一致,最终返回的DataFrame对象字段名依次为List中的字符串。这个方法在原始数据字段名大部分需要更改时比较方便。

读取时指定索引:read_csv函数的index_col参数可以接受一个字符串或一个由字符串组成的List对象,表示要将索引设置为该参数指定的某列或某几列。

代码如下:

newNamesList=[
    '乘客ID',
    '是否幸存',
    '乘客等级(1/2/3等舱位)',
    '乘客姓名',
    '性别',
    '年龄',
    '堂兄弟/妹个数',
    '父母与小孩个数',
    '船票信息',
    '票价',
    '客舱',
    '登船港口',
]
pd.read_csv('train.csv',names=newNamesList,header=0,index_col='乘客ID')

运行结果:

是否幸存 乘客等级(1/2/3等舱位) 乘客姓名 性别 年龄 堂兄弟/妹个数 父母与小孩个数 船票信息 票价 客舱 登船港口
乘客ID
1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.25 NaN S
... ... ... ... ... ... ... ... ... ... ... ...
891 0 3 Dooley, Mr. Patrick male 32.0 0 0 370376 7.75 NaN Q

891 rows × 11 columns


读取完毕再修改DataFrame对象的字段名有两个途径:

  1. 使用DataFrame对象的rename方法,其中的columns参数接受一个“可调用对象”,例如函数、字典等,该对象需要实现旧字段名到新字段名的映射,在原始数据字段名只有少部分需要修改时更方便。
  2. 直接修改DataFrame对象的columns属性,将其赋值为一个List,类似read_csv函数的names参数,用List对象中的字符串依次给各个字段重命名,List对象中的字符串数量必须和原始数据中的字段数量一致,在原始数据字段名大部分需要更改时比较方便。

想读取完毕再指定或修改DataFrame对象的索引,可以用set_index方法,其中的keys参数类似read_csv函数的index_col参数,可以接受一个字符串或一个由字符串组成的List对象,表示要将索引设置为某列或某几列。

代码演示如下:

newNamesDict={
    'PassengerId':'乘客ID',
    'Survived':'是否幸存',
    'Pclass':'乘客等级(1/2/3等舱位)',
    'Name':'乘客姓名',
    'Sex':'性别',
    'Age':'年龄',
    'SibSp':'堂兄弟/妹个数',
    'Parch':'父母与小孩个数',
    'Ticket':'船票信息',
    'Fare':'票价',
    'Cabin':'客舱',
    'Embarked':'登船港口',
}
df=pd.read_csv('train.csv')
df.rename(columns=a,inplace=True)#原地修改,不需要赋值回去
df=df.set_index(keys='乘客ID')#需要赋值回去
df

运行结果(下沉的字段表示当前索引):

Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
乘客ID
1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.25 NaN S
... ... ... ... ... ... ... ... ... ... ... ...
891 0 3 Dooley, Mr. Patrick male 32.0 0 0 370376 7.75 NaN Q

891 rows × 11 columns


标签:...,male,pd,read,Datawhale,组队,2022,Mr,csv
来源: https://www.cnblogs.com/wawcac-blog/p/15786737.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有