数据分析python学习路径

论坛 期权论坛 期权     
11号树屋   2019-7-20 09:56   1959   0
申明:此文是极客时间数据分析学习笔记,内容并非全部原创

主要学习内容列表:
1、python基础语法
2、Scipy 、Numpy和Pandas(数据预处理)
https://www.runoob.com/numpy/numpy-tutorial.html
https://www.yiibai.com/pandas/python_pandas_quick_start.html
3、Matplotlib 和Seaborn(数据可视化)

具体内容:
1、SciPy 是一个开源的 Python 算法库和数学工具包。
SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
2、Numpy
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的多维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。
NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合 C/C++/Fortran 代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能
NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。
SciPy 是一个开源的 Python 算法库和数学工具包。
SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。它为利用通用的图形用户界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 向应用程序嵌入式绘图提供了应用程序接口(API)。




3、Pandas
Pandas 可以说是基于 NumPy 构建的含有更高级数据结构和分析能力的工具包
Series 和 DataFrame 这两个核心数据结构他们分别代表着一维的序列和二维的表结构。基于这两种数据结构,Pandas 可以对数据进行导入、清洗、处理、统计和输出。
DataFrame 类型数据结构类似数据库表




安装:
  1. linux:
复制代码
  1. python -m pip install  numpy scipy matplotlib ipython jupyter pandas sympy nose pandasql
复制代码
  1. mac:
复制代码
  1. python -m pip install numpy scipy matplotlib pandasql
复制代码
Numpy范例:
  1. #!/usr/bin/python
复制代码
  1. # -*- coding: utf8 -*-
复制代码
  1. [/code][code]import numpy as np
复制代码
  1. a = np.array([1, 2, 3])
复制代码
  1. b = np.array([[1, 2, 3,0], [4, 5, 6,0], [7, 8, 9,20]])
复制代码
  1. b[1,1]=10
复制代码
  1. print a.shape
复制代码
  1. print b.shape
复制代码
  1. print a.dtype
复制代码
  1. print b.dtype
复制代码
  1. print b
复制代码
  1. # (3,)
复制代码
  1. # (3, 4)
复制代码
  1. # int64
复制代码
  1. # int64
复制代码
  1. # [[ 1  2  3  0]
复制代码
  1. #  [ 4 10  6  0]
复制代码
  1. #  [ 7  8  9 20]]
复制代码
  1. [/code][code]persontype = np.dtype({
复制代码
  1.     'names':['name', 'age', 'chinese', 'math', 'english'],
复制代码
  1.     'formats':['S32','i', 'i', 'i', 'f']})
复制代码
  1. peoples = np.array([("ZhangFei",32,75,100, 90),("GuanYu",24,85,96,88.5),
复制代码
  1.        ("ZhaoYun",28,85,92,96.5),("HuangZhong",29,65,85,100)],
复制代码
  1.     dtype=persontype)
复制代码
  1. ages = peoples[:]['age']
复制代码
  1. chineses = peoples[:]['chinese']
复制代码
  1. maths = peoples[:]['math']
复制代码
  1. englishs = peoples[:]['english']
复制代码
  1. print np.mean(ages)
复制代码
  1. print np.mean(chineses)
复制代码
  1. print np.mean(maths)
复制代码
  1. print np.mean(englishs)
复制代码
  1. [/code][code]# 28.25
复制代码
  1. # 77.5
复制代码
  1. # 93.25
复制代码
  1. # 93.75
复制代码
  1. [/code][code]x1 = np.arange(1,10,2)     #初始值 终止值 不长
复制代码
  1. x2 = np.linspace(1,9,5)    #初始值  终止值 元素个数
复制代码
  1. print x1
复制代码
  1. print x2
复制代码
  1. # 等差数组
复制代码
  1. # [1 3 5 7 9]
复制代码
  1. # [ 1.  3.  5.  7.  9.]
复制代码
  1. print np.add(x1, x2)
复制代码
  1. print np.subtract(x1, x2)
复制代码
  1. print np.multiply(x1, x2)
复制代码
  1. print np.divide(x1, x2)
复制代码
  1. print np.power(x1, x2)
复制代码
  1. print np.remainder(x1, x2)  #取余
复制代码
  1. print np.mod(x1, x2)    #取余
复制代码
  1. # [  2.   6.  10.  14.  18.]
复制代码
  1. # [ 0.  0.  0.  0.  0.]
复制代码
  1. # [  1.   9.  25.  49.  81.]
复制代码
  1. # [ 1.  1.  1.  1.  1.]
复制代码
  1. # [  1.00000000e+00   2.70000000e+01   3.12500000e+03   8.23543000e+05
复制代码
  1. #    3.87420489e+08]
复制代码
  1. # [ 0.  0.  0.  0.  0.]
复制代码
  1. # [ 0.  0.  0.  0.  0.]
复制代码
  1. [/code][code]
复制代码
  1. [/code][code]c = np.array([[1,2,3], [4,5,6], [7,8,9]])
复制代码
  1. print np.amin(c)
复制代码
  1. print np.amin(c,0)  #延着 axis=0 轴的最小值
复制代码
  1. print np.amin(c,1)  #延着 axis=1 轴的最小值
复制代码
  1. print np.amax(c)
复制代码
  1. print np.amax(c,0)
复制代码
  1. print np.amax(c,1)
复制代码
  1. print np.ptp(c)     #最大值与最小值之差 ptp()
复制代码
  1. print np.ptp(c,0)
复制代码
  1. print np.ptp(c,1)
复制代码
  1. [/code][code]# 1
复制代码
  1. # [1 2 3]
复制代码
  1. # [1 4 7]
复制代码
  1. # 9
复制代码
  1. # [7 8 9]
复制代码
  1. # [3 6 9]
复制代码
  1. # 8
复制代码
  1. # [6 6 6]
复制代码
  1. # [2 2 2]
复制代码
  1. [/code][code]'''
复制代码
  1. percentile() 代表着第 p 个百分位数
复制代码
  1. 这里 p 的取值范围是 0-100
复制代码
  1. 如果 p=0,那么就是求最小值
复制代码
  1. 如果 p=50 就是求平均值
复制代码
  1. 如果 p=100 就是求最大值
复制代码
  1. '''
复制代码
  1. [/code][code]d = np.array([[1,2,3], [4,5,6], [7,8,9]])
复制代码
  1. print np.percentile(d, 50)
复制代码
  1. print np.percentile(d, 50, axis=0)
复制代码
  1. print np.percentile(d, 50, axis=1)
复制代码
  1. # 5.0
复制代码
  1. # [ 4.  5.  6.]
复制代码
  1. # [ 2.  5.  8.]
复制代码
  1. [/code][code]
复制代码
  1. e = np.array([[1,2,3], [4,5,6], [7,8,9]])
复制代码
  1. # 求中位数
复制代码
  1. print np.median(e)
复制代码
  1. print np.median(e, axis=0)
复制代码
  1. print np.median(e, axis=1)
复制代码
  1. # 5.0
复制代码
  1. # [ 4.  5.  6.]
复制代码
  1. # [ 2.  5.  8.]
复制代码
  1. # 求平均数
复制代码
  1. print np.mean(e)
复制代码
  1. print np.mean(e, axis=0)
复制代码
  1. print np.mean(e, axis=1)
复制代码
  1. # 5.0
复制代码
  1. # [ 4.  5.  6.]
复制代码
  1. # [ 2.  5.  8.]
复制代码
  1. [/code][code]#加权平均数
复制代码
  1. f = np.array([1,2,3,4])
复制代码
  1. wts = np.array([1,2,3,4])
复制代码
  1. print np.average(f)  #np.average(a)=(1+2+3+4)/4=2.5
复制代码
  1. print np.average(f,weights=wts) #np.average(a,weights=wts)=(1*1+2*2+3*3+4*4)/(1+2+3+4)=3.0
复制代码
  1. # 2.5
复制代码
  1. # 3.0  
复制代码
  1. [/code][code]#标准差 方差
复制代码
  1. g = np.array([1,2,3,4])
复制代码
  1. print np.std(g)   #方差的算术平方根
复制代码
  1. print np.var(g)   #mean((x - x.mean())** 2)  每个数值与平均值之差的平方求和的平均值
复制代码
  1. # 1.11803398875
复制代码
  1. # 1.25
复制代码
  1. [/code][code]h = np.array([[4,3,2],[2,4,1]])
复制代码
  1. print np.sort(h)
复制代码
  1. print np.sort(h, axis=None)  #扁平向量排序
复制代码
  1. print np.sort(h, axis=0)  
复制代码
  1. print np.sort(h, axis=1)  
复制代码
  1. #sort(a, axis=-1, kind=‘quicksort’, order=None)
复制代码
  1. #可以指定 quicksort、mergesort、heapsort 分别表示快速排序、合并排序、堆排序
复制代码
  1. #axis 默认是 -1,即沿着数组的最后一个轴进行排序
复制代码
  1. [/code][code]# [[2 3 4]
复制代码
  1. #  [1 2 4]]   
复制代码
  1. # [1 2 2 3 4 4]
复制代码
  1. # [[2 3 1]
复制代码
  1. #  [4 4 2]]
复制代码
  1. # [[2 3 4]
复制代码
  1. #  [1 2 4]]
复制代码
  1. '''
复制代码
  1. 假设一个团队里有 5 名学员,成绩如下表所示。你可以用NumPy 统计下这些人在语文、英语、数学中的平均成绩、最小成绩、最大成绩、方差、标准差。
复制代码
  1. 然后把这些人的总成绩排序,得出名次进行成绩输出。
复制代码
  1. [/code][code]姓名  语文  数学 英语
复制代码
  1. 张飞   66 65  30
复制代码
  1. 关羽   95 85  98
复制代码
  1. 赵云   93 92  96
复制代码
  1. 黄忠   90 88  77
复制代码
  1. 典韦   80 90  90
复制代码
  1. '''
复制代码
Pandas 范例:

  1. #!/usr/local/bin/python
复制代码
  1. # -*- coding: utf8 -*-
复制代码
  1. [/code][code]import pandas as pd
复制代码
  1. import numpy as np
复制代码
  1. from pandas import Series, DataFrame
复制代码
  1. [/code][code]s = pd.Series([1,3,5,np.nan,6,8])
复制代码
  1. print(s)
复制代码
  1. [/code][code]x1 = Series([1,2,3,4])
复制代码
  1. x2 = Series(data=[1,2,3,4], index=['a', 'b', 'c', 'd'])
复制代码
  1. print x1
复制代码
  1. print x2
复制代码
  1. [/code][code]#使用字典创建
复制代码
  1. d = {'a':1, 'b':2, 'c':3, 'd':4}
复制代码
  1. x3 = Series(d)
复制代码
  1. print x3
复制代码
  1. # 0    1.0
复制代码
  1. # 1    3.0
复制代码
  1. # 2    5.0
复制代码
  1. # 3    NaN
复制代码
  1. # 4    6.0
复制代码
  1. # 5    8.0
复制代码
  1. # dtype: float64
复制代码
  1. # 0    1
复制代码
  1. # 1    2
复制代码
  1. # 2    3
复制代码
  1. # 3    4
复制代码
  1. # dtype: int64
复制代码
  1. # a    1
复制代码
  1. # b    2
复制代码
  1. # c    3
复制代码
  1. # d    4
复制代码
  1. # dtype: int64
复制代码
  1. [/code][code]
复制代码
  1. data = {'Chinese': [66, 95, 93, 90,80],'English': [65, 85, 92, 88, 90],'Math': [30, 98, 96, 77, 90]}
复制代码
  1. df1= DataFrame(data)
复制代码
  1. df2 = DataFrame(data, index=['ZhangFei', 'GuanYu', 'ZhaoYun', 'HuangZhong', 'DianWei'], columns=['English', 'Math', 'Chinese'])
复制代码
  1. print df1
复制代码
  1. print df2
复制代码
  1. #    Chinese  English  Math
复制代码
  1. # 0       66       65    30
复制代码
  1. # 1       95       85    98
复制代码
  1. # 2       93       92    96
复制代码
  1. # 3       90       88    77
复制代码
  1. # 4       80       90    90
复制代码
  1. #             English  Math  Chinese
复制代码
  1. # ZhangFei         65    30       66
复制代码
  1. # GuanYu           85    98       95
复制代码
  1. # ZhaoYun          92    96       93
复制代码
  1. # HuangZhong       88    77       90
复制代码
  1. # DianWei          90    90       80
复制代码
  1. [/code][code]#从excel中读数据,也能写入到csv文件中
复制代码
  1. # score = DataFrame(pd.read_excel('data.xlsx'))
复制代码
  1. # score.to_excel('data1.xlsx')
复制代码
  1. # print score
复制代码
  1. [/code][code]#删除列
复制代码
  1. df2 = df2.drop(columns=['Math'])
复制代码
  1. print df2
复制代码
  1. #删除行
复制代码
  1. df2 = df2.drop(index=['ZhangFei'])
复制代码
  1. print df2
复制代码
  1. #重命名列
复制代码
  1. df2.rename(columns={'Chinese': 'YuWen', 'English': 'Yingyu'}, inplace = True)
复制代码
  1. print  df2
复制代码
  1. df2 = df2.drop_duplicates() # 去除重复行
复制代码
  1. print df2
复制代码
  1. #更改数据格式
复制代码
  1. df2['YuWen'] = df2['YuWen'].astype('str')
复制代码
  1. df2['Yingyu'] = df2['Yingyu'].astype(np.int64)
复制代码
  1. print  df2
复制代码
  1. [/code][code]# 删除左右两边空格
复制代码
  1. df2['YuWen'] = df2['YuWen'].map(str.strip)
复制代码
  1. # 删除左边空格
复制代码
  1. df2['YuWen'] = df2['YuWen'].map(str.lstrip)
复制代码
  1. # 删除右边空格
复制代码
  1. df2['YuWen'] = df2['YuWen'].map(str.rstrip)
复制代码
  1. [/code][code]print df2
复制代码
  1. #删除特殊字符
复制代码
  1. #df2['Chinese']=df2['Chinese'].str.strip('$')
复制代码
  1. #大小写转化
复制代码
  1. # 首字母大写
复制代码
  1. df2.columns = df2.columns.str.title()
复制代码
  1. # 全部大写
复制代码
  1. df2.columns = df2.columns.str.upper()
复制代码
  1. print df2
复制代码
  1. # 全部小写
复制代码
  1. df2.columns = df2.columns.str.lower()
复制代码
  1. print df2
复制代码
  1. '''
复制代码
  1. #对 name 列的数值都进行大写转化可以用
复制代码
  1. df['name'] = df['name'].apply(str.upper)
复制代码
  1. #在apply中使用函数
复制代码
  1. def double_df(x):
复制代码
  1.            return 2*x
复制代码
  1. df1[u'语文'] = df1[u'语文'].apply(double_df)
复制代码
  1. [/code][code]#新增列
复制代码
  1. def plus(df,n,m):
复制代码
  1.     df['new1'] = (df[u'语文']+df[u'英语']) * m
复制代码
  1.     df['new2'] = (df[u'语文']+df[u'英语']) * n
复制代码
  1.     return df
复制代码
  1. df1 = df1.apply(plus,axis=1,args=(2,3,))
复制代码
  1. '''
复制代码
  1. df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
复制代码
  1. print df1.describe()
复制代码
  1. #           data1
复制代码
  1. # count  5.000000
复制代码
  1. # mean   2.000000
复制代码
  1. # std    1.581139
复制代码
  1. # min    0.000000
复制代码
  1. # 25%    1.000000
复制代码
  1. # 50%    2.000000
复制代码
  1. # 75%    3.000000
复制代码
  1. # max    4.000000
复制代码
  1. [/code][code]df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
复制代码
  1. print df1
复制代码
  1. #    data1      name
复制代码
  1. # 0      0  ZhangFei
复制代码
  1. # 1      1    GuanYu
复制代码
  1. # 2      2         a
复制代码
  1. # 3      3         b
复制代码
  1. # 4      4         c
复制代码
  1. df2 = DataFrame({'name':['ZhangFei', 'GuanYu', 'A', 'B', 'C'], 'data2':range(5)})
复制代码
  1. print df2
复制代码
  1. #    data2      name
复制代码
  1. # 0      0  ZhangFei
复制代码
  1. # 1      1    GuanYu
复制代码
  1. # 2      2         A
复制代码
  1. # 3      3         B
复制代码
  1. # 4      4         C
复制代码
  1. #指定列链接
复制代码
  1. df3 = pd.merge(df1, df2, on='name')
复制代码
  1. print df3
复制代码
  1. #    data1      name  data2
复制代码
  1. # 0      0  ZhangFei      0
复制代码
  1. # 1      1    GuanYu      1
复制代码
  1. #内连接
复制代码
  1. df3 = pd.merge(df1, df2, how='inner')
复制代码
  1. print df3
复制代码
  1. #    data1      name  data2
复制代码
  1. # 0      0  ZhangFei      0
复制代码
  1. # 1      1    GuanYu      1
复制代码
  1. #左连接
复制代码
  1. df3 = pd.merge(df1, df2, how='left')
复制代码
  1. print df3
复制代码
  1. #    data1      name  data2
复制代码
  1. # 0      0  ZhangFei    0.0
复制代码
  1. # 1      1    GuanYu    1.0
复制代码
  1. # 2      2         a    NaN
复制代码
  1. # 3      3         b    NaN
复制代码
  1. # 4      4         c    NaN
复制代码
  1. #右连接
复制代码
  1. df3 = pd.merge(df1, df2, how='right')
复制代码
  1. print df3
复制代码
  1. #    data1      name  data2
复制代码
  1. # 0    0.0  ZhangFei      0
复制代码
  1. # 1    1.0    GuanYu      1
复制代码
  1. # 2    NaN         A      2
复制代码
  1. # 3    NaN         B      3
复制代码
  1. # 4    NaN         C      4
复制代码
  1. #外连接
复制代码
  1. df3 = pd.merge(df1, df2, how='outer')
复制代码
  1. print df3
复制代码
  1. #    data1      name  data2
复制代码
  1. # 0    0.0  ZhangFei    0.0
复制代码
  1. # 1    1.0    GuanYu    1.0
复制代码
  1. # 2    2.0         a    NaN
复制代码
  1. # 3    3.0         b    NaN
复制代码
  1. # 4    4.0         c    NaN
复制代码
  1. # 5    NaN         A    2.0
复制代码
  1. # 6    NaN         B    3.0
复制代码
  1. # 7    NaN         C    4.0
复制代码
  1. [/code][code]#pandasql 中的主要函数是 sqldf,它接收两个参数:一个 SQL 查询语句还有一组环境变量 globals() 或 locals()。
复制代码
  1. from pandasql import sqldf, load_meat, load_births
复制代码
  1. df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
复制代码
  1. pysqldf = lambda sql: sqldf(sql,globals())
复制代码
  1. sql = "select * from df1 where name ='ZhangFei'"
复制代码
  1. print pysqldf(sql)
复制代码
  1. #    data1      name
复制代码
  1. # 0      0  ZhangFei
复制代码
  1. [/code][code]'''
复制代码
  1. 对于下表的数据,请使用 Pandas 中的 DataFrame创建并对数据进行清洗。同时新增一列“总和”计算每个人的三科成绩之和
复制代码
  1. [/code][code]姓名  语文  数学 英语
复制代码
  1. 张飞   66    65
复制代码
  1. 关羽   95 85  98
复制代码
  1. 赵云   93 92  96
复制代码
  1. 黄忠   90 88  77
复制代码
  1. 典韦   80 90  90
复制代码
  1. 典韦   80 90  90
复制代码
  1. '''
复制代码
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP