一、Python数据分析概述
Python 是一种解释型、交互式的编程语言,其设计理念强调代码的可读性和简洁性。Python 的语法结构简单,支持面向对象、过程式和函数式三种编程范式,使得 Python 成为一种强大而灵活的编程语言。
Python数据分析主要包括数据清洗、数据探索和数据可视化三个部分。数据清洗是数据分析的重要环节,主要是对数据进行预处理,包括缺失值处理、异常值处理、数据类型转换等。数据探索则是通过对数据进行初步分析,了解数据的分布和特征,为后续的数据分析提供基础。数据可视化则是将数据以图形化的方式呈现,帮助人们更好地理解和分析数据。
数据获取与读取
-
-
从文件读取:使用 Pandas 的相关函数可以方便地从多种文件格式中读取数据。比如,从 CSV 文件读取可以使用
pd.read_csv()
函数,只需传入文件路径作为参数,就可以将 CSV 文件中的数据读取到一个 DataFrame 对象中。对于 Excel 文件,可以使用pd.read_excel()
函数,同样传入文件路径,还可以指定具体要读取的工作表等参数Pandas库中提供链接Mysql等数据库方法,可以在python读取数据库中的结构化数据。
Pandas库中读取Mysql等数据库的方法中可以传入sql语句字符串作为参数,实现sql语句的运行。3.Python中查看表格数据使用:info
data.info()
查看数据的描述统计:describe
data.describe()
python数据分析的工具
- NumPy:
- 是 Python 科学计算的基础库。它提供了高性能的多维数组对象(ndarray)以及对这些数组进行操作的大量函数。例如,可以方便地进行数组的创建、索引、切片、数学运算(如加法、乘法等在数组元素级别上的运算)等。在数据分析中,很多数据都会以 NumPy 数组的形式存在,以便后续更高效地处理。
- Pandas:
- 构建在 NumPy 之上,专门用于数据处理和分析。它引入了两种主要的数据结构,Series(一维数据结构,类似于带标签的数组)和 DataFrame(二维数据结构,类似表格,有行索引和列索引)。通过 Pandas,可以轻松地进行数据读取(比如从 CSV、Excel 等文件格式中读取数据)、数据清洗(处理缺失值、重复值等)、数据转换(如数据类型转换、重命名列等)以及数据分组和聚合操作等。
- Matplotlib:
- 一个强大的绘图库,用于创建各种静态、动态和交互式的可视化图表。可以绘制折线图、柱状图、饼图、散点图等多种常见图形。在数据分析中,通过可视化数据能够更直观地发现数据中的规律、趋势以及异常点等。例如,绘制销售数据随时间的变化折线图,可以清晰看出销售的起伏趋势。
- Seaborn:
- 基于 Matplotlib 进行了更高级的封装,使得绘制出的图表更加美观、专业。它提供了许多预设的主题和调色板,能够快速生成具有较高视觉质量的统计图表,特别适合用于探索性数据分析阶段,以展示数据的分布、关系等情况
-
数据预处理:
数据预处理是从数据中检测、纠正或删除损坏、不准确或不适用于模型的记录的过程。它是对数据进行必要的清洗、集成、转换、离散和规约等一系列的处理工作,以达到挖掘算法进行知识获取研究所要求的最低规范和标准。数据预处理通常包括以下步骤:
1.数据清洗:填充缺失数据、消除噪声数据等,主要通过分析“脏数据”的产生原因和存在形式,利 用现有的数据挖掘手段和方法去清洗“脏数据”,将“脏数据”转化为满足数据质量要求和应用要求 的数据,从而提高数据集的质量,满足现阶段数据分析的需求。
2.数据合并:将多个数据源中的数据合并到一个统一的数据存储中,如数据库或数据仓库。这一过 程可能涉及到数据的去重、冲突解决和数据格式的统一。
3.数据转换:将数据从一种格式或结构转换为另一种格式或结构的过程。例如,将表格中的行和列 进行转置,或者对数据进行聚合和摘要等操作。数据预处理的主要目的是提高数据质量,使得数据更加适应模型的需求,以便更好地进行数据分析、机器学习和数据挖掘等工作。在实际的数据分析项目中,数据预处理是必不可少的步骤之一,能够极大地提高数据分析和机器学习模型的准确性和可靠性。 数据清洗
数据清洗实例:
1.1引入要用的库
import numpy as np import pandas as pd
1.2读取数据(相对地址)
查看五行
-
1.3查看数据
-
数据可视化
- 使用
matplotlib
和seaborn
库可以创建各种类型的图表,如柱状图、折线图、散点图、箱线图等,以直观地展示数据的分布和关系。import matplotlib.pyplot as plt import seaborn as sns data = pd.read_csv('data.csv') # 绘制柱状图 plt.bar(data['category'], data['value']) plt.xlabel('Category') plt.ylabel('Value') plt.title('Bar Chart') plt.show() # 绘制散点图 sns.scatterplot(x='column1', y='column2', data=data) plt.xlabel('Column 1') plt.ylabel('Column 2') plt.title('Scatter Plot') plt.show()
-
2.空值处理
空值(NaN)在数据集中是常见的,它们可能是由于数据收集或记录过程中的疏漏导致的。空值会影响数据的完整性和准确性,因此需要对其进行处理。处理空值的方法有很多种,包括填充、删除等。在给定的数据集中, “户籍人口”列在天津河北区市辖区有一个空值。对于这种情况,我们可以选择填充该空值,比如用该列的平均值、中位数或者众数或通过计算得到的值来填充。当然,具体的填充策略需要根据数据的实际情况和业务需求来确定。
cleaned_data = merged_data.dropna()
3.重复值处理
重复值在数据集中也是常见的,它们可能是由于数据录入时的重复操作或者数据合并时的重复记录导致的。重复值会导致数据冗余,影响数据分析的准确性。对于重复值的处理,我们可以使用pandas库中的drop_duplicates()函数来删除重复的行。需要注意的是,在删除重复值之前,需要先确定哪些列的组合构成了重复值,然后基于这些列来删除重复行
-
cleaned_data = cleaned_data.drop_duplicates()
三、聚类回归
1.什么是聚类
聚类将相似的对象归到同一个簇中,几乎可以应用于所有对象,聚类的对象越相似,聚类效果越好。聚类与分类的不同之处在于分类预先知道所分的类到底是什么,而聚类则预先不知道目标,但是可以通过簇识别(cluster identification)告诉我们这些簇到底都是什么。2.K-means
聚类的一种,之所以叫k-均值是因为它可以发现k个不同的簇,且每个簇的中心采用簇中所含值的均值计算而成。簇个数k是用户给定的,每一个簇通过质心来描述。 3.聚类算法示例(K-means聚类) -
import numpy as np import matplotlib.pyplot as plt # 生成随机数据点 np.random.seed(0) X = np.random.randn(100, 2) # K-means 算法函数 def kmeans(X, k, max_iterations=100): n_samples, n_features = X.shape centroids = X[np.random.choice(n_samples, k, replace=False)] for _ in range(max_iterations): # 分配每个数据点到最近的质心 distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2)) labels = np.argmin(distances, axis=0) # 更新质心 new_centroids = np.array([X[labels == i].mean(axis=0) for i in range(k)]) if np.all(centroids == new_centroids): break centroids = new_centroids return labels, centroids # 进行聚类 k = 3 labels, centroids = kmeans(X, k) # 可视化结果 colors = ['r', 'g', 'b'] for i in range(k): plt.scatter(X[labels == i, 0], X[labels == i, 1], c=colors[i], label=f'Cluster {i + 1}') plt.scatter(centroids[:, 0], centroids[:, 1], c='k', marker='x', s=100, label='Centroids') plt.legend() plt.title('K-means Clustering') plt.show()
-