一些使用 Python 进行数据处理常见的任务和常用的库。可能不同时间会有更好的选择。

处理 csv 文件

可以使用 pandas import pandas as pd

  • 读取 csv 表格 pd.read_csv("file.csv")
    • 默认第一行为列名,没有列明时用参数 header=None 或者 names=[...]
  • 保存 csv 文件 df.to_csv("file.csv", index=False)
    • 中文编码用 utf-8-sig,否则 Excel 打开会乱码。
  • pandas 的数据处理函数参数混乱,返回格式不固定,最好在 repl 下使用。
    • 空缺值会被识别为 nan。
  • 大文件可以流式处理,使用 dask import dask.dataframe as dd
    • 流式处理大文件,减少内存,可能增加 IO 。
    • 也提供流式接口 import
  • 补充
    -如果格式复杂可以使用 jsonl 文件 ‘pd.read_json()’

描述性统计

求和和计算均值可以直接在 pandas 上对列进行。

  • df.mean()

数据可视化

matplotlib

  • import matplotlib.pyplot as plt
  • 折线图 plt.plot(x, y)
  • 柱状图 plt.bar(x, y)
  • 参数是向量,分别是横轴位置和纵轴位置。

seaborn import seaborn as sns

  • 画柱状图,可以指定分类变量 sns.barplot(df=data,x=x, y=y, hue=hue)
  • pandas 提供的绘图功能不直接支持长表(某列是分类变量)。
  • 注意 sns 有两套 api,用来方便使用 matplotlib 。

可视化往往和描述性统计一起进行,比如计算平均和方差。

假设检验

比较两组数据的均值是否有显著差异,例如判断参数的变化是否影响结果,可以使用 t 检验。

在 Python 中,可以用 scipy.stats.ttest_ind(a, b) ,其中参数是两个数组。

详细用法见第二章。

其他的例如,判断分布可以用 chi2 检验,

NLP

从模型、基础任务、具体应用三个不同的层级来看待。
传统方法,文本分类(WSJ数据集),垃圾邮件检测,情感识别(IMDB数据集),关键词提取,词向量。
传统任务,分词、分句(基于规则),词性标注(隐马尔可夫模型HMM、CRF),实体标注,关系抽取,语法解析。
TF(词频),主题模型(SVD、LDA)

具体应用,
阶段 1 符号 2 统计 3 深度学习

参考:

  • 文本上的算法(最早的网页版和出版的第一版侧重于传统算法。)
  • 自然语言处理。
  • 中文自然语言处理。

fasttext 文本分类。

有了深度学习之后优先传统方法不再用了,而且传统方法易于手工实现,现在则库更加成熟。

屏蔽词是最简单的分类算法。

正则表达式可以用来匹配和提取内容。也有支持递归的。

CV

传统做法
滤波去噪,卷积。边缘检测,
直方图特征匹配,模板匹配
人脸识别
HoG,AdaBoost, yolo v8
特征点匹配。

数据库

sqlite
mysql

在 Python 中可以使用 SQLAlchemy
这个库最近变过 api 不太好用了。

  • GUI 工具
    • SQLite Stdio

SQL

sql 语句

  • 查询 SELECT SELECT * FROM users;
    • 连接 JOIN … ON SELECT u.username, o.order_id, o.product_name FROM users u LEFT JOIN orders o ON u.id = o.user_id;
    • 选择 WHERE SELECT * FROM users WHERE age > 25;
    • 排序 ORDER BY SELECT * FROM users ORDER BY age ASC;
    • SELECT * FROM users LIMIT 10;
    • 去重 SELECT DISTINCT age FROM users;
    • 聚合 AGG SELECT COUNT(*) AS total_users FROM users;
    • 分组 GROUP BY SELECT user_id, COUNT(*) AS order_count FROM orders GROUP BY user_id HAVING order_count > 1;
  • 插入 insert INSERT INTO users (username, email, age) VALUES ('john_doe', 'john@example.com', 30);
  • 更新 update UPDATE users SET email = 'john.new@example.com', age = 32 WHERE id = 1;
  • 删除 delete DELETE FROM users WHERE username = 'bob_johnson'
  • 创建表格 CREATE TABLE
CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username TEXT NOT NULL UNIQUE,
    email TEXT NOT NULL UNIQUE,
    age INTEGER,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);


  • 补充
    • 表结构修改 ALTER TABLE users ADD COLUMN phone TEXT;
    • 索引创建 CREATE INDEX idx_users_email ON users(email);
    • 在目前的互联网应用中,外键约束手工在代码中维护,而仅仅把数据库作为存储使用。
    • 查询可以用 explain 看看如何使用索引的。
    • 窗口函数,比如获得分组排名。

机器学习

sklearn

  • 学习 model.fit(x, y)
    • 也支持 dataframe ``
  • 预测 model.predict(x)
  • 评估 model.score(x, y)
  • 保存和加载
    • 模型保存 pickle.dump(model, open("model.pkl", "wb"))
    • 模型加载 pickle.load(open("model.pkl", "rb"))
    • 模型保存 model.save("model.h5")
  • 支持 dataframe 和 numpy array
  • 模型可以用 xgboost,接口相同。

也有一些命令行工具

  • libsvm
  • fasttext

常见算法

  • 特征选择
  • 评价指标
  • svm
  • 集成学习 xgboost
  • 这里不做详述。

说明

  • 参数估计用的最大似然估计。
  • 是约束求解的过程。
  • 有隐参数,用EM算法。

深度学习

pytorch

pytorch-lightning

hugging face

数据展示

steamlit 会比较简单。

交互网页也可以用基于 react 或 vue 提供的可复用的组件,这里不详述。
一开始挺流行 jQuery + bootstrap

数据分析

数据清理

命令行参数

argparse

有时候需要用命令行调用其他工具,可以用

sys.argv.pop(0)

其他工具

Excel

  • 数据透视表,然后再画图。

Matlab(也包括Octave)

  • load 命令也支持文本格式的数据,非数字字符作为分隔符。
  • 常用工具:画图、统计、最优化、

bash 有时候用来处理文本。

  • 统计行数 wc -l
  • 并行 xargs 支持并行 xargs -P 4 -n 1 python3 注意进程不要冲突。
  • 下载文件
    • wget
    • curl
  • grep/sed/awk
  • ruby 也支持命令行模式

运行环境

docker

  • docker run ubuntu bash

Jupiter

  • 用 Anaconda 有时候会 so 路径问题,可以
    os.environ['LIBRARY_PATH'] = ''
    os.environ['PATH']=os.environ['PATH'].replace("/opt/conda/bin:","")
    os.environ['LD_LIBRARY_PATH']=""
    os.chdir("/kaggle/working")
    

csv2latex

nlp

  • nltk
  • spacy

cv

  • opencv
  • yolo

R 语言

  • 自带可视化,统计功能。见 An Introduction to R 中的部分(只需 8, 11, 12,不要看别的)章节。
  • 还可以调用好多外部的工具箱。 CRAN Task Views
  • 有一些 Python 库是借鉴 R 的。

LaTeX

公式编辑器
表格编辑器
图形。

个人喜欢先用自带模板编辑,然后再嵌入到提交的模板中。
注意有些指令有新旧两套写法。

分布式

使用于数据量大和计算量大的情况

  • mapreduce
  • bigtable
  • spark
  • dask

在执行 map 操作的时候可以并行。有一些算法可以实现为并行的版本。

有点像是 concurrent.futures 模块

with concurrent.futures.ProcessPoolExecutor() as executor:
    for number, prime in zip(PRIMES, executor.map(is_prime, PRIMES)):
        print('%d is prime: %s' % (number, prime))

注意 Python 的线程池有 GIL 不能用来并行计算,但是对 IO 仍有效果。

算法

传统算法

贪心算法,局部最优等于全局最优。

规划问题,线性规划,

图论,图搜索(深度优先、广度优先、启发),有相关的库。

强化学习。

数值规划

线性规划。
整数规划
非线性规划。

有一些求解器

  • z3

有一些启发性算法,近似求解。

注意时间复杂度。

图论。

参考

  • Programming Collective Intelligence 这本书讲 Python 为主,附带一些算法。
  • Paradigms of Artificial Intelligence Programming 太老的书,探讨了基于符号的AI,不再推荐。

  • dblp 很好的用的 CS 论文检索网站。

  • Data Science from Scratch
  • Data Science at the Command Line
  • 有一些数据分析和数据科学的教科书

其他工具

  • mllib 针对分布式数据库。
  • SPSS 处理调查问卷,侧重与社会科学领域。