美文网首页
用python玩转数据《南京大学公开课》

用python玩转数据《南京大学公开课》

作者: dajielailin | 来源:发表于2021-06-12 11:44 被阅读0次

Python变量作用域

  1. 能否直接在函数里直接修改全局变量?(不能,global)

常用的python库

  1. 下载常用库方法:
  • pip指定源安装:
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install numpy -i http://mirrors.aliyun.com/pypi/simple

math库

  1. 如何查看一个模块中包含那些函数?(dir(math));
  2. 如何查看某个函数的使用方法?(help(math.ceil));

random库

  1. random.randint(2);
  2. random.random();
  3. random.sample(2);——返回某个区间的n 个样本
  4. random.shuffle(list);——打乱n 个样本并返回

datetime库

  1. datetime.now();
  2. datetime.now();strftime('%a,%b,%d,%Y,%M,%D');
  3. datetime.now().timestamp();——返回当前时间的时间戳,即从新纪元(1970年1月1日0时0分0秒)开始到当前的秒数
  4. datetime.fromtimestamp(datetime.now().timestamp()); 将时间戳转换为当前时区时间

序列及其特性

  1. 序列包括哪些?——字符串、列表、元组等;
  2. 序列的内置函数介绍:
  • enumerate():按(索引,序列元素)返回序列内容
  • zip(iterate,): 传入多个可迭代对象,将对象中的元素按位置打包成一个一个元组,然后返回元组的列表

列表简介

  1. 列表是可扩展的;[].append() [].extend()
  2. 列表支持不同类型元素:a= [1,'1',a]
  3. 动态创建列表:[(x+1,y+1) for x in range(2) for y in range(2)]

字典及其特性

  1. 字典默认value初始化: a = {}.fromkeys(('a','b'),30)
  2. 字典生成方式:dict(任何具有联系的元组)
  3. 字典的应用:
  • json字符串的生成和解析;
  • 搜索引擎关键字查询-url指定参数:
    百度搜索引擎关键字查询样例:https://www.baidu.com/s?wd=%s
import requests
kv = {'wd':'Python dict'}
url = 'https://www.baidu.com/s'
headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;1=0.9,*/*;1=0.8',
'Host':'movie.douban.com',
'User-Agent': r'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36'}
r = requests.get(url, headers = headers, params=kv)

异常

  1. 查看异常类:dir(builtins);
  2. Except是所有异常的基类;
  3. try except finally;
  4. 上下文管理器:定义和控制代码块执行前的准备动作及执行后的收尾动作;
    -with支持上下文管理器的对象;

读取本地文件

  1. 文件file是一个可迭代对象;
  2. f.readlines()需要注意当前文件指针的位置,想要修改文件指针位置,用f.seek();
  3. 使用python2和python3读取、写入文件需要注意编码格式:
    3.1 Pycharm等IDE开发工具指定项目工程和文件的字符编码 或者 在python源文件头部指定的字符编码:- coding:utf-8 -*-:
  • 他们的主要作用是告诉python解释器当前python代码文件保存时使用的字符编码格式。
    3.2 而程序读取文件时,使用的字符编码是需要程序员手动指定的,python2和python3下又稍微有区别:
  • 对python2,open函数定义如下:open(name[, mode[, buffering]]);python2下对文件的read、write,操作的都是字节,所以如果想要得到正确的字符串,需要对read()回来的
    字节进行decode(),对write()前的字节进行encode();
  • 对python3,open函数定义如下:open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None;这里可以看出python3下
    解释器可以自动完成写入时的encode和读取时的decode,前提是我们需要在打开文件时指定字符编码:encoding='utf-8'。
  • 无论是python2还是python3,如果读取文件时不指定字符编码,那么解释器将指定平台默认的字符编码。

爬取网络数据

1. 抓取:

1.1. 使用urllib.request;
1.2. 使用Requests第三方库;(个人爬虫项目)

  • 使用requests.get(url,headers=headers)时,如果status_code返回418,那么基本是没有指定请求头,即:
    1.2.1 正确实例:
url = 'https://movie.douban.com/subject/20645098/comments/'
headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;1=0.9,*/*;1=0.8',
'Host':'movie.douban.com',
'User-Agent': r'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36'}
r = requests.get(url, headers = headers)

1.2.2 re = requests.get()返回的是一个对象re,它包括request的请求内容,也包括reponse的抓取数据;
1.2.2.1 re.text——推测抓取文本的编码格式并进行解码;
1.2.2.2 re.content——如果抓取的是一个二进制文本,则数据可以使用content获取;
1.2.2.3 re.json()——按json格式解析抓取的数据;
1.3. Scrapy框架(大型爬虫项目)

2. 解析

2.1 使用BeautifulSoup库从HTML或XML文件中提取数据;(通常获取整块数据),例:from bs4 import BeautifulSoup
2.2 使用re正则表达式来匹配获取块数据中的指定格式数据;
例:

import re
pattern_s = re.compile('<span class="short">(.*?)</span>')
p = re.findall(pattern_s, r.text)

函数式编程

  1. 主要有3个基本函数和一个算子构成:
  • 3个基本函数:map(),reduce(), filter();
  • map(function, iterate) : 遍历可迭代对象中的元素,将他们传给function,然后将返回值组成列表返回
  • 算子:lambda

可变可迭代对象修改问题

  1. list深拷贝和浅拷贝:
  • 浅拷贝list,例:
x = [1,[1,2],3,4]
y = x[:]或 y = x.copy()
y[0],y[1][0] = 2,2
结果:
x = [1,[2,2],3,4]

-. 深拷贝list: y = copy.deepcopy(x),则上面代码最终x = [1,[1,2],3,4]
-. 非拷贝,直接复制:y = x,相当于x的引用


python的开源系统Scipy

  • Scipy六大核心库:Numpy, Pandas,MatPlotlib等;

Numpy库简介

  1. ndarry的ufunc函数:即一种能对数组中的每个元素进行操作的函数。Numpy内置的许多ufunc函数都是在C语言级别实现的,计算速度非常快;
    例如:add,sin,...

pandas库简介

  1. 变长字典Series:
  • 类似一维字典,由索引和value构成;
  • 可以自定义索引: a = pandas.Series([3,5,7], index=[a,b,c])
  • Series的数据对齐: 通过index来获取对应的value:
data = {a:'a',b:'b',c:'c'}
tindex = [a,c,d]
a = pandas.Series(data, index = tindex)
a = {
    a:'a',
    c:'c',
    d:NAN #NAN —— Not A Number
}
  1. DataFrame基本特征:
  • 一个表格型的数据结构;
  • 含有一组有序的列(类似于index);
  • 大致可以看成一组共享index的Series集合;
data = numpy.array([('wangdachun', 4000),('LiNing', 5000),('zhaoritian',6000)])
frame = pandas.DataFrame(data, index=range(1,4),columns=['name','pay'])

相关文章

网友评论

      本文标题:用python玩转数据《南京大学公开课》

      本文链接:https://www.haomeiwen.com/subject/wzabeltx.html