申明:此文是极客时间数据分析学习笔记,内容并非全部原创
主要学习内容列表:
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 类型数据结构类似数据库表
安装:
- python -m pip install numpy scipy matplotlib ipython jupyter pandas sympy nose pandasql
复制代码- python -m pip install numpy scipy matplotlib pandasql
复制代码 Numpy范例:
- [/code][code]import numpy as np
复制代码- b = np.array([[1, 2, 3,0], [4, 5, 6,0], [7, 8, 9,20]])
复制代码- [/code][code]persontype = np.dtype({
复制代码- 'names':['name', 'age', 'chinese', 'math', 'english'],
复制代码- 'formats':['S32','i', 'i', 'i', 'f']})
复制代码- peoples = np.array([("ZhangFei",32,75,100, 90),("GuanYu",24,85,96,88.5),
复制代码- ("ZhaoYun",28,85,92,96.5),("HuangZhong",29,65,85,100)],
复制代码- chineses = peoples[:]['chinese']
复制代码- maths = peoples[:]['math']
复制代码- englishs = peoples[:]['english']
复制代码- [/code][code]x1 = np.arange(1,10,2) #初始值 终止值 不长
复制代码- x2 = np.linspace(1,9,5) #初始值 终止值 元素个数
复制代码- print np.subtract(x1, x2)
复制代码- print np.multiply(x1, x2)
复制代码- print np.remainder(x1, x2) #取余
复制代码- # [ 1.00000000e+00 2.70000000e+01 3.12500000e+03 8.23543000e+05
复制代码- [/code][code]c = np.array([[1,2,3], [4,5,6], [7,8,9]])
复制代码- print np.amin(c,0) #延着 axis=0 轴的最小值
复制代码- print np.amin(c,1) #延着 axis=1 轴的最小值
复制代码- print np.ptp(c) #最大值与最小值之差 ptp()
复制代码- percentile() 代表着第 p 个百分位数
复制代码- [/code][code]d = np.array([[1,2,3], [4,5,6], [7,8,9]])
复制代码- print np.percentile(d, 50)
复制代码- print np.percentile(d, 50, axis=0)
复制代码- print np.percentile(d, 50, axis=1)
复制代码- e = np.array([[1,2,3], [4,5,6], [7,8,9]])
复制代码- print np.median(e, axis=0)
复制代码- print np.median(e, axis=1)
复制代码- wts = np.array([1,2,3,4])
复制代码- print np.average(f) #np.average(a)=(1+2+3+4)/4=2.5
复制代码- 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
复制代码- print np.std(g) #方差的算术平方根
复制代码- print np.var(g) #mean((x - x.mean())** 2) 每个数值与平均值之差的平方求和的平均值
复制代码- [/code][code]h = np.array([[4,3,2],[2,4,1]])
复制代码- print np.sort(h, axis=None) #扁平向量排序
复制代码- #sort(a, axis=-1, kind=‘quicksort’, order=None)
复制代码- #可以指定 quicksort、mergesort、heapsort 分别表示快速排序、合并排序、堆排序
复制代码- #axis 默认是 -1,即沿着数组的最后一个轴进行排序
复制代码- 假设一个团队里有 5 名学员,成绩如下表所示。你可以用NumPy 统计下这些人在语文、英语、数学中的平均成绩、最小成绩、最大成绩、方差、标准差。
复制代码 Pandas 范例:
- [/code][code]import pandas as pd
复制代码- from pandas import Series, DataFrame
复制代码- [/code][code]s = pd.Series([1,3,5,np.nan,6,8])
复制代码- [/code][code]x1 = Series([1,2,3,4])
复制代码- x2 = Series(data=[1,2,3,4], index=['a', 'b', 'c', 'd'])
复制代码- d = {'a':1, 'b':2, 'c':3, 'd':4}
复制代码- data = {'Chinese': [66, 95, 93, 90,80],'English': [65, 85, 92, 88, 90],'Math': [30, 98, 96, 77, 90]}
复制代码- df2 = DataFrame(data, index=['ZhangFei', 'GuanYu', 'ZhaoYun', 'HuangZhong', 'DianWei'], columns=['English', 'Math', 'Chinese'])
复制代码- [/code][code]#从excel中读数据,也能写入到csv文件中
复制代码- # score = DataFrame(pd.read_excel('data.xlsx'))
复制代码- # score.to_excel('data1.xlsx')
复制代码- df2 = df2.drop(columns=['Math'])
复制代码- df2 = df2.drop(index=['ZhangFei'])
复制代码- df2.rename(columns={'Chinese': 'YuWen', 'English': 'Yingyu'}, inplace = True)
复制代码- df2 = df2.drop_duplicates() # 去除重复行
复制代码- df2['YuWen'] = df2['YuWen'].astype('str')
复制代码- df2['Yingyu'] = df2['Yingyu'].astype(np.int64)
复制代码- df2['YuWen'] = df2['YuWen'].map(str.strip)
复制代码- df2['YuWen'] = df2['YuWen'].map(str.lstrip)
复制代码- df2['YuWen'] = df2['YuWen'].map(str.rstrip)
复制代码- #df2['Chinese']=df2['Chinese'].str.strip('$')
复制代码- df2.columns = df2.columns.str.title()
复制代码- df2.columns = df2.columns.str.upper()
复制代码- df2.columns = df2.columns.str.lower()
复制代码- df['name'] = df['name'].apply(str.upper)
复制代码- df1[u'语文'] = df1[u'语文'].apply(double_df)
复制代码- df['new1'] = (df[u'语文']+df[u'英语']) * m
复制代码- df['new2'] = (df[u'语文']+df[u'英语']) * n
复制代码- df1 = df1.apply(plus,axis=1,args=(2,3,))
复制代码- df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
复制代码- [/code][code]df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
复制代码- df2 = DataFrame({'name':['ZhangFei', 'GuanYu', 'A', 'B', 'C'], 'data2':range(5)})
复制代码- df3 = pd.merge(df1, df2, on='name')
复制代码- df3 = pd.merge(df1, df2, how='inner')
复制代码- df3 = pd.merge(df1, df2, how='left')
复制代码- df3 = pd.merge(df1, df2, how='right')
复制代码- df3 = pd.merge(df1, df2, how='outer')
复制代码- [/code][code]#pandasql 中的主要函数是 sqldf,它接收两个参数:一个 SQL 查询语句还有一组环境变量 globals() 或 locals()。
复制代码- from pandasql import sqldf, load_meat, load_births
复制代码- df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
复制代码- pysqldf = lambda sql: sqldf(sql,globals())
复制代码- sql = "select * from df1 where name ='ZhangFei'"
复制代码- 对于下表的数据,请使用 Pandas 中的 DataFrame创建并对数据进行清洗。同时新增一列“总和”计算每个人的三科成绩之和
复制代码 |
|