《python数据分析与应用》 课件 史浩 第8、9章 Python数据可视化、核心数据处理库pandas_第1页
《python数据分析与应用》 课件 史浩 第8、9章 Python数据可视化、核心数据处理库pandas_第2页
《python数据分析与应用》 课件 史浩 第8、9章 Python数据可视化、核心数据处理库pandas_第3页
《python数据分析与应用》 课件 史浩 第8、9章 Python数据可视化、核心数据处理库pandas_第4页
《python数据分析与应用》 课件 史浩 第8、9章 Python数据可视化、核心数据处理库pandas_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章Python数据可视化Python数据分析与应用1CONTENTS8.1知识准备8.2代码补全和知识拓展8.3实训任务:视频网站数据可视化8.4延伸高级任务目录8.5课后习题2知识准备132.Matplotlib图形的详细设置Matplotlib名称可以被分解为:Math(数学)+plot(图表图形)+lib(库),因此将其合在一起称之为数学图表库。Matplotlib是Python编程语言最常用的绘图工具包,同时作为Python数据分析三剑客之一,是最基础的Python可视化库。8.1.2Python可视化库知识准备importmatplotlib.pyplotaspltimportpandasaspddf=pd.read_excel('./东三省GDP.xlsx’)x=df['年份']#设定X变量数据y=df['吉林省GDP增长率']#设定Y变量数据plt.plot(x,y)#绘制折线图plt.show()#显示图形#设置画布大小为1200*600,背景色为黄色plt.figure(figsize=(12,6),facecolor='y')#添加网格plt.grid()#解决中文无法显示的问题plt.rcParams['font.sans-serif']=['SimHei']#绘制折线图,并设置颜色、线条样式、标记样式plt.plot(x,y,color='r',linestyle='--',marker='o',mfc='w')#添加数据标签fora,binzip(x,y):plt.text(a,b+0.5,'%.2f'%b,ha='center',va='bottom',fontsize=8)#设置X轴数据plt.xticks(x)#添加图表标题plt.title('吉林省GDP增长率')#添加图例plt.legend(('GDP增长率',))48.1.1可视化的作用8.1.3Matplotlib和Seaborn库的安装8.1.4Matplotlib1.快速绘制Matplotlib图形代码补全和知识拓展25frompylabimport*X=np.linspace(__________________________)C,S=np.cos(X),np.sin(X)plot(X,C)plot(X,S)show()请补充代码绘制出函数图形。8.2.1代码补全:1.绘制sin和cos函数图像6importnumpyasnp(__________________________)fig=plt.figure()fig.subplots_adjust(top=0.8)ax1=fig.add_subplot(__________________________)ax1.set_ylabel(__________________________)ax1.set_title('Asinewave')t=np.arange(0.0,1.0,0.01)s=np.sin(2*np.pi*t)line,=ax1.plot(t,s,color='blue',(__________________________))#Fixingrandomstateforreproducibilitynp.random.seed(19680801)ax2=fig.add_axes([0.15,0.1,0.7,0.3])n,bins,patches=ax2.hist(np.random.randn(1000),50,facecolor='yellow',edgecolor='yellow')(__________________________)plt.show()请补充代码绘制出函数图形。8.2.1代码补全:2.完成图形7可以使用比较简单的代码快速绘制出内容比较完整的统计图形1.Seaborn绘图importseabornassnsimportmatplotlib.pyplotasplta=[1,2,3,4,5]b=[5,10,15,20,25]sns.barplot(x=a,y=b)#用seaborn绘制条形图plt.show()2.Seaborn作图的基本操作8.2.2知识拓展:Seaborn实训任务:视频网站数据可视化39#1.读取数据gb_data=np.loadtxt("GB_video_data_numbers.csv",delimiter=",")print(gb_data)#2.获取评论数gb_data_com=gb_data[:,3]print(gb_data_com)#极差gb_ptp=max(gb_data_com)-min(gb_data_com)print(gb_ptp)#582505.0#组距->>根据极差考虑需要多少组来确定大概组距d=25000#组数->>极差/组距bins_nums_gb=int(gb_ptp/d)print(bins_nums_gb)#直方图plt.hist(gb_data_com,bins=bins_nums_gb)#图形展示plt.show()使用Matplotlib绘制英国与美国Youtube数据各自评论数量的图形,查看其评论数主要分布在哪个区间数据文件名称分别为:GB_video_data_numbers.csv(英国)与US_video_data_numbers.csv(美国)8.3实训任务:英国与美国Youtube数据可视化10#评论在100000后的数目很少,无参考价值,进行简单数据清洗->>删除#清洗过后的数据gb_data_com_useful=[]foriingb_data_com:ifi<100000:gb_data_com_useful.append(i)#重新计算极差、组距,组数#极差gb_ptp=max(gb_data_com_useful)-min(gb_data_com_useful)#gb_ptp->>83992.0#组距d=3000#组数bins_gb=int(gb_ptp/d)print(bins_gb)#可视化plt.hist(gb_data_com_useful,bins=bins_gb)#设置显示中文字体plt.rcParams["font.sans-serif"]=["SimHei"]#图形展示plt.show()8.3实训任务:英国与美国Youtube数据可视化11由于之前的图形无法清晰判断数据分布的主要区间,数据内容展示的不够清晰。因此需要再次对数据进行清洗,对有参考价值的数据继续进行分析,代码如下所示。#经过两次清洗,图还是不清晰,再次进行清洗,10000之后数据无参靠价值#清洗过后的数据gb_data_com_useful=[]foriingb_data_com:(__________________________)(__________________________)#重新计算极差、组距,组数#极差gb_ptp=max(gb_data_com_useful)-min(gb_data_com_useful)#gb_ptp->>9933.0#组距d=500#组数bins_gb=int(gb_ptp/d)print(bins_gb)#可视化plt.hist(gb_data_com_useful,bins=bins_gb,density=True)#对x轴进行更精细划分x_ticks=[iforiinrange(0,10500,500)]#可添加合适标签x_label=[f"{i}次"foriinrange(0,10500,500)]plt.xticks(x_ticks,x_label,rotation=45)#添加组件plt.xlabel("次数")plt.ylabel("频率")plt.title("GB评论次数分布图")8.3实训任务:英国与美国Youtube数据可视化12然而上述代码获得的显示效果仍然不够理想,请继续编写程序进行可视化展示与分析。最终我们会得到数据可视化之后一张较为满意直方图延伸高级任务413importmatplotlib.datesasmdatesimportmatplotlib.cbookascbookyears=mdates.YearLocator()#everyyearmonths=mdates.MonthLocator()#everymonthyearsFmt=mdates.DateFormatter('%Y')withcbook.get_sample_data(os.getcwd()+'/sample_data/goog.npz',asfileobj=True,np_load=True)asdatafile:r=datafile['price_data'].view(np.recarray)print()fig,ax=plt.subplots()ax.plot(r.date,r.adj_close)#formattheticksax.xaxis.set_major_locator(years)ax.xaxis.set_major_formatter(yearsFmt)ax.xaxis.set_minor_locator(months)8.4延伸高级任务:绘制股票走势图148.4.1读入npz文件进行绘制datemin=datetime.date(np.datetime64(r.date.min()).astype(object).year,1,1)datemax=datetime.date(np.datetime64(r.date.max()).astype(object).year+1,1,1)ax.set_xlim(datemin,datemax)#formatthecoordsmessageboxdefprice(x):return'$%1.2f'%xax.format_xdata=mdates.DateFormatter('%Y-%m-%d')ax.format_ydata=priceax.grid(True)#rotatesandrightalignsthexlabels,andmovesthebottomofthe#axesuptomakeroomforthemfig.autofmt_xdate()8.4延伸高级任务:绘制股票走势图158.4.1读入npz文件进行绘制#读取AAPL.csv文件,并绘制AAPL股票走势图importosfromdatetimeimportdatetimeimportnumpyasnpimportmatplotlib.pyplotaspltimportmatplotlib.cbookascbookwithcbook.get_sample_data(os.getcwd()+'/sample_data/AAPL.csv',asfileobj=True,np_load=True)asdatafile:f=datafiletitle=f.readline().strip().split(",")print(title)data=np.loadtxt(f,dtype={'names':('Date','Open','High','Low','Close','AdjClose','Volume'),'formats':('S10','<f8','<f8','<f8','<f8','<f8','i')},delimiter=",")#i=integer,<f8=0.256,f8=0.25600001298浮点类型,#S10="MM-DD-YYYY"字符串类型,长度为10

8.4延伸高级任务:绘制股票走势图168.4.2读入csv文件进行绘制

#转为列表格式

lists2=[]forrowinrange(len(data)):txt=data[row]tmp=[]forcolinrange(len(txt)):s1=str(txt[col]).strip('b').strip("'")ifcol==0:d1=datetime.strptime(s1,"%Y-%m-%d")tmp.append(d1)else:tmp.append(float(s1))lists2.append(tmp)

#列表转为numpy格式

a=np.array(lists2)

#绘制图形

plt.plot(a[:,0],a[:,5])plt.show()8.4延伸高级任务:绘制股票走势图178.4.2读入csv文件进行绘制课后习题518课后习题习题11.分别用Matplotlib和Seaborn绘制我国国民生产总值一、二、三产业十年增加值的折线图(使用“国民生产总值构成.xls”文件)。习题22.承接上题,绘制国民生产总值一、二、三产业十年增加值的面积图。在同一图形绘制十年国民生产总值柱形图和十年国民生产总值增长率的折线图。习题33.请读入阿里巴巴的股票交易数据,编写程序按照左图绘制出三张图形。课后习题19谢谢观赏20第9章核心数据处理库pandasPython数据分析与应用21CONTENTS9.1知识准备9.2代码补全和知识拓展9.3实训任务9.4延伸高级任务目录9.5课后习题22知识准备1239.1.3DataFrame对象df=pd.read_excel('data.xlsx’)df.to_excel('data.xlsx',index=False) 导出Excel文件知识准备data={'Name':['John','Emma','Mike'],'Age':[25,28,32],'City':['NewYork','SanFrancisco','Chicago']}df=pd.DataFrame(data)print(df)运行结果:

NameAgeCity0John25NewYork1Emma28SanFrancisco2Mike32Chicago24 读取Exccel文件9.1.1pandas库简介9.1.2Series对象字典和Series的相似之处importpandasaspd#定义学生成绩数据name=['小明','小红','小刚','小华','小李']score=[92,85,78,88,95]#创建Series对象s=pd.Series(score,index=name)知识准备importpandasaspdimportnumpyasnparr=np.array([[1,2,3],[4,5,6],[7,8,9]])df=pd.DataFrame(arr,columns=['A','B','C'])print(df)运行结果:

ABC01231456278925从NumPy数组创建DataFramedf=pd.DataFrame(data)print(df[['总价','数量']])数据多列提取访问一行数据:.loc[index的值]访问连续的某几行数据:.loc[起点index的值:结束index的值]#使用loc按照标签索引访问连续行数据rows=data.loc[1:3]#使用.loc访问不连续的某几行数据selected_rows=data.loc[[1,3]]布尔索引和判断条件#判断条件:筛选年龄大于等于35的行condition=df['Age']>=35#多个判断条件:筛选年龄大于30并且城市为'Paris'的行condition=(df['Age']>30)&(df['City']=='Paris')#应用布尔索引,保留满足条件的行filtered_df=df[condition]df=pd.DataFrame(data)#检测缺失值print(df.isnull())缺失值的检测df=pd.DataFrame(data)#使用指定值填充缺失值filled_df=df.fillna(value={'A':0,'B':'missing','C':'unknown'})#使用前一行的值填充缺失值filled_df=df.fillna(method='ffill’)#使用后一行的值填充缺失值filled_df=df.fillna(method='bfill')填充缺失值df.drop(1,axis=0,inplace=True)df.drop('B',axis=1,inplace=True)删除DataFrame中的行/列知识准备df=pd.DataFrame({'A':[1,np.nan,3],'B':[np.nan,5,6]})df.dropna(axis=0,how='any',inplace=True)删除DataFrame中包含任何缺失值的行删除DataFrame中整行都是缺失值的行df=pd.DataFrame({'A':[np.nan,np.nan,np.nan],'B':[4,np.nan,6]})df.dropna(axis=0,how='all',inplace=True)df=pd.DataFrame({'A':[1,2,2,3,4,4],'B':['a','b','b','c','d','d']})df_dropped=df.drop_duplicates()删除重复值代码补全和知识拓展227importpandasaspd#读取路径为"/视频会员订单数据源.csv"的文件,赋值给变量dfdf=(__________)#商品价格price,单位分转化成元df['price']=df['price']/100#使用to_datetime()函数,将订单创建时间create_time和支付时间pay_time,转化成时间格式df['create_time']=(__________)df['pay_time']=(__________)#使用布尔索引和isnull函数,将payment_provider这一列的缺失值筛选出,赋值给变量dfPayNull#dfPayNull就是,包含所有payment_provider这一列缺失值的行dfPayNull=(__________)#TODO使用drop函数,将dfPayNull,也就是包含所有payment_provider这一列缺失值的行删除df.drop(__________)#使用(),快速浏览数据集()对数据的质量进行检查和处理。9.2.1代码补全:1.会员信息处理28#导入pandas模块,简称pdimportpandasaspd#定义一个字典datadata={'name':['May','Tony','Kevin'],'score':[689,659,635]}#定义一个列表rank,内含参数1,2,3,rank=(_____________)#使用pd.DataFrame()函数,传入参数:字典data作为value和columns,列表rank作为index#构造出的DataFrame赋值给performanceperformance=(_____________)#输出performance这个DataFrameprint(performance)使用DataFrame构造函数,将定义的字典data和列表rank作为参数传入,生成一个DataFrame,并赋值给变量performance。9.2.1代码补全:4.班级成绩表创建29importpandasaspd#创建一个Series对象math_scores=pd.Series([85,90,76,92,88,95,84,79,91,87],index=['Tom','Jerry','Alice','Bob','Linda','John','Emily','David','Amy','Sophia'])#提取前五名学生的成绩(______________)#打印切片结果(______________)对假设有一位班主任想要分析学生的成绩情况。请使用pandas创建一个Series对象,记录一班学生的数学成绩,并根据索引进行切片操作,提取前五名学生的成绩。。9.2.1代码补全:5.学生成绩切片操作30在pandas中,mean()是一个用于计算数据集均值的方法。它用于计算DataFrame中的列的平均值。round()是一个用于对数据进行四舍五入的方法。一些计算方法#定义一个嵌套列表data,内含参数May,689;Tony,659;Kevin,635。data=(_____________)#定义一个列表rankrank=[1,2,3]#使用pd.DataFrame()函数,嵌套列表data和列表rank作为参数传入,并且使用参数columns自定义列索引columns:#构造出的DataFrame赋值给resultresult=(_____________)用列表构造DataFrame9.2.2知识拓展:正则表达式9.3实训任务332请完成以下任务:1.创建一个DataFrame,并将原始数据导入。2.检查数据中是否存在缺失值,并处理这些缺失值。3.将销售日期列的数据类型转换为日期类型,并将其设置为DataFrame的索引。4.去除重复的记录。5.计算每个订单的销售总金额,并添加为新的一列。6.根据产品名称分组,并计算每种产品的销售数量总和和销售金额总和。7.根据销售日期按月份进行分组,并计算每月的销售数量总和和销售金额总和。8.将清洗和处理后的数据保存为一个新的CSV文件。9.3.1销售数据处理9.3实训任务33创建一个Series[1,2,3,4,5,6,7,8,9,10],判断Series中的元素是否全部大于5?importpandasaspds1=pd.Series([1,2,3,4,5,6,7,8,9,10])print(s1)#显示两列,第一列为索引,第二列为值print(s1[4])#打印索引4对应的值:5allabove5=Trueforindexinrange(0,len(s1)):ifs1[index]<=5:allabove5=Falseifallabove5:print('TheSe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论