python数据处理的全流程
·
Python数据处理全流程
一、数据收集
(一)从文件中读取数据
- 读取文本文件
- CSV文件(逗号分隔值)
- CSV文件是一种常见的简单数据存储格式,使用逗号来分隔数据值。Python中的
csv模块可以方便地读取和写入CSV文件。 - 例如,读取一个简单的CSV文件,其中包含姓名和年龄两列数据:
import csv data = [] with open('example.csv', 'r') as file: reader = csv.reader(file) for row in reader: data.append(row) print(data) - 这里
open函数以只读模式('r')打开文件example.csv,csv.reader函数创建一个读取器对象,通过循环遍历读取器对象,将每一行数据添加到data列表中。
- CSV文件是一种常见的简单数据存储格式,使用逗号来分隔数据值。Python中的
- JSON文件(JavaScript对象表示法)
- JSON是一种轻量级的数据交换格式,在Web开发和数据存储中广泛使用。Python中的
json模块用于处理JSON数据。 - 例如,读取一个包含用户信息的JSON文件:
import json with open('example.json', 'r') as file: data = json.load(file) print(data) json.load函数将JSON格式的数据从文件中读取并转换为Python对象(如字典或列表)。
- JSON是一种轻量级的数据交换格式,在Web开发和数据存储中广泛使用。Python中的
- CSV文件(逗号分隔值)
- 读取Excel文件
- 使用
pandas库pandas是Python中强大的数据处理库,其中read_excel函数可以读取Excel文件(.xlsx和.xls格式)。- 例如,读取一个Excel文件中的数据:
import pandas as pd df = pd.read_excel('example.xlsx') print(df) - 这里
read_excel函数将Excel文件的数据读取到一个DataFrame对象(df)中,DataFrame是pandas中用于存储二维数据的结构,类似于表格,可以方便地进行各种数据处理操作。
- 使用
openpyxl或xlrd等库(以openpyxl为例)openpyxl主要用于读取和写入Excel文件。- 例如,读取Excel文件中的一个工作表的数据:
import openpyxl workbook = openpyxl.load_workbook('example.xlsx') sheet = workbook.active data = [] for row in sheet.rows: row_data = [] for cell in row: row_data.append(cell.value) data.append(row_data) print(data) - 首先使用
load_workbook函数打开Excel工作簿,获取活动工作表(active),然后通过循环遍历工作表的行和列,将每个单元格的值添加到data列表中。
- 使用
- 从数据库中获取数据
- 使用
sqlite3(以SQLite数据库为例)- SQLite是一个轻量级的嵌入式数据库,Python的
sqlite3模块提供了对SQLite数据库的操作接口。 - 例如,从一个SQLite数据库中读取数据:
import sqlite3 conn = sqlite3.connect('example.db') cursor = conn.cursor() cursor.execute("SELECT * FROM users") data = cursor.fetchall() conn.close() print(data) - 首先使用
connect函数连接到数据库文件example.db,创建一个游标对象(cursor),通过游标执行SQL查询语句(SELECT * FROM users),使用fetchall函数获取查询结果并存储在data中,最后关闭数据库连接。
- SQLite是一个轻量级的嵌入式数据库,Python的
- 使用
pymysql或psycopg2等库(以pymysql为例,用于MySQL数据库)pymysql是Python中用于连接和操作MySQL数据库的库。- 例如,连接到MySQL数据库并读取数据:
import pymysql conn = pymysql.connect(host='localhost', user='root', password='password', database='example_database') cursor = conn.cursor() cursor.execute("SELECT * FROM customers") data = cursor.fetchall() conn.close() print(data) - 这里通过
connect函数连接到本地MySQL服务器(host='localhost'),使用指定的用户名(user='root')和密码(password='password')以及数据库名(database='example_database')。然后执行SQL查询并获取结果,最后关闭连接。
- 使用
(二)从网络获取数据
- 使用
requests库进行简单的HTTP请求requests库是Python中用于发送HTTP请求的常用库,它可以方便地获取网页内容、API数据等。- 例如,获取一个网页的文本内容:
import requests url = "https://example.com" response = requests.get(url) if response.status_code == 200: data = response.text print(data) else: print("请求失败")- 首先定义要请求的网址(
url),使用requests.get函数发送GET请求,检查响应的状态码(status_code)是否为200(表示请求成功),如果成功则获取响应的文本内容(text)并打印,否则打印请求失败的提示。
- 首先定义要请求的网址(
- 使用
BeautifulSoup(结合requests)进行网页数据爬取(HTML/XML数据)- 当需要从网页中提取结构化的数据(如表格、特定标签内的内容等)时,可以使用
BeautifulSoup库。 - 例如,从一个网页中提取所有的链接:
import requests from bs4 import BeautifulSoup url = "https://example.com" response = requests.get(url) if response.status_code == 200: soup = BeautifulSoup(response.text, 'html.parser') links = soup.find_all('a') for link in links: print(link.get('href')) else: print("请求失败")- 发送请求并获取网页内容后,使用
BeautifulSoup对象(soup)解析网页内容,find_all函数用于查找所有的<a>标签(代表链接),通过循环遍历获取每个链接的href属性值并打印。
- 发送请求并获取网页内容后,使用
- 当需要从网页中提取结构化的数据(如表格、特定标签内的内容等)时,可以使用
- 使用API获取数据
- 许多网站和服务提供API(应用程序接口),通过API可以以结构化的方式获取数据。
- 例如,使用一个天气API获取天气数据:
import requests api_key = "your_api_key" city = "New York" url = f"https://api.example.com/weather?city={city}&key={api_key}" response = requests.get(url) if response.status_code == 200: weather_data = response.json() print(weather_data) else: print("请求失败")- 首先定义API密钥(
api_key)和要查询的城市(city),构建API请求的网址(url),发送请求并检查状态码,若成功则将响应的JSON数据(使用json方法转换)作为天气数据打印出来。
- 首先定义API密钥(
二、数据清理
(一)处理缺失值
- 识别缺失值
- 在
pandas中- 对于一个
DataFrame对象(df),可以使用isnull函数来检查每个单元格是否为缺失值,返回一个布尔型的DataFrame,其中True表示缺失值。 - 例如,查看数据集中每列缺失值的数量:
import pandas as pd df = pd.read_excel('example.xlsx') missing_count_per_column = df.isnull().sum() print(missing_count_per_column)
- 对于一个
- 在NumPy数组中(如果数据以数组形式存在)
- 使用
numpy.isnan函数来检查缺失值(对于数值型数据)。 - 例如,对于一个简单的NumPy数组:
import numpy as np data = np.array([1, np.nan, 3]) missing_mask = np.isnan(data) print(missing_mask)
- 使用
- 在
- 处理缺失值的方法
- 删除包含缺失值的行或列
- 在
pandas中,可以使用dropna函数来删除包含缺失值的行或列。 - 例如,删除包含缺失值的行:
df = df.dropna(axis = 0) - 这里
axis = 0表示按行操作,如果要按列操作则设置axis = 1。
- 在
- 填充缺失值
- 使用固定值填充
- 在
pandas中,可以使用fillna函数用一个固定的值填充缺失值。 - 例如,用0填充所有缺失值:
df = df.fillna(0)
- 在
- 使用统计量填充(如均值、中位数、众数)
- 例如,用每列的均值填充缺失值:
column_means = df.mean() df = df.fillna(column_means)
- 例如,用每列的均值填充缺失值:
- 使用固定值填充
- 删除包含缺失值的行或列
(二)处理重复值
- 识别重复值
- 在
pandas中,使用duplicated函数可以检查每行是否为重复行,返回一个布尔型的列。 - 例如,查看数据集中的重复行:
import pandas as pd df = pd.read_excel('example.xlsx') duplicate_mask = df.duplicated() print(df[duplicate_mask])
- 在
- 删除重复值
- 在
pandas中,使用drop_duplicates函数删除重复行。 - 例如,删除数据集中的重复行:
df = df.drop_duplicates()
- 在
(三)数据格式统一
- 日期格式统一
- 在
pandas中- 如果数据中有日期列,可能会出现多种日期格式。可以使用
to_datetime函数将日期列转换为统一的日期格式。 - 例如,将一个日期列(假设列名为
date)转换为YYYY - MM - DD格式:df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d', errors='coerce') - 这里
format参数指定日期的原始格式,errors='coerce'表示如果日期格式无法转换则将其设置为NaT(不是时间)。
- 如果数据中有日期列,可能会出现多种日期格式。可以使用
- 在
- 数据类型统一(如将字符串转换为数值)
- 在
pandas中- 可以使用
astype函数转换数据类型。 - 例如,将一个包含数字的字符串列(假设列名为
price)转换为数值类型:df['price'] = df['price'].astype(float)
- 可以使用
- 在Python原生数据类型转换中(如果数据不是在
pandas环境下)- 对于简单的列表等数据结构,可以使用合适的转换函数。例如,将字符串列表中的数字字符串转换为整数:
data = ["1", "2", "3"] new_data = [int(i) for i in data] print(new_data)
- 对于简单的列表等数据结构,可以使用合适的转换函数。例如,将字符串列表中的数字字符串转换为整数:
- 在
三、数据转换
(一)数据标准化和归一化
- 标准化(Z - Score标准化)
- 在
pandas中,可以使用scale函数(如果已经安装了sklearn库)或者手动计算来实现数据标准化。 - 例如,手动计算对一个数据列(假设列名为
value)进行标准化:import pandas as pd df = pd.read_excel('example.xlsx') mean_value = df['value'].mean() std_value = df['value'].std() df['value_standardized'] = (df['value'] - mean_value)/std_value - 这里先计算列的均值和标准差,然后按照标准化公式
(x - \mu)/\sigma进行计算,将标准化后的数据存储在新列value_standardized中。
- 在
- 归一化(Min - Max归一化)
- 同样在
pandas中,可以手动计算实现归一化。 - 例如,对一个数据列(假设列名为
score)进行归一化:min_score = df['score'].min() max_score = df['score'].max() df['score_normalized'] = (df['score'] - min_score)/(max_score - min_score)- 按照归一化公式
(x - x_{min})/(x_{max}-x_{min})$进行计算,将归一化后的数据存储在新列score_normalized`中。
- 按照归一化公式
- 同样在
(二)数据编码
- 类别数据编码(如One - Hot编码)
- 在
pandas和sklearn中都可以进行One - Hot编码。 - 例如,使用
pandas的get_dummies函数对一个包含类别数据的列(假设列名为category)进行One - Hot编码:import pandas as pd df = pd.read_excel('example.xlsx') one_hot_encoded = pd.get_dummies(df['category']) df = pd.concat([df, one_hot_encoded], axis = 1)- 首先使用
get_dummies函数对category列进行One - Hot编码,得到一个新的DataFrame(one_hot_encoded),然后使用concat函数将其与原始DataFrame(df)按列(axis = 1)合并。
- 首先使用
- 在
- 标签编码(将类别标签转换为数值)
- 在
sklearn中可以使用LabelEncoder进行标签编码。 - 例如,对一个类别标签列(假设列名为
label)进行标签编码:from sklearn.preprocessing import LabelEncoder le = LabelEncoder() df['label_encoded'] = le.fit_transform(df['label'])- 首先创建一个
LabelEncoder对象(le),然后使用fit_transform函数对label列进行编码,将编码后的数据存储在新列label_encoded中。
- 首先创建一个
- 在
四、数据分析
(一)描述性统计分析
- 基本统计量计算(均值、中位数、众数、标准差等)
- 在
pandas中,可以直接使用DataFrame对象的方法来计算基本统计量。 - 例如,计算一个数据集中各列的均值、中位数和标准差:
import pandas as pd df = pd.read_excel('example.xlsx') mean_values = df.mean() median_values = df.median() std_values = df.std() print("均值:", mean_values) print("中位数:", median_values) print("标准差:", std_values)
- 在
- 数据分布分析(直方图、箱线图等)
- 绘制直方图(使用
matplotlib库)- 假设要绘制一个数据列(假设列名为
age)的直方图来观察年龄的分布:import matplotlib.pyplot as plt import pandas as pd df = pd.read_excel('example.xlsx') plt.hist(df['age'], bins = 10) plt.xlabel('年龄') plt.ylabel('频数') plt.title('年龄分布直方图') plt.show() - 这里使用
matplotlib的hist函数绘制直方图,bins参数指定直方图的区间数量,然后设置坐标轴标签和标题,最后使用show函数显示图形。
- 假设要绘制一个数据列(假设列名为
- 绘制箱线图(使用
matplotlib或seaborn库)- 以
seaborn库为例,绘制一个数据集中多个列(假设为column1、column2、column3)的箱线图来比较它们的数据分布:import seaborn as sns import pandas as pd df = pd.read_excel('example.xlsx') data = [df['column1'], df['column2'], df['column3']] sns.boxplot(data = data) plt.xlabel('列名') plt.ylabel('数值') plt.title('箱线图比较') plt.show() - 首先将要绘制箱线图的列数据存储在一个列表(
data)中,然后使用seaborn的boxplot函数绘制箱线图,设置坐标轴标签和标题后显示图形。
- 以
- 绘制直方图(使用
(二)相关性分析
- 计算相关性系数(如Pearson相关系数)
- 在
pandas中,可以使用corr函数计算数据集中各列之间的Pearson相关系数。 - 例如,计算一个数据集中各列之间的
- 在
更多推荐



所有评论(0)