数据科学:原理、架构与设计思想
探索数据科学的本质、周期与应用
science 数据科学的定义与概述
数据科学是一门研究如何收集、管理和分析各种类型数据以获取有意义信息的学科。它将数据视为任何可以被分析以提供见解的证据或观察结果。
在早期,数据科学的工作分散在多个学科中,包括统计学、数学、计算机科学和社会科学。人们曾认为数据收集、管理和分析将由不同类型的专家独立完成。然而,技术进步带来了数据的激增,模糊了这些工作之间的界限。
数据科学 = 统计学 + 计算机科学 + 领域专业知识
hub 数据科学的跨学科性质
数据科学是一个跨学科领域,它融合了三个关键领域的专业知识:
- 计算机科学:提供数据处理、存储和计算的技术基础,包括算法、数据库和编程技能。
- 领域专业知识:提供对特定行业或领域的深入理解,帮助提出正确的问题并解释结果。
- 数学与统计学:提供分析数据所需的数学模型和统计方法,用于推断和预测。
loop 数据科学周期
数据科学任务遵循一个称为数据科学周期的过程,包括问题定义、数据收集、数据准备、数据分析和数据报告。根据Anaconda(2020)的调查,数据科学家大约花费整个流程的一半时间在数据收集和清理上,而数据分析和沟通各占约四分之一到三分之一的时间。
- 问题定义:明确定义问题陈述,为数据分析项目的目标和范围建立清晰的目标。
- 数据收集:系统地收集感兴趣变量的信息。数据可以是有目的地收集,也可以是我们日常活动的副产品。
- 数据准备:处理收集的数据,使其适合分析。这包括处理不同语言、时区、拼写错误等问题。
- 数据分析:使用各种分析方法(从简单的最小值和最大值检查到高级的依赖变量建模)来发现有意义的见解。
- 数据报告:以最佳方式呈现数据,有效传达从数据分析中学到的信息。数据可视化是报告数据的重要方式。
# 数据科学周期示例代码 import pandas as pd import matplotlib.pyplot as plt # 1. 问题定义:分析销售数据以了解季节性趋势 # 2. 数据收集 sales_data = pd.read_csv('sales_data.csv') # 3. 数据准备 sales_data['date'] = pd.to_datetime(sales_data['date']) sales_data = sales_data.dropna() # 4. 数据分析 monthly_sales = sales_data.groupby(sales_data['date'].dt.month)['amount'].sum() # 5. 数据报告 plt.figure(figsize=(10, 6)) monthly_sales.plot(kind='bar') plt.title('月度销售趋势') plt.xlabel('月份') plt.ylabel('销售额') plt.show()
storage 数据管理的演变
随着数据量的增长和性质的变化,数据管理经历了从本地存储到云端数据仓库的演变:
早期数据管理
数据主要存储在本地设备(如单台计算机或便携式硬盘)上,数据处理和分析也在本地完成。这种方式适用于结构化且规模较小的数据。
现代数据管理
基于云的管理系统将数据存储在指定服务器上,并在云端执行基本处理。企业可以订阅云仓库服务(如Amazon RedShift或Google BigQuery),无需购买和维护物理存储设备。
现代数据管理系统不仅存储数据本身,还在云端执行一些基本处理。这些系统被称为数据仓库,它们在中央位置存储和管理来自各种来源的大量数据,为商业智能和决策提供高效的检索和分析。
insights 数据科学的应用和意义
数据科学在现代社会中有着广泛的应用,它帮助组织和个人做出更明智的决策,发现隐藏的模式和趋势,并预测未来的发展。
数据科学的意义在于它能够将原始数据转化为有价值的见解和知识,帮助组织优化运营、提高效率、创新产品和服务,并最终创造更大的社会和经济价值。随着数据量的持续增长和分析技术的不断进步,数据科学将在未来发挥更加重要的作用。
数据科学在不同领域的应用
探索数据科学如何改变各行各业
business 商业与金融
数据科学在商业运营中扮演着关键角色。企业可以收集和分析与客户、产品和销售相关的各种数据,以推出新产品并最大化收入/利润。
案例:沃尔玛的数据分析
沃尔玛每小时从数百万客户那里收集多个PB的非结构化数据。通过分析这些大数据,沃尔玛能够研究消费者模式并调整库存,避免过度库存或库存不足。这种分析帮助公司实现了10%至15%的在线销售增长,相当于增加了10亿美元的收入。
一个著名的例子是2004年飓风弗朗西斯来临前,沃尔玛通过分析之前飓风查理期间的销售数据,预测到草莓Pop-Tarts的销量会增加约七倍,因此提前向风暴路径上的商店运送了额外的草莓Pop-Tarts。
案例:亚马逊的物流优化
亚马逊利用机器学习算法预测每个地区商品的需求,并提前在相应地区的履行中心备货。这种预测策略帮助亚马逊减少了每种产品的交付时间,并扩大了两天发货的商品选择。截至2023年,超过76%的订单是从客户所在地区内发货的,当日发货设施中的商品可以在短短11分钟内准备好装上送货卡车。
在金融领域,数据科学被广泛用于欺诈检测。基于客户数据和过去欺诈活动的模式,机器学习算法可以实时确定交易是否具有欺诈性。
engineering 工程与科学
数据科学在工程和科学的各个领域也发挥着重要作用。物联网(IoT)是一个受益于数据科学的新技术范式的例子。物联网描述了多个对象通过互联网相互交互的网络。数据科学在这些交互中扮演着至关重要的角色,因为网络中对象的行为通常是由网络中另一个对象收集的数据触发的。
# 物联网设备数据处理流程 import pandas as pd from sklearn.ensemble import IsolationForest # 1. 数据收集 sensor_data = pd.read_csv('iot_sensor_data.csv') # 2. 数据预处理 sensor_data['timestamp'] = pd.to_datetime(sensor_data['timestamp']) sensor_data = sensor_data.set_index('timestamp') # 3. 异常检测 model = IsolationForest(contamination=0.01) anomalies = model.fit_predict(sensor_data[['temperature', 'humidity']]) # 4. 结果分析 anomaly_indices = sensor_data.index[anomalies == -1] print(f"检测到 {len(anomaly_indices)} 个异常数据点")
policy 公共政策与教育
智慧城市是数据科学在公共政策中最具代表性的应用之一。全球多个城市,包括阿拉伯联合酋长国的马斯达尔城和韩国的松岛,已经安装了数千个数据收集传感器,用于优化能源消耗。
在教育领域,数据科学也产生了深远影响。许多教育平台现在是在线的,可以产生大量的学生数据,使教师能够基于这些收集的数据研究每个人的学习情况。例如,在线学习管理系统(如Canvas)将成绩簿集中在一个地方,在线教科书(如zyBooks)通过学生在练习中的表现收集他们对每个主题的掌握程度。
个性化学习应用:ALEKS
ALEKS是一个在线自适应学习应用,根据学习者过去的表现为每个学习者提供个性化材料。这种基于数据的学习方法使教育从”一刀切”的模式转向更加个性化的体验。
medical_services 医疗保健与医学
医疗保健和医学领域也使用数据科学。他们的目标通常是利用预测分析提供更准确的诊断和治疗——预测分析是分析历史数据并预测未来事件的统计技术、算法和机器学习方法。
精准医疗倡议
精准医疗倡议是由美国国立卫生研究院(NIH)和其他研究中心进行的一项长期研究工作,目标是更好地了解一个人的基因、环境和生活方式如何帮助确定预防或治疗疾病的最佳方法。该倡议旨在查看尽可能多的数据,以更主动地照顾患者的健康。例如,该倡议包括基因组测序,以寻找某些表明癌症或其他疾病风险更高的突变。
数据科学在健康领域的另一个应用重点是降低医疗保健服务的成本。利用患者症状和处方的历史记录,由人工智能驱动的聊天机器人可以提供自动化的医疗保健建议。这将减少患者看药剂师或医生的需求,从而提高那些更需要的人的医疗保健可及性。
sports_soccer 体育与娱乐
数据科学在体育和娱乐行业也很普遍。体育自然会产生大量数据——关于球员、位置、球队、赛季等等。因此,就像有商业分析的概念一样,体育中这些数据的分析被称为体育分析。
案例:奥克兰运动家棒球队
奥克兰运动家棒球队在2002赛季 famously 分析了球员招募。球队管理层采用了一种称为赛伯计量学的统计方法来招募和定位球员。通过赛伯计量学,球队能够识别出关键但传统上被忽视的指标,如上垒率和长打率。该队凭借与其他球队相比的小预算,招募了一批在这些指标上得分很高的被低估球员,并在此过程中成为当年棒球界最令人兴奋的球队之一,打破了美国联盟连续20场胜利的记录。这个故事被迈克尔·刘易斯写成一本书,并被改编成电影:《点球成金》。
在娱乐行业,数据科学通常用于做出数据驱动的、个性化的建议,以满足消费者,这被称为推荐系统。推荐系统的一个例子是Netflix等视频流媒体服务。Netflix Research考虑订阅者的观看历史、对内容的满意度和互动记录(如搜索历史)。他们的目标是在面临一些挑战的情况下做出完美的个性化推荐,包括订阅者自己常常不知道他们想看什么。
trending_up 数据科学的趋势与问题
技术使收集大量数据成为可能,这导致了处理和分析这些数据的挑战。但技术再次提供了解决方案!数据科学家现在使用机器学习来更好地理解数据,人工智能可以自动做出数据驱动的决策。
smart_toy机器学习与人工智能
随着这些进步,机器学习和人工智能在数据科学中的应用越来越广泛。这些技术使数据科学家能够从大量数据中提取更深入的见解,并自动化复杂的决策过程。
security伦理与隐私
随着数据收集的增加,许多人提出了对伦理和隐私的担忧。谁被允许收集这些数据,谁有权访问它们?当过去的数据本身存在偏见时,训练有素的机器学习算法和人工智能也会做出有偏见的决定。
因此,仔细关注数据收集过程和评估训练结果的偏见至关重要。数据科学周期中的伦理问题将更深入地讨论这些和其他伦理问题以及隐私问题。
数据、数据类型和数据集格式
探索数据的基本概念、分类和存储方式
history 数据的历史和定义
数据并不是新概念!人类从一开始就在收集数据和生成数据集。这始于石器时代,当时人们在岩石上雕刻一些形状和图片,称为岩画。岩画提供了关于动物外观和它们如何进行日常生活的见解,这对我们来说是有价值的”数据”。古埃及人发明了第一种纸张——纸莎草纸,以便记录他们的数据。纸莎草纸也使批量存储数据变得更加容易,例如列出库存、记录财务交易和为后代记录故事。
“数据”是拉丁词”datum”的复数形式,翻译为被给予或使用的东西,通常用来表示数据集中的单条信息或单个参考点。当你听到”数据”这个词时,你可能会想到某种”数字”。确实,数字通常被认为是数据,但我们周围还有许多其他形式的数据。任何我们可以分析以编译信息——高级见解——的东西都被认为是数据。
学期 | 教师 | 班级规模 | 评分 |
---|---|---|---|
2020年秋季 | A | 100 | 完全不推荐 |
2021年春季 | A | 50 | 强烈推荐 |
2021年秋季 | B | 120 | 不太推荐 |
category 数据类型
数据有各种类型。有些数据是定量数据,这意味着它们使用数字进行测量和表达。定量数据处理数量和金额,通常使用统计方法进行分析。例子包括数值测量,如身高、体重、温度、心率和销售数字。定性数据是非数值数据,通常描述主观属性或特征,使用主题分析或内容分析等方法进行分析。例子包括描述、观察、访谈和开放式调查回复,这些涉及不可量化的细节(例如,照片、Reddit上的帖子)。
functions定量数据
用数字表示可测量的量,可能后跟一些符号表示单位。定量数据进一步分为连续数据和离散数据。
- 连续数据:值可以是任何数字。换句话说,值是从无限数字集合中选择的。例如:身高、体重、温度。
- 离散数据:值遵循特定精度,这使得可能的值集合是有限的。例如:班级人数、家庭成员数量。
label定性数据
以不同形式表示,如单词、符号,甚至是数字。分类值是从有限值集合中选择的,该值不一定表示可测量的量。定性数据可分为名义数据和有序数据。
- 名义数据:可能的值集合不包括任何排序概念。例如:性别、国籍、眼睛颜色。
- 有序数据:可能的值集合包括排序概念。例如:教育程度(小学、中学、大学)、满意度评分(不满意、一般、满意)。
dataset 数据集
数据集是为分析和解释而组织的观察或数据实体的集合。许多数据集可以表示为表格,其中每行表示一个唯一的数据实体,每列定义实体的结构。
table_chart结构化数据集
结构化数据集具有预定义或组织的数据模型。它们以表格格式组织,具有明确定义的字段和关系。所有实体都具有相同属性的值,这使得它们可以列为表格,其中每个项目沿表格的行列出。
例子:课程评估记录、销售数据、人口普查数据。
bubble_chart非结构化数据集
非结构化数据集缺乏预定义或组织的数据模型。它通常以文本、图像、视频、音频记录或其他内容的形式存在,其中信息不适合整齐地放入行和列中。非结构化数据集通常被处理为结构化数据集,以便数据科学家可以分析数据。
例子:亚马逊产品评论、Twitter帖子、Instagram上的公共图片、TikTok上的热门短视频。
# 处理结构化数据(CSV文件) import pandas as pd # 读取结构化数据 structured_data = pd.read_csv('course_evaluations.csv') print(structured_data.head()) # 处理非结构化数据(文本文件) with open('product_reviews.txt', 'r', encoding='utf-8') as file: unstructured_data = file.read() # 文本预处理 import re cleaned_text = re.sub(r'[^\w\s]', '', unstructured_data) # 移除标点符号 words = cleaned_text.split() # 分词 print(f"总词数: {len(words)}")
code 数据集格式和结构
数据集可以以不同格式存储,能够识别最常用的格式很重要。本节介绍结构化数据集最常用的三种格式——逗号分隔值(CSV)、JavaScript对象表示法(JSON)和可扩展标记语言(XML)。虽然CSV是编码表格数据集最直观的方式,但我们从网络收集的大部分数据(例如,网站、移动应用程序)是以JSON或XML格式存储的。
table_viewCSV格式
CSV将数据集中的每个项目存储在单行中。每个项目的变量值都列在一行中,用逗号(“,”)分隔。
- 优点:简单
- 缺点:难以添加元数据;如果有特殊字符则难以解析;平面结构
- 典型用途:表格数据
data_objectJSON格式
JSON使用名为JavaScript的编程语言的语法。它遵循JavaScript的对象语法,但不需要了解JavaScript就能理解JSON格式。
- 优点:简单;与多种语言兼容;易于解析
- 缺点:难以添加元数据;不能添加注释
- 典型用途:需要在用户和服务器之间交换的数据
descriptionXML格式
XML格式类似于JSON,但它使用名为标签的不同符号列出数据集中的每个项目。XML标签是由一对尖括号(< >)和一些内部文本组成的任何文本块。
- 优点:结构化(更易读);可以添加元数据
- 缺点:冗长;带有标签的复杂结构
- 典型用途:分层数据结构
# CSV格式示例 学期,教师,班级规模,评分 2020年秋季,A,100,完全不推荐 2021年春季,A,50,强烈推荐 # JSON格式示例 { "课程评估": [ { "学期": "2020年秋季", "教师": "A", "班级规模": 100, "评分": "完全不推荐" }, { "学期": "2021年春季", "教师": "A", "班级规模": 50, "评分": "强烈推荐" } ] } # XML格式示例 <课程评估> <评估> <学期>2020年秋季</学期> <教师>A</教师> <班级规模>100</班级规模> <评分>完全不推荐</评分> </评估> <评估> <学期>2021年春季</学期> <教师>A</教师> <班级规模>50</班级规模> <评分>强烈推荐</评分> </评估> </课程评估>
info 元数据和数据集描述
元数据是关于数据的数据,它提供有关数据集的背景信息。JSON和XML文件通常也包括数据集本身的一些描述,作为文件中的单独条目({}或<>)。实际数据条目列在”itemData”和<data>内,其余部分用于提供数据集的背景信息。
元数据对于数据管理和数据科学工作流程至关重要。它帮助数据科学家理解数据的来源、结构和含义,从而更有效地分析和解释数据。元数据还可以用于数据追踪、数据质量评估和数据集的长期维护。
网络爬虫和社交媒体数据收集
探索从互联网获取数据的技术与方法
travel_explore 网络爬虫概述
网络爬虫和社交媒体数据收集是从互联网获取数据的两种方法。网络爬虫涉及使用网络数据提取工具(通常称为网络爬虫)从网站提取信息和数据。例如,一家旅游公司希望从不同的预订网站收集有关酒店价格和可用性的信息。网络爬虫可用于自动从各种网站收集这些数据,为公司创建全面列表,用于其业务战略,而无需手动工作。
社交媒体数据收集涉及使用应用程序编程接口或监控工具从Twitter和Instagram等各种平台收集信息。应用程序编程接口(API)是一组用于构建软件应用程序的协议、工具和定义,允许不同的软件系统相互通信和交互,使开发人员能够访问来自其他应用程序、操作系统或平台的数据和服务。
travel_explore网络爬行
跟踪网页上的链接以导航到其他页面并从中收集数据。适用于从网站的多个页面抓取数据。
codeXPath
强大的查询语言,用于导航HTML文档中的元素。通常与HTML解析结合使用,以选择要抓取的特定元素。
text_format正则表达式
从网页中搜索和提取特定文本模式。适用于抓取遵循特定格式的数据,如日期、电话号码或电子邮件地址。
htmlHTML解析
分析网页的HTML结构,并识别包含所需数据的特定标签和元素。通常用于简单的抓取任务。
share 社交媒体数据收集方法
社交媒体数据收集可以通过各种方法进行,如API集成、社交监听、社交媒体调查、网络分析和图像和视频分析。社交媒体平台提供的API允许数据科学家收集有关用户交互和内容的结构化数据。社交监听涉及监控在线对话,以获取客户行为和趋势的见解。在社交媒体上进行的调查可以提供有关客户偏好和意见的信息。
案例:Twitter客户满意度调查
一个食品配送公司进行Twitter客户满意度调查。数据科学家可以使用Twitter的API收集包含与公司相关的特定标签的推文,并分析它们以了解客户的意见和偏好。他们还可以使用社交监听来监控对话并识别客户行为的趋势。此外,在Twitter上创建社交媒体调查可以提供更有针对性的客户满意度和偏好见解。然后可以使用数据科学技术分析这些数据,以确定需要改进的关键领域并推动明智的业务决策。
code 使用Python进行网络数据抓取
Python是用于网络爬虫的流行编程语言之一,因为它具有各种库和框架,使得从网站提取和处理数据变得容易。要使用Python从网站抓取数据(如表格),我们遵循以下步骤:
- 导入pandas库。第一步是导入pandas库,这是一个流行的Python数据分析和操作库。
- 使用read_html()函数。此函数用于从网页读取HTML表格,并将它们转换为DataFrame对象列表。
- 访问所需数据。如果网页上的数据分为不同的表格,我们需要指定要提取的表格。
- 将数据存储在DataFrame中。read_html()函数的结果是DataFrame对象列表,每个DataFrame代表网页中的一个表格。
- 显示DataFrame。通过访问DataFrame变量,我们可以以表格格式查看提取的数据。
- 将字符串转换为数字。如果表格中的数据是字符串格式,并且我们想对其执行任何数值操作,我们需要将数据转换为数值格式。
# 导入必要的库 import pandas as pd # 使用read_html()函数从网页读取表格 url = "https://example.com/data-tables" tables = pd.read_html(url) # 访问所需的表格(例如:索引4) df = tables[4] # 将字符串列转换为数字 df['数值列'] = pd.to_numeric(df['数值列']) # 显示DataFrame print(df.head()) # 将数据保存为CSV文件 df.to_csv("extracted_data.csv", index=False) print("数据已成功保存到CSV文件。")
library_books Python中用于解析和提取数据的库
在Python中,有几个库和方法可用于解析和提取文本数据。这些包括:
正则表达式
Python中的内置库,允许模式匹配和从字符串中提取数据。它使用特定语法定义数据提取的模式和规则。
Beautiful Soup
主要用于抓取和解析HTML和XML代码的外部库。可用于从网页或文档中提取特定数据。
NLTK
Python中自然语言处理的强大库。提供各种工具,用于标记化、解析和从文本数据中提取数据。
TextBlob
为大多数自然语言处理任务提供简单接口的库,如参数和词性标注。也可用于解析和从文本中提取数据。
SpaCy
流行的自然语言处理开源库。提供高效的方法,用于标记化、解析和从文本数据中提取数据。
Scrapy
用于提取结构化数据的应用程序框架。可用于从网站抓取数据,并以结构化格式存储。
text_fields 正则表达式中的元字符使用
正则表达式中的元字符是用于定义搜索模式的特殊字符。以下是几个常用的元字符及其用法:
import re # 定义要搜索的字符串 text = "Python是一种强大的编程语言。Python广泛应用于数据科学、机器学习和Web开发。Python的简洁语法使其成为初学者的理想选择。" # 使用正则表达式搜索单词"Python" matches = re.findall(r"Python", text) # 打印匹配次数 print(f"单词'Python'在文本中出现了 {len(matches)} 次。") # 输出:单词'Python'在文本中出现了 3 次。
content_cut 数据解析和提取方法
分割和切片是编程中用于操作文本字符串的两种方法。分割字符串意味着基于指定的分隔符将文本字符串分成较小的部分或子字符串。切片字符串指的是基于指定的索引范围提取字符串的一部分或部分。
字符串分割
使用split()方法将字符串分割成子字符串列表。例如,字符串”Data Science”可以使用空格作为分隔符分割成两个子字符串”Data”和”Science”。
text = "Data,Science,Machine,Learning" words = text.split(",") print(words) # 输出: ['Data', 'Science', 'Machine', 'Learning']
字符串切片
使用索引范围提取字符串的一部分。例如,字符串”Data Science”可以通过指定从索引0到4的范围来提取”Data”。
text = "Data Science" substring = text[0:4] print(substring) # 输出: 'Data' # 使用负索引从末尾提取 last_part = text[-7:] print(last_part) # 输出: 'Science'
使用正则表达式解析和提取数据
以下代码使用正则表达式从字符串中提取特定数据。字符串包含有关一个人在苹果店购买iPhone的信息。目标是提取产品名称、型号和价格。
import re # 定义要解析的数据 data = "Samantha went to the Apple store to purchase a new phone. She was specifically looking for the latest and most expensive model available. As she looked at the different options, she came across the product: iPhone 12, the product name caught her attention, as it was the newest version on the market. She then noticed the model: A2172, which confirmed that this was indeed the latest and most expensive model she was looking for. The price made her hesitate for a moment, but she decided that it was worth it price: $799. She purchased the iPhone 12 and was excited to show off her new phone to her friends." # 使用正则表达式匹配和提取基于特定模式的数据 product = re.search(r"product: (.+?),", data).group(1) model = re.search(r"model: (.+?),", data).group(1) price = re.search(r"price: (.+?.+?.+?.+?)", data).group(1) # 打印提取的数据 print("产品: " + product) print("型号: " + model) print("价格: " + price) # 输出: # 产品: iPhone 12 # 型号: A2172 # 价格: $799
save 数据处理和存储
一旦数据被收集,应该对其进行处理并以适合的格式存储,以便进一步分析。数据处理首先通过删除不相关信息来清理原始数据,然后将其转换为结构化格式。清理过程包括识别和纠正数据集中的任何错误、不一致和缺失值,这对于确保数据准确、可靠和可用于分析或其他目的至关重要。
使用Python存储数据的一种方法是使用pandas库创建DataFrame,然后使用to_csv()函数将DataFrame保存为CSV(逗号分隔值)文件。然后可以轻松打开和访问此文件,以便将来分析或可视化。
import csv import pandas as pd # 创建一个字典来存储数据 presidents = { "1": ["George Washington", "Virginia"], "2": ["John Adams", "Massachusetts"], "3": ["Thomas Jefferson", "Virginia"], "4": ["James Madison", "Virginia"], "5": ["James Monroe", "Virginia"] } # 使用pandas创建DataFrame df = pd.DataFrame.from_dict(presidents, orient='index', columns=['Name', 'State of Birth']) df.index.name = 'Number' # 将DataFrame保存为CSV文件 df.to_csv("presidents.csv") # 或者使用csv模块 with open("presidents_csv.csv", "w", newline='') as csv_file: fieldnames = ["Number", "Name", "State of Birth"] writer = csv.DictWriter(csv_file, fieldnames=fieldnames) writer.writeheader() for key, value in presidents.items(): writer.writerow({ "Number": key, "Name": value[0], "State of Birth": value[1] }) print("数据已成功存储在CSV文件中。")
除了CSV格式,数据还可以存储为其他格式,如JSON、XML或数据库。选择哪种格式取决于数据的性质、大小和预期用途。对于大型数据集,数据库通常是更好的选择,因为它们提供了更高效的存储和检索机制。
数据清洗和准备
探索数据预处理的关键步骤与技术
cleaning_services 数据清洗和预处理概述
数据清洗和预处理是任何数据科学任务中的重要阶段。它指的是将原始数据组织和转换为可用于进一步分析的可用结构的技术。它涉及提取不相关或重复的数据、处理缺失值以及纠正错误或不一致之处。这确保了数据的准确性、全面性和准备就绪性。
数据清洗和预处理通常涉及以下步骤:
数据集成
将来自多个来源的数据合并到单个数据集中
数据清洗
评估数据中的任何错误或不一致之处,并采取适当措施纠正它们
数据转换
将数据转换为适合进一步分析的格式
数据简化
如果数据集包含大量列或特征,使用数据简化技术选择最适合分析的列
数据离散化
将连续数据分组到类别或范围中,以促进分析
数据采样
当数据太大而无法整体分析时,可以取数据样本进行分析
error_outline 处理缺失数据和异常值
缺失数据指的是数据集中不存在的任何数据点或值。这可能是由于数据收集错误、数据损坏或研究参与者无响应造成的。缺失数据会影响分析的准确性和有效性,因为它减少了样本量并可能引入偏差。
异常值是与给定数据集中的其他数据点显著不同的数据点。这可能是由于人为错误、测量错误或数据中真正的异常值造成的。异常值会使统计分析产生偏差,因此在分析前正确识别和处理它们非常重要。
MCAR
完全随机缺失的数据。缺失数据与任何其他变量无关,其缺失没有潜在原因。例如,调查参与者意外跳过了一个问题。
MAR
随机缺失的数据。缺失数据与其他变量相关,但与任何未知或未测量的变量无关。例如,年龄较大的受访者可能更不愿意分享某些信息。
MNAR
非随机缺失的数据。数据的缺失取决于观察到的数据,但不取决于未观察到的数据。例如,信用卡债务较高的受访者可能不太愿意回答相关问题。
import pandas as pd import numpy as np from scipy import stats # 创建示例数据集 data = {'Age': [25, 30, np.nan, 35, 40, 45, 50, 55, 200], 'Income': [50000, 60000, 70000, 80000, np.nan, 100000, 110000, 120000, 130000]} df = pd.DataFrame(data) # 检测缺失值 print("缺失值数量:") print(df.isnull().sum()) # 处理缺失值 - 使用均值填充 df['Age'].fillna(df['Age'].mean(), inplace=True) df['Income'].fillna(df['Income'].median(), inplace=True) # 检测异常值 - 使用Z分数 z_scores = np.abs(stats.zscore(df['Age'])) outliers = np.where(z_scores > 3) print("\n年龄异常值的索引:", outliers[0]) # 处理异常值 - 用中位数替换 df.loc[outliers[0], 'Age'] = df['Age'].median() print("\n处理后的数据:") print(df)
tune 数据标准化、转换和验证
数据标准化是系统地将收集的信息转换为一致且可管理格式的过程。此过程涉及消除不一致性、错误和重复项,以及将来自各种来源的数据转换为统一格式,通常称为范式。
标准化公式
此公式用于将数据集缩放到0到1之间,其中最大数据点的标准化值为1,最小数据点为0。
数据转换是一种统计技术,用于修改数据的原始结构,使其更适合分析。数据转换可以涉及各种数学运算,如对数、平方根或指数转换。转换数据的主要原因是解决与统计假设相关的问题。
数据验证是确保数据准确性和质量的过程,通过将其与定义的规则和标准进行比较来检查。这涉及识别和纠正收集数据中的任何错误或不一致之处,以及确保数据与分析和决策相关且可靠。
分支机构 | 产品 | 销售额 ($) | 利润 ($) |
---|---|---|---|
分支机构 1 | 珠宝 | 50000 | 20000 |
分支机构 2 | 电视配件 | 25000 | 12500 |
分支机构 3 | 美容产品 | 30000 | 15000 |
import pandas as pd import numpy as np from sklearn.preprocessing import MinMaxScaler, StandardScaler, PowerTransformer # 创建示例数据集 data = {'Sales': [50000, 25000, 30000, 15000, 45000, 35000, 40000, 55000], 'Profits': [20000, 12500, 15000, 7500, 22500, 17500, 20000, 27500]} df = pd.DataFrame(data) # 1. 最小-最大标准化 (0-1范围) min_max_scaler = MinMaxScaler() df_normalized = pd.DataFrame(min_max_scaler.fit_transform(df), columns=df.columns) print("最小-最大标准化结果:") print(df_normalized) # 2. Z分数标准化 z_scaler = StandardScaler() df_z = pd.DataFrame(z_scaler.fit_transform(df), columns=df.columns) print("\nZ分数标准化结果:") print(df_z) # 3. 对数转换 (处理偏态数据) df_log = np.log(df) print("\n对数转换结果:") print(df_log) # 4. Box-Cox转换 (使数据更接近正态分布) pt = PowerTransformer(method='box-cox') df_boxcox = pd.DataFrame(pt.fit_transform(df), columns=df.columns) print("\nBox-Cox转换结果:") print(df_boxcox)
noise_aware 处理噪声数据
噪声数据指的是包含错误、异常值或不相关信息的数据,这些信息可能会掩盖数据集中的真实模式和关系。数据集中存在噪声数据会导致难以从数据中得出准确结论和进行预测。大多数噪声数据是由数据输入中的人为错误、数据收集或传输中的技术错误或数据本身的自然变异性引起的。
cleaning_services数据清洗
从数据集中删除重复或不相关的数据,例如删除电子表格中的重复行或过滤掉不完整或容易出错的数据条目。
blur_on数据平滑
一种用于从数据集中移除异常值或噪声以揭示潜在模式或趋势的技术。例如,计算一个月内每日股票市场指数值的7天平均值,以平滑日常波动。
swap_horiz插补
在医疗环境中,患者病史因信息缺失而不完整。医院工作人员可以使用插补,根据患者已知的医疗条件和过去治疗来估计缺失数据。
view_module分箱
研究人员研究城市人口年龄统计。不查看个别年龄,而是将数据分组为10年年龄组(例如0-10、10-20、20-30等),以便更全面和更容易地分析数据。
transform数据转换
考虑显示不同时间点记录的COVID-19病例数的数据集。使用对数转换可以减少数据的偏度,使分析更加准确。
compress降维
通过应用主成分分析,可以将数据集的维度减少到几个主成分,这些主成分代表了股票市场的整体趋势和模式。
merge 数据聚合
数据聚合是将来自多个来源的信息收集并合并到提供见解和有意义结论的单个集合中的过程。它涉及以结构化方式收集、管理和传递来自不同来源的数据,以促进分析和决策。数据聚合可以手动执行或使用自动化工具和技术。
数据聚合用于识别不同数据点之间的模式和趋势,从而提取有价值的见解。一些标准的数据聚合类型是空间聚合、统计聚合、属性聚合和时间聚合。这种方法通常在营销、金融、医疗保健和研究领域用于分析大型数据集。
import pandas as pd import numpy as np # 创建示例数据集 data = {'Region': ['North', 'North', 'South', 'South', 'East', 'East', 'West', 'West'], 'Product': ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'], 'Sales': [100, 150, 200, 250, 300, 350, 400, 450], 'Quarter': ['Q1', 'Q1', 'Q1', 'Q2', 'Q2', 'Q2', 'Q3', 'Q3']} df = pd.DataFrame(data) # 1. 按区域聚合 - 计算每个区域的总销售额 region_sales = df.groupby('Region')['Sales'].sum().reset_index() print("按区域聚合的总销售额:") print(region_sales) # 2. 按产品和季度聚合 - 计算每个产品在每个季度的平均销售额 product_quarter = df.groupby(['Product', 'Quarter'])['Sales'].mean().reset_index() print("\n按产品和季度聚合的平均销售额:") print(product_quarter) # 3. 多重聚合 - 同时计算总和、平均值和计数 multi_agg = df.groupby('Region').agg({ 'Sales': ['sum', 'mean', 'count'] }).reset_index() print("\n多重聚合结果:") print(multi_agg) # 4. 自定义聚合函数 def range_func(x): return x.max() - x.min() custom_agg = df.groupby('Product')['Sales'].agg(['sum', 'mean', range_func]).reset_index() print("\n自定义聚合结果:") print(custom_agg)
text_format 文本预处理
文本预处理是一种准备文本格式数据以进行进一步分析和自然语言处理任务的技术。它涉及将非结构化文本数据转换为更结构化的格式,以便算法和模型能够解释。
分词
将文本数据分解为单个单词或短语(标记)。例如,将”分词是将句子、段落或整个文本分解为称为标记的较小部分的过程”分解为各个单词。
小写化
将所有文本转换为小写,以避免同一单词的多种表示。例如,”John likes to eat pizza.”变为”john likes to eat pizza.”
停用词移除
过滤掉常见出现但不添加意义或上下文的单词。例如,移除”the”、”and”、”is”等常见词,保留更有意义的词汇。
词形还原和词干提取
将单词还原为它们的根形式,以减少复杂性并提高模型性能。例如,”running”、”runs”和”ran”都会被还原为基本形式”run”。
词性标注
识别每个单词的语法成分,其中句子中的每个单词被分配一个特定的词性标签(例如,名词、动词或形容词)。
命名实体识别
识别和分类命名实体,如人、地点和组织。例如,在”John went to Paris last summer with his colleagues at Microsoft.”中识别出人名、地点和组织。
情感分析
识别和分类文本中表达的情感。例如,分析客户评论以确定产品是收到积极还是消极的反馈。
拼写检查和纠正
纠正拼写错误以提高准确性。例如,将”writting”纠正为”writing”,”inpprecise”纠正为”imprecise”。
编码
将文本转换为机器学习算法可以处理的数值表示。例如,使用独热编码或词嵌入将文本转换为数值特征。
import nltk import string from nltk.corpus import stopwords from nltk.stem import WordNetLemmatizer from nltk.tokenize import word_tokenize from nltk.tag import pos_tag from nltk.chunk import ne_chunk # 下载必要的NLTK数据 nltk.download('punkt') nltk.download('stopwords') nltk.download('wordnet') nltk.download('averaged_perceptron_tagger') nltk.download('maxent_ne_chunker') nltk.download('words') # 示例文本 text = "Natural Language Processing is a fascinating field of artificial intelligence. It involves teaching computers to understand human language." # 1. 分词 tokens = word_tokenize(text) print("分词结果:", tokens) # 2. 小写化 lower_tokens = [token.lower() for token in tokens] print("\n小写化结果:", lower_tokens) # 3. 移除标点符号 no_punct = [token for token in lower_tokens if token not in string.punctuation] print("\n移除标点符号结果:", no_punct) # 4. 移除停用词 stop_words = set(stopwords.words('english')) no_stopwords = [token for token in no_punct if token not in stop_words] print("\n移除停用词结果:", no_stopwords) # 5. 词形还原 lemmatizer = WordNetLemmatizer() lemmatized = [lemmatizer.lemmatize(token) for token in no_stopwords] print("\n词形还原结果:", lemmatized) # 6. 词性标注 pos_tags = pos_tag(lemmatized) print("\n词性标注结果:", pos_tags) # 7. 命名实体识别 named_entities = ne_chunk(pos_tags) print("\n命名实体识别结果:") print(named_entities)