很多人转 AI,一上来就想学模型、学深度学习,但真实项目里,你会发现:
而在 Python 生态里,围绕「数据」最关键的三件套就是:
本期文章的目标,就是给你一套可直接上手的“数据科学工具箱入门 + 实战模板”,为后面的机器学习、深度学习打好基础。
可以把 Numpy 的 ndarray 理解为「高性能的多维数组」,而你在 AI 里操作的一切:特征、参数、隐藏层表示,本质上都是这种数组。
import numpy as npa = np.array([1, 2, 3]) # 一维向量b = np.array([1, 2, 3, 4](# "Reference 1, 2, 3, 4 \|\|\| __GENERATING_DETAILS__")) # 二维矩阵print(a.shape) # (3,)print(b.shape) # (2, 2)print(a.dtype) # 数据类型,如 int64、float64
习惯性看 shape,会极大减少你在调试模型时的痛苦。
x = np.array([1, 2, 3, 4, 5])# 传统写法(不要这样做)y_loop = []for v in x:y_loop.append(v * 2)# Numpy 写法(推荐)y_vec = x * 2print(y_vec) # [ 2 4 6 8 10]
在大规模数据上,向量化会比 for 循环 快一个数量级以上。
X = np.array([[1, 2, 3],[4, 5, 6]]) # shape: (2, 3)b = np.array([10, 20, 30]) # shape: (3,)Y = X + b # shape: (2, 3)
b 会在行维度上“自动扩展”成 (2, 3),这就是广播机制。在神经网络里你看到的「加 bias」本质上就是这样的操作。
可以把 DataFrame 理解为「内存里的表」:
对有后端经验的人来说,它的感觉有点像:“更自由的表 + 写在代码里的 SQL + Excel 的一些功能”。
下面用一个简单的「股票价格 + 成交量」示例(你可以换成任意 CSV 数据)贯穿:
import pandas as pdimport numpy as np# 1. 读数据df = pd.read_csv('stock.csv') # 假设包含 date, price, volume 等列print("数据集预览:")print(df.head())print("\n数据形状:", df.shape)print("\n缺失值统计:")print(df.isnull().sum())print("\n描述性统计:")print(df.describe())
# 缺失值填充:数值列用中位数,类别列用众数for col in df.columns:if df[col].dtype == 'object':df[col].fillna(df[col].mode()[0], inplace=True)else:df[col].fillna(df[col].median(), inplace=True)# 简单的异常值过滤:例如 price 应该大于 0df = df[df['price'] > 0]
df['date'] = pd.to_datetime(df['date'])df = df.sort_values('date')df['year'] = df['date'].dt.yeardf['month'] = df['date'].dt.monthdf['dayofweek'] = df['date'].dt.dayofweek
# 按月份统计平均价格和总成交量monthly = df.groupby(['year', 'month']).agg({'price': 'mean','volume': 'sum'}).reset_index()print(monthly.head())
# 把字符串类别转换为整数编码cat_cols = df.select_dtypes(include=['object']).columnsfor col in cat_cols:df[col] = df[col].astype('category').cat.codes
后续你会把 df 拆成 X(特征矩阵)和 y(标签向量),喂给 Scikit-learn 或 PyTorch:
target = 'price' # 假设要预测价格X = df.drop(columns=[target]).values # Numpy 数组y = df[target].values
如果你只用 print(df.head()) 看数据,那你只能看到「树」,看不到「森林」。
假设我们已经用 Pandas 生成了一个股票价格 DataFrame:filled_df,包含:price:每日收盘价;volume:每日成交量;ma_20:20 日移动平均线。
你可以:
import matplotlib.pyplot as pltplt.figure(figsize=(12, 6))plt.plot(filled_df['price'], label='股票价格')plt.plot(filled_df['ma_20'], label='20日移动平均')plt.legend()plt.title('股票价格走势')plt.xlabel('日期')plt.ylabel('价格')plt.grid(True)plt.show()
这张图可以直观回答:
import seaborn as snscorr = df.corr() # 数值特征相关系数矩阵plt.figure(figsize=(10, 8))sns.heatmap(corr, annot=True, cmap='coolwarm')plt.title('特征相关性热力图')plt.show()
在后续做机器学习时:
建议你自己找一份数据(比如 Kaggle 的 Titanic、房价预测,或者工作中导出的日志),照着这份模板完整走一遍:
import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as sns# 1. 读取数据df = pd.read_csv('data.csv')print("数据形状:", df.shape)print("\n基本信息:")print(df.info())print("\n数值列统计:")print(df.describe())# 2. 缺失值处理missing = df.isnull().sum()print("\n缺失值统计:")print(missing[missing > 0])for col in df.columns:if df[col].dtype == 'object':df[col].fillna(df[col].mode()[0], inplace=True)else:df[col].fillna(df[col].median(), inplace=True)# 3. 类别特征编码cat_cols = df.select_dtypes(include=['object']).columnsfor col in cat_cols:df[col] = df[col].astype('category').cat.codes# 4. 简单相关性分析(假设你要预测 'target')target = 'target' # TODO: 换成你的目标列名if target in df.columns:corr = df.corr()[target].sort_values(ascending=False)print("\n与目标变量的相关性:")print(corr)# 5. 可视化:目标与几个关键特征的关系plt.figure(figsize=(12, 5))sns.histplot(df[target], kde=True)plt.title('目标变量分布')plt.show()# 根据需要画更多图,例如某个特征与 target 的关系# sns.boxplot(data=df, x='某个类别特征', y=target)# 6. 导出清洗后的数据,供后续模型使用df.to_csv('cleaned_data.csv', index=False)print("\n清洗后数据已保存为 cleaned_data.csv")
完成这一整套之后,你会有三个重要收获:
目标:能独立完成一次基础的数据读写与清洗。
read_csv / head / info / describe目标:能完成一个小数据分析项目,并输出图表与结论。
groupby、agg、pivot_tableastype、类别编码、时间列处理有了数学和数据工具,现在不要急着上模型代码,下一期我们会:
你现在可以先准备:
下一期,我们会正式从「数据」跨进「机器学习」的大门。
如果这篇文章对你有帮助, 请关注本公众号。
您有什么问题,也可以通过AI学习小助手寻求帮助
文章部分内容由AI生成!