目录
知识点
1 数据分析概述
1.1流程
1.2定义
1.3数据分析常用工具
2 科学计算
2.1numpy
2.1.1定义
2.1.2创建数组的方式
2.1.3np.random的随机数函数
3 数据可视化
3.1定义
3.2基本思想
3.3Matplotlib库
3.3.1模块
4 数据分析
4.1Pandas
4.2数据结构
4.3基本使用
实验
知识点
-
1 数据分析概述
-
1.1流程:
-
数据收集
-
数据处理
-
数据分析
-
报告撰写
-
数据展示
-
-
1.2定义:使用统计方法分析大量数据,提取信息,形成结论。
-
1.3数据分析常用工具
-
Numpy
-
定义:Python数值计算扩展
-
功能:存储处理大型矩阵,数组运算,数学函数库
-
ndarray:多维数组对象
-
创建数组函数:array, zeros, ones, empty, arange, linspace, random.rand
-
属性:ndim, shape, size, dtype, itemsize
-
形状改变方法:reshape, resize, ravel, swapaxes, transpose
-
随机数函数:rand, randn, randint, seed
-
统计函数:sum, mean, average, std, var, min, max, argmin, argmax, unravel index, ptp, median
-
-
Matplotlib
-
定义:Python数据可视化绘图模块
-
功能:开源免费,易于嵌入
-
pyplot模块:类似MATLAB命令式绘图
-
图表与风格控制函数:plot, boxplot, bar, barh, hist, pie, scatter, specgram, stackplot, step, violinplot, vlines, polar
-
-
Pandas
-
定义:数据分析模块
-
功能:数据处理、分析、展现
-
数据结构:Series(一维数组),DataFrame(二维表格)
-
基本属性:index, values, dtype, shape, size, columns
-
基本使用:算术运算与数据对齐,IO操作,数据预处理,数据可视化
-
-
-
-
2 科学计算
-
2.1numpy
-
2.1.1定义
-
NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库 。
-
-
ndarray,一个具有矢量运算和复杂广播能力的多维数组;
-
组成
-
创建adarray对象的函数
-
ndarray对象的常见属性
-
改变数组形状的办法
-
-
-
-
能够对整组数据进行快速运算,无需编写循环;
-
线性代数、随机数生成以及傅里叶变换功能;
-
用于集成由C、C++、Fortran等语言编写的代码API。
-
-
-
2.1.2创建数组的方式
-
array()
-
ones()
-
arange()
-
-
2.1.3np.random的随机数函数
-
统计函数
-
-
示例
-
-
-
-
3 数据可视化
-
3.1定义:将数字信息以图形图像形式呈现
-
3.2基本思想:数据作为图元表示,构成图形,多维属性表示
-
3.3Matplotlib库
-
3.3.1模块
-
Python绘图模块——pyplot
-
pyplot 模块隶属于matplotlib绘图工具库
-
pyplot模块中封装了一套类似MATLAB命令式的绘图函数,用户只要调用pyplot模块中的函数,就可以快速绘图。
-
引入方式
-
函数表达
-
plot(x, y, fmt, * args,** kwargs )
-
参数含义
-
x和y参数用于接收x和y轴所用到的数据,可以是列表或numpy数组;
-
fmt参数是可选的,用于控制组成线条的字符串,由颜色值字符、风格值字符和标记值字符组成。
-
-
-
-
图标与风格控制
-
绘图区域
-
-
-
-
示例
-
-
-
-
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置显示中文字体 plt.rcParams['axes.unicode_minus'] = False # 设置正常显示符号 data = np.arange(0, 1.1, 0.01) plt.title("曲线") # 添加标题 plt.xlabel("x") # 添加x轴的名称 plt.ylabel("y") # 添加y轴的名称 # 设置x和y轴的刻度 plt.xticks([0, 0.5, 1]) plt.yticks([0, 0.5, 1.0]) plt.plot(data, data**2) # 绘制y=x^2曲线 plt.plot(data, data**3) # 绘制y=x^3曲线 plt.legend(["y=x^2", "y=x^3"]) # 添加图例 plt.show() # 在本机上显示图形
-
-
-
-
4 数据分析
-
4.1Pandas简介:https://pandas.pydata.org/
-
pandas是专门为解决数据分析任务而建立的模块,它包含了与数据处理、数据分析和数据展现相关的功能。
-
-
4.2数据结构:
-
Series:带标签的一维数组
-
-
Series表示一维数据,类似于一维数组,能够保存任意类型的数据,比如整型、浮点型等。Series由数据和与之相关的整数或标签(自定义)索引两部分组成,默认它会给每一项数据分配编号,编号的范围从0到N-1(N为长度) 。
-
-
语法
-
-
DataFrame:带标签的二维表格
-
-
DataFrame类似于电子表格或数据库表,由行和列组成。DataFrame也可以视为一组共享行索引的Series对象,其结构示意如图所示。
-
-
语法
-
-
对象常见属性
-
-
4.3基本使用:
-
算术运算与数据对齐
-
pandas具有自动对齐的功能,它能够将两个数据结构的索引对齐。参与运算的两个数据结构的基础形状可以不同,具有的索引也可以不同。当pandas中的两个数据结构进行运算时,它们会自动寻找重叠的索引进行计算,若索引不重叠则自动赋值为NaN。若原来的数据都是整型,生成NaN以后会自动转换成浮点型。任何数与NaN计算的结果都为NaN。
-
-
-
IO操作:读取和写入文件
-
常见的处理方式是将待分析的数据以文件的形式存储到本地,之后再对文件进行读写操作。pandas模块提供了一系列读写不同格式文件的函数和方法,关于这些函数和方法的说明如表所示。
-
-
-
-
数据预处理:数据清洗、数据集成、数据变换、数据规约
-
实际使用的数据一般具有不完整性、冗余性和模糊性,无法直接满足数据分析的要求。为了提高数据的质量,在进行数据分析之前,必须对原始数据做一定的预处理工作。
-
数据预处理是整个数据分析过程中最为耗时的操作,使用经过规范化处理后的数据不但可以节约分析时间,而且可以保证分析结果能够更好起到决策和预测作用。
-
-
-
示例
-
-
-
数据可视化:绘制图形
-
matplotlib是众多Python可视化工具的鼻祖,但实现较为底层,画图步骤繁琐,需要很多基本组件。pandas是基于matplotlib的开源框架之一,直接使用其自身的绘图功能较matplotlib更加方便简单。Pandas内置数据类型绘制图形的常用方法如表所示。
-
示例
-
#pandas的基本使用 import numpy as np import pandas as pd import matplotlib.pyplot as plt #随机产生0~1之间的10行4列数据 df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d']) #绘制柱状图 df.plot(stacked=True,kind='bar') plt.show()
-
-
-
-
示例
-
-
-
小结
-
掌握数据分析工具的使用方法
-
使用工具分析数据的能力
-
实验
- 实验目的:
- 了解什么是数据分析
- 熟悉numpy数组进行科学计算
- 掌握numpy、matplotlib、pandas模块的作用
- 熟悉matplotlib绘制图表、pandas库处理数据
- 实验内容:
说明:基础题为必做题,提高题为选做题
1. (基础题)随机产生10行10列的矩阵(每个数的范围:100~1000),求最大值、最小值及最大最小值的差。(利用Numpy模块)
程序运行效果如下:
程序完整代码:
import numpy as np
# 随机产生10行10列的矩阵,每个数的范围:100~1000
matrix = np.random.randint(100, 1001, size=(10, 10))
# 求最大值、最小值及最大最小值的差
max_value = np.max(matrix)
min_value = np.min(matrix)
difference = max_value - min_value
print("矩阵:")
print(matrix)
print("最大值:", max_value)
print("最小值:", min_value)
print("最大值与最小值的差:", difference)
2.(基础题)根据程序运行结果,补充代码。
import numpy as np
import matplotlib.pyplot as plt
nums = np.arange(0, 101) # 生成0~100的数组
# 分成2*2的矩阵区域,占用编号为1的区域,即第1行第1列的子图
plt.subplot(2,1,1)
# 在选中的子图上作图
plt.plot(nums, nums)
# 分成2*2的矩阵区域,占用编号为2的区域,即第1行第2列的子图
_________①_____________
# 在选中的子图上作图
_________②_____________
_________③_____________
import numpy as np
import matplotlib.pyplot as plt
nums = np.arange(0, 101) # 生成0~100的数组
# 分成2*2的矩阵区域,占用编号为1的区域,即第1行第1列的子图
plt.subplot(2, 1, 1)
# 在选中的子图上作图
plt.plot(nums, nums)
# 分成2*2的矩阵区域,占用编号为2的区域,即第1行第2列的子图
plt.subplot(2, 1, 2)
plt.plot(nums, nums ** 2) # 绘制平方曲线
plt.ylabel('Square') # y轴标签
plt.xlabel('Index') # x轴标签
3(基础题).已知有如下一张表格:
按以下要求操作:
- 仿照以上表格结构,创建一个DataFrame对象。
- 将DataFrame的B列数据按照降序排列
- 将排序后的DataFrame写入到E盘test.csv文件中。
根据题目要求,补充代码。
import numpy as np
import pandas as pd
df_data = np.array([[1, 5, 8, 8], [2, 2, 4, 9],
[7, 4, 2, 3], [3, 0, 5, 2]]) # 创建数组
col_data = np.array(['A', 'B', 'C', 'D']) # 创建数组
# 基于数组创建DataFrame对象
df_obj = pd.DataFrame(columns=___(1)______, data=___(2)____)
print(df_obj)
# 将B列数据降序排列
sorted_df = df_obj.sort_values(by=['B'], ascending=False)
print(sorted_df)
# 将sorted_df写入文件
sorted_df._____(3)_____(r'E:\write_data.csv')
print('写入完毕')
import numpy as np
import pandas as pd
df_data = np.array([[1, 5, 8, 8], [2, 2, 4, 9], [7, 4, 2, 3], [3, 0, 5, 2]]) # 创建数组
col_data = np.array(['A', 'B', 'C', 'D']) # 创建数组
# 基于数组创建DataFrame对象
df_obj = pd.DataFrame(columns=col_data, data=df_data)
print(df_obj)
# 将B列数据降序排列
sorted_df = df_obj.sort_values(by=['B'], ascending=False)
print(sorted_df)
# 将sorted_df写入文件
sorted_df.to_csv(r'E:\test.csv', index=False) # index=False表示不写入行索引
print('写入完毕')
4(基础题)现有如下所示的股票数据:
按以下要求操作:
- 仿照上图表格,创建一个DataFrame对象
- 使用条形图展示股票数据,其中证券简称为x轴,最新价为y轴。
- 将条形图以shares_bar.png为文件名保存在E盘。
根据题目要求,补充代码。
import pandas as pd
import matplotlib.pyplot as plt
stock_data = pd.DataFrame({'证券代码': ['000609', '000993', '002615',
'000795', '002766', '000971',
'000633', '300173', '300279', '000831'],
'证券简称': ['中迪投资', '闽东电力', '哈尔斯',
'英洛华', '索菱股份', '高升控股',
'合金投资', '智慧松德', '和晶科技', '五矿稀土'],
'最新价': [4.80, 4.80, 5.02, 3.93, 6.78,
3.72, 4.60, 4.60, 5.81, 9.87],
'涨幅跌%': [10.09, 10.09, 10.09, 10.08,
10.06, 10.06, 10.06, 10.05, 10.05, 10.04]})
print(stock_data)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
x_axis = stock_data[___(1)______]#证券简称为x轴
y_axis = stock_data[___(2)______]#最新价为y轴
plt.___(3)______(x_axis, y_axis) #使用条形图展示股票数据
# 将条形图以shares_bar.png为文件名保存在E盘
plt.savefig(___(4)______)
plt.show()
import pandas as pd
import matplotlib.pyplot as plt
stock_data = pd.DataFrame({'证券代码': ['000609', '000993', '002615',
'000795', '002766', '000971',
'000633', '300173', '300279', '000831'],
'证券简称': ['中迪投资', '闽东电力', '哈尔斯',
'英洛华', '索菱股份', '高升控股',
'合金投资', '智慧松德', '和晶科技', '五矿稀土'],
'最新价': [4.80, 4.80, 5.02, 3.93, 6.78,
3.72, 4.60, 4.60, 5.81, 9.87],
'涨幅跌%': [10.09, 10.09, 10.09, 10.08,
10.06, 10.06, 10.06, 10.05, 10.05, 10.04]})
print(stock_data)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
x_axis = stock_data['证券简称'] # 证券简称为x轴
y_axis = stock_data['最新价'] # 最新价为y轴
plt.bar(x_axis, y_axis) # 使用条形图展示股票数据
# 将条形图以shares_bar.png为文件名保存在E盘
plt.savefig(r'E:\shares_bar.png')
plt.show()