动手学数据分析 Task 1 | Datawhale

1. PART 1 :数据加载

1.1 载入数据

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

1.1.1 任务一:导入numpy和pandas

import numpy as np
import pandas as pd

注:如果导入失败,学会如何在你的python环境下安装numpy和pandas这两个库。

1.1.2 任务二:载入数据

  1. 使用相对路径载入数据
df = pd.read_csv('train.csv')
df_3=df.head(3)
print(df_3)

在这里插入图片描述

  1. 使用绝对路径载入数据
df = pd.read_csv(r'D:\WIN10桌面文件\titanic\train.csv')
df_3=df.head(3)
print(df_3)

在这里插入图片描述 注:在使用绝对路径读取数据文件的时候,如果发生错误,检查一下是不是吗,没有对‘ \ ’进行转义,在python中 ‘ \ ’这个是转义符号,所以读取文件的时候会出现找不到文件的情况。
 提示:相对路径载入报错时,尝试使用os.getcwd()查看当前工作目录。
 思考 :
 1、pd.read_csv()和pd.read_table()不同
 read_csv和read_table都是加载带分隔符的数据,每一个分隔符作为一个数据的标志,但二者读出来的数据格式还是不一样的,read_table是以制表符 \t 作为数据的标志,也就是以行为单位进行存储。
 而 read_csv读完后是一个数组,每一个字符串作为一列,这是二者的区别。

 2、想让pd.read_csv()和pd.read_table()载入数据效果相同需要怎么做?
用read_table读取数据时,指定参数seq,seq标识分隔符,分隔符为\t ,即制表符,表示列与列之间用\t分开,因为分割符为制表符,而制表符存在于txt文件每行的末尾。此时读取的数据就能够和read_csv相同

 3、了解一下’.tsv’和’.csv’的不同
 (1)从名称上即可知道,TSV是用制表符(Tab,’\t’)作为字段值的分隔符;CSV是用半角逗号(’,’)作为字段值的分隔符;
 (2)IANA规定的标准TSV格式,字段值之中是不允许出现制表符的。
 4、如何加载这两个数据集?
 使用pandas读取tsv文件的代码如下:

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

  读取csv:

df = pd.read_csv(r'D:\WIN10桌面文件\titanic\train.csv')

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

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

chunker = pd.read_csv('train.csv', chunksize=1000)
# 对该对象进行迭代遍历,可以完成逐块统计的合并处理
for piece in chunker:
    print(piece.head(10))

动手学数据分析 Task 1 | Datawhale_第1张图片 思考:什么是逐块读取?为什么要逐块读取呢?

 使用pandas来处理文件的时候,经常会遇到大文件,而有时候我们只想要读取其中的一部分数据或对文件进行逐块处理,这时就需要逐块读取。有chunksize参数可以进行逐块加载。
 经测试,它的本质就是将文本分成若干块,每次处理chunksize行的数据,最终返回一个TextParser对象。

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

对于某些英文资料,我们可以通过翻译来更直观的熟悉我们的数据
PassengerId => 乘客ID
Survived => 是否幸存
Pclass => 乘客等级(1/2/3等舱位)
Name => 乘客姓名
Sex => 性别
Age => 年龄
SibSp => 堂兄弟/妹个数
Parch => 父母与小孩个数
Ticket => 船票信息
Fare => 票价
Cabin => 客舱
Embarked => 登船港口

df = pd.read_csv('train.csv',
                 names=['乘客ID', '是否幸存', '仓位等级', '姓名', '性别', '年龄', '兄弟姐妹个数', '父母子女个数', '船票信息', '票价', '客舱', '登船港口']
                 , index_col='乘客ID', header=0)
df_5=df.head(5)
print(df_5)

动手学数据分析 Task 1 | Datawhale_第2张图片

1.2 对数据进行初步观察

 导入数据后,你可能要对数据的整体结构和样例进行概览,比如说,数据大小、有多少列,各列都是什么格式的,是否包含null等。

1.2.1 任务一:查看数据的基本信息

df.info()

动手学数据分析 Task 1 | Datawhale_第3张图片

1.2.2 任务二:观察表格前10行的数据和后15行的数据

 前10行数据

df_10=df.head(10)
print(df_10)

动手学数据分析 Task 1 | Datawhale_第4张图片
 后15行数据

df_15=df.tail(15)
print(df_15)

动手学数据分析 Task 1 | Datawhale_第5张图片

1.2.3任务三:判断数据是否为空,为空的地方返回True,其余地方 返回False

df_is_null = df.isnull().head(10)
print(df_is_null)

动手学数据分析 Task 1 | Datawhale_第6张图片

1.3保存数据

1.3.1任务一:将你加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv

# 保存数据并新命名
df.to_csv('train_chinese_change.csv')

动手学数据分析 Task 1 | Datawhale_第7张图片

2.PART 2 : pandas基础

2.1知道你的数据叫什么

2.1.1 任务一:了解pandas中的DateFrame和Series

 pandas中有两个数据类型DateFrame和Series,通 过查找简单了解他们。然后自己写一个关于这两个数据类型的小例 子

import numpy as np
import pandas as pd

sdata = {'ohio': 3500, 'Texas': 71000, 'Oregon': 10000, 'Utah': 5000} 
example_1 = pd.Series(sdata)
print(example_1)

动手学数据分析 Task 1 | Datawhale_第8张图片

data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003, ],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}  # 这也是一个字典
example_2 = pd.DataFrame(data)
print(example_2)

动手学数据分析 Task 1 | Datawhale_第9张图片

2.1.2 任务二:根据上节课的方法载入"train.csv"文件

df = pd.read_csv(r'D:\WIN10桌面文件\titanic\train.csv')
df_5 = df.head(5)
print(df_5)

在这里插入图片描述

2.1.3 任务三:查看DataFrame数据的每列的项

print(df.columns)

输出结果

Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age',
		 'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],dtype='object')

2.1.4任务四:查看"cabin"这列的所有项

print(df['Cabin'].head(3))  # 方法一

输出结果:

0    NaN
1    C85
2    NaN
Name: Cabin, dtype: object
print(df.Cabin.head(5))   # 方法二

输出结果:

0     NaN
1     C85
2     NaN
3    C123
4     NaN
Name: Cabin, dtype: object

2.1.5任务五:加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除

# 删除多余的列
del test_1['a']
test_1.head(3)

 还有其他的删除多余的列的方式吗?
 通过pandas删除列:

 1.del df['columns'] #改变原始数据

 2.df.drop('columns',axis=1)#删除不改表原始数据,可以通过重新赋值的方式赋值该数据

3.df.drop('columns',axis=1,inplace='True') #改变原始数据  inplace='True可以覆盖原有的数据

2.1.6任务六: 将[‘PassengerId’,‘Name’,‘Age’,‘Ticket’]这几个列元 素隐藏,只观察其他几个列元素

tt_d = tt.drop(['PassengerId', 'Name', 'Age', 'Ticket'], axis=1).head(5)
print(tt_d)

输出结果:

   Pclass     Sex  SibSp  Parch     Fare Cabin Embarked
0       3    male      0      0   7.8292   NaN        Q
1       3  female      1      0   7.0000   NaN        S
2       2    male      0      0   9.6875   NaN        Q
3       3    male      0      0   8.6625   NaN        S
4       3  female      1      1  12.2875   NaN        S

思考:
 如果想要完全的删除你的数据结构,使用inplace=True,因为使用inplace就将原数据覆盖了,所以这里没有用

2.2 筛选的逻辑

 表格数据中,最重要的一个功能就是要具有可筛选的能力,选出我所需要的信息,丢弃无用的信息。

2.2.1 任务一: 我们以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。

# 以年龄为条件  筛选年龄在10岁以下的乘客
df_low_10 = df[df['Age']<10].head(5)
print(df_low_10)

输出结果:

    PassengerId  Survived  Pclass                                      Name     Sex  Age  SibSp  Parch         Ticket     Fare Cabin Embarked
7             8         0       3            Palsson, Master. Gosta Leonard    male  2.0      3      1         349909  21.0750   NaN        S
10           11         1       3           Sandstrom, Miss. Marguerite Rut  female  4.0      1      1        PP 9549  16.7000    G6        S
16           17         0       3                      Rice, Master. Eugene    male  2.0      4      1         382652  29.1250   NaN        Q
24           25         0       3             Palsson, Miss. Torborg Danira  female  8.0      3      1         349909  21.0750   NaN        S
43           44         1       2  Laroche, Miss. Simonne Marie Anne Andree  female  3.0      1      2  SC/Paris 2123  41.5792   NaN        C

2.2.2 任务二: 以"Age"为条件,将年龄在10岁以上和50岁以下的乘 客信息显示出来,并将这个数据命名为midage

# 以年龄为条件  筛选年龄在10岁以上50岁以下的乘客信息
mid_age = df[(df['Age'] > 10) & (df['Age'] < 50)]
mid_age_5 = mid_age.head(5)
print(mid_age_5)

输出结果:

   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 Thayer)  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

2.2.3 任务三:将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来

# reset_index 重新定义索引行  原有的索引行可能不连续的,所以需要重新定义索引行  drop表示替换原有的索引
mid_age = mid_age.reset_index(drop=True)
mid_age_10 = mid_age.head(10)
print(mid_age_10)

输出结果:

   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 Thayer)  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
5            9         1       3    Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)  female  27.0      0      2            347742  11.1333   NaN        S
6           10         1       2                  Nasser, Mrs. Nicholas (Adele Achem)  female  14.0      1      0            237736  30.0708   NaN        C
7           13         0       3                       Saundercock, Mr. William Henry    male  20.0      0      0         A/5. 2151   8.0500   NaN        S
8           14         0       3                          Andersson, Mr. Anders Johan    male  39.0      1      5            347082  31.2750   NaN        S
9           15         0       3                 Vestrom, Miss. Hulda Amanda Adolfina  female  14.0      0      0            350406   7.8542   NaN        S

2.2.4 任务四:使用loc方法将midage的数据中第100,105,108行 的"Pclass","Name"和"Sex"的数据显示出来

# 使用loc方法 将midage的数据中第100 105 108行的"Pclass","Name"和"Sex"的数据显示出来
mid_age_part = mid_age.loc[[100, 105, 108], ['Pclass', 'Name', "Sex"]]
print(mid_age_part)

输出结果:

     Pclass                     Name     Sex
100       3  Petranec, Miss. Matilda  female
105       3    Mionoff, Mr. Stoytcho    male
108       3          Rekic, Mr. Tido    male

2.2.5 任务五:使用iloc方法将midage的数据中第100,105,108行 的"Pclass","Name"和"Sex"的数据显示出来

# 使用iloc方法将midage的数据中第100,105,108行 的"Pclass","Name"和"Sex"的数据显示出来
mid_age_part_1=mid_age.iloc[[100,105,108],[2,3,4]]
print(mid_age_part_1)

输出结果:

     Pclass                               Name   Sex
149       2  Byles, Rev. Thomas Roussel Davids  male
160       3           Cribb, Mr. John Hatfield  male
163       3                    Calic, Mr. Jovo  male

3.PART 3 : 探索性数据分析

3.1 开始之前,导入numpy、pandas包和数据

 加载所需的库

import numpy as np
import pandas as pd

 数据载入

text = pd.read_csv(r'D:\WIN10桌面文件\titanic\train.csv')

3.2 了解你的数据吗?

 教材《Python for Data Analysis》第五章

3.2.1 任务一:利用Pandas对示例数据进行排序,要求升序

 对数据进行排序

    # 让行索引升序排序
    .sort_index()
    # 让列索引升序排序
    .sort_index(axis=1)
    # 让列索引降序排序
    .sort_index(axis=1, ascending=False)
    # 让任选两列数据同时降序排序
    .sort_values(by=['a', 'c'])

3.2.2 任务二:对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列),从数据中你能发现什么?

   在开始我们已经导入了train.csv数据,而且前面我们也学习了导入数据过程,根据上面学习,我们直接对目标列进行排序即可head(20) : 读取前20条数据

text_order = text.sort_values(by=['Fare', 'Age'], ascending=False).head(20)
print(text_order)

输出结果:

     PassengerId  Survived  Pclass                                                   Name     Sex   Age  SibSp  Parch    Ticket      Fare            Cabin Embarked
679          680         1       1                     Cardeza, Mr. Thomas Drake Martinez    male  36.0      0      1  PC 17755  512.3292      B51 B53 B55        C
258          259         1       1                                       Ward, Miss. Anna  female  35.0      0      0  PC 17755  512.3292              NaN        C
737          738         1       1                                 Lesurer, Mr. Gustave J    male  35.0      0      0  PC 17755  512.3292             B101        C
438          439         0       1                                      Fortune, Mr. Mark    male  64.0      1      4     19950  263.0000      C23 C25 C27        S
341          342         1       1                         Fortune, Miss. Alice Elizabeth  female  24.0      3      2     19950  263.0000      C23 C25 C27        S
88            89         1       1                             Fortune, Miss. Mabel Helen  female  23.0      3      2     19950  263.0000      C23 C25 C27        S
27            28         0       1                         Fortune, Mr. Charles Alexander    male  19.0      3      2     19950  263.0000      C23 C25 C27        S
742          743         1       1                  Ryerson, Miss. Susan Parker "Suzette"  female  21.0      2      2  PC 17608  262.3750  B57 B59 B63 B66        C
311          312         1       1                             Ryerson, Miss. Emily Borie  female  18.0      2      2  PC 17608  262.3750  B57 B59 B63 B66        C
299          300         1       1        Baxter, Mrs. James (Helene DeLaudeniere Chaput)  female  50.0      0      1  PC 17558  247.5208          B58 B60        C
118          119         0       1                               Baxter, Mr. Quigg Edmond    male  24.0      0      1  PC 17558  247.5208          B58 B60        C
380          381         1       1                                  Bidois, Miss. Rosalie  female  42.0      0      0  PC 17757  227.5250              NaN        C
716          717         1       1                          Endres, Miss. Caroline Louise  female  38.0      0      0  PC 17757  227.5250              C45        C
700          701         1       1      Astor, Mrs. John Jacob (Madeleine Talmadge Force)  female  18.0      1      0  PC 17757  227.5250          C62 C64        C
557          558         0       1                                    Robbins, Mr. Victor    male   NaN      0      0  PC 17757  227.5250              NaN        C
527          528         0       1                                     Farthing, Mr. John    male   NaN      0      0  PC 17483  221.7792              C95        S
377          378         0       1                              Widener, Mr. Harry Elkins    male  27.0      0      2    113503  211.5000              C82        C
779          780         1       1  Robert, Mrs. Edward Scott (Elisabeth Walton McMillan)  female  43.0      0      1     24160  211.3375               B3        S
730          731         1       1                          Allen, Miss. Elisabeth Walton  female  29.0      0      0     24160  211.3375               B5        S
689          690         1       1                      Madill, Miss. Georgette Alexandra  female  15.0      0      1     24160  211.3375               B5        S

Process finished with exit code 0

  思考:排序后,如果我们仅仅关注年龄和票价两列。根据常识我知道发现票价越高的应该客舱越好,所以我们会明显看出,票价前20的乘客中存活的有14人,这是相当高的一个比例。
  以进一步分析一下
  票价和存活之间的关系,年龄和存活之间的关系呢?
  票价最贵前20个中 女性多于男性(女性12个,男性8个)

3.2.3 任务三:利用Pandas进行算术计算,计算两个DataFrame数据相加结果

  具体请看《利用Python进行数据分析》第五章 算术运算与数据对齐部分
  提醒:两个DataFrame相加后,会返回一个新的DataFrame,对应的行和列的值会相加,没有对应的会变成空值NaN。
  当然,DataFrame还有很多算术运算,如减法,除法等,有兴趣的同学可以看《利用Python进行数据分析》第五章
 算术运算与数据对齐部分,多在网络上查找相关学习资料。

3.2.4 任务四:通过泰坦尼克号数据如何计算出在船上最大的家族有多少人?

 最大的家族有多少人(‘兄弟姐妹个数’+‘父母子女个数’),我们该怎么做呢?

text_max_count = max(text['SibSp']+text["Parch"])
print(text_max_count)

输出结果

10

3.2.5 任务五:学会使用Pandasdescribe()函数查看数据基本统计信息

 关键知识点示例做一遍(简单数据)
 具体请看《利用Python进行数据分析》第五章 汇总和计算描述统计部分

 调用 describe 函数,观察数据基本信息

'''
count : 样本数据大小
mean : 样本数据的平均值
std : 样本数据的标准差
min : 样本数据的最小值
25% : 样本数据25%的时候的值
50% : 样本数据50%的时候的值
75% : 样本数据75%的时候的值
max : 样本数据的最大值
'''

3.2.6 任务六:分别看看泰坦尼克号数据集中票价、父母子女 这列数据的基本统计数据,你能发现什么?

 看看泰坦尼克号数据集中" 票价 "这列数据的基本统计数据

text_F=text['Fare'].describe()
print(text_F)

输出结果:

count    891.000000
mean      32.204208
std       49.693429
min        0.000000
25%        7.910400
50%       14.454200
75%       31.000000
max      512.329200
Name: Fare, dtype: float64

思考:从上面数据我们可以看出,
一共有891个票价数据,
平均值约为:32.20,
标准差约为49.69,说明票价波动特别大,
25%的人的票价是低于7.91的,50%的人的票价低于14.45,75%的人的票价低于31.00,
票价最大值约为512.33,最小值为0。

 通过上面的例子,我们再看看泰坦尼克号数据集中 父母子女个数 这列数据的基本统计数据,然后可以说出你的想法

text_p = text['Parch'].describe()
print(text_p)

输出结果

count    891.000000
mean       0.381594
std        0.806057
min        0.000000
25%        0.000000
50%        0.000000
75%        0.000000
max        6.000000
Name: Parch, dtype: float64

本章内容到这里就结束啦!

你可能感兴趣的:(用python数据分析,python,数据分析,numpy)