Python 数据分析与可视化超详细教程,带你从 0 基础到熟练运用(附安装包)

Python 数据分析与可视化超详细教程,带你从 0 基础到熟练运用(附安装包)

文章目录

前言一、环境搭建1. 下载 Python2. 安装 Python3. 选择开发环境4.使用 pip 安装必要的库

二、数据读取与预处理2.1 数据读取2.2 数据查看与基本信息了解2.3 数据清洗2.4 数据类型转换2.5 数据编码

三、数据分析3.1 数据筛选与排序3.3 相关性分析3.4 时间序列分析3.5 机器学习基础分析(简单示例)

四、数据可视化4.1 使用 matplotlib 进行基础绘图4.2 使用 seaborn 进行高级可视化4.3 使用 plotly 进行交互式可视化

五、综合案例分析5.1 电商销售数据分析与可视化5.2 电影评分数据分析与可视化5.3 股票数据分析与可视化

前言

在数据时代,数据分析与可视化至关重要,Python 因简单强大成数据爱好者首选。 本教程带你开启 Python 数据分析与可视化之旅,从环境搭建到数据处理,将数据变图表。无论小白或能手,都能收获乐趣与知识,一起用 Python 释放数据力量!

一、环境搭建

1. 下载 Python

访问 Python 官方网站,根据你的操作系统(Windows、Mac OS、Linux)选择合适的 Python 版本进行下载。建议下载 Python 3.x 版本,因为 Python 2 已经停止维护。

还可以从小编准备地址下载。

Python 3.7下载地址:https://pan.quark.cn/s/8268bf81f31f Python 3.9下载地址:https://pan.quark.cn/s/9711a93276ad Python 3.11下载地址:https://pan.quark.cn/s/9c44793cb24c

2. 安装 Python

访问 Python 官方网站(https://www.python.org/),根据自己的操作系统(Windows、MacOS、Linux)下载并安装 Python 3.x 版本。安装过程中注意勾选 “Add Python to PATH”,以便在命令行中能直接使用 Python。

Python 3.7安装教程:https://blog.csdn.net/u014164303/article/details/145620847 Python 3.9安装教程:https://blog.csdn.net/u014164303/article/details/145570561 Python 3.11安装教程:https://blog.csdn.net/u014164303/article/details/145549489

3. 选择开发环境

下载 PyCharm 社区版(免费)或专业版(需付费或申请教育版)。安装完成后,打开 PyCharm,创建一个新的项目,在项目设置中选择之前创建的虚拟环境作为项目的 Python 解释器。PyCharm 功能强大,提供代码自动补全、调试等功能,适合开发大型项目。

Pycharm安装教程:https://blog.csdn.net/u014164303/article/details/145674773 PyCharm下载地址:https://pan.quark.cn/s/5756c8cf8b2a

4.使用 pip 安装必要的库

在命令提示符中输入以下命令并回车,以安装 Pandas:

pip install pandas numpy matplotlib seaborn scipy scikit-learn statsmodels plotly

pandas:强大的数据处理和分析库,提供了 DataFrame 和 Series 等数据结构。numpy:用于高效的数值计算,是很多科学计算库的基础。matplotlib:基础的绘图库,可创建各种静态图表。seaborn:基于 matplotlib 的高级可视化库,提供更美观的默认样式。scipy:包含许多科学计算相关的工具,如优化、积分、插值等。scikit-learn:用于机器学习任务,提供分类、回归、聚类等多种算法。statsmodels:用于统计建模和数据分析,提供了多种统计模型。plotly:交互式可视化库,可创建动态、可交互的图表。

二、数据读取与预处理

2.1 数据读取

CSV 文件

import pandas as pd

# 读取 CSV 文件

file_path = 'data.csv'

try:

csv_data = pd.read_csv(file_path)

print("CSV 文件读取成功")

except FileNotFoundError:

print(f"未找到文件: {file_path}")

Excel 文件

# 读取 Excel 文件

excel_file = pd.ExcelFile('data.xlsx')

# 获取指定工作表中的数据

df = excel_file.parse('Sheet1')

SQL 数据库

import sqlite3

# 连接到 SQLite 数据库

conn = sqlite3.connect('example.db')

# 执行 SQL 查询

query = 'SELECT * FROM table_name'

sql_data = pd.read_sql(query, conn)

# 关闭数据库连接

conn.close()

JSON 文件

# 读取 JSON 文件

json_data = pd.read_json('data.json')

2.2 数据查看与基本信息了解

# 查看数据基本信息,包括列名、数据类型、非空值数量等

print(csv_data.info())

# 查看数据集行数,默认显示前 5 行

print(csv_data.head().to_csv(sep='\t', na_rep='nan'))

# 查看数据集行数,指定显示前 10 行

print(csv_data.head(10).to_csv(sep='\t', na_rep='nan'))

# 查看数据的基本统计信息,如均值、标准差、最小值、最大值等

print(csv_data.describe().to_csv(sep='\t', na_rep='nan'))

# 查看数据集行数

rows, columns = csv_data.shape

if rows < 1000:

# 小数据集(行数少于1000)查看全量数据信息

print(csv_data.to_csv(sep='\t', na_rep='nan'))

else:

# 大数据集查看数据前几行信息

print(csv_data.head().to_csv(sep='\t', na_rep='nan'))

2.3 数据清洗

处理缺失值

# 删除包含缺失值的行

cleaned_data = csv_data.dropna()

# 用均值填充缺失值

for column in csv_data.columns:

if csv_data[column].dtype in ['int64', 'float64']:

mean_value = csv_data[column].mean()

csv_data[column].fillna(mean_value, inplace=True)

# 用中位数填充缺失值

for column in csv_data.columns:

if csv_data[column].dtype in ['int64', 'float64']:

median_value = csv_data[column].median()

csv_data[column].fillna(median_value, inplace=True)

# 用指定值填充缺失值

csv_data['column_name'].fillna('unknown', inplace=True)

处理重复值

# 查找重复值

duplicate_rows = csv_data[csv_data.duplicated()]

# 删除重复值

csv_data = csv_data.drop_duplicates()

处理异常值

import numpy as np

# 基于 Z-score 方法检测异常值

z_scores = np.abs((csv_data['numeric_column'] - csv_data['numeric_column'].mean()) / csv_data['numeric_column'].std())

threshold = 3

outliers = csv_data[z_scores > threshold]

# 删除异常值

csv_data = csv_data[z_scores <= threshold]

2.4 数据类型转换

# 将某列转换为日期类型

csv_data['date_column'] = pd.to_datetime(csv_data['date_column'])

# 将某列转换为数值类型

csv_data['numeric_column'] = pd.to_numeric(csv_data['numeric_column'], errors='coerce')

# 将某列转换为字符串类型

csv_data['string_column'] = csv_data['string_column'].astype(str)

2.5 数据编码

标签编码

from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()

csv_data['category_column'] = le.fit_transform(csv_data['category_column'])

独热编码

csv_data = pd.get_dummies(csv_data, columns=['category_column'])

三、数据分析

3.1 数据筛选与排序

# 筛选满足条件的数据

filtered_data = csv_data[csv_data['column_name'] > 10]

# 筛选多条件的数据

multi_filtered_data = csv_data[(csv_data['column1'] > 10) & (csv_data['column2'] < 20)]

# 按某列进行排序

sorted_data = csv_data.sort_values(by='column_name', ascending=False)

# 按多列进行排序

multi_sorted_data = csv_data.sort_values(by=['column1', 'column2'], ascending=[True, False])

## 3.2 数据分组与聚合

# 按某列进行分组,并计算每组的均值

grouped_data = csv_data.groupby('category_column')['numeric_column'].mean()

# 进行多列分组,并进行多种聚合操作

aggregated_data = csv_data.groupby(['category_column1', 'category_column2']).agg({

'numeric_column1': ['sum', 'mean'],

'numeric_column2': 'max'

})

3.3 相关性分析

from scipy.stats import pearsonr

# 计算两列的皮尔逊相关系数和 p 值

corr, p_value = pearsonr(csv_data['column1'], csv_data['column2'])

print(f"皮尔逊相关系数: {corr}, p 值: {p_value}")

# 使用 pandas 计算相关系数矩阵

corr_matrix = csv_data.corr()

print(corr_matrix)

# 绘制相关系数矩阵热力图

import seaborn as sns

import matplotlib.pyplot as plt

plt.figure(figsize=(10, 8))

sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')

plt.title('相关系数矩阵热力图')

plt.show()

3.4 时间序列分析

# 设置日期列为索引

csv_data.set_index('date_column', inplace=True)

# 按年进行重采样并计算均值

yearly_data = csv_data['numeric_column'].resample('Y').mean()

# 计算移动平均值

rolling_mean = csv_data['numeric_column'].rolling(window=7).mean()

# 绘制时间序列图

plt.figure(figsize=(12, 6))

plt.plot(csv_data['numeric_column'], label='Original Data')

plt.plot(rolling_mean, label='7-Day Rolling Mean')

plt.xlabel('Date')

plt.ylabel('Value')

plt.title('Time Series Analysis')

plt.legend()

plt.show()

3.5 机器学习基础分析(简单示例)

from sklearn.model_selection import train_test_split

from sklearn.linear_model import LinearRegression

from sklearn.metrics import mean_squared_error

# 准备特征和目标变量

X = csv_data[['feature_column1', 'feature_column2']]

y = csv_data['target_column']

# 划分训练集和测试集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建线性回归模型

model = LinearRegression()

# 训练模型

model.fit(X_train, y_train)

# 预测

y_pred = model.predict(X_test)

# 评估模型

mse = mean_squared_error(y_test, y_pred)

rmse = np.sqrt(mse)

print(f"均方误差: {mse}")

print(f"均方根误差: {rmse}")

四、数据可视化

4.1 使用 matplotlib 进行基础绘图

折线图

import matplotlib.pyplot as plt

# 示例数据

x = [1, 2, 3, 4, 5]

y = [2, 4, 6, 8, 10]

# 绘制折线图

plt.plot(x, y, marker='o', linestyle='-', color='b', label='Line Plot')

plt.xlabel('X 轴标签')

plt.ylabel('Y 轴标签')

plt.title('折线图示例')

plt.legend()

plt.grid(True)

plt.show()

柱状图

# 示例数据

categories = ['A', 'B', 'C', 'D']

values = [10, 20, 15, 25]

# 绘制柱状图

plt.bar(categories, values, color='g', edgecolor='k')

plt.xlabel('类别')

plt.ylabel('数值')

plt.title('柱状图示例')

plt.show()

散点图

# 示例数据

x = [1, 2, 3, 4, 5]

y = [2, 4, 6, 8, 10]

# 绘制散点图

plt.scatter(x, y, color='r', marker='s', label='Scatter Plot')

plt.xlabel('X 轴标签')

plt.ylabel('Y 轴标签')

plt.title('散点图示例')

plt.legend()

plt.show()

饼图

# 示例数据

labels = ['A', 'B', 'C', 'D']

sizes = [15, 30, 45, 10]

colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']

explode = (0, 0.1, 0, 0) # 突出显示第二部分

# 绘制饼图

plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True, startangle=90)

plt.axis('equal') # 保证饼图是圆形

plt.title('饼图示例')

plt.show()

4.2 使用 seaborn 进行高级可视化

箱线图

import seaborn as sns

# 示例数据

tips = sns.load_dataset('tips')

# 绘制箱线图

sns.boxplot(x='day', y='total_bill', data=tips, palette='Set3')

plt.title('箱线图示例')

plt.show()

热力图

# 计算相关系数矩阵

corr_matrix = tips.corr()

# 绘制热力图

sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', linewidths=0.5)

plt.title('热力图示例')

plt.show()

分类散点图(小提琴图)

# 绘制小提琴图

sns.violinplot(x='day', y='total_bill', hue='sex', data=tips, split=True, palette='muted')

plt.title('小提琴图示例')

plt.show()

成对关系图

# 绘制成对关系图

sns.pairplot(tips, hue='sex')

plt.title('成对关系图示例')

plt.show()

4.3 使用 plotly 进行交互式可视化

交互式折线图

import plotly.express as px

# 示例数据

df = px.data.gapminder().query("country=='Canada'")

fig = px.line(df, x='year', y='lifeExp', title='交互式折线图示例')

fig.show()

交互式散点图

df = px.data.iris()

fig = px.scatter(df, x='sepal_width', y='sepal_length', color='species',

size='petal_length', hover_data=['petal_width'],

title='交互式散点图示例')

fig.show()

五、综合案例分析

5.1 电商销售数据分析与可视化

背景:某电商平台记录了一段时间内不同商品的销售数据,包括商品名称、销售数量、销售金额、销售日期等信息。我们将通过分析这些数据,了解销售趋势、商品销售情况等,并进行可视化展示。代码实现:

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

# 读取数据

data = pd.read_csv('ecommerce_sales.csv')

# 将销售日期转换为日期类型

data['sales_date'] = pd.to_datetime(data['sales_date'])

# 按日期统计总销售金额

daily_sales = data.groupby('sales_date')['sales_amount'].sum()

# 绘制每日销售金额折线图

plt.figure(figsize=(12, 6))

plt.plot(daily_sales.index, daily_sales.values)

plt.title('Daily Sales Amount')

plt.xlabel('Date')

plt.ylabel('Sales Amount')

plt.xticks(rotation=45)

plt.show()

# 统计不同商品的销售数量和销售金额

product_sales = data.groupby('product_name').agg({'sales_quantity': 'sum', 'sales_amount': 'sum'})

# 绘制不同商品销售数量柱状图

plt.figure(figsize=(10, 6))

sns.barplot(x=product_sales.index, y=product_sales['sales_quantity'])

plt.title('Sales Quantity by Product')

plt.xlabel('Product Name')

plt.ylabel('Sales Quantity')

plt.xticks(rotation=90)

plt.show()

# 绘制销售数量和销售金额的散点图

plt.figure(figsize=(8, 6))

plt.scatter(product_sales['sales_quantity'], product_sales['sales_amount'])

plt.title('Relationship between Sales Quantity and Sales Amount')

plt.xlabel('Sales Quantity')

plt.ylabel('Sales Amount')

plt.show()

解释: 首先,使用 pandas 读取电商销售数据,并将销售日期转换为日期类型,方便后续按日期进行统计。 然后,按日期分组计算每日的总销售金额,并使用 matplotlib 绘制折线图,直观展示销售金额随时间的变化趋势。 接着,按商品名称分组统计不同商品的销售数量和销售金额,使用 seaborn 绘制不同商品销售数量的柱状图,对比各商品的销售情况。 最后,绘制销售数量和销售金额的散点图,观察两者之间的关系。

5.2 电影评分数据分析与可视化

背景:我们有一份电影评分数据集,包含电影名称、评分、上映年份、类型等信息。通过对这些数据进行分析和可视化,我们可以了解不同年份电影评分的分布、不同类型电影的受欢迎程度等。代码实现:

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

# 读取数据

data = pd.read_csv('movie_ratings.csv')

# 按上映年份统计平均评分

yearly_ratings = data.groupby('release_year')['rating'].mean()

# 绘制不同年份平均评分折线图

plt.figure(figsize=(12, 6))

plt.plot(yearly_ratings.index, yearly_ratings.values)

plt.title('Average Movie Rating by Year')

plt.xlabel('Release Year')

plt.ylabel('Average Rating')

plt.xticks(rotation=45)

plt.show()

# 统计不同类型电影的数量

genre_counts = data['genre'].value_counts()

# 绘制不同类型电影数量柱状图

plt.figure(figsize=(10, 6))

sns.barplot(x=genre_counts.index, y=genre_counts.values)

plt.title('Number of Movies by Genre')

plt.xlabel('Genre')

plt.ylabel('Number of Movies')

plt.xticks(rotation=90)

plt.show()

# 绘制评分的直方图

plt.figure(figsize=(8, 6))

sns.histplot(data['rating'], bins=10, kde=False)

plt.title('Distribution of Movie Ratings')

plt.xlabel('Rating')

plt.ylabel('Frequency')

plt.show()

解释: 读取电影评分数据后,按上映年份分组计算平均评分,并使用 matplotlib 绘制折线图,展示不同年份电影平均评分的变化。 统计不同类型电影的数量,使用 seaborn 绘制柱状图,对比各类型电影的数量。 绘制评分的直方图,直观呈现电影评分的分布情况。

5.3 股票数据分析与可视化

背景:我们获取了某只股票一段时间内的开盘价、收盘价、最高价、最低价等数据。通过对这些数据进行分析和可视化,我们可以了解股票价格的波动情况、计算收益率等。代码实现:

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

# 读取数据

data = pd.read_csv('stock_prices.csv')

# 将日期转换为日期类型

data['date'] = pd.to_datetime(data['date'])

# 设置日期为索引

data.set_index('date', inplace=True)

# 绘制股票收盘价折线图

plt.figure(figsize=(12, 6))

plt.plot(data['close_price'])

plt.title('Stock Closing Price')

plt.xlabel('Date')

plt.ylabel('Closing Price')

plt.xticks(rotation=45)

plt.show()

# 计算每日收益率

data['daily_return'] = data['close_price'].pct_change()

# 绘制每日收益率直方图

plt.figure(figsize=(8, 6))

sns.histplot(data['daily_return'].dropna(), bins=20, kde=False)

plt.title('Distribution of Daily Returns')

plt.xlabel('Daily Return')

plt.ylabel('Frequency')

plt.show()

# 计算移动平均线(5 日和 20 日)

data['ma_5'] = data['close_price'].rolling(window=5).mean()

data['ma_20'] = data['close_price'].rolling(window=20).mean()

# 绘制收盘价和移动平均线折线图

plt.figure(figsize=(12, 6))

plt.plot(data['close_price'], label='Closing Price')

plt.plot(data['ma_5'], label='5-Day Moving Average')

plt.plot(data['ma_20'], label='20-Day Moving Average')

plt.title('Stock Closing Price and Moving Averages')

plt.xlabel('Date')

plt.ylabel('Price')

plt.legend()

plt.xticks(rotation=45)

plt.show()

解释: 读取股票价格数据后,将日期转换为日期类型并设置为索引。 绘制股票收盘价的折线图,直观展示股票价格随时间的变化。 计算每日收益率,并绘制收益率的直方图,了解收益率的分布情况。 计算 5 日和 20 日的移动平均线,并将收盘价和移动平均线绘制在同一张图上,观察价格与均线的关系。

相关文章

五月盛开的花朵有哪些及其对应的花语?
bt365体育投注官网

五月盛开的花朵有哪些及其对应的花语?

⌛ 08-26 👁️‍🗨️ 6532
今夜C罗又上阵,一睹“世界杯”32国电子烟!
365出款成功未到

今夜C罗又上阵,一睹“世界杯”32国电子烟!

⌛ 06-28 👁️‍🗨️ 8115
避孕套什么材质好用又安全 如何选购避孕套
det365手机版

避孕套什么材质好用又安全 如何选购避孕套

⌛ 08-12 👁️‍🗨️ 1616