【DW组队学习—动手学数据分析】第一章:第三节探索性数据分析-课程学习

复习: 在前面我们已经学习了Pandas基础,知道利用Pandas读取csv数据的增删查改,今天我们要学习的就是 探索性数据分析,主要介绍如何利用Pandas进行排序、算术计算以及计算描述函数describe()的使用。


import numpy as np
import pandas as pd

data = pd.read_csv("train_chinese.csv")

教材《Python for Data Analysis》第五章


'''
我们举了一个例子
pd.DataFrame() :创建一个DataFrame对象
np.arange(8).reshape((2, 4)) : 生成一个二维数组(2*4),第一列:0,1,2,3 第二列:4,5,6,7
index=[2,1] :DataFrame 对象的索引列
columns=['d', 'a', 'b', 'c'] :DataFrame 对象的索引行
'''
df = pd.DataFrame(data = np.arange(8).reshape((2,4)), index = [2,1], columns = ['d', 'a', 'b', 'c'])
df

dabc2012314567

【代码解析】

pd.DataFrame() :创建一个DataFrame对象

np.arange(8).reshape((2, 4)) : 生成一个二维数组(2*4),第一列:0,1,2,3 第二列:4,5,6,7

index=[‘2, 1] :DataFrame 对象的索引列

columns=[‘d’, ‘a’, ‘b’, ‘c’] :DataFrame 对象的索引行

【总结】排序
pandas 支持三种排序方式:按索引标签排序,按列值排序,以及两者结合排序。
1、按索引标签排序
Series.sort_index()DataFrame.sort_index(axis, ascending)

其中:

  • axis可以选择是按行索引排序(0)还是列索引排序(1)
  • ascending可以选择是升序(True)还是降序(False)

2、按列值排序
Series.sort_values()DataFrame.sort_values(by = [“列名”])

3、两者结合排序
DataFrame.sort_values(by = [“行名”, “列名”], ascending)

【拓展】复合行索引:如”a”列和”b”列共同构成行索引
1、设置复合行索引。 df.set_index(list(“ab”))
2、按其中一个行索引排序。 df.sort_index(level = “a”)

1.让行索引升序排序


df.sort_index(0)

dabc1456720123

2.让列索引升序排序


df.sort_index(1)

abcd2123015674

3.让列索引降序排序


df.sort_index(1, ascending = False)

dcba2032114765

4.让任选两列数据同时降序排序


df.sort_values(["a","b"])

dabc2012314567

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

'''
data.head(20)

乘客ID是否幸存乘客等级(1/2/3等舱位)乘客姓名性别年龄堂兄弟/妹个数父母与小孩个数船票信息票价客舱登船港口0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS1211Cumings, Mrs. John Bradley (Florence Briggs Th…female38.010PC 1759971.2833C85C2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S4503Allen, Mr. William Henrymale35.0003734508.0500NaNS5603Moran, Mr. JamesmaleNaN003308778.4583NaNQ6701McCarthy, Mr. Timothy Jmale54.0001746351.8625E46S7803Palsson, Master. Gosta Leonardmale2.03134990921.0750NaNS8913Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)female27.00234774211.1333NaNS91012Nasser, Mrs. Nicholas (Adele Achem)female14.01023773630.0708NaNC101113Sandstrom, Miss. Marguerite Rutfemale4.011PP 954916.7000G6S111211Bonnell, Miss. Elizabethfemale58.00011378326.5500C103S121303Saundercock, Mr. William Henrymale20.000A/5. 21518.0500NaNS131403Andersson, Mr. Anders Johanmale39.01534708231.2750NaNS141503Vestrom, Miss. Hulda Amanda Adolfinafemale14.0003504067.8542NaNS151612Hewlett, Mrs. (Mary D Kingcome)female55.00024870616.0000NaNS161703Rice, Master. Eugenemale2.04138265229.1250NaNQ171812Williams, Mr. Charles EugenemaleNaN0024437313.0000NaNS181903Vander Planke, Mrs. Julius (Emelia Maria Vande…female31.01034576318.0000NaNS192013Masselmani, Mrs. FatimafemaleNaN0026497.2250NaNC


data.sort_values(["票价", "年龄"], ascending = False)

乘客ID是否幸存乘客等级(1/2/3等舱位)乘客姓名性别年龄堂兄弟/妹个数父母与小孩个数船票信息票价客舱登船港口67968011Cardeza, Mr. Thomas Drake Martinezmale36.001PC 17755512.3292B51 B53 B55C25825911Ward, Miss. Annafemale35.000PC 17755512.3292NaNC73773811Lesurer, Mr. Gustave Jmale35.000PC 17755512.3292B101C43843901Fortune, Mr. Markmale64.01419950263.0000C23 C25 C27S34134211Fortune, Miss. Alice Elizabethfemale24.03219950263.0000C23 C25 C27S…………………………………48148202Frost, Mr. Anthony Wood “Archie”maleNaN002398540.0000NaNS63363401Parr, Mr. William Henry MarshmaleNaN001120520.0000NaNS67467502Watson, Mr. Ennis HastingsmaleNaN002398560.0000NaNS73273302Knight, Mr. Robert JmaleNaN002398550.0000NaNS81581601Fry, Mr. RichardmaleNaN001120580.0000B102S

891 rows × 12 columns

【思考】排序后,如果我们仅仅关注年龄和票价两列。根据常识我知道发现票价越高的应该客舱越好,所以我们会明显看出,票价前20的乘客中存活的有14人,这是相当高的一个比例,那么我们后面是不是可以进一步分析一下票价和存活之间的关系,年龄和存活之间的关系呢?当你开始发现数据之间的关系了,数据分析就开始了。

当然,这只是我的想法,你还可以有更多想法,欢迎写在你的学习笔记中。


"""
我们举了一个例子:
frame1_a = pd.DataFrame(np.arange(9.).reshape(3, 3),
                     columns=['a', 'b', 'c'],
                     index=['one', 'two', 'three'])
frame1_b = pd.DataFrame(np.arange(12.).reshape(4, 3),
                     columns=['a', 'e', 'c'],
                     index=['first', 'one', 'two', 'second'])
frame1_a
"""

frame1_a = pd.DataFrame(np.arange(9.).reshape(3, 3),
                     columns=['a', 'b', 'c'],
                     index=['one', 'two', 'three'])
frame1_a

abcone0.01.02.0two3.04.05.0three6.07.08.0

frame1_b = pd.DataFrame(np.arange(12.).reshape(4, 3),
                     columns=['a', 'e', 'c'],
                     index=['first', 'one', 'two', 'second'])
frame1_b

aecfirst0.01.02.0one3.04.05.0two6.07.08.0second9.010.011.0

frame1_a + frame1_b

abcefirstNaNNaNNaNNaNone3.0NaN7.0NaNsecondNaNNaNNaNNaNthreeNaNNaNNaNNaNtwo9.0NaN13.0NaN

【提醒】两个DataFrame相加后,会返回一个新的DataFrame,对应的行和列的值会相加,没有对应的会变成空值NaN。

当然,DataFrame还有很多算术运算,如减法,除法等,有兴趣的同学可以看《利用Python进行数据分析》第五章 算术运算与数据对齐 部分,多在网络上查找相关学习资料。

【总结】表格计算

'''
还是用之前导入的chinese_train.csv如果我们想看看在船上,最大的家族有多少人('兄弟姐妹个数'+'父母子女个数'),我们该怎么做呢?
'''
max(data["堂兄弟/妹个数"]+data["父母与小孩个数"])
10

"""
我们举了一个例子:
frame2 = pd.DataFrame([[1.4, np.nan],
                       [7.1, -4.5],
                       [np.nan, np.nan],
                       [0.75, -1.3]
                      ], index=['a', 'b', 'c', 'd'], columns=['one', 'two'])
frame2

"""
frame2 = pd.DataFrame([[1.4, np.nan],
                       [7.1, -4.5],
                       [np.nan, np.nan],
                       [0.75, -1.3]
                      ], index=['a', 'b', 'c', 'd'], columns=['one', 'two'])
frame2

onetwoa1.40NaNb7.10-4.5cNaNNaNd0.75-1.3

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

DataFrame.describe(percentiles=None, include=None, exclude=None, datetime_is_numeric=False)
生成描述性统计数据,包括非空数个数、平均值、标准差、最小值(0%)、25%、50%、75%、最大值(100%)
其中:

  • percentiles 选择包含在输出中的百分位数,取值为列表
  • include 要包含在结果中的数据类型,”all”(输入的所有列都将包含在输出中)或列表(符合指定类型的列才能统计)或None(包括所有数字列)
  • exclude 不包含在结果中的数据类型,列表(符合指定类型的列不进行统计)或None(不排除)
  • datetime_is_numeric 是否将日期时间 dtypes 视为数字

frame2.describe()

onetwocount3.0000002.000000mean3.083333-2.900000std3.4936852.262742min0.750000-4.50000025%1.075000-3.70000050%1.400000-2.90000075%4.250000-2.100000max7.100000-1.300000

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

data[["票价", "父母与小孩个数"]].describe()

票价父母与小孩个数count891.000000891.000000mean32.2042080.381594std49.6934290.806057min0.0000000.00000025%7.9104000.00000050%14.4542000.00000075%31.0000000.000000max512.3292006.000000

【思考】从上面数据我们可以看出,试试在下面写出你的看法。然后看看我们给出的答案。

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

【总结】本节中我们通过Pandas的一些内置函数对数据进行了初步统计查看,这个过程最重要的不是大家得掌握这些函数,而是看懂从这些函数出来的数据,构建自己的数据分析思维,这也是第一章最重要的点,希望大家学完第一章能对数据有个基本认识,了解自己在做什么,为什么这么做,后面的章节我们将开始对数据进行清洗,进一步分析。

Original: https://blog.csdn.net/sinat_33209811/article/details/126843558
Author: 0_×
Title: 【DW组队学习—动手学数据分析】第一章:第三节探索性数据分析-课程学习

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/678053/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球