声明:本文内容转载自CNBLOGS-温柔易谈,文章内容根据需要进行了更改。
Python数据分析与挖掘技术概述
数据分析模块
numpy:
该模块可以高效处理数据,提供对数组的支持,很多模块都依赖于此,比如pandas, scipy, matplotlib等。pandas:
主要用于数据的采集和分析。scipy:
主要用于数值计算,同时支持矩阵运算,并且提供了很多高效的数据处理功能,如积分、微分方程求样等。matplotlib:
作图模块,可以结合其他数据分析模块,可视化呈现数据。statsmodels:
主要用于统计分析。Gensim:
主要用于文本挖掘。sklearn:
主要用于机器学习。keras:
主要用于深度学习。
推荐使用Anaconda,因为它已经自带了很多模块。
numpy模块的简单使用
numpy模块已经在Anaconda3中自带。
1 | print(x.min()) # 最小值 |
结果:
1 | 33 |
pandas模块的使用
pandas模块也已存在于Anaconda3中。
基本用法
1 | import pandas |
结果:
1 | 0 1 |
数据统计
1 | print(b.describe()) # 显示统计数据信息 |
结果:1
2
3
4
5
6
7
8
9 3 # 数组中的元素个数
count 1.0 # 总数
mean 4.0 # 平均数
std NaN # 标准数
min 4.0 # 最小值
25% 4.0 # 分位数
50% 4.0 # 分位数
75% 4.0 # 分位数
max 4.0 # 最大值
转置
1 | print(b.T) # 转置 |
结果:1
2
3
4
5 0 1 2
0 1 a 5
1 2 b None
2 3 c None
3 4 NaN NaN
通过pandas模块导入数据
csv文件
1 | csv_data = pandas.read_csv('usr/csv_file.csv') |
Excel表格数据
该方法依赖于xlrd模块,使用之前需要安装该模块。
1 | excel_data = pandas.read_excel('usr\excel_file.xlsx') |
读取SQL
依赖于PyMySQL,需要安装此模块。
1 | conn_str = pymysql.connect(host = '127.0.0.1', user = 'root', passwd = 'root', db = 'test_db') |
读取html
依赖于lxml模块。
对于使用https协议请求的网页,依赖于BeautifulSoup4和html5lib模块。
读取html只会读取表格,也就是<table>
标签包裹的内容。
显示的时候是通过python的列表展示的,同时添加了行与列的标识。
1 | local_html_data = pandas.read_html('usr\html_file.html') |
读取txt文件
1 | text_data = pandas.read_table('usr\text_file.txt') |
scipy模块
该模块也集成在Anaconda3中。
matplotlib数据可视化分析
该模块在Anaconda3中也有集成。
基本使用
1 | from matplotlib import pylab |
结果:
自定义显示样式
类型
- 直线图(默认)
-
直线--
虚线-. -.
形式:
细小虚线
颜色
- 青色:
c
- 红色:
r
- 品红:
m
- 绿色:
g
- 蓝色:
b
- 黄色:
y
- 黑色:
k
- 白色:
w
形状
- 方形:
s
- 星形:
*
- 五角:
p
- 实例1:
1 | pylab.plot(x, y, 'or') # o代表画散点图,r表示红色 |
结果:
- 实例2:
1 | pylab.plot(x, y, 'pr--') # p表示图形是五角星,r表示红色,--表示虚线 |
结果:
直方图
1 | data = numpy.random.normal(5.0, 4.0, 10) # 正态随机数 |
结果:
还可以通过histtype参数指定直方图的类型:
- bar: is a traditional bar-type histogram. If multiple data are given, the bars are aranged side by side.
- barstacked: is a bar-type histogram where multiple data are stacked on top of each other.
- step: generates a lineplot that is by default unfilled.
- stepfilled: generates a lineplot that is by default filled.
例如:
1 | data = numpy.random.normal(5.0, 4.0, 10) # 正态随机数 |
结果:
子图
生成图表使用的方法是plot,子图则是subplot.
1 | # subplot(行, 列, 子图使用的区域) |
实例:
1 | from matplotlib import pylab |
结果:
实践
我们现在想统计网站的新闻浏览数与评论数,想知道这些数据最集中的位置,给出下面的数据:
no | article_url | reads_count | comments_count |
---|---|---|---|
1 | url1 | 2334 | 128 |
2 | url2 | 3088 | 235 |
3 | url3 | 12345 | 321 |
4 | url4 | 5234 | 500 |
5 | url5 | 2441 | 130 |
6 | url6 | 2808 | 250 |
7 | url7 | 3002 | 287 |
8 | url8 | 4321 | 335 |
9 | url9 | 4534 | 383 |
10 | url10 | 18000 | 986 |
11 | url11 | 3478 | 367 |
12 | url12 | 4256 | 354 |
这里数据比较少,直接写在代码中,如果数据较多可以使用读取csv文件的方式将数据载入DataFrame数据结构中。
1 | from matplotlib import pylab |
结果: