【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()

  未完,待更新...

原文地址:https://www.cnblogs.com/djcoder/p/12255828.html