工作总结

Python数据分析周号月

时间:2022-08-14 16:35:05  阅读:

下面是小编为大家整理的Python数据分析周号月,供大家参考。

Python数据分析周号月

 

 实训:n Python 数据分析

 〖实训目的〗 了解 Python 基本编程语法,掌握 Python 进行数据载入、预处理、分析和可视化的方法。

 〖实训内容与步骤〗 1.在 在 n Python 中导入数据

 (1)读取 CSV 文件 CSV 文件是由由逗号分割字段构成的数据记录型文件。我们可以方便地把EXCEL 中的电子表格存储为 CSV 文件。例如,我们有一份 CSV 格式的数据(例子数 据 是 英 国 近 些 年 的 降 雨 量 统 计 数 据 , 可 以 从 以 下 网 址 找 到 :https://data.gov.uk/dataset/average-temperature-and-rainfall-england-and-wales/resource/3fea0f7b-5304-4f11-a809-159f4558e7da),也可扫描右侧二维码进行下载。从 EXCEL 中看到的数据如下图 2-53 所示:

 图 2-53 读取 CSV 文件 如果这个文件被保存在以下位置:

 D:\data\uk_rain_2014.csv 我们可以在 Python 中利用 Pandas 库将它导入:

 >>>import pandas as pd >>>df = pd.read_csv("d:\\data\\uk_rain_2014.csv", header=0) 这里需要注意的是,因为 windows 下用于分割目录的“\”符号在 Python 中被用于转义符(转义符就是用来输入特殊符号的引导符号,例如\n 是回车,\r 是换行等),因此“\”本身在 Python 语言中需要通过“\\”来输入。

 以上两行程序就将这个 csv 文件导入成 pandas 中的一种类型为 Dataframe 的对象中,并给这个对象起名为 df。

 二维码 2-15 uk_rain_2014 数据

 为了验证我们确实导入了这个数据文件,我们可以把 df 的内容打印出来:

 >>>print df

 Water Year

 Rain (mm) Oct-Sep

 Outflow (m3/s) Oct-Sep

 Rain (mm) Dec-Feb

 \ 0

  1980/81

  1182

 5408

 292

 1

  1981/82

  1098

 5112

 257

 2

  1982/83

  1156

 5701

 330

 3

  1983/84

 993

 4265

 391

 4

  1984/85

  1182

 5364

 217

 5

  1985/86

  1027

 4991

 304

 6

  1986/87

  1151

 5196

 295

 7

  1987/88

  1210

 5572

 343

 8

  1988/89

 976

 4330

 309

 9

  1989/90

  1130

 4973

 470

 10

 1990/91

  1022

 4418

 305

 11

 1991/92

  1151

 4506

 246

 12

 1992/93

  1130

 5246

 308

 (2)读取 EXCEL 文件 因为 EXCEL 文件本身可以方便地另存为 CSV 文件,所以把 EXCEL 文件导入Python 的一种办法就是将 EXCEL 中的数据表另存为 CSV 文件,然后利用上一节的方法将 CSV 导入 Python。

 当然,Pandas 也提供了直接读取 EXCEL 文件的方法。同样,如果相应的 EXCEL文件放在 D:\data\uk_rain_2014.xlsx,我们同样可以在 Python 中利用 Pandas 库将它导入:

 >>>import pandas as pd >>>df = pd.read_excel("d:\\data\\uk_rain_2014.xlsx") 同样,我们也可以把 df 的内容打印出来作为验证。

 将数据导入 Python 之后,我们就可以对数据进行分析了。但在数据量很大的时候,我们往往需要从数据中提取和筛选出一部分数据来进行针对性的分析。

 2. 数据提取和筛选

 仍然针对上面导入的英国天气数据,由于数据有很多行,我们希望只看到数据的前 5 行:

 >>> df.head(5)

  Water Year

 Rain (mm) Oct-Sep

 Outflow (m3/s) Oct-Sep

 Rain (mm) Dec-Feb

 \

 0

 1980/81

  1182

 5408

 292

 1

 1981/82

  1098

 5112

 257

 2

 1982/83

  1156

 5701

 330

 3

 1983/84

 993

 4265

 391

 4

 1984/85

  1182

 5364

 217

 Outflow (m3/s) Dec-Feb

 Rain (mm) Jun-Aug

 Outflow (m3/s) Jun-Aug

  0

 7248

 174

 2212

  1

 7316

 242

 1936

  2

 8567

 124

 1802

  3

 8905

 141

 1078

  4

 5813

 343

 4313

  由于列也很多(导致无法在屏幕宽度的一行里显示完而有了拆行),则我们可以仅显示前 4 和和前 3 列:

 >>> df.iloc[0:4, 0:3]

  Water Year

 Rain (mm) Oct-Sep

 Outflow (m3/s) Oct-Sep 0

 1980/81

  1182

 5408 1

 1981/82

  1098

 5112 2

 1982/83

  1156

 5701 3

 1983/84

 993

 4265 这里,df 对象的 head 文件用于选择 df 的前 n 行进行切片。而 iloc 用于根据指定的行和列的范围对 df 进行切片。0:4 表示从第 0 行到第 3 行(即前 4 行,不含第 4 行),0:3 表示从第 0 列到第 2 列(即前 3 列,不含第 3 列)。在计算机语言中,第一个索引常常是 0 而不是 1,这一点与我们日常生活中的习惯不同,需要注意。

 3. 数据预处理

 (1)数据转置 有的时候,我们希望交换数据的行和列,这称为“转置”。为了方便演示,我们把刚刚的 df 对象中的数据进行切片,并放在一个新的对象中:

 >>> df1 = df.iloc[0:4, 0:3] >>> df1

  Water Year

 Rain (mm) Oct-Sep

 Outflow (m3/s) Oct-Sep 0

 1980/81

  1182

 5408 1

 1981/82

  1098

 5112

 2

 1982/83

  1156

 5701 3

 1983/84

 993

 4265 我们对 df1 进行转置:

 >>> df1.T

  0

 1

 2

 3 Water Year

 1980/81

 1981/82

 1982/83

 1983/84 Rain (mm) Oct-Sep

 1182

  1098

  1156

 993 Outflow (m3/s) Oct-Sep

  5408

  5112

  5701

  4265 这里用于的 T 方法,与我们在线性代数中学到的转置的表示方式完全一致。

 (2)缺失值处理 有的时候,由于各种各样的原因,原始数据中会有一些数据是缺失的,但我们希望以尽可能准确的方式将缺失的数据补全回来。一般来说,我们可以利用缺失数据附近的数据来预测和推断缺失的值,这在数据上称为回归和拟合。而Pandas 能够自动地帮我们完成这个操作。

 为了学习如何补全缺失值,我们需要找到一些有缺失值的数据。简单起见,我们故意把刚才导入的数据“弄丢”一个点。例如,对于上面的 df1 对象,我们将其中第 2 行第 1 列的 1156 设置为缺失值:

 >>> import numpy as np >>> df1.iloc[2,1] = np.nan >>> df1

  Water Year

 Rain (mm) Oct-Sep

 Outflow (m3/s) Oct-Sep 0

 1980/81

  1182.0

 5408 1

 1981/82

  1098.0

 5112 2

 1982/83

 NaN

 5701 3

 1983/84

 993.0

 4265 在 Python 中,缺失值由 numpy 中的 nan 来表示。因此为了表示“缺失值”的概念,我们需要先引入 numpy 包(并起别名为 np)。如果之前已经导入 numpy,则这一句可以省略。从上面的输出可以看出,我们已经把 df1 的第 2 行第 1 列的值设置为 NaN。

 然后,我们利用 Pandas 的补全缺失值功能进行补全:

 >>> df1.interpolate()

  Water Year

 Rain (mm) Oct-Sep

 Outflow (m3/s) Oct-Sep 0

 1980/81

  1182.0

 5408

 1

 1981/82

  1098.0

 5112 2

 1982/83

  1045.5

 5701 3

 1983/84

 993.0

 4265 可以看到,Dataframe 对象的 interpolate 方法自动通过线性插值的方法,估算出被我们‘弄丢’的值为 1045.5. 4. 数据统计分析

 (1)基础统计 对数据进行分析的第一步往往是对数据进行统计,获得数据的统计特征。在Pandas,达到以上目的最便捷的方法,就是采用 describe 方法。具体示例如下:

 >>> df.describe()

 Rain (mm) Oct-Sep

 Outflow (m3/s) Oct-Sep

 Rain (mm) Dec-Feb

 \ count

 33.000000

  33.000000

 33.000000

 mean

  1129.000000

  5019.181818

  325.363636

 std

  101.900074

 658.587762

 69.995008

 min

  856.000000

  3479.000000

  206.000000

 25%

 1053.000000

  4506.000000

  268.000000

 50%

 1139.000000

  5112.000000

  309.000000

 75%

 1182.000000

  5497.000000

  360.000000

 max

 1387.000000

  6391.000000

  484.000000

 Outflow (m3/s) Dec-Feb

 Rain (mm) Jun-Aug

 Outflow (m3/s) Jun-Aug

  count

  33.000000

 33.000000

  33.000000

  mean

 7926.545455

  237.484848

  2439.757576

  std

  1692.800049

 66.167931

  1025.914106

  min

  4578.000000

  103.000000

  1078.000000

  25%

  6690.000000

  193.000000

  1797.000000

  50%

  7630.000000

  229.000000

  2142.000000

  75%

  8905.000000

  280.000000

  2959.000000

  max

 11486.000000

  379.000000

  5261.000000 可以看出,describe 方法方便地计算中了每一列数据的个数(因为可能有缺失值的存在,因此每一列数据的个数量可能不相同)、平均值、标准差、最小值、最大值,以及 25%、50%、75%分位点的数值。可以通过这些基础的统计指标对数据整体的分布和概况有所了解。当然,Pandas 还提供了其它丰富的统计分析功能,可参阅 pandas 官方文档(http://pandas.pydata.org/)和互联网上的相关教

 程。

 (2)回归分析 对于序列数据(特别是时间序列数据),我们往往希望通过分析历史数据来发现数据的趋势或规律,进而对未来的数据进行预测。我们以一元线性回归为例,介绍一下如何在 Python 进行回归分析。

 一元线性回归的基本思想是假设两个序列 Y 和 X 存在线性关系(Y = aX + b)。根据已知的若干个 X 和 Y 序列的观察值,来计算出最可能的系数 a 和 b。一旦确定了 a 和 b,我们就可以对新出现的 X 值对应的 Y 值进行预测。例如,在上面的例子中,df 的第 0 列是年份(可以看作 X),第 1 列是某个月份的降水量(可以看作 Y)。我们以这两列数据的关系为例子,来介绍如何进行线性回归和预测。假设我们利用数据的第 0 行。

 为了进行一元线性回归,我们需要引入一个新的包:sklearn。

 >>> import numpy as np >>> import pandas as pd >>> from sklearn import datasets, linear_model 然后,我们根据我们的要求构造两个序列 X 和 Y:

 >>> X = [[(float)(value[0:4])] for value in df.iloc[:, 0]] >>> Y = [value for value in df.iloc[:, 1]] >>> X [[1980.0], [1981.0], [1982.0], [1983.0], [1984.0], [1985.0], [1986.0], [1987.0], [1988.0], [1989.0], [1990.0], [1991.0], [1992.0], [1993.0], [1994.0], [1995.0], [1996.0], [1997.0], [1998.0], [1999.0], [2000.0], [2001.0], [2002.0], [2003.0], [2004.0], [2005.0], [2006.0], [2007.0], [2017.0], [2009.0], [2010.0], [2011.0], [2012.0]] >>> Y [1182, 1098, 1156, 993, 1182, 1027, 1151, 1210, 976, 1130, 1022, 1151, 1130, 1162, 1110, 856, 1047, 1169, 1268, 1204, 1239, 1185, 1021, 1165, 1095, 1046, 1387, 1225, 1139, 1103, 1053, 1285, 1090] 这里分别说明一下构造 X 序列和 Y 序列的方法。

 ①X 序列:

 在 sklearn 的线性回归的函数里,并不仅仅能处理一元线性回归,而是可以处理多元线性回归,即一个 Y 序列可以表示为多个自变量序列的线性关系。因此,输入线性回归模型的 X 序列的每一个元素是一个子序列。这个子序列包含着多个

 自变量的观察值。但在我们的例...

相关热词搜索: python数据分析报告总结 Python数据分析周号月 分析 数据 Python

版权所有:学富范文网 2021-2024 未经授权禁止复制或建立镜像[学富范文网]所有资源完全免费共享

Powered by 学富范文网 © All Rights Reserved.。浙ICP备2021006243号-1