zoukankan      html  css  js  c++  java
  • 【08】Python数据分析基础

    一、数据分析介绍

    1.什么是数据分析与挖掘技术  

      ①数据分析:即对已知的数据进行分析,然后提取出一些有价值的信息,比如统计出平均数,标准差等信息,数据量有时可能不会太大。
      ②数据挖掘:指对大量的数据进行分析与挖掘,得到一些未知的,有价值的信息等,比如从网站的用户或用户行为数据中挖掘出用户潜在需求信息,从而对网站进行改善等 。
      ③数据分析与数据挖掘的关系:数据分析与数据挖掘密不可分,数据挖掘是数据分析的提升。

    2.数据挖掘的过程

      ①定义目标。 
      ②获取数据(常用的手段有通过爬虫采集或者下载一些统计网站发布的数据)。 
      ③数据探索。 
      ④数据预处理(数据清晰【去掉脏数据】、数据集成【集中】、数据变换【规范化】、数据规约【精简】)。 
      ⑤挖掘建模(分类、聚类、关联、预测) 。
      ⑥模型评价与发布。

    3.相关模块简介

      ①numpy:可以高效处理数据,处理数组支持,很多模块都依赖它,比如pandas,scipy,matplotlib,所以这个模块时间基础 。
      ②pandas:主要用于进行数据探索和数据分析。 
      ③matplotlib:作图模块,解决可视化问题。 
      ④scipy:主要进行数值计算,同时支持矩阵运算,并提供了很多高等数据处理功能,如积分,傅里叶,微分方程求解。 
      ⑤statsmodels:主要用于统计分析。 
      ⑥Gensim:主要用于文本挖掘。
      ⑦sklearn、keras:前者机器学习,后者深度学习。

    二、相关模块安装

    1.模块安装顺序与方法 

        ①numpy,mkl(下载安装) 
        ②pandas(网络安装)
        ③matplotlib(网络安装)
        ④scipy(下载安装) 
        ⑤statsmodels(网络安装)
        ⑥Gensim(网络安装)
        其中下载安装地址:https://www.lfd.uci.edu/,网络安装直接通过pip安装即可。

    2.相关模块的基本使用 

      ①numpy数组操作

    import numpy
    
    # 创建一维数组格式
    # numpy.array([元素1,元素2,..., 元素n])
    x = numpy.array(["a", "9", "8", "2"])
    print(x) # ['a' '9' '8' '2']
    print(x[2]) # 8
    
    # 创建二维数组
    # numpy.array([[元素1,元素2,..., 元素n], [元素1,元素2,..., 元素n], [元素1,元素2,..., 元素n]])
    y = numpy.array([[3, 10], [4, 5], [7, 5]])
    print(y) # [[ 3 10] [ 4  5] [ 7  5]]
    print(y[0][1]) # 10
    
    # 排序sort()
    x.sort()
    y.sort()
    
    # 取最大值与最小值
    y1 = y.max()
    y2 = y.min()
    
    # 切片
    # 数组[start:end+1]
    y3 = y[1:3]
    
    # 生成随机整数
    # (最小值,最大值,个数)
    data = numpy.random.random_integers(0, 20, 10)
    
    # 正态分布随机数
    # (平均数,西格玛,个数)
    data2 = numpy.random.normal(5.0, 2.0, 10)

      ②pandas数据操作

    import pandas as pda
    
    # 创建一串数字, 默认索引从0开始
    a = pda.Series([8, 9, 2, 1])
    # 创建一串数字, 通过index自定义索引
    b = pda.Series([8, 9, 2, 1], index=[1, 2, 3, 5])
    
    # 创建数据框, 默认索引从0开始
    c = pda.DataFrame([[1, 5, 6, 2], [3, 2, 7, 8], [6, 0, 5, 1]])
    # 创建数据框, 通过columns指定列索引
    d = pda.DataFrame([[1, 5, 6, 2], [3, 2, 7, 8], [6, 0, 5, 1]], columns=["one", "two", "three", "four"])
    # 通过字典方式创建数据框
    e = pda.DataFrame({
        # 当列的值个数小于其他列,会自动填充当前值
        "one": 4,
        "two": [4, 6, 2],
        "three": list(str(982)),
    })
    
    # 头部数据,默认前五行
    print(d.head())
    # 头部数据,指定行数
    print(d.head(2))
    
    # 尾部数据,默认前五行
    print(d.tail())
    # 尾部数据,指定行数
    print(d.tail(2))
    
    # 展示数据框基本统计信息
    print(d.describe())
    # count 列的元素个数
    # mean 列的平均数
    # std 列的标准差
    # min 列的最小值
    # 25% 列的前分位数
    # 50% 列的中分位数
    # 75% 列的后分位数
    # max 列的最大值
    
    # 转置:行列置换
    print(d.T)

    三、数据导入分析

    1.导入csv数据

      csv是一种常见的数据存储格式,基本上遇到的数据都可以转为这种存储格式,在python数据分析中,我们使用pandas模块导入csv数据。

    import pandas as pda
    
    # 导入csv格式数据
    data = pda.read_csv("hexun.csv")
    
    # csv数据的基本统计信息, 非数字不展示
    print(data.describe())
    
    # 按照某种顺序重新排序
    print(data.sort_values(by="21"))

    2.导入excel数据

      excel是一种表格文件,在Python数据分析中,我们同样可以使用pandas模块导入excel表格里面的数据。

    import pandas as pda
    
    # 导入excel格式文件
    data = pda.read_excel("hexun.xls")
    
    # excel数据的基本统计信息, 非数字不展示
    print(data.describe())

    3.导入Mysql数据库里的数据

      Mysql是一种很常见的数据库,在Python数据分析中,直接从Mysql中取数据。

    import pandas as pda
    import pymysql
    
    # 连接数据库信息
    conn = pymysql.connect(host="localhost", user="root", password="5201314mysql", database="test", port=3306)
    
    # 查询数据表语句
    sql = "select * from user"
    
    # 获取查询结果
    data = pda.read_sql(sql, conn)
    # 数据基本统计信息
    print(data.describe())

    4.导入html数据

      使用pandas,可以直接从html网页中加载对于table表格中的数据,但是在使用read_html之前,需要先安装html5lib模块与beautifulsoup4模块。

    import pandas as pda
    
    # 使用本地的网页
    # data = pda.read_html("abc.html")
    
    # 从网页中读取表格
    data = pda.read_html("https://book.douban.com/")
    print(data)

    5.导入文本数据

      有时我们希望直接导入txt文本数据,其实也是可以的。

    import pandas as pda
    
    # 使用txt文本格式
    data = pda.read_table("abc.txt")
    
    print(data.describe())

    四、matplotlib可视化分析

    1.折线图和散点图

    # 折线图/散点图plot
    import matplotlib.pylab as pyl
    
    x = [1, 2, 4, 5, 7]
    y = [4, 6, 1, 8, 30]
    
    # plot(x轴数据,y轴数据, 展现形式)
    pyl.plot(x, y)
    pyl.show()
    
    # 展现为散点图
    pyl.plot(x, y, 'o')
    pyl.show()

    2.修改折线图线条的颜色

    import matplotlib.pylab as pyl
    
    # 线条颜色
    # 'c':青色
    # 'r':红色
    # 'm':品红
    # 'g':绿色
    # 'b':蓝色
    # 'y':黄色
    # 'k':黑色
    # 'w':白色
    pyl.plot(x, y, 'k', 'ko')
    pyl.plot(x, y, 'ko')
    pyl.show()

    3.修改折线图线条样式

    import matplotlib.pylab as pyl
    
    # 线条样式
    # '-':直线
    # '--':虚线
    # '-.-.':-.-.形式
    # ':':细小虚线
    pyl.plot(x, y, '-.')
    pyl.show()

    4.修改散点图样式

    import matplotlib.pylab as pyl
    
    # 散点图点的样式
    # 's':方形
    # 'h':六角形
    # 'H':六角形
    # '*':星形
    # '+':加号
    # 'x':x形
    # 'd':菱形
    # 'D':菱形
    # 'p':五角形
    pyl.plot(x, y, 'p')
    pyl.show()

    5.添加坐标样式

    import matplotlib.pylab as pyl
    
    # 添加坐标样式
    pyl.title('show')
    pyl.xlabel('ages')
    pyl.ylabel('temp')
    pyl.show()

    6.定义x轴,y轴的范围

    import matplotlib.pylab as pyl
    
    # 定义x轴,y轴的范围
    pyl.xlim(0, 20)
    pyl.ylim(0, 50)
    pyl.show()

    7.绘制子图

    # 绘制子图
    # (行,列,当前区域)
    pyl.subplot(2, 2, 1)
    x1 = [1, 2, 4, 6]
    y1 = [1, 3, 6, 9]
    pyl.plot(x1, y1)
    
    pyl.subplot(2, 2, 2)
    x2 = [1, 2, 4, 6]
    y2 = [1, 3, 6, 9]
    pyl.plot(x2, y2)
    
    pyl.subplot(2, 1, 2)
    x3 = [1, 2, 4, 6]
    y3 = [1, 3, 6, 9]
    pyl.plot(x3, y3)
    
    pyl.show()

    8.直方图

    import matplotlib.pylab as pyl
    import numpy as npy
    
    # 生成随机整数
    # (最小值,最大值,个数)
    data3 = npy.random.random_integers(0, 20, 10)
    pyl.hist(data3)
    
    # 正态分布随机数
    # (平均数,西格玛,个数)
    data4 = npy.random.normal(10.0, 2.0, 1000)
    pyl.hist(data4)
    pyl.show()
    
    # 设置直方图的范围和宽度
    # (start,end,step)
    sty = npy.arange(2, 17, 4)
    # histtype隐藏轮廓
    pyl.hist(data4, sty, histtype='stepfilled')
    pyl.show()

    五、数据清洗

    1.发现缺失值

    import pandas as pda
    import pymysql
    from matplotlib import pylab as pyl
    import numpy as npy
    
    # 一般思路:
    # 如果发现数据不符要求,可以先将该数据设置为空,然后再设置位中位数或者平均数
    
    conn = pymysql.connect(host="127.0.0.1", user="root", password="root", db="csdn")
    sql = "select * from taob"
    
    data = pda.read_sql(sql, conn)
    print(data.describe())
    
    # 发现缺失值
    data["price"][(data["price"] == 0)] = None
    x = 0
    for i in data.columns:
        for j in range(len(data)):
            if (data[i].isnull())[j]:
                data[i][j] = "36"
                x += 1
    print(x)

    2.异常值处理

    # 画散点图(横轴为价格,纵轴为评论数)
    # 得到价格
    data2 = data.T
    price = data2.values[2]
    # 得到评论数据
    comment = data.values[3]
    pyl.plot(price, comment, 'o')
    pyl.show()
    
    # 评论数异常>2000,价格异常>2300
    line = len(data.values)
    col = len(data.values[0])
    da = data.values
    
    for i in range(0, line):
        for j in range(0, col):
            if da[i][2] > 2300:
                print(da[i][j])
                data[i][2] = 36
            if da[i][3] > 20000:
                print(da[i][j])
                data[i][j] = 58
    
    da2 = da.T
    price = da2[2]
    comt = da2[3]
    pyl.plot(price, comt, 'o')
    pyl.show()

    3.分布分析

    priceMax = da2[2].max()
    priceMin = da2[2].min()
    commentMax = da2[3].max()
    commentMin = da2[3].min()
    
    # 极差:最大值 - 最小值
    priceErg = priceMax - priceMin
    commentErg = commentMax - commentMin
    
    # 组距:极差/组数
    pricedst = priceErg/12
    commentdst = commentErg/12
    
    # 画价格的直方图
    pricesty = npy.arange(priceMin, priceMax, pricedst)
    pyl.hist(da2[2], pricesty)
    pyl.show()
    
    # 画评论的直方图
    commentsty = npy.arange(commentMin, commentMax, commentdst)
    pyl.hist(da[3], commentsty)
    pyl.show()

      未完,待更新...

  • 相关阅读:
    【ZJOI2007】棋盘制作 BZOJ1057
    【ZJOI2008】 树的统计 count
    【JSOI2007】麻将 bzoj 1028
    【省选】省选黄色预警
    【ZJOI2013】k大数查询 BZOJ 3110
    【HNOI2008】Cards BZOJ 1004
    【JSOI2010】Group 部落划分 BZOJ 1821
    NOIp2014 解题报告
    CH Round #56
    CH Round #55
  • 原文地址:https://www.cnblogs.com/djcoder/p/12255828.html
Copyright © 2011-2022 走看看