为了账号安全,请及时绑定邮箱和手机立即绑定

Python数据分析入门

标签:
Python 大数据

如今数据分析越来越重要,比起使用excel等工具,使用编程语言更加高效。这篇文章主要介绍一些简单的数据分析入门知识,使用的语言是python。

读取csv文件

数据分析的第一步是要利用程序读取csv文件:

例子1:

import csv

with open('a.csv') as csvfile:
    mpg = list(csv.DictReader(csvfile))    
    
mpg[:3]

例子2:

ds_file = "/home"
with open(ds_file, 'w') as csvfile:
    fout = csv.writer(csvfile, delimiter='|')
    
    for airport in airports:
        fout.writerow(airport)

Pandas

Panda库是处理dataframe的强有力工具, 我们可以处理两种类型的数据:

  1. Series: one-dimensional, 一维数据
values = pd.Series(data, index=idx)
series = pd.Series(range(5), index=['a','b','c','d','e'])
  1. DataFrame: two-dimensional,二维数据
dt = {
    'A': [0,2,3,45],
    'B': [1,2,3,4]
}
df = pd.DataFrame(dt, index=list('qwert'))

df.head() #查看头部几行数据
df.tail(2) # 查看尾部2行数据
df.describe() #查看统计数据
df.columns # 查看所有列名

对于数据中有一些空数据,可以使用以下这些方法进行处理:

df.dropna()

df.dropna(axis=1)
df.fillna(0)

df.fillna(df.mean())

另外,更加高级的一些数据处理操作:

  • loc: 通过标签选取数据
  • iloc: 通过行/列号选取数据

Numpy

NumPy(Numerical Python) 是Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。它也是数据分析中常用的一个库。

基础操作

最基础的操作就是数据的加减乘除,都可以给予数组的形式进行:

a = np.array([1,2,3,4])
b = np.array([2,3,4,5])
a + b
a / b
a-b
a > b
a*b
A.dot(B)
np.dot(A, B)
a *= 3

另外,可以使用统计方法获取数组的统计信息:

ages.sum()
ages.min()
ages.max()
ages.sum(axis=0)

切片和高级索引

数据的切片和其他Python数据结构类似:

a[2] # 获取第二个
a[-2] # 获取倒数第二个
a[2:7] # 从索引 2 开始到索引 7 停止
a[:11:2] # 从最开头到索引11停止,间隔为2
a[::-1] # 获得反转的数据结构

numpy中提供了多种分割数组的方式:

np.split(x, 3) # 通用函数,将一个数组分割成多个子数组
np.split(x, [4,7])
np.hsplit(y, 2) # 按列分割
np.vsplit(y, 2) # 按行分割

数学函数

numpy库还提供了很多数学函数操作:

angels = np.array([0, 30, 45])
np.radians(angles) # 角度计算
np.cos(angels_radians) # cos
np.degrees(inv) 
np.mean()
np.median()
np.genfromtxt('data/s.csv', delimiter=',')
np.std()
np.var()

数组变形

另外,可以借助以下这些方法实现数组的翻转,变换等操作:

a.ravel() # 展开数组
a.T # 置换数组
a.T.ravel()
a.shape # 返回数组的形状
a.reshape(4,2) # 修改维度

遍历元素

在python程序中有很多种方式可以遍历numpy 生成的数据:

for i in a:
    print(i)
    
for element in students.flatten():
    print(element)
   
for element in students.flatten(order='F'):
    print(element)

numpy.*nditer*方法提供了一种更加灵活的方式访问一个或者多个数组元素。

for i in np.nditer(x):
    print(i)

我们可以使用参数order来决定遍历的顺序,order='F'表示Fortran order,即是列序优先.反之,order='C'表示行序优先:

for i in np.nditer(x, order = 'F', flags = ['external_loop']):
    print(i)

数组的浅拷贝

一般的引用拷贝都是浅拷贝,这也意味着引用数据被修改,原有数据源也会被修改

frunits.view()

深拷贝

fruits = np.array(3)
basket = fruits.copy()

高级数组索引

借助原生操作,我们还能实现更加高级地过滤处理数组:

import numpy as np

a = np.arange(12)**2
indx_1 = [2,6,8]
a[inx_1]
indx+2 = np.array([[2,4],[8,10]])
a[indx_2]
food[row, col]

返回所有非0的数组:

np.count_nonzero(gdp_16[gdp_16 > 1000])

Scipy

SciPy以NumPy为基础,与NumPy一样,SciPy有着稳定,成熟,且应用广泛的数值运算库。要学习相关技术,可以参考其 SciPy官方教程

图片操作

借助scipy,可以基于像素层面处理一些图片数据:

# rgb values r,g,b: 值从0-255
# 灰度值grayscale范围从0到-1 
from scipy import ndimage
from scipy import misc
import matplotlib.pyplot as plt

f = misc.face()
f.shape
plt.imshow(f)
plt.show()

其中misc模块中,提供一些基本的图像相关的读写函数,可以轻松读写图像数据。misc模块自带一些灰度图像ascent和彩色的face图,可以供我们学习使用。

可视化

数据的可视化,通常我们会借助matplotlib这个库,如果你使用Jupyter的话,可以使用如下语句开启自动画图功能:

%matplotlib inline

下面是一些简单的例子:

import matplotlib.pyplot as plt

# 1. 画图
fig = plt.figure()
# 2.添加axis
ax = fig.add_subplot()

# 或者使用快速步骤
fig, ax = plt.subplots()

plt.show()

或者画一个子图:

import numpy as np

fig, ax = plt.subplots(figsize=(10,5))

m = -2
b = 5
x = np.linspace(0, 10)
y = m * x + b

# 把数据带上
ax.plot(x, y)
plt.show()

我们还可以在图片上添加文本信息:

ax.set_xlabel("X Axis")
ax.set_ylabel("Y Axis")

ax.set_title("Test Title")

控制显示范围:

ax.set_xlim(-10, 10)
ax.set_ylim(-10, 10)

控制数轴上显示的数字逻辑:

ax.set_xticks(np.arange(0, 15, 5))
ax.set_yticks(np.arange(-15, 10, 5))

如果需要画多条线的话,可以参考如下例子:

x1 = np.linspace(0, 10)
y1 = m * x1 + b

x2 = x1
y2 = -1 * y1

ax.plot(x1, y1)
ax.plot(x2, y2)

*参考资料*

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消