Python数据分析:Pandas基础教程

简介: 在Pandas中Series被定义为一个带索引的一维数组,它可以是任何一个数据类型的NumPy数组。DataFrame是具有行和列索引的二维数据结构,每列可以是不同类型的值(数字、字符串、布尔型等)

一、简介

1. 数据分析的定义与背景

数据分析是指对大量的数据进行收集、处理和分析,并通过相关的统计量和可视化工具,以揭示数据中的关系、趋势和规律,从而洞察出问题和机会,做出决策。

在当今信息时代影响企业决策的因素越来越多,数据的数量和复杂度也越来越大。而作为一种处理海量数据的技术,数据分析得到了越来越多企业和组织的重视。

2. Python在数据分析中的优势

Python因其开发的高效性丰富的第三方库以及可读性等优点,被越来越多的数据分析人员选为数据分析工具。以下是Python在数据分析中的优势:

  • Python的开发效率远高于其他语言,一些数据分析工具或包的开发就是用Python实现的。
  • Python拥有丰富的库和生态系统,可提供大量科学计算、数据可视化、机器学习等高级功能。
  • Python提供了很多易于学习和使用的工具,人们可以用它很快地开发原型。

二、Pandas简介

1 Pandas库的作用和优势

Pandas是一个开源、易于使用的数据操作和分析库,它建立在NumPy之上,提供了许多灵活且快速的数据结构,可以让用户轻松地处理时间序列数据、统计数据等。

以下是Pandas在数据分析中的优点:

  • 用于处理表格数据的DataFrame对象,具有灵活的行列索引。
  • 用于处理一维数组的Series对象,可以对缺失的数据进行自动或手动填充。
  • 非常便利且功能强大的数据结构,可支持时间序列数据的处理等高级功能。

2 Pandas的数据结构Series和DataFrame

在Pandas中Series被定义为一个带索引的一维数组,它可以是任何一个数据类型的NumPy数组。DataFrame是具有行和列索引的二维数据结构,每列可以是不同类型的值(数字、字符串、布尔型等)。

下面是创建Series和DataFrame对象的示例代码:

import pandas as pd
import numpy as np

# 创建一个Series对象
s = pd.Series([1, 3, 5, np.nan, 6, 8])
print(s)

# 创建一个DataFrame对象
dates = pd.date_range('20210101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df)

3 Pandas库的安装和使用

如果您还没有安装Pandas可以使用以下命令:

pip install pandas

为了使用Pandas需要在代码中导入库:

import pandas as pd

现在可以使用Pandas库中的数据结构和函数来分析数据了。

三、数据读取与导出

1 读取本地CSV文件

import pandas as pd

# 读取CSV文件
df = pd.read_csv('data.csv')
print(df.head())

上述代码中使用Pandas的read_csv()函数可以读取本地CSV文件。read_csv()接受一个文件名作为参数,并且默认将文件的第一行作为列名。读取完毕后,使用head()函数可以查看文件的前几行数据。

2 读取Excel文件

import pandas as pd

# 读取Excel文件
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
print(df.head())

上述代码中使用Pandas的read_excel()函数可以读取本地Excel文件,也可以指定要读取的工作表。读取完毕后,使用head()函数可以查看文件的前几行数据。

3 从网站抓取数据

import pandas as pd
import requests

# 抓取网站的数据
url = "http://www.example.com/data.csv"
res = requests.get(url)
df = pd.read_csv(res.text)
print(df.head())

上述代码中使用Pandas的read_csv()函数可以直接从网站上抓取数据。使用requests库向网站发起请求,获取到数据后,再通过read_csv()函数将数据转化为DataFrame对象。

4 将数据导出为CSV或Excel文件

import pandas as pd

# 将数据导出为CSV文件
df.to_csv('newdata.csv', index=False)

# 将数据导出为Excel文件
df.to_excel('newdata.xlsx', sheet_name='Sheet1', index=False)

上述代码中可以使用to_csv()和to_excel()函数将数据导出为CSV或Excel文件。导出的文件可以指定文件名,同时也可以指定文件中是否包含行索引。

四、Pandas数据清洗

1 数据去重与空值处理

import pandas as pd

# 去除DataFrame中的重复数据
df2 = df.drop_duplicates()

# 去除DataFrame中具有空值的行
df3 = df.dropna()

# 填充DataFrame中的空值
df4 = df.fillna(0)

上述代码中可以使用drop_duplicates()函数去除DataFrame中的重复数据,使用dropna()函数去除DataFrame中具有空值的行,使用fillna()函数填充DataFrame中的空值。

2 数据合并与拆分

import pandas as pd

# 合并两个DataFrame对象
merged_df = pd.concat([df1, df2], ignore_index=True)

# 分割DataFrame对象
df1, df2 = pd.split(merged_df, [2])

上述代码中可以使用concat()函数将两个DataFrame对象进行合并,使用split()函数将DataFrame对象进行分割。

3 数据类型转换

import pandas as pd

# 转换数据类型为float
df['column_name'] = df['column_name'].astype(float)

# 转换数据类型为datetime
df['column_name'] = pd.to_datetime(df['column_name'])

上述代码中可以使用astype()函数将DataFrame中的数据类型转换为float、int等类型,也可以使用pd.to_datetime()函数将DataFrame中的数据类型转换为datetime类型。

4 数据排序与分组

import pandas as pd

# 根据列的值进行排序
df_sort = df.sort_values(by='column_name')

# 根据列的值进行分组
df_grouped = df.groupby('column_name')

上述代码中可以使用sort_values()函数根据列的值进行排序,也可以使用groupby()函数根据列的值进行分组。分组后可以使用agg()函数进行聚合操作。

五、数据分析与可视化

1 数据统计分析

# 数据统计分析
import pandas as pd

# 读取数据
df = pd.read_csv('data.csv')

# 统计数量
count = df['column_name'].count()

# 统计均值
mean = df['column_name'].mean()

# 统计标准差
std = df['column_name'].std()

# 统计最大值
max_value = df['column_name'].max()

# 统计最小值
min_value = df['column_name'].min()

print('Count: {} \nMean: {} \nStandard Deviation: {} \nMax Value: {} \nMin Value: {}'.format(count, mean, std, max_value, min_value))

上述代码中可以使用Pandas库中的count()、mean()、std()、max()和min()等函数统计数据的数量、均值、标准差、最大值和最小值。数据分析过程中可以结合业务需求确定要统计的列名。

2 数据透视表

# 数据透视表
import pandas as pd

# 读取数据
df = pd.read_csv('data.csv')

# 创建透视表
pivot_table = pd.pivot_table(df, index=['column1', 'column2'], values='column3', aggfunc='sum')

print(pivot_table.head())

上述代码中可以使用Pandas库中的pivot_table()函数创建数据透视表。参数中的index表示要进行分组的列名,values表示要进行计算的列名,aggfunc表示要进行的计算方式,例如sum、mean等。数据分析过程中可以选择不同的列名和计算方式,来创建符合业务需求的透视表。

3 数据可视化

3.1 折线图和散点图

# 折线图和散点图
import pandas as pd
import matplotlib.pyplot as plt

# 读取数据
df = pd.read_csv('data.csv')

# 绘制折线图
x = df['column1']
y = df['column2']
plt.plot(x, y)
plt.show()

# 绘制散点图
x = df['column1']
y = df['column2']
plt.scatter(x, y)
plt.show()

上述代码中可以使用Matplotlib库中的plot()函数绘制折线图,使用scatter()函数绘制散点图。在绘制图表之前需要准备好要绘制的横轴和纵轴的数据序列。

3.2 柱状图和饼图

# 柱状图和饼图
import pandas as pd
import matplotlib.pyplot as plt

# 读取数据
df = pd.read_csv('data.csv')

# 绘制柱状图
x = df['column1']
y = df['column2']
plt.bar(x, y)
plt.show()

# 绘制饼图
x = df['column1']
y = df['column2']
plt.pie(y, labels=x)
plt.show()

上述代码中可以使用Matplotlib库中的bar()函数绘制柱状图,使用pie()函数绘制饼图。在绘制图表之前需要准备好要绘制的横轴和纵轴的数据序列,或者是标签序列。

3.3 热力图和雷达图

# 热力图和雷达图
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 读取数据
df = pd.read_csv('data.csv')
df = df.pivot(index='column1', columns='column2', values='column3')
df = df.fillna(0)

# 绘制热力图
plt.imshow(df, cmap='hot', interpolation='nearest')
plt.colorbar()
plt.show()

# 绘制雷达图
labels = np.array(['column1', 'column2', 'column3', 'column4', 'column5'])
stats = [50, 80, 75, 40, 60]
angles = np.linspace(0, 2*np.pi, len(labels), endpoint=False)
stats = np.concatenate((stats, [stats[0]]))
angles = np.concatenate((angles, [angles[0]]))
fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
ax.plot(angles, stats, 'o-', linewidth=2)
ax.fill(angles, stats, alpha=0.25)
ax.set_thetagrids(angles * 180/np.pi, labels)
ax.set_title('Radar Chart')
ax.grid(True)
plt.show()

上述代码中可以使用Matplotlib库中的imshow()函数绘制热力图,使用polar=True和plot()函数绘制雷达图。在绘制图表之前需要准备好要绘制的数据序列、标签序列和角度序列。在热力图绘制中,需要将数据转换为二维矩阵,填充缺失值。在雷达图绘制中,需要将角度转换为弧度,并将最后一个点与第一个点相连形成闭环。

六、案例分析:基于Pandas进行数据分析

Pandas是Python中的一种数据处理库可以用于数据的读取、清洗、处理和分析。在这里,我们将介绍三个基于Pandas的数据分析案例,分别是电商销售数据分析、股票数据分析和航班数据分析。

1 电商销售数据分析

电商销售数据往往是企业了解消费者和产品的数据来源之一。在这个案例中将使用Pandas库对电商销售数据进行分析。

首先需要导入Pandas和Matplotlib库:

import pandas as pd
import matplotlib.pyplot as plt

接下来读取数据并进行预处理:

# 读取数据
df = pd.read_csv('sales.csv')

# 数据预处理
df.dropna(inplace=True)
df['date'] = pd.to_datetime(df['date'])
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['day'] = df['date'].dt.day

上述代码中通过read_csv()函数读取了csv文件中的数据。接着使用dropna()函数删除了数据集中的缺失值;使用pd.to_datetime()函数将数据集中的日期字符串转换为日期数据类型。另外还添加了“年份”、“月份”和“日期”三个新的列,以便后续进行统计分析。

接下来对数据进行可视化分析:

# 统计分析并可视化
year_sales = df.groupby('year')['sales'].sum()
plt.plot(year_sales.index, year_sales.values)
plt.title('Yearly Sales')
plt.xlabel('Year')
plt.ylabel('Sales')
plt.show()

上述代码中通过groupby()函数按年份进行了分组,并使用sum()函数计算了每年的销售额。接着,我们使用Matplotlib库中的plot()函数对销售额进行绘图。通过这张图表,我们可以看出近几年的销售额有没有明显的增长趋势。

2 股票数据分析

股票数据分析是一种重要的市场分析手段。在这个案例中将使用Pandas库分析股票数据。

首先需要导入Pandas和Matplotlib库:

import pandas as pd
import matplotlib.pyplot as plt

接下来读取数据并进行预处理:

# 读取数据
df = pd.read_csv('stock.csv')

# 数据预处理
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
df.dropna(inplace=True)

上述代码中通过read_csv()函数读取了csv文件中的数据。接着使用pd.to_datetime()函数将数据集中的日期字符串转换为日期数据类型,并使用set_index()函数将日期列设置为索引。另外,我们还使用dropna()函数删除了数据集中的缺失值。

接下来对数据进行可视化分析:

# 统计分析并可视化
plt.plot(df.index, df['close'])
plt.title('Stock Price')
plt.xlabel('Date')
plt.ylabel('Price')
plt.show()

上述代码中使用Matplotlib库中的plot()函数对股票价格进行绘图。通过这张图表,我们可以看出股票价格的变化趋势。

3 航班数据分析

航班数据分析是一种了解航班趋势和优化航班运营的分析手段。在这个案例中将使用Pandas库分析航班数据。

首先需要导入Pandas和Matplotlib库:

import pandas as pd
import matplotlib.pyplot as plt

接下来读取数据并进行预处理:

# 读取数据
df = pd.read_csv('flights.csv')

# 数据预处理
df['date'] = pd.to_datetime(df[['year', 'month']].assign(day=1))
df.set_index('date', inplace=True)
df.drop(columns=['year', 'month'], inplace=True)

上述代码中,通过read_csv()函数读取了csv文件中的数据。接着,我们使用pd.to_datetime()函数将数据集中的“年份”和“月份”列转换为日期数据类型,并使用set_index()函数将日期列设置为索引。另外,我们还删除了“年份”和“月份”列。

接下来对数据进行可视化分析:

# 统计分析并可视化
monthly_flights = df['passengers'].resample('M').sum()
plt.plot(monthly_flights.index, monthly_flights.values)
plt.title('Monthly Flights')
plt.xlabel('Date')
plt.ylabel('Passengers')
plt.show()

上述代码中使用resample()函数按月份对数据进行重采样,并使用sum()函数计算每个月的总乘客数。接着,我们使用Matplotlib库中的plot()函数对航班月份和总乘客数进行绘图。通过这张图表,我们可以看出航班乘客数的变化趋势。

七、小结与回顾

1 Pandas的不足与发展方向

Pandas库在数据分析领域有广泛的应用,但它也存在着一些缺陷。例如对于海量数据的处理速度较慢。为了克服这种情况,Pandas库近期推出了一个新模块,名为Dask-Pandas,它旨在通过利用并行化处理来加快数据处理的速度。另外,Pandas库的发展方向还包括加强数据科学和机器学习方面的能力,进一步完善数据可视化和报告生成的功能。

2 Python数据分析的未来趋势

Python在数据分析领域有着巨大的潜力。现代Python数据分析工具的全面发展,包括NumPy、SciPy、Pandas等三大库的应用,吸引了越来越多的数据科学家的关注。随着GPU技术的发展,Python的数据分析工具也在逐渐向着大规模并行化和高性能计算的方向发展。此外,Python数据分析工具的应用已经逐渐涉及到人工智能、物联网等新兴领域,业内对Python数据分析的未来持乐观态度。

目录
相关文章
|
6天前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析和可视化
【10月更文挑战第42天】本文将介绍如何使用Python进行数据分析和可视化。我们将从数据导入、清洗、探索性分析、建模预测,以及结果的可视化展示等方面展开讲解。通过这篇文章,你将了解到Python在数据处理和分析中的强大功能,以及如何利用这些工具来提升你的工作效率。
|
6天前
|
BI Python
SciPy 教程 之 Scipy 显著性检验 8
本教程介绍SciPy中显著性检验的应用,包括如何利用scipy.stats模块进行显著性检验,以判断样本与总体假设间的差异是否显著。通过示例代码展示了如何使用describe()函数获取数组的统计描述信息,如观测次数、最小最大值、均值、方差等。
16 1
|
7天前
|
数据采集 数据可视化 数据处理
Python数据科学:Pandas库入门与实践
Python数据科学:Pandas库入门与实践
|
7天前
|
Python
SciPy 教程 之 Scipy 显著性检验 6
显著性检验是统计学中用于判断样本与总体假设间是否存在显著差异的方法。SciPy的scipy.stats模块提供了执行显著性检验的工具,如T检验,用于比较两组数据的均值是否来自同一分布。通过ttest_ind()函数,可以获取两样本的t统计量和p值,进而判断差异是否显著。示例代码展示了如何使用该函数进行T检验并输出结果。
11 1
|
8天前
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习
|
9天前
|
Python
SciPy 教程 之 Scipy 显著性检验 3
本教程介绍Scipy显著性检验,包括其基本概念、原理及应用。显著性检验用于判断样本与总体假设间的差异是否显著,是统计学中的重要工具。Scipy通过`scipy.stats`模块提供了相关功能,支持双边检验等方法。
18 1
|
11天前
|
机器学习/深度学习 Python
SciPy 教程 之 SciPy 插值 2
SciPy插值教程:介绍插值概念及其在数值分析中的应用,特别是在处理数据缺失时的插补和平滑数据集。SciPy的`scipy.interpolate`模块提供了强大的插值功能,如一维插值和样条插值。通过`UnivariateSpline()`函数,可以轻松实现单变量插值,示例代码展示了如何对非线性点进行插值计算。
15 3
|
12天前
|
机器学习/深度学习 数据处理 Python
SciPy 教程 之 SciPy 空间数据 7
本教程介绍了SciPy的空间数据处理功能,涵盖如何使用`scipy.spatial`模块进行点的位置判断、最近点计算等操作。还详细解释了距离矩阵的概念及其在生物信息学中的应用,以及汉明距离的定义和计算方法。示例代码展示了如何计算两个点之间的汉明距离。
22 1
|
5天前
|
数据采集 数据可视化 数据挖掘
掌握Python数据分析,解锁数据驱动的决策能力
掌握Python数据分析,解锁数据驱动的决策能力
|
7天前
|
数据采集 数据可视化 数据挖掘
Python数据分析:Pandas库实战指南
Python数据分析:Pandas库实战指南