下面是小编为大家整理的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