数据的采集与分析科目的期末复习
大数据概论
特征
- 数据量大
- 数据类型多
- 数据产生速度快
- 数据价值密度低
数据量大
数据规模从TB–>PB(拍字节)
数据类型多
- 结构化 : 数据库中的数据遵循某种规则
- 半结构化 : 有一定的关系和约束,但是本质上不存在关系的数据
- 非结构化 : 不规则不完整地数据
数据产生速度快
- 数据产生快
- 数据处理快
数据价值密度低
数据海量,但是价值密度低
数据采集
主要问题
- 数据源多种多样
- 数据量大,变化快
- 如何保证数据采集的可靠性
- 如何避免数据重复
- 如何保证数据的质量
数据预处理
- 数据清理: 清理数据噪声,纠正不一致
- 数据集成: 多个数据源合并成一个数据存储
- 数据规约: 降低数据规模,通过聚集,删除冗余 ,聚类
- 数据变换: 压缩到较小空间,提高挖掘算法的效率和准确率
python
c = 'B' #大写转小写
d = chr(ord('a') + ( ord(c) - ord('A') ) )
print(d)
------------------------------------------
c = 'c' #小写转大写
d = chr(ord('A') + ( ord(c) - ord('a') ) )
print(d)
列表常用函数
list.append()
list.extend()
list.count()
list.index(obj)
list.insert(index,obj)
list.remove()
del list[index]
list.pop[index = -1]
list.sort()
list.reverse()
spider
HTTP操作
- 客户端与服务器建立链接
- 客户端发送一个请求给服务器,URL + 协议版本号 + MIME…
- 服务器收到请求后,给予反应,返回响应信息
- 客户端收到返回信息,用浏览器显示信息,然后断开和服务器链接
爬虫工作流程
- 发送请求
- 获取相应的信息
- 解析内容
- 保存数据
正则表达式
- 替换数字
- 替换指定内容
- 删除空格
- 删除指定字符
Scrapy
组成
- Scrapy Engine
- Scheduler
- Downloader
- Spiders
- Item pipeline
- Downloader middle_wares
- Spider middle_wares
爬虫开发流程
- 新建项目
- 确定抓取网页
- 指定爬虫
- 设计管道存储爬取内容
数据库
实体间的联系
- 一对一
- 一对多
- 多对多
数据可视化
方法和组成
- 数据空间: 对多属性多元素的数据集构成多维数据空间
- 数据开发 利用一定工具和算法对数据进行推演和计算
- 数据分析 切块,切片,旋转…对角度观察数据
- 数据可视化 将大量的数据以图片图像的形式展示
可视化的标准
- 实用性
- 完整性
- 真实性
- 艺术性
- 交互性
表格类型
- 柱状图,K线图,直方图
- 散点图,气泡图,热力图
- 饼图,环图
- 折线图,趋势图,
- 雷达图,色块图,
- 仪表盘,词云,漏斗图
数据存储与清洗
块存储,文件存储,对象存储
块存储
- DAS
- SAN
- 云存储
文件存储
- NAS
对象存储
- 对象(object)
- 对象存储设备(OSD)
- 元数据服务器
- 客户端(client)
数据存储方式
**分布式存储,NoSQL数据库,NewSQL,云数据库 **
数据清洗
- 一致性检查
- 无效值和缺失值处理
- 估算
- 整例删除
- 变量删除
- 成对删除
数据标准化
- min-max
- z-score
- Decimal -scaling
数据抽取
流程
- 理解数据来源
- 整理检查和清洗数据
- 集成清洗好的数据,建立抽取模型
- 数据抽取和转换
- 将结果临时存放
- 最终确认并应用于数据挖掘
代码
# 导入 numpy 模块,它提供了很多用于处理数值数据的功能,虽然在这个特定的代码中没有直接用到。
import numpy as np
# 导入 pandas 模块,它提供了很多数据处理和分析的功能。
import pandas as pd
# 创建一个 DataFrame,有两列,分别为 'level1' 和 'number1'。'level1' 列的值为 ['a', 'b', 'c', 'd'],'number1' 列的值为 [1, 3, 5, 7]。
data1 = pd.DataFrame({'level1' : ['a', 'b', 'c', 'd'], 'number1' : [1, 3, 5, 7]})
# 创建另一个 DataFrame,有两列,分别为 'level2' 和 'number2'。'level2' 列的值为 ['a', 'b', 'c', 'e'],'number2' 列的值为 [2, 4, 6, 8]。
data2 = pd.DataFrame({'level2' : ['a', 'b', 'c', 'e'], 'number2' : [2, 4, 6, 8]})
# 合并两个 DataFrame。合并的方式为:在 data1 中找到 'level1' 列,在 data2 中找到 'level2' 列,合并它们相同的值。
# 这里的相同值为 'a', 'b' 和 'c',所以合并后的 DataFrame 会包含这三个值的所有信息。
# 'd' 只在 data1 中出现,'e' 只在 data2 中出现,所以合并后的 DataFrame 不包含 'd' 和 'e' 的信息。
print(pd.merge(data1, data2, left_on='level1', right_on= 'level2'))
# 导入 numpy 模块,它提供了很多用于处理数值数据的功能,虽然在这个特定的代码中没有直接用到。
import numpy as np
# 导入 pandas 模块,它提供了很多数据处理和分析的功能。
import pandas as pd
# 使用 pandas 创建一个 DataFrame。DataFrame 是 pandas 里的一个主要数据结构,类似于一个表格。
# 这个 DataFrame 有三列('col1','col2','col3')和两行(索引为 'a' 和 'b')。
df = pd.DataFrame([[1,2,3], [4,5,6]], columns= ['col1', 'col2', 'col3'], index= ['a','b'])
# 打印出 DataFrame 的内容。
print(df)
# 重新索引 DataFrame,添加 'c' 和 'd' 两个新的行索引。
# 由于这两行在原始数据中没有对应的值,所以新添加的行的值都会是 NaN。
df = df.reindex(['a', 'b', 'c', 'd'])
# 删除名称为 'col3' 的列。注意,这里的 axis 参数设为 1,
# 表示删除的是列,而不是行(默认情况下 axis 为 0,表示删除行)。
df = df.drop(['col3'], axis = 1)
# 打印出经过删除操作后的 DataFrame 的内容。
print(df)
# 导入 pandas 模块,它提供了很多数据处理和分析的功能。
import pandas as pd
# 导入 numpy 模块,它提供了很多用于处理数值数据的功能,虽然在这个特定的代码中没有直接用到。
import numpy as np
# 使用 pandas 创建一个 DataFrame。DataFrame 是 pandas 里的一个主要数据结构,类似于一个表格。
# 这个 DataFrame 有三列('col1','col2','col3')和两行(索引为 'a' 和 'b')。
df = pd.DataFrame([[1, 2, 3], [4, 5, 6]], columns = ['col1', 'col2', 'col3'], index = ['a', 'b'])
# 打印出 DataFrame 的内容。
print(df)
# 重新索引 DataFrame,添加 'c' 和 'd' 两个新的行索引。
# 由于这两行在原始数据中没有对应的值,所以新添加的行的值都会是 NaN。
df = df.reindex(['a', 'b', 'c', 'd'])
# 删除索引为 'a' 的行。
df = df.drop('a')
# 打印出经过删除操作后的 DataFrame 的内容。
print(df)
# 导入 pandas 模块,我们将使用它创建和处理 DataFrame。
import pandas as pd
# 导入 numpy 模块,它提供了很多用于处理数值数据的功能,尽管在这段代码中没有直接使用到。
import numpy as np
# 创建一个 DataFrame 对象。DataFrame 是 pandas 中的一个基本结构,可以看作是一个表格。
# 这里,我们用一个二维列表来创建 DataFrame,并指定列名(columns)和行索引(index)。
# 列名为 'col1'、'col2' 和 'col3',行索引为 'a' 和 'b'。
df = pd.DataFrame([[1, 2, 3], [4, 5, 6]], columns= ['col1', 'col2', 'col3'], index= ['a', 'b'])
# 这一行并不做任何事情,因为它只是 df 对象的一个引用,但是没有赋值或者打印操作。
# 在一些交互式Python解释器环境中(比如 Jupyter notebook),它会显示 df 的内容。如果想答应需要print(df)
df
# 使用 reindex 方法对 DataFrame 进行重新索引。这将改变 DataFrame 的行索引。
# 在这个例子中,我们添加了 'c' 和 'd' 两个新的行索引。因为对于这两个索引,我们并没有提供对应的数据,
# 所以其对应的列数据会被填充为 NaN。
df = df.reindex(['a', 'b', 'c', 'd'])
# 一定要将df.reindex()的结果重新赋值给df,因为这个函数是重新创造了一个df,
# 并没有在原来的df上进行修改,但是在一些交互式Python解释器环境中,df.reindex()会直接显示修改后的结果的内容,
# 但实际上并没有修改原来的df。
# 使用 print 函数打印 df 的内容。这将显示出 DataFrame 的当前状态,包括 'c' 和 'd' 两行的 NaN 数据。
print(df)
#关于集成开发环境pycharm和交互式解释器环境Jupyter notebook代码执行结果的区别在后面几个文件中不再赘述!
import matplotlib.pyplot as plt # 导入matplotlib库的pyplot模块,用于数据可视化,简称为plt
import numpy as np # 导入numpy库,用于数据处理,简称为np
x = np.random.rand(100) # 生成一个包含100个在[0, 1)范围内的随机数的一维数组,赋值给变量x
y = np.random.rand(100) # 生成一个包含100个在[0, 1)范围内的随机数的一维数组,赋值给变量y
plt.scatter(x, y) # 使用matplotlib库的pyplot模块的scatter函数,根据x和y的值绘制出散点图
plt.show() # 展示生成的散点图
import matplotlib.pyplot as plt # 导入matplotlib库的pyplot模块,用于数据可视化,简称为plt
import numpy as np # 导入numpy库,用于数据处理,简称为np
x = np.arange(10) # 生成0到9的整数序列
y = np.random.randint(0, 20, 10) # 在0-19之间生成10个随机整数
plt.bar(x, y) # 使用matplotlib库的pyplot模块的bar函数,根据x和y绘制出柱状图
plt.show() # 展示生成的柱状图