数据分析-学习笔记

1. 学习准备

1.1. 学习大纲

  1. Python
  2. Linux 基础学习(阅读书籍推荐《鸟哥的Linux私房菜:基础学习篇》,也可以参考我写的小册子:Debian GNU/Linux
  3. 使用 Python 进行数据分析
  4. 应用实例

1.2. 课程安排

注意:选项后面的数字表示课时
  1. Python 基础入门(25课时)
    • Python 简介和环境搭建(2)
    • Python 基础语法(1)
    • Python 数据类型(4)
    • Python 流程控制语句(2)
    • Python 迭代器与生成器(1)
    • Python 函数(1)
    • Python 数据结构(2)
    • Python 模块(1)
    • Python 输入和输出(1)
    • Python 文件操作(2)
    • Python 错误和异常(1)
    • Python 面向对象(3)
    • Python 命名空间与作用域(1)
    • Python 标准库(1)
    • Python 实例精讲(3)
  2. Python 进阶(22课时)
    • Python 正则表达式(2)
    • Python CGI 编程(2)
    • Python MySQL(3)
    • Python MongoDB(3)
    • Python 网络编程(2)
    • Python SMTP 邮件发送(2)
    • Python 多线程(2)
    • Python XML 解析(2)
    • Python JSON 解析(2)
    • Python web 框架:uWSGI(2)
  3. Linux 操作系统(22课时)
    • Linux 简介与安装(2)
    • Linux 常用命令(6)
    • Linux VIM
    • Linux 系统管理(8)
    • Linux 服务管理(6)
  4. Python 数据分析(30课时)
    • 数据分析介绍(0.5)
    • jupyter 和 conda 的应用(1)
    • matplotlib 绘图(6)
    • numpy(4)
    • pandas-series(1)
    • pandas-dataFrame(2)
    • 统计方法和离散化(2)
    • 数据合并和分组聚合(3)
    • pandas-时间序列(1)
    • pandas-案例
      • PM2.5(1)
      • 豆瓣电视(1)
      • 互联网金融项目(3)

1.3. 认识操作系统(Operating System)

1.3.1. OS 作为接口的示意图

os-01.png

1.3.2. 不同应用领域主流 OS

  1. 桌面 OS
    • Windows
    • MacOS
    • Linux
  2. 服务器 OS
    • Windows Server
    • Linux:: 安全稳定,占有率高
  3. 嵌入式 OS
    • Windows SE:: 基本上没人用了
    • Linux:: 主流
  4. 移动设备 OS
    • iOS
    • Android

1.3.3. 虚拟机

虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。

  • 虚拟系统生成全新虚拟镜像,具有真实操作系统完全一样的功能。
  • 独立安装软件、保存数据,不对真正的操作系统产生任何影响。
  • 操作系统与虚拟操作系统能灵活切换。

1.4. 软件准备

1.4.1. Google Chrome

当下最流行的浏览器。 常用快捷键:

1.4.2. Cygwin

Cygwin是一个可原生运行于Windows系统上的POSXI兼容环境。具体参见资料:Cygwin是什么

1.4.3. IDE(Integrated Development Environment): PyCharm

1.4.4. Git

版本控制软件

1.5. 励志公式

1.01^365 = 37.78
0.99^365 = 0.03

积硅步以致千里,积怠惰以致深渊。

1.02^365 = 1377.41
0.98^365 = 0.0006

只比你努力一点的人,其实已经甩你很远。

1.01^3 * 0.99^2 < 1.01

三天打鱼,两天晒网,终将一无所获。

2. Python 入门

2.1. Python 简介

  1. Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。
  2. 官方宣布于 2020 年 1 月 1 日, 停止 Python 2 的更新。Python 2.7 被确定为最后一个 Python 2.x 版本。
  3. 特点
    • 易于学习、易于阅读、易于维护
    • 丰富的库,且是跨平台的,可移植
    • 可扩展
    • 可嵌入
  4. 官网:https://www.python.org/
  5. 基础教程参考:
  6. 入门练习:https://learnxinyminutes.com/docs/python/

2.2. Python 环境搭建

2.2.1. Windows

  1. 打开 Python 官网后,下载 Windows 版本的 Python 软件包,一般就下载 “Windows installer (64-bit)”。
  2. 安装时,注意勾选 Add Python 3.x to PATH,安装完成后,可以通过按 Win+R 键,输入 cmd 调出命令提示符,输入 python 来验证。

    // 查看 Python 版本
    > python -V
    
  3. 菜单》打开IDLE(Python)
  4. 在 Windows 设置环境变量,在命令提示框中(cmd) : 输入

    path=%path%;C:\Python 
    // 按下"Enter"。
    注意: C:\Python 是Python的安装目录。
    

    // 也可以参照 Python 3 菜鸟教程,通过右键点击"计算机",然后点击"属性"来设置。

2.2.2. Unix & Linux

  1. 源码方式安装

    # tar -zxvf Python-3.6.1.tgz
    # cd Python-3.6.1
    # ./configure
    # make && make install
    
  2. 包管理工具安装
    • Debian/Ubuntu

      $ sudo apt-get install python3
      
    • RedHat/CentOS

      $ sudo yum install python3
      
    • Mac

      $ brew install python3
      
  3. 环境变量配置
    • bash

      $ vim ~/.bash_profile
      PATH="$PATH:/usr/local/bin/python" 
      
    • zsh(Mac)

      $ vim ~/.zshrc
      PATH="/usr/local/bin/python:$PATH"
      

2.2.3. 执行 Python 程序的三种方式

  • 解释器:python/python3
  • 交互式:ipython
  • IDE:PyCharm

2.3. Python 基本语法

2.3.1. 基础语法

2.3.1.1. 编码
  1. 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。
2.3.1.2. 标识符
2.3.1.3. 保留字
2.3.1.4. 注释
2.3.1.5. 语法格式
  1. 行与缩进
  2. 多行语句
  3. 同一行显示多条语句
  4. 空行
2.3.1.6. import 与 from…import
2.3.1.7. 命令行参数

2.3.2. 基本数据类型

Python3 中有六个标准的数据类型:

  • Number
  • String
  • List
  • Tuple
  • Set
  • Dictionary

其中,不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。

2.3.2.1. Number
2.3.2.2. String
2.3.2.3. List
2.3.2.4. Tuple(元组)
2.3.2.5. Set(集合)
2.3.2.6. Dictionary

2.3.3. 运算符

2.3.4. 流程控制语句

2.3.4.1. 练习题:输入某年某月某日,判断这一天是这一年的第几天?
# -*- coding: utf-8 -*-
# @Date   : 2021/02/10
# @Time   : 19:30
# @Author : zrg

# 需求:输入某年某月某日,判断这一天是这一年的第几天?
# 思路:以5月20日为例,应该先把前四个月的加起来,然后再加上20天即本年的第几天
# 特殊情况: 如果年份为闰年且输入月份大于2时需考虑多加一天

year = int(input("Year:"))
month = int(input("Month:"))
day = int(input("Day:"))

sum_day = 0 # 第几天
leap_year = 0 # 闰年

# 使用元组定义天数
# 如果输入的月份是1月份,则直接计算day即可
# 如果输入的月份是2月份,则要先计算出1月份的天数,即为31天
# 以此类推
# 1  2   3   4   5    6    7    8    9    10   11   12
# 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334
months = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334)

# 根据输入的月份,计算出前几个月的天数
if 0 < month <= 12:
    sum_day = months[month - 1]
else:
    print("输入的月份有误")

# 判断是否为闰年:
# 1.能被400整除 或者是 2.能被4整除并且不能被100整除
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
    leap_year = 1

# 判断如果是闰年并且输入的月份大于2则在总的天数上加1
if leap_year == 1 and month > 2:
    sum_day += day + 1
else:
    sum_day += day

print("It is the {sum_day}th day.")

2.3.5. 迭代器与生成器

2.3.6. 函数

2.3.7. Python 数据结构

2.3.8. 输入输出

2.3.9. 文件操作

2.4. Python 错误和异常

2.5. Python 面向对象

2.5.1. 什么是面向对象?

2.5.2. 类和对象

2.5.3. 方法重写

2.5.4. 继承

2.5.5. 命名空间/作用域

2.6. Python 标准库

2.6.1. OS 模块

2.6.2. 文件通配符:glob 模块

2.6.3. 命令行参数:以链表形式存储于 sys 模块的 argv 变量

2.6.4. 正则匹配:re模块

2.6.5. 数学:math 模块

2.6.6. 网络通信模块:urllib

2.6.6.1. socket
2.6.6.2. smtplib

2.6.7. 多线程:_thread 和 threading 模块

2.6.8. datetime 模块

2.6.9. 数据压缩:zlib,gzip,bz2,zipfile,和 tarfile 等模块

2.6.10. 性能度量:timeit

2.6.11. 测试模块:doctest模块

2.6.12. XML

2.6.13. JSON

2.7. Python CGI 编程

2.8. Python 数据库操作

2.8.1. SQL 入门

2.8.1.1. 简介
  1. SQL 是用于访问和处理数据库的标准的计算机语言。
  2. 什么是 SQL?
    • SQL 指结构化查询语言
    • SQL 使我们有能力访问数据库
    • SQL 是一种 ANSI(美国国家标准化组织) 的标准计算机语言
  3. SQL 能做什么?
    • SQL 面向数据库执行查询
    • SQL 可从数据库取回数据
    • SQL 可在数据库中插入新的记录
    • SQL 可更新数据库中的数据
    • SQL 可从数据库删除记录
    • SQL 可创建新数据库
    • SQL 可在数据库中创建新表
    • SQL 可在数据库中创建存储过程
    • SQL 可在数据库中创建视图
    • SQL 可以设置表、存储过程和视图的权限
  4. RDBMS
    • RDBMS 指的是关系型数据库管理系统。
    • RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 MS SQL Server, IBM DB2, Oracle, MySQL 以及 Microsoft Access。
    • RDBMS 中的数据存储在被称为表(tables)的数据库对象中。表是相关的数据项的集合,它由列和行组成。
2.8.1.2. SQL 语法
  1. 数据库表
    一个数据库通常包含一个或多个表。每个表由一个名字标识(例如“客户”或者“订单”)。表包含带有数据的记录(行)。
  2. SQL 语句
    在数据库上执行的大部分工作都由 SQL 语句完成。示例:

    SELECT LastName FROM Persons
    

    注意事项:

    • SQL 对大小写不敏感!
    • SQL 语句后面的分号?分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的语句。某些数据库系统要求在每条 SQL 命令的末端使用分号。
  3. SQL DML 和 DDL
    可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
    SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。
    查询和更新指令构成了 SQL 的 DML 部分:

    • SELECT - 从数据库表中获取数据
    • UPDATE - 更新数据库表中的数据
    • DELETE - 从数据库表中删除数据
    • INSERT INTO - 向数据库表中插入数据


    SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。如下所示:

    • CREATE DATABASE - 创建新数据库
    • ALTER DATABASE - 修改数据库
    • CREATE TABLE - 创建新表
    • ALTER TABLE - 变更(改变)数据库表
    • DROP TABLE - 删除表
    • CREATE INDEX - 创建索引(搜索键)
    • DROP INDEX - 删除索引
2.8.1.3. SQL 语句
  1. SELECT 语句
  2. DISTINCT
  3. WHERE 子句
  4. AND & OR 运算符
  5. ORDER BY 子句
  6. INSERT INTO 语句
  7. UPDATE 语句
  8. DELETE 语句
  9. TOP 子句
  10. LIKE 操作符和通配符
  11. IN 操作符
  12. BETWEEN 操作符
  13. Alias(别名)
  14. JOIN & INNER JOIN & LEFT JOIN & RIGHT JOIN & FULL JOIN
  15. UNION & UNION ALL
  16. SELECT INTO
  17. CREATE DATABASE 语句
  18. CREATE TABLE 语句
  19. 约束 (Constraints)
    • NOT NULL
    • UNIQUE
    • PRIMARY KEY
    • FOREIGN KEY
    • CHECK
    • DEFAULT
  20. CREATE INDEX 语句
  21. DROP Index/Table/DataBase
  22. ALTER TABLE 语句
  23. VIEW(视图)
2.8.1.4. SQL 数据类型
2.8.1.5. SQL 函数

2.8.2. MySQL

2.8.2.1. mysql-connector 驱动
2.8.2.2. PyMySQL 驱动

2.8.3. MongoDB

2.9. Python 常见 Web 框架

2.9.1. uWSGI

2.9.2. Django

2.9.3. Flask

3. 使用 Python 数据分析

4. 参考资料