赞
踩
python在数据分析方面有哪些优势
数据分析的流程是什么?
Excel格式
#excel有xls,xlsx两种格式,都可以使用read_excel
#read_excel方法返回的结果是DataFrame,DataFrame的一列对应着Excel的一列。
import pandas as pd
data = pd.read_excel(path)
"""
参数含义:
(1)sheet_name参数:该参数用于指定导入Excel文件中的哪一个sheet,如果不填写这个参数,则默认导入第一个sheet。
(2) index_col参数:该参数用于指定表格的哪一列作为DataFrame的行索引,从0开始计数。
(3)nrows参数:该参数可以控制导入的行数,该参数在导入文件体积较大时比较有用。
(4)skipfooter参数:该参数可以在导入数据时,跳过表格底部的若干行。
(5)header参数:当使用Pandas的read_excel方法导入Excel文件时,默认表格的第一行为字段名。如果表格的第一段不是字段名,则需要使用该参数设置字段名。
(6)usecols参数:该参数可以控制导入Excel表格中的哪些列。
(7)names参数:该参数可以对导入数据的列名进行重命名。
"""
csv格式
#CSV是一种用分隔符分割的文件格式。由于Excel文件在存放巨量数据时会占用极大空间,且导入时也存在占用极大内存的缺点,因此,巨量数据常采用CSV格式。
import pandas as pd
data = pd.read_csv(path,encoding="utf-8")
#sep参数表示要导入的csv文件的分隔符,默认值是半角逗号
data = pd.read_csv(path,sep=',',encoding="utf-8")
json格式
#用Pandas模块的read_json方法导入JSON数据,其中的参数为JSON文件的路径。
import pandas as pd
data = pd.read_json(path)
txt格式
#需要导入存在于txt文件中的数据时,可以使用pandas模块中的read_table方法。它的参数和用法与read_csv方法类似。
import pandas as pd
data = pd.read_table(path)
CSV格式数据输出
import pandas as pd
data = pd.read_csv(path,sep=",",encoding="utf-8",nrows=10)
data.to_csv("test.csv",nrows=10)
"""
1、CSV格式数据输出
对于pandas库的to_csv方法,有下列参数说明:
path_or_buf:要保存的路径及文件名。
sep:分割符,默认为“,”。
columns:指定要输出的列,用列名,列表表示,默认值为None。
header:是否输出列名,默认值为True。
index:是否输出索引,默认值为True。
encoding:编码方式,默认值为“utf-8”。
"""
xlsx格式数据输出
import pandas as pd data = pd.read_excel(path) data.to_excel(path,encoding='gbk') """ sheet_name:字符串,默认值为“Sheet1”,指包含DataFrame数据的表的名称。 np_rep:字符串,默认值为 ‘ ’。指缺失数据的表示方式 columes:序列,可选参数,要编辑的列 header:布尔型或字符串列表,默认值为True。如果给定字符串列表,则表示它是列名称的别名。 index:布尔型,默认值为True,行名(索引) index_label:字符串或序列,默认值为None。如果文件数据使用多索引,则需使用序列。 encoding:指定Excel文件的编码方式,默认值为None。 """ data2 = pd.read_excel(path) work = pd.ExcelWriter('path') data.to_excel(work,sheet_name='data') data2.to_excel(work,sheet_name="data2")
import pandas as pd data = pd.read_csv(path) #使用info()方法查看数据基本类型 data.info() #查看数据表的大小 d = data.shape[0] w = data.shape[1] #数据格式的查看 type(data) #series的查看 data.dtype #dataframe的查看 data.dtypes #查看具体的数据分布在进行数据分析时,常常需要对对数据的分布进行初步分析,包括统计数据中各元素的个数,均值、方差、最小值、最大值和分位数 data.describe()
import pandas as pd data = pd.read_csv(path) #缺失值检查 #isnull()方法。isnull()函数返回值为布尔值,如果数据存在缺失值,返回True;否则,返回False。 data.isnull() #缺失值删除 #dropna()方法用于删除含有缺失值的行。 data.dropna() #当某行或某列值都为NaN时,才删除整行或整列。这种情况该如何处理? data.dropna(how='all',axis=0)#当整行都是None时,删除整行 #当某行有一个数据为NaN时,就删除整行和当某列有一个数据为NaN时, data.dropna(how='any',axis=0) data.dropna(how='any',axis=1) #缺失值替换/填充 #在data数据中,利用各列值的均值填补缺失数据,该如何用Python实现? data.fillna(data.mean()) #使用近邻填补法,即利用缺失值最近邻居的值来填补数据,对df数据中的缺失值进行填补,这种情况该如何实现? data.fillna(method='bfill')#在本案例中,可以将fillna()方法的method参数设置为bfill,来使用缺失值后面的数据进行填充。 #若使用缺失值前面的值进行填充来填补数据,这种情况又该如何实现? data.fillna(method='ffill') #请利用二次多项式插值法对df数据中A列的缺失值进行填充。 data['A'].fillna(method='polynomial',order=2) #请使用Python完成对df数据中A列的三次样条插值填充。 data['A'].fillna(method='spline',order=3)
"""
利用duplicated()方法检测冗余的行或列,默认是判断全部列中的值是否全部重复,并返回布尔类型的结果。对于完全没有重复的行,返回值为False。对于有重复值的行,第一次出现重复的那一行返回False,其余的返回True。
"""
import pandas as pd
data = pd.read_csv(path)
data.duplicated()
#drop_duplicates()方法。,利用duplicates()方法去除冗余数据,即删除冗余的所有行,默认是判断全部列
data.drop_duplicates()
#query方法和boxplot方法。首先使用pandas库中的query方法查询数据中是否有异常值。然后通过boxplot方法检测异常值。 import pandas as pd import matplotlib.pyplot as plt data = pd.read_csv(path) #假设B列大于1000 data.query('B<1000') #画图 plt.boxplot(df['B']) """ 处理异常值的方法 (1)最常用的方式是删除。 (2)将异常值当缺失值处理,以某个值填充。 (3)将异常值当特殊情况进行分析,研究异常值出现的原因。 """
#利用numpy库的arange函数创建一维整数数组,并查看数据类型。
import numpy as np
arr = np.arange(0,10)
arr.dtype
#利用numpy库的arange函数创建一维浮点数数组arr1,然后将arr1数组的数据类型转换为整型。
arr1 = np.arange(1,5,0.5)
arr1.astype(np.int)
""" pandas中索引的作用 (1)更方便地查询数据。 (2)使用索引可以提升查询性能。 """ #1、添加索引 import pandas as pd import numpy as np data = pd.Series([i for i in range(1,6)],['a','b','c','d','e']) #某公司销售数据集“work.csv”内容如下,请设定日期为索引,并用Python实现。 #set_index()函数,可以指定某一字段为索引 data = pd.read_csv("work.csv") data1 = data.set_index('date') #更改索引在该案例中,除了可以用set_index方法重置索引外,还可以在导入csv文件的过程中,设置index_col参数重置索引,代码及结果如下: data2 = pd.read_csv("work.csv",sep=",",encoding="gbk",index_col="日期") #重建索引 data3 = data.reindex([....]) #重建行和列 data4 = data.reindex(index=new_index,columns=new_columns)
#大小写转换 lower()#大变小 upper()#小变大 #按列增加数据 import pandas as pd import numpy as np data = pd.read_csv(path) data.insert(num,'name',value)#num是第几列,name是列名,value是值 data.loc[:,'name'] = value #按行增加数据 data.append(new_data) data.loc['index'] = value data.iloc[num,:] = value#num是第几行 #数据删除 """ 关键技术:该案例中,使用DataFrame的drop()方法,删除数据中某一列。drop()方法的参数说明如下: labels:表示行标签或列标签。 axis:axis=0,表示按行删除,axis=1,表示按列删除。默认值为0。 index:删除行,默认为None。 columns:删除列,默认为None。 inplace:可选参数,对原数组作出修改并返回一个新数组。默认是False,如果为True,那么原数组直接被替换。 """
a[m:n:p],m开始,n结束,p步长 a[:,0]#第一列 #布尔索引 import numpy as np arr = np.arange(3) bool1 = np.array(True,False,True) arr[bool1]#arr([0,1]) #花式索引 arr[arr>value] arr[arr<=value]=0 #series可以用索引数值来选取 #切片 #[下界 :上界 :步长] #loc中横向索引是确定的 #loc中可以加条件条件使用法语法为df.loc[进行筛选的条件],如果条件为真,则选出符合条件的结果。复合条件包括: &(且 = 与), |(或), ~(取反 = 非),通过筛选函数进行筛选,常见的函数式有 isin(), where() 等。 #iloc 的使用与 loc 完全类似,只不过是针对“位置( = 第几个 )”进行筛选。函数语法为:.iloc[整数、整数列表、整数切片、布尔列表以及函数] #①函数 = 自定义函数 (函数的返回值需要是合法对象 (= 整数、整数列表、整数切片、布尔列表)) #②匿名函数 lambda :使用方法 #语法:lambda 自变量: slice(start = 下界, stop = 上界, step = 步长)。
import pandas as pd import numpy as np pd.merage(data1,data2,on=index)#index可以是一个键,也可以是一个列表 #参数how,left用data1的键,right用data2的,outer使用并集,inner使用交集 #使用join()方法合并数据集 #DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False) #使用concat()方法合并数据集 pd.concat(objs,axis=0,join='outer',join_axes=None,ignore_index=False) #可以利用count()方法进行计算非空个数,并利用参数axis来控制行列的计算 #quantile() data.quantile(0.35)#淘汰35%的人 data.sort_values()#sort_values()方法可以根据指定行/列进行排序。 #参数 #by:要排序的名称列表 #axis:轴,0代表行,1代表列,默认是0 #按照数据进行排序,首先按照C列进行降序排序,在C列相同的情况下,按照B列进行升序排序。 data.sort_values(by=['c','b'],ascending=[False,True])
"""
Groupby分类统计
Hadley Wickham创造了一个用于表示分组运算的术语“split-apply-combine”(拆分-应用-合并)。第一个阶段,pandas对象中的数据会根据你所提供的一个或多个键被拆分(split)为多组。拆分操作是在对象的特定轴上执行的。例如,DataFrame可以在其行(axis=0)或列(axis=1)上进行分组。然后,将一个函数应用(apply)到各个分组并产生一个新值。最后,所有这些函数的执行结果会被合并(combine)到最终的结果对象中。结果对象的形式一般取决于数据上所执行的操作。下图大致说明了一个简单的分组聚合过程。
按列分组
按列分组分为以下三种模式:
第一种:df.groupby(col),返回一个按列进行分组的groupby对象;
第二种:df.groupby([col1,col2]),返回一个按多列进行分组的groupby对象;
第三种:df.groupby(col1)[col2] 或者 df[col2].groupby(col1),两者含义相同,返回按列col1进行分组后,col2的值;
"""
Datetime 模块
Python标准库中包含了datetime模块,该模块提供了非常强大的功能来处理日期和时间。
datatime模块是在time模块的基础上做了封装,提供了更多更好用的类,常用的类有date、time、datetime、timedelta、tzinfo。
""" 请利用Python获取当前日期。 关键技术:可以利用datetime模块date类的today()方法将当前日期保存在变量中。 通过使用date.today(),可以创建一个date类对象,其中包含了日期元素,如年、月、日,但不包含时间元素,比如时、分、秒。最后,可以使用year、month和day来捕获具体的日期元素 """ import datetime date = datetime.date.today() print(date) print(date.year) print(date.month) print(date.day) """ 利用Python获取当前日期和时间。 关键技术:可以利用datetime模块datetime类的today()方法将当前日期和时间保存在变量中。 """ import datetime date = datetime.datetime.today() print(date) print(date.year) print(date.month) print(date.day) """ 请利用Python获取当前时间。 关键技术:可以利用datetime模块datetime类的now()方法将当前日期和时间保存在变量中 date = datetime.datetime.now() date """ """ 时间戳与time模块 时间戳是以格林威治时间1970年01月01日00时00分00秒为基准计算所经过时间的秒数,是一个浮点数。Python的内置模块time和datetime都可以对时间格式数据进行转换,如时间戳和时间字符串的相互转换。 """ import time time.mktime(time.localtime()) """ 请利用Python将时间戳数据转换成系统时间。 关键技术:可以利用time模块的strftime()函数可以将时间戳转换成系统时间。 """ import pandas as pd import time time = time.strftime(("%Y-%m-%d %H:%M:%S"),time.localtime(time.mktime(time.localtime()))) """ 请利用Python将字符串'2022-01-15'转换成时间类型的数据格式。 关键技术:在可以用strptime函数将日期字符串转换为datetime数据类型,可以用Pandas的to_datetime()函数将日期字符串转换为datetime数据类型。to_datetime()函数转化后的时间是精准到时分秒精度的。 """ import datetime datestr = "2022-01-15" datetime.datetime.strptime(datestr,"%Y-%m-%d") #字符串和时间转换 import pnadas as pd datestrs = "2022/01/15" pd.to_datetime(datestrs) """ 给定两个时间类型的数据,计算两个时间的不同之处。 关键技术:利用datetime将时间类型数据进行转换,然后利用减法运算计算时间的不同之处,默认输出结果转换为用(“天”,“秒”)表达。 """ import datetime delta = datetime.datetime(2022,1,16) - datetime.datetime(2022,1,11,1,12) """ 如果要将输出结果转换以“天”为单位,此时应该如何处理? 关键技术:针对上例中的delta变量,利用delta.days可以将输出结果转换以“天”为单位。 """ delta.days """ 【例】如果要将输出结果转换以“秒”为单位,此时应该如何处理? 关键技术:针对上例中的delta变量,利用delta.seconds可以将输出结果转换以“秒”为单位 """ delta.seconds
例1 绘制带有中文标题、标签和图例的正弦和余弦图像。
import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib.font_manager as fm t = np.arange(0.0,2.0*np.pi,0.01) s = np.sin(t) c = np.cos(t) plt.plot(t,s,label='正弦',color='red') plt.plot(t,c,label='余弦',color='blue') plt.xlabel("x-变量") plt.ylabel("y") plt.xlabel('x-变量', #标签文本 fontproperties='STKAITI', #字体 fontsize=18) #字号 plt.ylabel('y-正弦余弦函数值', fontproperties='simhei', fontsize=18) plt.title('sin-cos函数图像', #标题文本 fontproperties='STLITI', #字体 fontsize=24) #字号
例2 绘制余弦曲线散点图。
import numpy as np
from matplotlib import *
t = np.arange(0.0,np.pi*2,0.01)
c = np.cos(t)
plt.scatter(t,c)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。