原文链接:Python数据分析基础及实用技巧(建议收藏)
Python数据分析基础介绍
1. 描述性统计分析 (descriptive statistics)
描述性统计是理解数据集基本特征的第一步,它包括均值、中位数、标准差等统计量。
使用 pandas
库来计算数据集的描述性统计量。
import pandas as pd
# 创建一个数据集
data = {
'age': [25, 30, 35, 40, 45],
'income': [50000, 60000, 70000, 80000, 90000]
}
df = pd.dataframe(data)
# 计算描述性统计量
desc_stats = df.describe()
print(desc_stats)
2. 数据可视化 (data visualization)
数据可视化是将数据以图形的方式展示出来,这有助于发现模式、趋势和异常。
使用 matplotlib
和 seaborn
库来创建图表。
import matplotlib.pyplot as plt
import seaborn as sns
# 加载内置的数据集
tips = sns.load_dataset("tips")
# 创建散点图
plt.figure(figsize=(10, 6))
sns.scatterplot(x="total_bill", y="tip", data=tips)
plt.title('total bill vs tip')
plt.show()
3. 探索性数据分析 (exploratory data analysis, eda)
eda 是在没有明确假设的情况下使用图表和其他统计方法来了解数据的过程。
使用 pandas
和 matplotlib
进行探索性数据分析。
# 加载内置的数据集
iris = sns.load_dataset("iris")
# 使用 pandas 探查数据
print(iris.head())
print(iris.info())
print(iris.describe())
# 使用 seaborn 绘制箱线图来观察不同种类鸢尾花的花瓣长度分布
sns.boxplot(x='species', y='petal_length', data=iris)
plt.show()
输出
sepal_length sepal_width petal_length petal_width species
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 150 entries, 0 to 149
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 sepal_length 150 non-null float64
1 sepal_width 150 non-null float64
2 petal_length 150 non-null float64
3 petal_width 150 non-null float64
4 species 150 non-null object
dtypes: float64(4), object(1)
memory usage: 6.0+ KB
None
sepal_length sepal_width petal_length petal_width
count 150.000000 150.000000 150.000000 150.000000
mean 5.843333 3.057333 3.758000 1.199333
std 0.828066 0.435866 1.765298 0.762238
min 4.300000 2.000000 1.000000 0.100000
25% 5.100000 2.800000 1.600000 0.300000
50% 5.800000 3.000000 4.350000 1.300000
75% 6.400000 3.300000 5.100000 1.800000
max 7.900000 4.400000 6.900000 2.500000
4. 假设检验 (hypothesis testing)
假设检验是确定数据中的模式是由随机变异还是实际效应引起的统计过程。
使用 scipy
来进行t检验。
from scipy import stats
# 两组样本数据
group1 = [1,2,3,4,5,12,3,4,3,4,4,12,3,4,4]
group2 = [2,3,4,5,6,13,5,6,5,5,5,15,4,3,2]
# 执行独立样本t检验
t_stat, p_val = stats.ttest_ind(group1, group2)
print(f"t-statistic: {t_stat}, p-value: {p_val}")
Python深度学习-意力机制、Transformer模型、生成式模型、目标检测算法、图神经网络、强化学习与可视化方法
Python数据分析实用技巧
重新命名列
import pandas as pd
# Create a sample DataFrame
data = {'old_name_1': [1, 2, 3],
'old_name_2': [4, 5, 6]}
df = pd.DataFrame(data)
# Rename columns
df.rename(columns={'old_name_1': 'new_name_1', 'old_name_2': 'new_name_2'}, inplace=True)
有时,你需要处理列名不具有描述性的数据集。你可以使用重命名方法轻松重命名列。
按条件筛选行
# Filter rows where a condition is met
filtered_df = df[df['column_name'] > 3]
根据条件筛选行是一种常见操作,它允许你只选择符合特定条件的行。
处理缺失数据
# Drop rows with missing values
df.dropna()
# Fill missing values with a specific value
df.fillna(0)
处理缺失数据是数据分析的重要组成部分。你可以删除缺失值的行,或者用默认值来填充。
分组和汇总数据
# Group by a column and calculate mean for each group
grouped = df.groupby('group_column')['value_column'].mean()
分组和汇总数据对于汇总数据集中的信息至关重要。你可以使用Pandas的groupby方法计算每个组的统计数据。
透视表
# Create a pivot table
pivot_table = df.pivot_table(values='value_column', index='row_column', columns='column_column', aggfunc='mean')
数据透视表有助于重塑数据,并以表格形式进行汇总。它们对创建汇总报告尤其有用。
合并数据框
# Merge two DataFrames
merged_df = pd.merge(df1, df2, on='common_column', how='inner')
当你有多个数据集时,你可以根据共同的列使用Pandas的merge功能来合并它们。
应用自定义功能
# Apply a custom function to a column
def custom_function(x):
return x * 2
df['new_column'] = df['old_column'].apply(custom_function)
你可以将自定义函数应用于列,这在需要执行复杂转换时尤其有用。
对时间序列数据重新取样
# Resample time series data
df['date_column'] = pd.to_datetime(df['date_column'])
df.resample('D', on='date_column').mean()
在处理时间序列数据时,Pandas允许你将数据重新采样到不同的时间频率,如每日、每月或每年。
处理分类数据
# Convert categorical data to numerical using one-hot encoding
df = pd.get_dummies(df, columns=['categorical_column'])
分类数据通常需要转换成数字形式,以用于机器学习模型。其中一种常用的方法是One-hot编码。
导出数据
# Export DataFrame to CSV
df.to_csv('output.csv', index=False)
一行代码定义List
定义某种列表时,写For 循环过于麻烦,幸运的是,Python有一种内置的方法可以在一行代码中解决这个问题。下面是使用For循环创建列表和用一行代码创建列表的对比。
x = [1,2,3,4]
out = []
for item in x:
out.append(item**2)
print(out)
[1, 4, 9, 16]
# vs.
x = [1,2,3,4]
out = [item**2 for item in x]
print(out)
[1, 4, 9, 16]
Lambda表达式
厌倦了定义用不了几次的函数?Lambda表达式是你的救星!Lambda表达式用于在Python中创建小型,一次性和匿名函数对象, 它能替你创建一个函数。
lambda表达式的基本语法是:
lambda arguments: expression
lambda arguments: expression
注意!只要有一个lambda表达式,就可以完成常规函数可以执行的任何操作。
你可以从下面的例子中,感受lambda表达式的强大功能:
double = lambda x: x * 2
print(double(5))
10
Map和Filter
一旦掌握了lambda表达式,学习将它们与Map和Filter函数配合使用,可以实现更为强大的功能。具体来说,map通过对列表中每个元素执行某种操作并将其转换为新列表。
在本例中,它遍历每个元素并乘以2,构成新列表。 (注意!list()函数只是将输出转换为列表类型)
# Map
seq = [1, 2, 3, 4, 5]
result = list(map(lambda var: var*2, seq))
print(result)
[2, 4, 6, 8, 10]
Filter函数接受一个列表和一条规则,就像map一样,但它通过比较每个元素和布尔过滤规则来返回原始列表的一个子集。
# Filter
seq = [1, 2, 3, 4, 5]
result = list(filter(lambda x: x > 2, seq))
print(result)
[3, 4, 5]
Arange和Linspace
Arange返回给定步长的等差列表。它的三个参数start、stop、step分别表示起始值,结束值和步长, 请注意!stop点是一个“截止”值,因此它不会包含在数组输出中。
# np.arange(start, stop, step)
np.arange(3, 7, 2)
array([3, 5])
Linspace和Arrange非常相似,但略有不同。Linspace以指定数目均匀分割区间,所以给定区间start和end,以及等分分割点数目num,linspace将返回一个NumPy数组。
这对绘图时数据可视化和声明坐标轴特别有用。
# np.linspace(start, stop, num)
np.linspace(2.0, 3.0, num=5)
array([ 2.0, 2.25, 2.5, 2.75, 3.0]
Axis代表什么?
在Pandas中,删除一列或在NumPy矩阵中求和值时,可能会遇到Axis。我们用删除一列(行)的例子:
df.drop('Column A', axis=1)
df.drop('Row A', axis=0)
如果你想处理列,将Axis设置为1,如果你想要处理行,将其设置为0。但为什么呢? 回想一下Pandas中的shape。
df.shape
(# of Rows, # of Columns)
从Pandas DataFrame中调用shape属性返回一个元组,第一个值代表行数,第二个值代表列数。
如果你想在Python中对其进行索引,则行数下标为0,列数下标为1,这很像我们如何声明轴值。
Concat、Merge和Join
如果您熟悉SQL,那么这些概念对你来说可能会更容易。 无论如何,这些函数本质上就是以特定方式组合DataFrame的方式。 在哪个时间跟踪哪一个最适合使用可能很困难,所以让我们回顾一下。
Concat允许用户在表格下面或旁边追加一个或多个DataFrame(取决于您如何定义轴)。
Merge将多个DataFrame合并指定主键(Key)相同的行。
Join,和Merge一样,合并了两个DataFrame。但它不按某个指定的主键合并,而是根据相同的列名或行名合并。
Pandas Apply
Apply是为Pandas Series而设计的。如果你不太熟悉Series,可以将它想成类似Numpy的数组。
Apply将一个函数应用于指定轴上的每一个元素。使用Apply,可以将DataFrame列(是一个Series)的值进行格式设置和操作,不用循环,非常有用!
df = pd.DataFrame([[4, 9],] * 3, columns=['A', 'B'])
df
A B
0 4 9
1 4 9
2 4 9
df.apply(np.sqrt)
A B
0 2.0 3.0
1 2.0 3.0
2 2.0 3.0
df.apply(np.sum, axis=0)
A 12
B 27
df.apply(np.sum, axis=1)
0 13
1 13
2 13
Pivot Tables
如果您熟悉Microsoft Excel,那么你也许听说过数据透视表。
Pandas内置的pivot_table函数以DataFrame的形式创建电子表格样式的数据透视表,,它可以帮助我们快速查看某几列的数据。
下面是几个例子:
非常智能地将数据按照“Manager”分了组:
pd.pivot_table(df, index=["Manager", "Rep"])
或者也可以筛选属性值
pd.pivot_table(df,index=["Manager","Rep"],values=["Price"])
推荐阅读: