跳到主要内容Python 3.8+ 环境配置与数据科学工具指南 | 极客日志PythonAI算法
Python 3.8+ 环境配置与数据科学工具指南
Python 3.8+ 环境的搭建流程,包括 Jupyter Notebook 配置及常用数据科学库(NumPy、Pandas、Matplotlib、Seaborn)的安装。内容涵盖 NumPy 数组操作、Pandas 数据处理与清洗、以及 Matplotlib 和 Seaborn 的可视化图表绘制方法,旨在帮助开发者快速掌握数据科学基础工具链。
PhpPioneer26 浏览 Python 环境配置与外部库
环境配置与工具准备
安装 Python 3.8+ 版本
从 Python 官网 下载对应操作系统的安装包。勾选'Add Python to PATH'选项,确保环境变量自动配置。安装完成后,命令行输入 python --version 验证是否成功。
配置 Jupyter Notebook
通过命令行安装 Jupyter:
pip install jupyter notebook
启动 Jupyter:
jupyter notebook
浏览器将自动打开交互式界面,新建笔记本文件(扩展名为 .ipynb)即可开始编码。
安装常用数据科学库
在命令行中批量安装核心库:
pip install numpy pandas matplotlib seaborn scikit-learn
验证安装:
import numpy as np
print(np.__version__)
Jupyter Notebook 基础操作
- 单元格运行:点击工具栏的'运行'按钮或按
Shift+Enter 执行当前单元格。
- Markdown 注释:新建单元格后,选择'Markdown'模式,用
# 编写标题或普通文本。例如:
环境管理(可选)
推荐使用 conda 创建独立环境以避免依赖冲突:
conda create -n my_env python=3.8 conda activate my_env
后续所有库安装在此环境中进行。
调试与帮助
- 查看函数文档:在 Jupyter 中函数名后输入
?(如 np.array?)。
- 快捷键列表:通过 Jupyter 的
Help > Keyboard Shortcuts 获取。
数据处理与科学计算
NumPy 基础
多维数组对象 ndarray 的创建方法
使用 np.array() 可以从 Python 列表或元组创建 ndarray:
import numpy as np
arr = np.array([1, , ])
arr_2d = np.array([[, ], [, ]])
2
3
1
2
3
4
zeros_1d = np.zeros(3)
zeros_2d = np.zeros((2, 3))
ones_arr = np.ones((2, 2))
seq = np.arange(0, 10, 2)
使用 np.linspace() 生成等间隔数组:
lin_arr = np.linspace(0, 1, 5)
rand_arr = np.random.rand(3, 3)
randn_arr = np.random.randn(2, 2)
数组的基本操作
arr = np.array([[1, 2], [3, 4]])
print(arr.shape)
reshaped = arr.reshape(4)
print(arr[0, 1])
print(arr[:, 1])
a = np.array([1, 2])
b = np.array([3, 4])
concat = np.concatenate([a, b])
数组运算与广播机制
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b)
print(a * 2)
a = np.array([[1], [2], [3]])
b = np.array([1, 2, 3])
print(a + b)
mat_a = np.array([[1, 2], [3, 4]])
mat_b = np.array([[5, 6], [7, 8]])
dot_product = np.dot(mat_a, mat_b)
常用数学函数
arr = np.array([1, 2, 3, 4])
print(np.sum(arr))
print(np.mean(arr))
print(np.max(arr))
angles = np.array([0, np.pi/2])
print(np.sin(angles))
print(np.exp([1, 2]))
print(np.log([1, np.e]))
数组的高级操作
arr = np.array([1, 2, 3, 4])
mask = arr > 2
print(arr[mask])
arr = np.array([1, -1, 0])
print(np.where(arr > 0, 1, -1))
unsorted = np.array([3, 1, 2])
sorted_arr = np.sort(unsorted)
unique = np.unique([1, 2, 2, 3])
Pandas 核心功能
Series 创建
pd.Series([1, 3, 5, np.nan], index=['a', 'b', 'c', 'd'])
pd.Series({'a': 1, 'b': 3, 'c': 5})
pd.Series([1, 2], dtype='float64')
pd.Series(5, index=['a', 'b', 'c'])
DataFrame 创建
pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
pd.DataFrame(np.random.randn(3, 4), columns=['A', 'B', 'C', 'D'])
pd.DataFrame(np.array([(1, 'a'), (2, 'b')], dtype=[('x', 'i4'), ('y', 'U1')]))
pd.DataFrame(existing_df, copy=True)
高级索引技术
df.loc['20200101':'20200103', ['A', 'B']]
df.set_index(['col1', 'col2']).sort_index()
数据清洗:处理缺失值与去重
df.dropna(axis=0, how='any', subset=['col1', 'col2'])
df.fillna(method='ffill')
df.fillna(method='bfill')
高级去重操作
df.drop_duplicates(subset=['col1'])
df.drop_duplicates(keep='last')
df.drop_duplicates(subset=['col1'], keep=False)
数据聚合与透视
df.groupby(['A', 'B']).mean()
df.groupby('A').agg(['sum', 'mean', 'std'])
df.groupby('A').agg({'B': 'sum', 'C': lambda x: max(x)-min(x)})
df.groupby('A').filter(lambda x: x['B'].mean() > 0)
pivot_table 深度使用
pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'])
pd.pivot_table(df, values=['D', 'E'], index='A', columns='C')
pd.pivot_table(df, values='D', index='A', aggfunc=[np.sum, len])
pd.pivot_table(df, values='D', index='A', fill_value=0)
pd.pivot_table(df, values='D', index='A', margins=True)
时间序列处理
pd.to_datetime(df['date_col'])
df['datetime_col'].dt.year
df['datetime_col'] + pd.Timedelta(days=1)
时间序列重采样
df.resample('Q').agg({'A':'sum', 'B':'mean'})
df.rolling(window=3).mean()
数据合并与连接
pd.concat([df1, df2], axis=0)
pd.merge(df1, df2, on='key')
pd.merge(df1, df2, left_on=['key1', 'key2'], right_on=['key1', 'key2'])
pd.merge(df1, df2, how='outer')
df1.join(df2, how='left')
数据变形
pd.melt(df, id_vars=['A'], value_vars=['B', 'C'])
df.pivot(index='date', columns='variable', values='value')
pd.crosstab(df['A'], df['B'])
pd.get_dummies(df['category_col'])
性能优化技巧
df['new_col'] = df['A'] * 2
df.apply(lambda x: x['A'] * 2, axis=1)
df.astype({'A': 'int32'})
pd.read_csv('large.csv', chunksize=10000)
内存管理
df.memory_usage(deep=True)
pd.arrays.SparseArray(df['col'])
数据可视化
折线图绘制(plt.plot())
折线图适用于展示数据随时间或有序类别的变化趋势。以下是一个包含完整注释的示例:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y, color='red',
linestyle='--',
linewidth=2,
marker='o',
markersize=5,
label='sin(x)'
)
plt.title('Sine Wave Example', fontsize=14)
plt.xlabel('X-axis', fontsize=12)
plt.ylabel('Y-axis', fontsize=12)
plt.legend(loc='upper right')
plt.grid(True, linestyle=':', alpha=0.5)
plt.show()
散点图绘制(plt.scatter())
散点图用于展示两个变量之间的相关性或分布。示例代码:
np.random.seed(42)
x = np.random.randn(50)
y = x * 2 + np.random.randn(50) * 0.5
plt.scatter(x, y, c='blue',
s=80,
alpha=0.6,
edgecolors='black',
label='Data Points'
)
plt.plot(np.unique(x), np.poly1d(np.polyfit(x, y, 1))(np.unique(x)), color='red', label='Trend Line')
plt.title('Scatter Plot with Trend Line', fontsize=14)
plt.xlabel('Independent Variable', fontsize=12)
plt.ylabel('Dependent Variable', fontsize=12)
plt.legend()
plt.show()
子图绘制(plt.subplots())
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
axes[0, 0].plot(x, np.sin(x), color='green')
axes[0, 0].set_title('Subplot 1: Sine Wave')
axes[0, 1].scatter(x, y, color='orange')
axes[0, 1].set_title('Subplot 2: Scatter Plot')
axes[1, 0].bar(['A', 'B', 'C'], [3, 7, 4], color='purple')
axes[1, 0].set_title('Subplot 3: Bar Chart')
axes[1, 1].hist(np.random.randn(1000), bins=20, color='pink')
axes[1, 1].set_title('Subplot 4: Histogram')
plt.tight_layout()
plt.show()
扩展绘图类型
柱状图(plt.bar())
categories = ['Category A', 'Category B', 'Category C']
values = [12, 24, 8]
plt.bar(categories, values, color=['#FF5733', '#33FF57', '#3357FF'], edgecolor='black', width=0.6)
plt.title('Bar Chart Example')
plt.xticks(rotation=45)
plt.show()
饼图(plt.pie())
labels = ['Apples', 'Oranges', 'Bananas']
sizes = [30, 45, 25]
explode = (0.1, 0, 0)
plt.pie(sizes, labels=labels, explode=explode, autopct='%1.1f%%',
shadow=True, startangle=90)
plt.title('Pie Chart Example')
plt.show()
箱线图(plt.boxplot())
data = [np.random.normal(0, std, 100) for std in range(1, 4)]
plt.boxplot(data, notch=True,
patch_artist=True, boxprops=dict(facecolor='lightblue'))
plt.title('Boxplot Example')
plt.xticks([1, 2, 3], ['Group 1', 'Group 2', 'Group 3'])
plt.show()
样式高级调整
- 自定义颜色与样式
- 使用十六进制颜色码(如
#FF5733)或 RGB 元组(如 (0.1, 0.2, 0.5))。
- 线型参数:
'-'(实线)、'--'(虚线)、':'(点线)。
plt.savefig('output.png', dpi=300, bbox_inches='tight')
Seaborn 高级可视化统计图形详解
Seaborn 是基于 Matplotlib 的 Python 数据可视化库,提供更高级的统计图形接口。以下将详细介绍常用图形及进阶操作。
直方图(sns.histplot())
直方图用于展示连续变量的分布情况,通过 bin 将数据分段统计频率。
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
sns.histplot(data=tips, x="total_bill")
plt.title("Total Bill Distribution")
plt.show()
sns.histplot(data=tips, x="total_bill", kde=True)
plt.title("With KDE Estimation")
plt.show()
sns.histplot(data=tips, x="total_bill", hue="sex", element="step")
plt.title("Grouped by Gender")
plt.show()
kde:是否叠加核密度曲线
hue:按分类变量分组着色
bins:手动设置分箱数量
stat:可改为"density"显示密度而非计数
箱线图(sns.boxplot())
箱线图展示数据分布的五数概括(最小值、Q1、中位数、Q3、最大值)及离群点。
sns.boxplot(data=tips, x="day", y="total_bill")
plt.title("Daily Bill Distribution")
plt.show()
sns.boxplot(data=tips, x="day", y="total_bill", hue="smoker")
plt.title("With Smoking Status")
plt.show()
sns.boxplot(data=tips, y="day", x="total_bill", orient="h")
plt.title("Horizontal Orientation")
plt.show()
showfliers=False 可隐藏离群点
whis 参数调整离群点判定范围
- 结合
swarmplot() 可叠加原始数据点
散点矩阵(sns.pairplot())
sns.pairplot(data=tips)
plt.suptitle("Pairwise Relationships")
plt.show()
sns.pairplot(data=tips, hue="time", corner=True)
plt.suptitle("Colored by Meal Time")
plt.show()
sns.pairplot(
data=tips, diag_kind="kde", plot_kws={"alpha": 0.6}, height=2.5
)
plt.suptitle("Custom Diagonal Plots")
plt.show()
vars 选择特定列
markers 为不同类别指定形状
palette 自定义颜色方案
热力图(sns.heatmap())
corr = tips.corr()
sns.heatmap(corr, annot=True, fmt=".2f")
plt.title("Correlation Heatmap")
plt.show()
sns.heatmap(
corr, cmap="coolwarm", center=0, linewidths=.5, annot_kws={"size": 10}
)
plt.title("Styled Heatmap")
plt.show()
- 结合
clustermap() 实现层次聚类热图
mask 参数可隐藏部分矩阵
cbar_kws 自定义颜色条样式
进阶图形扩展
小提琴图(sns.violinplot())
sns.violinplot(data=tips, x="day", y="total_bill", inner="quartile")
plt.title("Violin Plot Example")
plt.show()
分面网格(sns.FacetGrid)
g = sns.FacetGrid(tips, col="time", row="smoker")
g.map(sns.scatterplot, "total_bill", "tip")
g.add_legend()
plt.show()
回归图(sns.lmplot())
sns.lmplot(
data=tips, x="total_bill", y="tip", hue="smoker", markers=["o", "x"]
)
plt.title("Regression Plot")
plt.show()
分布对比图(sns.ecdfplot())
sns.ecdfplot(data=tips, x="total_bill", hue="time")
plt.title("ECDF Plot")
plt.show()
样式与主题设置
sns.set_style("whitegrid")
sns.set_palette("husl")
sns.set_context("notebook")
custom_palette = sns.color_palette(["#9b59b6", "#3498db", "#95a5a6"])
sns.set_palette(custom_palette)
图形保存
plt.figure(figsize=(10, 6))
sns.histplot(data=tips, x="total_bill")
plt.savefig("histogram.png", dpi=300, bbox_inches="tight")
建议从基础图形开始练习,逐步叠加更复杂的参数和样式设置。
学习资源推荐
官方文档:NumPy/Pandas/Matplotlib/scikit-learn 官网
实战平台:Kaggle 入门竞赛、UCI 数据集练习
代码示例:GitHub 搜索 python-data-science-tutorial
(注:每个模块建议配合 Jupyter Notebook 边学边练,从官方示例代码开始修改调试)
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- 随机西班牙地址生成器
随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
- Gemini 图片去水印
基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online