python学习笔记(一)数据处理

一、基础
1.注释:#/'''   '''
2.标识符:首字符是字母和下划线
3.数据类型:数、字符串、
  列表【list】(元素支持修改)、abc=['my','you']
  元祖【tuple】(元素不支持修改)、cde=('my','you')
  集合【set】(并交差)、&|!
  字典【dictionary】(键:值){key1:value1,key2:value2}
4.运算符
5.缩进 建议tab
6.补充:calc(windows自带计算器),idle(python自带ide)
7.注意::爬去下我文件路径//(\文件目录)需要与网页路径一致//;http(https可能不行)
8.json:JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,
       它是一种基于文本,独立于语言的轻量级数据交换格式。XML也是一种数据交换格式,因为XML虽然可以作为跨平台的数据交换格式,
       但是在JS(JavaScript的简写)中处理XML非常不方便,同时XML标记比数据多,增加了交换产生的流量,而JSON没有附加的任何标记,
       在JS中可作为对象处理,所以我们更倾向于选择JSON来交换数据.
二.控制流
1.if
2.while
3.for
4.中断break/continue
三、语法结构
1.作用域:局部/全局 global i(将i声明为全局)
2.函数:def a():
3.模块:import/from...  import...
4.文件:fp=open('f1','r')fp.close()
5.异常处理:try:
            except Exception as er:
               print(er)
四、爬虫基础
1.定义:定向采集和不定向采集。
2.正则表达式/xpath表达式:
  (1)原子:
       1.普通字符  2.非打印字符eg:\n
       3.通用字符匹配 \w (匹配任意字母数字下划线)\W(!\w) \s (匹配空白字符)
       4.原子表[] 定义一组平等的原子eg:[dsh]或d或s或h,只能是一位
  (2)元字符
       1.  .可以匹配任意字符
       2.  ^匹配字符串开始的位置 ; $匹配字符串结束的位置 
       3.  *匹配0、1、多次前面的原子; ?匹配0或1  ;+  匹配1或多次
       4.  t{n}前面的原子t出现n次; t{n,m}前面的原子t出现n--m次
       5.  |  或者 ; ()提取
  (3)模式修正符
       1.  I 忽略大小写 ;M多行匹配 ;L 
       U  据unicode解析字符 ;S 点也能匹配换行符
  (4)贪婪模式p.*y和懒惰模式p.*?y
  (5)函数
       1.re.match()--从头开始,头不匹配则错
       2.re.search()--只能出现一个结果
       3.re.compile(子串).findall(母串)全局匹配函数--输出多个结果
       4.re.sub函数---替换

五、爬虫实战——企查查
注意:爬去下我文件路径//(\文件目录)需要与网页路径一致//;http(https可能不行)
1.urllib库
  (1)urllib基础
       1.urlretrieve() //将网页直接爬取下来放在本地
         urlcleanup()  //将1.产生的缓存清理
         info()    //当前网页环境的一些信息
         getcode()  //获取当前网页的状态码 200正常,403禁止访问
         geturl()   //获取当前网页网址
  (2)超时设置
       timeout=n
       
  (3)自动模拟http请求
       1.get   从服务器请求
       2.post  请求访问服务器 (抓包技术fiddler) 
  (4)异常处理
       1.状态码  200请求正常 40X请求失败 50X错误服务器
       2.URLError(父类):连不上服务器;远程url不存在;本地没有网络;触发子类HTTPError
         HTTPError(子类)(有状态码及原因)
  (5)浏览器伪装技术
       通用代码:
        headers=('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0')  #User agent
opener=urllib.request.build_opener()#添加对应的报头信息
opener.addheaders=[headers]
urllib.request.install_opener(opener)#设opener为全局
  (6)新闻爬虫实战
       图片爬虫实战
       
【重要】(7)代理服务器(防屏蔽)
       西刺免费IP代理

六、抓包分析
   1.抓包概述 
      通过class id定位
   2.Fiddler
   3.抓取HTTPS数据包(证书添加)
   4.爬取腾讯视频的评论
     先得到第一条评论地址,再通过last找后续的地址
     u“”将unicode编码为中文
     'content'为评论内容;
     eval()函数就是实现list、dict、tuple与str之间的转化
     str()函数把list,dict,tuple转为为字符串
   5.微信爬虫
   6.多线程爬多线程
   (1)程序中的程序段并行执行,
   (2)糗事百科爬虫  import threading
七、Scrapy框架
    1.框架命令:scrapy -h查看命令   -l 查看列表 -e 查看版本   scrapy/fetch/--nolog
     
全局命令 (可以在项目中或者不在项目中使用)
        fetch     查看爬虫爬取的过程/--nolog 不产生爬取过程的日志
        runspider 不依托一个爬虫项目就可以运行一个爬虫文件
        shell     启动scrapy的交互终端(不启动scrapy项目的情况下对网站进行调试)测试
        startproject  创建爬虫项目
        version   查看对应版本信息
        settings  查看设置信息
        view      下载某个网页,并用浏览器查看
项目命令 (只能在项目中使用)
        bench   测试本地硬件性能(pages/min)不爬取内容,跟进链接
        genspider  在项目中创建爬虫文件  -t创建/-l列表 文件类型(basic(基础型)、crawl(自动型)、csvfeed(处理csv)、xmlfeed)
                   格式:scrapy genspider -t baisc chuchu(文件名) baidu.com(域名)                        
        check  测试
        crawl  运行爬虫文件  
        list   展示当前项目下可以使用的爬虫文件
        edit   直接通过编辑器打开文件(只能在linux下运行)
        parse  获取指定url网址(爬虫文件)并进行处理
       创建爬虫项目:scrapy startproject name;
       创建爬虫文件:scrapy genspider -t crawl name yuming.com
    2. Xpath 基于标签提取适合(网页) 
            /  在标签下一层一层的找
        text()提取标签下的文本
            @   提取属性的内容
           //   寻找当前页中所有的标签
        标签[@属性=值]  定位某一个标签
        eg:/html/head/title/text()
           //li[@class='a']/a/@href
    3. 爬虫项目
        (1)首先写items.py   定义爬取的容器
               content = scrapy.Field()用来存储的内容
               link = scrapy.Field()用来存储链接
        (2)设置pipelines.py 处理容器
               print(item['content'])
        (3)设置settings.py   配置pipelines.py         
               ITEM_PIPELINES = {
                   'first.pipelines.FirstPipeline': 300,
               }
               ROBOTSTXT_OBEY = False
        (4)写爬虫个文件
               def parse(self, response):
                   item = FirstItem()#将类实例化,将容器items导入
                   item['content'] = response.xpath('/html/head/title/text()').extract()
                   yield item #返回,可以继续执行下去,交给pipelines执行 
    4.爬虫方式
        (1) 自动爬虫(basic)   for循环
        (2) 通用爬虫(crawl)   首先爬取初始网址,获得链接,依次爬取链接(类似搜索引擎)

    5.爬虫实战
        (1) 天善智能课程自动爬虫
(2) 自动模拟登录爬虫实战(验证码处理)
(3) 当当商城爬虫将内容写进数据库(过滤器/数据库primary key)
八:补充爬虫拓展
    1.json 数据的处理(不能用xpath,用正则式分析)
        (1)含义:json:JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,
                  它是一种基于文本,独立于语言的轻量级数据交换格式。XML也是一种数据交换格式,因为XML虽然可以作为跨平台的数据交换格式,
                  但是在JS(JavaScript的简写)中处理XML非常不方便,同时XML标记比数据多,增加了交换产生的流量,而JSON没有附加的任何标记,
                  在JS中可作为对象处理,所以我们更倾向于选择JSON来交换数据。
        (2)数据格式:{'id':'4654475','status':0,'name':'wwej',,,,,}   
(3)json导包
    2.分布式爬虫的构建思路
        (1)用到的东西:scrapy\scrapy-redis\redis作分布式数据库(集群)
        (2)环境:Linux   
        (3)分布式:redis
    3.Linux基础
        (1)
    4.爬虫面试
九:数据分析
    1.挖掘过程:
(1)定义目标
        (2)获取数据(爬虫或者数据下载)
(3)数据探索
(4)数据预处理(数据清洗【去掉脏数据(无效、异常)】,数据集成【集中】,数据变换【规范化】,数据规约【精简】)
(5)挖掘建模【算法】(分类,聚类,关联,预测)
(6)模型评价与发布
    2.模块导包:
(1)numpy-mkl(最先下载安装):高效处理数据,数组支持,基础库(提供其他模块支持)
(2)pandas:数据挖掘、分析(数据导入)
(3)matplotlib:作图,可视化
(4)scipy(下载安装):数值计算、矩阵运算,高级数据处理(积分,傅立叶,微分)
(5)statsmodels:统计分析
(6)Gensim:文本挖掘(相似度)
(7)sklearn:机器学习 
(8)keras/tensorflow:深度学习
         数据导入   csv excel mysql html 文本数据
    3.数据探索
(1)数据质量分析(数据清洗)
             1)缺失值处理(通过describe与len【有值与无值+有值】,通过0数据发现)
    2)异常值处理(处理方式:删除,插补,不处理)
插补:均值插补,中位数插补,众数插补,固定值插补,最近数据插补,回归插补,拉格朗日插补,牛顿插值,分段插补
异常值:视为缺失值,删除,修补,不处理
(2)数据特征分析(分布,对比,周期性,相关性,常见统计量)
(3)数据集成:把不同来源的数据放在一起。(实体识别和冗余属性识别)
             1)观察数据源,发现其中关系,发现同名不同意,同意不同名
    2)进行数据读取和整合
    3)去除重复数据
    4.数据预处理
(1)数据变换(开方,平方...)
(2)数据规范化
   1)离差标准化:(最小最大标准化)(将大数据转化小数据,消除量纲(单位)和变异大小影响)
            x1=(x-min)/(max-min)
   2)标准差标准化:(零-均值标准化)(消除单位影响和变量自身变异影响)
      x1=(x-平均数)/标准差
   3)小数定标规范化(消除单位影响)
      x1=/10**(k)(10的倍数)
      k=log10(x的绝对值的最大值)
(3)连续型数据离散化
            1)等宽离散化
   2)等频率离散化(相同数量的记录放在一个区间里)
     3)一维聚类离散化(聚类算法)
(4)属性构造
(5)数据规约(精简数据)import sklearn.decomposition
   1)属性规约:主成分分析(PCA降维算法) 
            2)数值规约:
    5.文本挖掘  import jieba(中文分词)
(1)词典(盘古词典)
(2)文本相似度——TF-IDF模型(信息检索和数据挖掘的加权技术)
   TF-IDF模型:统计方法,评估一字词对于一个文件集过词库的重要程度。
   import Gensim
  (3)相似度计算步骤【重要】
         1)读取文档
     2)对要计算的文档进行分词
     3)对文档进行整理成指定格式,方便后续的计算
     4)计算出词语的频率  
         5)【可选】对频率低的词语进行过滤
       6)通过语料库(corpus从文本中提取出的语言材料)建立词典
       7)加载要对比的另一个文档
         8)将要对比的文档通过doc2bow转化为稀疏向量
           9)对稀疏向量进行进一步处理,得到新语料库,将新语料库进行处理
           10)通过models将新语料库通过TF-IDF模型进行处理,得到TF-IDF
             11)通过token2id得到特征数
       12)通过similarties得出稀疏矩阵相似度,从而建立索引
       13)得到最终相似度结果
     6.词云
(1)用到的包:jieba+wordcloud+matplotlib/pillow
(2)
     7.机器学习(库sklearn/keras)
  算法分类:分类(有明确类别)、聚类(无明确的类别)、关联分析、预测、时序模式和偏差分析
算法的思路:
1)明确需求并对数据进行观察
2)确定算法
3)确定步骤
4)编程实现
(1)分类算法:
1)KNN近邻算法(识别验证码,手写体识别,pillow)
  1.处理数据;
  2.数据向量化;
  3.计算欧几里得距离;
  4.根据距离进行对比分类
2)贝叶斯方法(某一类是另一类的概率)手写体识别
  1.
3)回归方法:
  1.线性回归
  2.逻辑回归
  3.岭回归
4)决策树
  1.ID3(信息增益)
  2.C4.5
  3.CART
5)人工神经网络(课程销量预测,手写体识别)
  1.原理:权重和X(xw)——激活函数f(x)——输出
           激活函数:阈值函数/Relu函数/分段线性函数/非线性转移函数
  2.人工神经网络模型:
BP神经网络(逆向传播):开始,初始化,输入信号(样本学习),中间层,输出层,
                                              输出层误差,中间层误差,调整中间层期权值和阈值,调整输出层权值和阈值,
     学习完成,误差是否满足要求 满足or达到最大学习次数就结束,不满足继续学习(输入)。
RBF神经网络
FNN神经网络
LM 神经网络
6)支持向量机(SVM)

(2)聚类算法:(划分(分裂)法、层次分析法、密度分析法、网格法、模型法)
1)kmeans(划分法):
   1.随机选择k个点作为聚类中心;
   2.计算各个点到这k个点的距离;
   3.将对应的点聚到与它最近的聚类中心;
   4.重新计算据诶中心;
   5.比较当前聚类中心与前一次聚类中心,如果是同一个点,得到聚类结果,若为不同的点,则重复2-5
2)层次法
3)密度分析法
(3)关联:Apriori算法(课程关联分析,自动推荐)
1)理论:
 支持度:事物A,B同时发生的概率 Support(A=>B)=P(A and B)
 置信度:若A发生,B发生的概率   Confidence(A=>B)=(B|A)
2)Aprioir算法的实现
  1.阈值:最小支持度,最小置信度
  2.计算:支持度:Support(A=>B)=(A,B同时发生的数量)/事件总数量=Support_count(A and B)/Total_count(A)
  置信度:Confidence(A=>B)=P(B|A)=support(A and B)/support(a)=support_count(A and B)/support(a)
  3.筛选:
  4.继续计算:
8.情感分析(微薄):
 (1)文本分析:
 (2)数据抓取:接口开发,爬虫,PhantomJS
 (3)PhantomJS:无界面浏览器
十、深度学习(库sklearn/keras/tensorflow)
1.原理:单层感知机——多层感知机(NLP)/人工神经网络(ANN)——深度神经网络/深度学习(DNN)
2.分类:1)监督学习:循环网络(RNN):循环网络/双向循环网络/递归循环网络    应用:LSTM、 语音分析,文字分析,时间序列分析
  卷积网络(CNN):卷积变换,池化,处理网络状数据
  普通深度神经网络(DNN):BP算法,处理大数据
       2)无监督学习:深度生成模型(DBNN深度信息网络/GAN生成式对抗网络),自编码器
  

猜你喜欢

转载自blog.csdn.net/weixin_41988628/article/details/80651185