还剩48页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
数据分析基础Python与Pandas Bokeh欢迎参加数据分析基础课程!本课程专注于两个强大的工具Python和是中最流行的数据处理库,为您提供高Pandas BokehPandas Python效的数据结构和数据分析工具则是一个交互式可视化库,能够Bokeh创建美观且具有交互性的数据可视化在接下来的课程中,我们将从基础概念开始,逐步深入这两个工具的高级应用无论您是数据分析新手还是希望提升技能的从业者,本课程都将为您提供实用的知识和技能让我们开始这段数据探索之旅吧!课程概述课程时长为期10周的数据分析课程,深入学习数据处理与可视化技术课程频率每周2次课,共20节课,确保充分的学习时间和实践机会课程内容涵盖Pandas数据处理与Bokeh可视化,从基础到高级应用全面覆盖适合人群适合Python基础级学习者,需要有基本的编程知识但无需高级经验学习目标掌握Pandas数据操作核心技能学习使用Bokeh创建交互式可视化学习如何高效处理各种数据格式,包括表格数据、时间序列数据等了解交互式数据可视化的基本原理,掌握使用Bokeh创建各类图表的掌握数据清洗、转换、聚合等关键技能,能够独立完成数据准备工技能学习如何添加交互元素,使数据展示更加生动直观作完成实际数据分析项目建立数据分析工作流程将所学知识应用于实际项目,包括股市数据分析、疫情数据可视化形成系统化的数据分析思维和工作方法,学会从原始数据到最终可等通过真实案例提升解决问题的能力视化的完整分析流程课程安排第1-3周Pandas基础第4-5周数据清洗与处理第6-7周Bokeh基础第8-10周综合项目实践介绍的核心数据结构、学习可视化库的基本概将和结合应用于Pandas BokehPandas Bokeh基本操作和数据处理功能学深入学习数据清洗技术,包括念和使用方法掌握创建交互实际项目完成数据分析全流习和的创建缺失值处理、重复值删除、数式图表、添加工具和布局的技程,从数据获取、处理到可视Series DataFrame与操作,掌握数据导入导出技据转换等掌握数据规范化和巧化呈现巧预处理的方法环境配置必要库安装虚拟环境设置在虚拟环境中安装课程所需的关键库Jupyter Notebook基本操作学习创建专用的Python虚拟环境conda installpandas bokehAnaconda安装与管理熟悉Jupyter Notebook界面和基本功conda create-n dataanalysisnumpy jupyter验证安装是否成功,首先下载并安装Anaconda发行版,能,包括代码单元格和Markdown单python=
3.9了解如何激活环境并学习如何管理库的版本和依赖关系它集成了Python和众多科学计算包元格的创建与执行掌握快捷键、魔conda activatedataanalysis,安装完成后,学习使用Anaconda法命令以及如何导出笔记本为不同格以及如何在环境间切换,确保项目依Navigator或命令行管理Python环境式Jupyter提供了代码与文档融合的赖隔离和包Anaconda提供了一站式的数交互式开发环境据科学工具集,极大简化了环境配置难度数据分析生态系统PythonPandasNumPy数据处理与分析的核心工具,提供灵活的底层数值计算库,提供多维数组对象和数数据结构和丰富的数据操作功能学函数是整个数据科学NumPy Python使得处理结构化数据变得简单高Pandas生态系统的基础,几乎所有其他数据分析效,是数据科学家日常工作的得力助手库都依赖于它的数组计算能力其他工具Bokeh(静态可视化基础库)、Matplotlib Scikit-交互式数据可视化库,专注于网页端的动(机器学习库)、(科学计算learn SciPy态图表展示能够创建复杂的交互Bokeh库)等共同构成了完整的数据分析工具链,式图表和仪表板,适合构建数据分析应用满足从数据处理到模型构建的全流程需求和数据产品简介Pandas发展历史Pandas由Wes McKinney于2008年创建,最初是为了满足金融数据分析的需求随着时间推移,它已发展成为数据科学领域最受欢迎的Python库之一,目前最新版本为
2.
1.3(2025年)核心功能Pandas提供了两种主要数据结构DataFrame(二维表格)和Series(一维数组),它们使处理结构化数据变得高效直观这些数据结构结合了SQL和电子表格的优点数据处理能力Pandas擅长处理各类结构化数据,包括CSV、Excel、SQL数据库和时间序列数据它提供了丰富的数据操作函数,如分组、聚合、合并和重塑等社区支持强大的开源社区支持使Pandas不断发展壮大,拥有丰富的文档和教程资源它与Python数据科学生态系统的其他工具无缝集成,形成了完整的数据分析解决方案核心数据结构Pandas Series基本概念特性与优势Series Series是的基础数据结构,本质上是一个一维标签化支持多种数据类型,包括数值、字符串、对象Series PandasSeries Python数组,可以存储任意类型的数据每个对象由两部分甚至是其他它继承了数组的向量化操作能力,Series Series NumPy组成数据值()和索引标签()索引提供了可以高效地执行数学运算和函数变换values index对数据的快速访问能力与普通数组不同,的索引可以是任意类型(不仅限于Series可以被视为带有标签的数组,或者是只有单列整数),这使得数据检索更加灵活还能处理缺失值SeriesNumPySeries的字典这种灵活性使它适用于多种数据处理场景,尤其是(),并提供了专门的缺失值处理方法NaN处理时间序列数据时非常有用实例Series#创建基本Seriesimport pandasas pdimport numpy as np#从列表创建s=pd.Series[1,3,5,7,9]prints#自定义索引s2=pd.Series[1,3,5],index=[a,b,c]prints2#从字典创建s3=pd.Series{a:1,b:2,c:3}prints3#数据访问prints
[0]#位置索引prints2[a]#标签索引上面的代码展示了创建和使用Series的几种常见方式从列表创建时,如果不指定索引,Pandas会自动生成从0开始的整数索引使用自定义索引可以让数据访问更加直观,尤其是处理有明确标识的数据时从字典创建Series时,字典的键将成为Series的索引,而值则成为Series的值这种方式在处理键值对数据时特别方便Series的索引和值可以通过属性.index和.values分别访问核心数据结构Pandas DataFrame二维表格结构类似于Excel工作表或SQL表格双重索引系统行索引index和列索引columns异构数据类型不同列可以存储不同类型的数据强大的功能集数据操作、统计分析和可视化能力DataFrame是Pandas最重要的数据结构,可以看作是多个Series按列排列形成的二维表格它支持行和列的双重索引,使得数据选择和操作更加灵活DataFrame的每一列可以存储不同类型的数据,这一特性使其特别适合处理异构数据集与传统数组不同,DataFrame可以通过标签而不仅仅是位置来访问数据,这让数据分析工作更加直观DataFrame还提供了丰富的方法来处理缺失值、重复值,以及执行复杂的数据转换和聚合操作实例DataFrameimport pandasas pd#从字典创建DataFramedata={A:[1,2,3],B:[4,5,6]}df1=pd.DataFramedataprintdf1#从嵌套列表创建DataFramedata_list=[[1,3,5],[2,4,6]]df2=pd.DataFramedata_list,columns=[X,Y,Z]printdf2#从CSV文件读取df3=pd.read_csvdata.csvprintdf
3.head#从Excel文件读取df4=pd.read_exceldata.xlsxprintdf
4.head创建DataFrame的方式多种多样,上面的代码展示了最常见的几种方法从字典创建是最直观的方式,字典的键成为列名,值(列表或数组)成为列数据从嵌套列表创建时,需要额外指定列名,否则Pandas会使用默认的整数列索引在实际工作中,更常见的情况是从外部数据源如CSV或Excel文件中读取数据Pandas提供了简便的函数来处理这些操作,只需一行代码即可将文件数据加载到DataFrame中head方法可以显示DataFrame的前几行,帮助我们快速查看数据内容数据导入从CSV文件导入使用pd.read_csvfilename.csv函数读取CSV格式的数据CSV(逗号分隔值)是最常见的表格数据存储格式,几乎所有数据处理软件都支持函数支持多种参数控制导入过程,如指定分隔符、表头行、缺失值标记等从Excel文件导入通过pd.read_excelfilename.xlsx读取Excel文件数据此功能需要安装额外的依赖库如openpyxl或xlrd可以指定特定的工作表(sheet_name参数)和单元格范围,非常适合处理复杂的Excel文件从SQL数据库导入使用pd.read_sqlquery,connection直接执行SQL查询并将结果加载到DataFrame需要安装相应的数据库连接库,如pymysql、psycopg2等这种方法便于从企业数据库环境中提取数据进行分析从JSON文件导入通过pd.read_jsonfilename.json读取JSON格式的数据JSON是Web应用中常用的数据交换格式,特别适合处理API返回的数据Pandas能够智能地将嵌套JSON结构转换为DataFrame数据导出导出到CSV导出到Excel导出到SQL使用通过使用df.to_csvfilename.cs df.to_excelfilename.df.to_sqltablename,v将DataFrame保存为xlsx将数据保存为Excel connection将DataFrameCSV文件可以通过参数控格式可以设置数据写入SQL数据库表可制输出格式,如设置sheet_name指定工作表名以设置if_exists参数控制当index=False可以省略行索引,称,或使用ExcelWriter一次表已存在时的行为(fail、sep参数可以修改分隔符写入多个DataFrame到不同replace或append)适合CSV格式具有良好的通用性,工作表Excel格式适合需要将分析结果集成到业务数据适合与其他系统交换数据精细格式控制的报告场景库中导出到JSON通过df.to_jsonfilename.json将数据转换为JSON格式支持多种面向记录(orient参数)的输出模式,如records、split、index等JSON格式适合作为Web应用的数据传输和存储格式基本操作DataFrame数据概览数据统计与信息使用df.headn查看前n行数据,默认为5行类似地,df.tailn显使用df.describe获取数值列的统计摘要,包括计数、均值、标准差、示最后n行这些方法在处理大型数据集时特别有用,可以快速了解数最小值、四分位数和最大值df.info则提供DataFrame的整体信息,据的结构和内容而无需加载全部数据如行数、列数、非空值计数、数据类型和内存使用情况#查看前3行数据#获取统计摘要df.head3df.describe#查看最后5行数据#查看DataFrame信息df.tail df.info#查看索引和列名printdf.indexprintdf.columns数据选择与过滤列选择选择单列可以使用字典风格的df[column]或点式访问df.column(仅当列名是有效标识符时)选择多列时,需要传递列名列表df[[col1,col2]]列选择操作返回的结果类型取决于选择的列数,单列返回Series,多列返回DataFrame行选择使用df.loc[labels]通过标签索引选择行,或使用df.iloc[positions]通过位置索引选择行loc和iloc是功能强大的索引器,可以同时选择行和列df.loc[row_labels,column_labels]它们支持切片语法,但loc的切片是包含终点的条件过滤使用布尔表达式进行条件过滤是DataFrame的强大功能df[df[column]value]可以组合多个条件使用(与)和|(或)运算符,注意需要用括号包围每个条件df[df[A]0df[B]10]查询方法使用df.queryexpr方法可以以更直观的语法编写过滤条件df.queryA0and B10query方法在内部优化了执行效率,对于大型DataFrame可能更快索引详解Pandas索引方法描述语法示例位置索引iloc基于整数位置的索引df.iloc[0,1]标签索引loc基于行列标签的索引df.loc[row,column]混合索引ix已弃用,结合loc和iloc df.ix[...]不推荐使用布尔索引基于条件表达式的索引df[df0]Pandas提供了多种索引方法,使得数据访问非常灵活iloc是纯粹的位置索引,类似Python列表的索引方式,从0开始计数它接受整数、整数列表或整数切片作为参数与Python的常规切片不同,iloc的切片遵循标准的Python规则,即不包含终点loc则是标签索引,基于行和列的名称或标签进行选择使用loc时,切片的终点是包含的,这与Python的常规切片规则不同布尔索引允许通过条件表达式选择数据,非常适合数据筛选场景ix曾经是loc和iloc的混合版本,但由于其行为不一致性,已在新版Pandas中被弃用数据清洗缺失值处理检测缺失值填充缺失值使用df.isnull或df.isna方法识别DataFrame中使用df.fillnavalue用指定值替换所有NaN的缺失值删除缺失值插值处理使用df.dropna移除包含NaN的行或列使用df.interpolate基于现有数据进行插值计算缺失值处理是数据清洗过程中的关键步骤Pandas使用NaN(Not aNumber)表示缺失值,这是从NumPy继承的特性首先,我们需要了解数据中缺失值的分布情况,可以使用df.isnull.sum统计每列的缺失值数量处理缺失值的策略取决于具体的数据和分析目标填充缺失值时可以使用固定值、均值、中位数或前向/后向填充等方法例如,df.fillnamethod=ffill使用前一个有效值填充对于时间序列或有序数据,插值可能更合适,支持线性、样条等多种插值方法如果缺失值比例很小,直接删除可能是最简单的选择,但要注意避免引入偏差数据清洗重复值处理检测重复行使用df.duplicated方法识别DataFrame中的重复行,返回一个布尔Series,标记每行是否为重复行(不包括首次出现)这有助于我们了解数据中重复的程度和位置删除重复行使用df.drop_duplicates方法从DataFrame中移除重复行,保留唯一记录默认情况下,保留第一次出现的记录这是处理重复数据最直接的方法,特别适用于需要数据唯一性的分析场景基于特定列判断重复通过设置subset=[A,B]参数,可以仅基于指定的列判断记录是否重复这在只关心某些字段唯一性的情况下非常有用,比如客户ID或交易编号等关键标识字段保留策略选择使用keep参数控制保留哪些重复值first保留首次出现,last保留最后出现,False则全部标记为重复(都不保留)选择合适的策略取决于业务需求,例如时间序列分析可能需要保留最新记录数据转换与映射值替换映射函数应用函数使用df.replaceold,new方通过df[col].mapfunc将函df.applyfunc,axis=0/1方法可以将数据框中的指定值替换数应用于Series的每个元素,法沿着指定轴应用函数,axis=0为新值这支持单个值替换、多func可以是函数对象或字典按列应用,axis=1按行应用个值替换,甚至可以使用字典映map方法创建一个新Series,保apply比map更灵活,可以访问整射多对多替换替换功能常用于留原始索引这在处理需要转换行或整列数据,适合需要依赖多标准化分类数据或纠正错误值或编码的分类变量时特别有用个值的计算类型转换使用df[col].astypetype将列转换为指定的数据类型支持基本类型(int,float,str)和Pandas特殊类型(category,datetime等)正确的数据类型不仅能优化内存使用,还能启用类型特定的操作和方法数据聚合与分组分组迭代多列分组使用for name,group in分组聚合使用df.groupby[col1,df.groupbycol遍历每个分组基本分组对GroupBy对象应用聚合函数,如col2]按多个列进行分组,创建及其数据这种方法允许对每个分组使用df.groupbycolumn根据一df.groupbycol.agg[mean,层次化索引结果多列分组可以进行进行定制化处理,超出简单聚合的范个或多个列对数据进行分组分组操sum],可以同时计算多个统计量更细粒度的数据分析,例如按地区和围,例如针对不同客户群体应用不同作创建一个GroupBy对象,它本身不Pandas提供了许多内置聚合函数,产品类别分析销售数据结果通常使的分析模型包含任何结果,而是定义了如何拆分如mean,sum,count,min,用unstack方法转换为更易读的表格数据GroupBy对象是惰性的,只有max等,也可以使用自定义聚合函形式在应用聚合函数时才会执行实际计算数透视表与交叉表透视表创建交叉表实现透视表是数据分析中强大的工具,可以通过df.pivot_table方交叉表是透视表的特殊形式,主要用于计算频率统计和列联表使法创建透视表实际上是分组聚合的高级形式,允许在多个维度上用pd.crosstab函数可以创建交叉表汇总数据基本语法为crosstab=pd.crosstabpivot_table=df.pivot_table df.region,#行values=sales,#要聚合的值df.product,#列index=region,#行索引df.sales,#值可选columns=product,#列索引aggfunc=sum,#聚合函数可选aggfunc=sum,#聚合函数normalize=True#是否标准化fill_value=0#缺失值填充多层索引处理是处理透视表和交叉表结果的关键技能unstack方法可以将多层行索引转换为列索引,使数据更加平铺和易读时间序列数据处理日期解析使用pd.to_datetimedf[date]将字符串转换为datetime对象Pandas能够智能识别多种日期格式,但也可以通过format参数指定特定格式将日期列转换为datetime类型后,可以访问各种日期属性和时间序列功能日期范围生成使用pd.date_rangestart,end,freq创建均匀间隔的日期索引freq参数控制频率,如D表示每日,M表示每月,H表示每小时等这对于创建时间序列数据框架或重新采样数据非常有用日期属性访问通过dt访问器获取日期成分.dt.year,.dt.month,.dt.day等这使得基于日期成分进行过滤和分组变得简单,例如按月份或星期几分析数据模式时间重采样使用df.resampleM.mean将时间序列数据聚合到指定频率这相当于针对时间索引的groupby操作,常用于降低数据粒度(如将每日数据聚合为每月)或填补不规则时间序列的间隙高级功能连接操作Pandas数据合并基础高级合并选项使用pd.mergedf1,df2,on=key根据共同键列合并可以通过pd.mergedf1,df2,on=[key1,key2]两个这类似于的操作,可以基于一个基于多个键列进行合并,当单个键不足以唯一标识记录时,DataFrame SQLJOIN或多个键列关联数据是处理关系型数据最强大的工这一功能尤为重要例如,同时使用用户和日期作为合并merge ID具之一,使我们能够组合来自多个数据源的信息键,确保正确关联特定用户在特定日期的数据合并类型通过how参数控制inner(默认)只保留两表都使用pd.mergedf1,df2,left_index=True,有的键值;outer保留所有键值;left保留左表所有键;right_on=key可以将一个DataFrame的索引与另一个的保留右表所有键不同的合并类型适用于不同的数据列进行合并这在处理带有有意义索引的数据时很有用,如right集成需求时间序列数据集的合并高级功能连接操作Pandas II纵向连接横向连接使用pd.concat[df1,df2],axis=0将多个DataFrame沿着行方使用pd.concat[df1,df2],axis=1将多个DataFrame沿着列方向(纵向)堆叠这类似于SQL中的UNION操作,常用于合并具有相向(横向)连接这种操作将各DataFrame的列合并在一起,按行索同结构的多个数据集,如不同时期收集的相同格式数据默认保留所引对齐当需要将来自不同来源但共享同一索引的数据组合在一起时,有列,可通过join参数控制列的包含方式这种方法非常有用数据追加数据联接df
1.appenddf2是concat的一种简化形式,用于将一个DataFrame df
1.joindf2是一种基于索引的合并方法,类似于带有追加到另一个之后这个方法在每次调用时都会创建一个新的left_index=True和right_index=True的merge操作这对于具有有意义DataFrame,因此对于需要多次追加的操作,直接使用concat效率更索引的DataFrame特别方便,如金融时间序列数据join默认执行左连高注意append方法已被弃用,推荐使用concat代替接,可通过how参数修改连接类型数据窗口操作滚动窗口对固定大小的移动数据段进行计算扩展窗口对从起点到当前位置的所有数据进行计算指数加权窗口赋予近期数据更高权重的动态计算自定义窗口函数应用用户定义的函数于窗口数据窗口操作是时间序列分析和信号处理的核心技术滚动窗口df.rollingwindow=
3.mean计算指定宽度窗口内的平均值,窗口随着索引移动这种操作可以平滑数据,减少噪声,同时保留趋势信息,常用于金融市场的技术分析扩展窗口df.expanding.mean计算从序列开始到当前位置的所有值的平均值,这种累积计算适合观察长期趋势指数加权窗口df.ewmalpha=
0.
3.mean则是一种特殊的移动平均,较新的观测值获得更高权重,使结果对最近数据更敏感对于需要复杂计算的场景,可以使用df.rollingwindow=
3.applycustom_function应用自定义窗口函数数据预处理技术标准化通过df-df.mean/df.std将数据转换为均值为
0、标准差为1的分布标准化使不同比例的特征具有可比性,是许多机器学习算法的常见预处理步骤对于基于距离的算法(如K均值聚类)尤为重要最小-最大缩放使用df-df.min/df.max-df.min将数据缩放到[0,1]区间这种方法保留了原始分布的形状,只是改变了范围当算法对特征绝对大小敏感,或者特征天然有界时,这种缩放很有用独热编码通过pd.get_dummiesdf[category]将分类变量转换为二进制特征矩阵独热编码为每个类别创建一个新列,使分类数据可用于不支持直接处理类别的算法这种编码适用于没有自然顺序的类别,如颜色或地区箱线处理使用pd.cutdf[col],bins将连续变量分组为离散区间这可以减少连续变量的噪声影响,揭示非线性关系,或简化分析可以指定等宽区间、等频区间或自定义边界,满足不同分箱需求简介Bokeh开发背景Bokeh是由Anaconda公司(原Continuum Analytics)开发的交互式可视化库,其名称来源于摄影中的散景术语该项目始于2013年,旨在为Python提供类似D
3.js的强大交互式可视化能力,同时保持Python的易用性技术特点Bokeh专注于网页端交互式数据展示,它生成HTML和JavaScript内容,但用户无需了解这些技术细节Bokeh渲染的图表可以在现代浏览器中运行,支持缩放、平移、选择和悬停等交互功能,同时保持高性能应用场景Bokeh特别适合创建数据仪表板和分析应用它不仅能生成独立的可视化,还可以构建完整的交互式应用程序,通过Bokeh服务器实现实时数据更新和复杂的用户交互这使其在商业智能和数据科学领域有着广泛应用生态系统Bokeh是一个开源项目,拥有活跃的社区和全面的文档它与Python数据科学生态系统无缝集成,可以直接使用Pandas数据结构,并与Jupyter笔记本环境良好兼容,使得探索性数据分析更加流畅其他可视化库Bokeh vs.库名特点适用场景Matplotlib静态可视化的标准库,高度科学论文、出版物、离线分定制化析报告Seaborn基于Matplotlib的统计可视化,统计分析、数据探索、模式美观的默认样式识别Plotly商业导向的交互式可视化,商业报告、复杂交互应用、支持多种语言跨平台项目Bokeh开源的交互式网页可视化,数据仪表板、实时监控、纯Python实现Web应用在Python可视化生态系统中,不同的库各有所长Matplotlib作为最古老和应用最广泛的可视化库,提供了极其灵活的低级绘图API,几乎可以创建任何类型的静态图表它是许多其他可视化库的基础,但其API相对复杂,默认样式不够现代Seaborn构建在Matplotlib之上,提供了更高级的接口和更美观的默认样式,特别适合统计可视化Plotly提供类似Bokeh的交互式可视化能力,并有商业支持的高级功能,但需要在线服务或商业许可才能获得全部功能Bokeh与这些库相比,其优势在于完全开源、纯Python实现的交互式可视化,以及内置的服务器组件,使得构建交互式Web应用变得简单基本概念BokehColumnDataSource Glyphs数据源,是Bokeh的核心数据结构可视化元素,如点、线、条形等这它将数据组织为列式存储,类似于些是Bokeh图表的构建块,每种图形Pandas的DataFrame类型由特定的glyph表示Glyphs连FigureColumnDataSource是连接Python数接到数据源,并在Figure上渲染数据Tools绘图区域,是所有Bokeh可视化的容据和JavaScript可视化的桥梁,支持可以自定义颜色、大小、透明度等属交互式更新和流式数据性器Figure对象定义了坐标系、轴、交互工具,如缩放、平移、选择等网格线等基本元素,相当于画布所这些工具使用户能够与可视化交互有的可视化元素都添加到Figure对象Bokeh提供了丰富的内置工具集,也上可以设置标题、大小、工具和其支持自定义交互行为工具可以添加他属性到Figure的工具栏中2基本图表创建Bokehfrom bokeh.plotting importfigure,showfrom bokeh.io importoutput_notebookimport numpy as np#在Jupyter中显示输出output_notebook#创建数据x=np.linspace0,10,100y=np.sinxy2=np.cosx#创建图形p=figuretitle=正弦和余弦曲线,width=800,height=400,tools=pan,box_zoom,reset,save#添加图元p.linex,y,line_width=2,color=firebrick,legend_label=sinxp.linex,y2,line_width=2,color=navy,legend_label=cosx#配置图表p.legend.location=top_leftp.grid.grid_line_alpha=
0.3#显示图表showp上面的代码展示了创建基本Bokeh图表的完整流程首先导入必要的模块,包括figure和show函数,以及output_notebook用于在Jupyter中显示结果然后创建一些示例数据,这里使用NumPy生成正弦和余弦曲线的坐标创建Figure对象时,可以设置标题、大小和要使用的工具使用line方法添加线图元,指定数据、线宽、颜色和图例标签最后配置图例位置和网格线样式,并使用show函数显示结果Bokeh会自动生成交互式HTML输出,用户可以缩放、平移和重置视图数据源BokehColumnDataSource基本概念数据源操作与更新ColumnDataSourceCDS是Bokeh的核心数据结构,它将数据组织为列式格式,ColumnDataSource支持动态更新,这对于创建交互式应用或实时仪表板至关重要类似于Pandas的DataFrameCDS作为Python数据和JavaScript可视化层之间的桥数据更新有几种方式梁,使得交互和数据更新成为可能创建CDS的最简单方式是#完全替换数据from bokeh.models importColumnDataSource source.data=new_data#从字典创建#添加新数据点流式更新source=ColumnDataSourcedata=dict source.streamnew_data,rollover=100x=[1,2,3,4,5],y=[6,7,8,9,10],#修改部分数据变化更新size=[10,15,20,25,30],source.patch{color=[red,green,blue,orange,purple]y:[0,20],#更改第1个y值为20color:[1,yellow]#更改第2个颜色}#从Pandas DataFrame创建source=ColumnDataSourcedfstream方法特别适用于时间序列数据,它允许添加新的数据点,同时可选择通过rollover参数限制保留的历史数据量patch方法则用于精确修改特定数据点,对于大型数据集的局部更新非常高效交互工具Bokeh内置导航工具Bokeh提供了丰富的内置导航工具,包括PanTool(平移)、WheelZoomTool(滚轮缩放)、BoxZoomTool(框选缩放)、ResetTool(重置视图)等这些工具让用户能够探索数据的不同部分和细节层次创建Figure时可以通过tools参数指定要包含的工具选择工具选择工具允许用户选择数据点进行进一步分析,包括BoxSelectTool(矩形选择)、LassoSelectTool(套索选择)、PolySelectTool(多边形选择)和TapTool(点击选择)这些工具在创建交互式仪表板时特别有用,可以触发基于选择的回调函数悬停工具HoverTool是最常用的交互工具之一,它显示鼠标悬停在数据点上时的详细信息可以自定义悬停提示的内容和格式,包括HTML格式和自定义模板这使得用户无需点击即可查看数据点的详细属性工具栏定制Bokeh允许精细控制工具栏的内容和布局可以通过p.toolbar.tools=[tool1,tool2]设置特定的工具集,通过p.add_toolsnew_tool添加自定义工具,或者通过p.toolbar.active_drag=tool设置默认激活的工具布局系统Bokeh行布局列布局网格布局使用rowp1,p2将多个图表或小使用columnp1,p2将多个图表或使用gridplot[[p1,p2],[p3,部件水平排列行布局是最基本的小部件垂直堆叠列布局通常用于p4]]创建表格式布局,将图表排列布局元素之一,适合并排比较相关展示相关数据的不同视图或层次化成行和列网格布局是最灵活的布的图表可以嵌套使用,创建更复信息同样支持嵌套,可以与行布局选项,允许精确控制每个图表的杂的布局结构导入方式from局结合使用导入方式from位置参数是一个嵌套列表,每个bokeh.layouts importrow bokeh.layouts importcolumn内部列表代表一行导入方式from bokeh.layouts importgridplot标签页布局使用Tabstabs=[Panelchild=p1,title=Tab1]创建标签页界面,每个标签页包含不同的内容这种布局适合节省空间,同时提供多个相关视图每个Panel对象关联一个图表或布局和一个标题导入方式from bokeh.models importTabs,Panel主题与样式Bokeh主题应用颜色与样式定制Bokeh提供了几种内置主题,可以通过curdoc.theme=dark_minimal应用可用的内置主题包Bokeh提供了丰富的颜色调色板,可通过from bokeh.palettes importCategory10等方式导入这括caliber、dark_minimal、light_minimal和night_sky主题会全局影响所有图表元素的样式,包些调色板包含一系列协调的颜色,适用于多类别数据可视化括颜色、字体和线条样式每个图表元素都可以单独定制样式例如,可以设置标题样式p.title.text_font_size=20pt,修改坐标轴外观p.xaxis.axis_label_text_font_style=italic,或更改图表背景from bokeh.io importcurdocp.background_fill_color=#f5f5f5#应用内置主题Bokeh的样式系统与CSS概念相似,几乎所有可视元素都有可定制的属性类元素(如轴、网格线)的curdoc.theme=dark_minimal样式可以通过主题批量设置,而特定元素(如某个特定的标记)则可以在创建时指定样式参数#或创建自定义主题from bokeh.themes importThemecustom_theme=Themejson={attrs:{Figure:{background_fill_color:#f5f5f5,border_fill_color:#ffffff},Axis:{axis_line_color:gray,major_tick_line_color:gray}}}curdoc.theme=custom_theme交互回调Bokeh小部件交互链接选择通过slider.js_on_changevalue,Python回调使用callback将小部件的值变化与回调函数关联JavaScript回调使用@callback装饰器创建在Bokeh服务器上source
1.selected.js_on_changeindic这是创建交互式控件的基础,如用滑块调整图使用CustomJS在浏览器端执行代码,无需服执行的回调函数这种回调可以访问完整的es,callback在选择变更时触发回调这表参数务器这种回调直接在JavaScript环境中运行,Python环境,执行复杂计算或数据处理可以用于同步多个图表的选择状态,或基于用适合简单的交互或离线应用例如,可以创建户选择执行特定操作slider.js_on_changevalue,一个在选择数据点时更新其他图表的回调from bokeh.server.callbacks CustomJSimportServerFunctionHandler source
1.selected.js_on_changein args=dictsource=source,dices,CustomJS code=from bokeh.models importCustomJS@callbackargs=dictsource=sourc args=dicts1=source1,source.data[size]=e,code=s2=source2,Array
5.fillcb_obj.value;callback=def my_callbackattr,old,new:code=source.change.emit;CustomJSargs=dictsource=source,indices=s
2.selected.indices=code=source.selected.indices s
1.selected.indices;var indices=#使用Python处理选中的数据source.selected.indices;#更新其他图表或数据源console.logSelectedindices:+indices;//更多JavaScript代码小部件BokehBokeh提供了丰富的交互式小部件,可以用来构建动态的数据探索界面滑块(Slider)是最常用的控件之一,可以通过Sliderstart=0,end=10,value=5,step=
0.1,title=参数创建,适合调整连续参数按钮(Button)通过Buttonlabel=点击,button_type=success创建,用于触发特定操作下拉框(Select)可以通过Selectoptions=[选项1,选项2],value=选项1,title=选择创建,适合选择离散选项复选框组(CheckboxGroup)通过CheckboxGrouplabels=[选项1,选项2],active=
[0]创建,允许多选其他常用的小部件还包括单选按钮组(RadioGroup)、文本输入框(TextInput)、日期选择器(DatePicker)等这些小部件可以与回调函数结合,创建高度交互的数据可视化应用服务器Bokeh运行服务器使用命令bokeh serve--show myapp.py启动Bokeh服务器并运行应用服务器模式允许完整的Python回调和数据处理能力,支持实时更新和复杂交互默认情况下,服务器在本地5006端口运行,可以通过--port选项修改结构化应用使用bokeh servemydirectory/运行目录结构应用这种方式将应用组织为一个包含main.py的目录,可以包含静态资源和辅助模块目录结构使大型应用更易于维护,支持模块化开发和资源管理main.py必须创建或修改document,这是Bokeh应用的核心实时数据更新通过doc.add_periodic_callbackupdate,1000设置定期执行的回调函数,实现自动数据更新这种机制适合监控应用,如股票价格跟踪或物联网数据可视化回调函数可以从外部数据源获取新数据,然后更新图表,create aseamless liveexperience.会话状态管理使用curdoc.session_context访问和管理用户会话状态Bokeh服务器为每个连接的客户端维护单独的会话,允许个性化体验可以存储用户特定的设置和数据,或基于用户身份定制内容多用户应用需要考虑并发和资源管理与结合基础图表Pandas Bokeh散点图使用p.scatterx=col1,y=col2,source=ColumnDataSourcedf绘制散点图这种图表适合展示两个变量之间的关系,特别是寻找相关性或聚类模式可以通过size、color等参数添加更多维度的信息折线图使用p.linex,y,source=ColumnDataSourcedf绘制折线图折线图最适合时间序列数据或显示连续变化的趋势多条线可以通过不同的颜色和线型区分,支持添加图例说明不同数据系列柱状图使用p.vbarx=x,top=y,width=
0.5,source=ColumnDataSourcedf创建垂直柱状图柱状图适合比较不同类别的数值大小,如销售额比较或人口统计horizontalbar函数可用于创建水平柱状图,适合长类别名称与结合统计图表Pandas Bokeh直方图高级统计图表创建直方图需要先计算数据分布,然后使用条形图表示虽然Bokeh没有内置的箱线图或热力图函数,但可以使用基本图形元素构建这些复杂图表import numpyas np箱线图可以通过计算四分位数并使用segments(线段)和rects(矩形)绘制from bokeh.plotting importfigure,show热力图则使用rect元素,通过颜色映射表示数值大小#计算直方图数据#热力图示例hist,edges=np.histogramdf[value],bins=20p=figurex_range=categories,y_range=categories,title=相关性热力图#创建图表p.rectx=x,y=y,width=1,height=1,p=figuretitle=数值分布直方图source=source,p.quadtop=hist,bottom=0,left=edges[:-1],fill_color={field:value,right=edges[1:],fill_color=navy,transform:color_mapper},line_color=white,alpha=
0.7line_color=Noneshowp气泡图则是散点图的变种,使用圆形标记,其大小表示第三个变量直方图是查看数据分布的重要工具,可以揭示数据的集中趋势、偏度和异常值p.circlex,y,size=size,source=source实例项目股票数据分析46主要数据源技术指标使用pandas-datareader从Yahoo Finance获取历史股价数据计算包括移动平均线、RSI和布林带在内的交易指标12+100%图表组件交互覆盖交互式K线图、成交量图和指标面板全面的缩放、平移和数据探索功能在这个股票分析项目中,我们首先使用pandas-datareader获取历史股价数据,支持多种数据源如Yahoo Finance、Alpha Vantage等数据预处理阶段包括处理缺失值、调整股票分割和股息影响,以及创建适当的日期索引接下来,我们计算关键技术指标,如简单/指数移动平均线SMA/EMA、相对强弱指数RSI、MACD和布林带然后使用Bokeh创建交互式K线图,包括蜡烛图表示价格、成交量柱状图和叠加的技术指标线最后,添加时间范围选择器和指标参数控制面板,使用户能够自定义视图并深入分析市场模式实例项目疫情数据可视化数据采集从公共API获取实时疫情数据数据清洗与转换标准化国家名称并处理缺失数据多维可视化创建时间序列、区域比较和地图视图交互式仪表板构建带有筛选器和详细视图的综合界面本项目从公共卫生数据API获取COVID-19疫情数据,包括确诊病例、死亡人数、康复人数和疫苗接种率等信息使用Pandas进行数据清洗和预处理,包括处理国家名称不一致问题、填补缺失数据和计算每日新增与增长率等派生指标在可视化阶段,我们创建多种互补的视图线图展示时间趋势,柱状图比较不同地区情况,热力图展示地理分布,以及散点图分析变量关系Bokeh的交互功能使用户可以筛选时间范围、选择特定国家或地区,并通过悬停查看详细数据最终仪表板提供宏观概览和微观详情,支持多角度分析疫情发展模式和防控效果实例项目电子商务销售分析高级多层索引Pandas多级索引基础多层索引操作多级层次化索引是Pandas的强大功能,允许在单个轴上表示多个维度的数据创建多层索引为数据选择和操作提供了灵活性多级索引的方法有多种#使用.loc选择具体项import pandasas pddf.loc[A,1]#选择A组中的1号记录importnumpyasnp#使用xs跨层次选择#从元组列表创建df.xsA#选择A组的所有记录tuples=[A,1,A,2,B,1,B,2]df.xs1,level=number#选择所有号码为1的记录index=pd.MultiIndex.from_tuplestuples,names=[letter,number]#索引操作df=pd.DataFramenp.random.randn4,2,index=index df.index.get_level_values0#获取第一级索引值df.swaplevel0,1#交换索引级别#从笛卡尔积创建index=pd.MultiIndex.from_product[[A,B],[1,2]]#索引重塑stacked=df.stack#将列索引推入行索引#从数组创建unstacked=stacked.unstack#将最内层行索引提升为列arrays=[[1,1,2,2],[red,blue,red,blue]]index=pd.MultiIndex.from_arraysarrays索引重命名通过rename_axis方法实现,对于提高数据可读性至关重要多层索引在处理面板数据、时间序列和分层分类数据时特别有用高级自定义函数与方法链Pandasimport pandasas pdimportnumpyasnp#创建示例数据df=pd.DataFrame{A:np.random.randn1000,B:np.random.randn1000,C:np.random.choice[X,Y,Z],1000,D:np.random.randint0,100,1000}#自定义聚合函数def range_statx:return x.max-x.min#应用自定义聚合函数result=df.groupbyC.agg{A:[mean,range_stat],B:[median,std],D:[sum,count]}#使用管道函数def add_totaldataframe:dataframe[total]=dataframe[A]+dataframe[B]return dataframedf_with_total=df.pipeadd_total#方法链示例result=df.queryD50#筛选.assignE=lambda x:x.A*x.B#创建新列.groupbyC#分组.agg{A:mean,E:sum}#聚合.reset_index#重置索引.sort_valuesE,ascending=False#排序高级地理空间数据可视化Bokeh地理数据基础创建交互式地图地理空间数据可视化是Bokeh的强大功能之一首先需要处理GeoJSON数据,这是一种表示地理使用patches绘制多边形地图,每个多边形表示一个地理区域特征的标准格式Pandas和GeoPandas库可以帮助加载和处理这类数据#创建地图图表import jsonp=figuretitle=中国省份数据地图,from bokeh.plotting importfigure,show width=800,height=600from bokeh.models importGeoJSONDataSource#绘制地图多边形#加载GeoJSON数据patches=p.patchesxs,ys,with openchina_provinces.geojson asf:source=geo_source,geo_data=json.loadf fill_color={field:value,transform:color_mapper},#转换为Bokeh数据源line_color=black,geo_source=GeoJSONDataSourcegeojson=json.dumpsgeo_data line_width=
0.5,fill_alpha=
0.7#添加悬停工具hover=HoverToolrenderers=[patches]hover.tooltips=[省份,@name,数值,@value]p.add_toolshover对于更复杂的应用,可能需要坐标转换(使用PyProj库)将不同投影系统的坐标转换为WebMercator等标准投影Bokeh还支持集成瓦片地图提供商的底图,为地理数据提供更丰富的上下文高级网络图可视化Bokeh网络图基本概念节点和边表示力导向布局交互式网络探索网络(或图)可视化展示实体(节点)及其关系(边)Bokeh通使用GraphRenderer创建网络图,需要定义节点布局和边连接节通过StaticLayoutProvider定义节点位置,常用力导向算法(如添加悬停提示、点击事件和选择功能,支持网络的交互式探索可过GraphRenderer支持网络可视化网络图适合表示社交网络、流点可以用不同的颜色、大小和形状表示不同类别,边可以有不同的Fruchterman-Reingold)自动布局这些算法使相连节点靠近,不以实现节点高亮、关联强调、详细信息显示等功能,帮助用户发现程图、依赖关系等结构化数据,能直观展示复杂的关系模式线型、颜色和粗细这使得可以在图中编码多个数据维度相连节点分开,形成美观且有意义的网络结构网络中隐藏的模式和结构以下是创建基本网络图的代码示例from bokeh.models importGraphRenderer,Circle,StaticLayoutProviderfrom bokeh.plotting importfigure,show#创建图表p=figuretitle=网络关系图,tools=pan,wheel_zoom,reset#创建网络渲染器graph=GraphRenderer#定义节点graph.node_renderer.data_source.data={index:[0,1,2,3],color:[red,green,blue,yellow],name:[节点A,节点B,节点C,节点D]}graph.node_renderer.glyph=Circlesize=15,fill_color=color#定义边graph.edge_renderer.data_source.data={start:[0,0,1,2],end:[1,2,3,3]}#设置布局graph.layout_provider=StaticLayoutProvidergraph_layout={0:0,0,1:100,100,2:200,0,3:150,150}#添加到图表p.renderers.appendgraph性能优化Pandas优化处理大型数据集时,分块处理是关键策略for chunkin pd.read_csvbigdata.csv,chunksize=10000可以使用swifter库并行化apply操作,显著加速数据转换df.swifter.applyfunc尽量使用向量化操作替代循环,如df[C]=df[A]+df[B]而非逐行计算内存管理使用df.infomemory_usage=deep识别内存占用大的列适当降低数据精度,如将float64转为float32对于分类数据,使用df[category_col].astypecategory可大幅减少内存占用合理使用Pandas的整数类型如pd.Int64Dtype,它支持空值而不转换为floatBokeh性能大型数据集可视化时,考虑数据降采样df.resample1D.mean或仅绘制数据子集对于交互式应用,使用数据流式更新而非完全重绘避免过多glyphs,合理使用图表类型和详细程度对于大型地图或网络图,考虑延迟加载或逐步渲染策略调试与分析使用%time和%timeit Jupyter魔法命令测量代码性能借助line_profiler和memory_profiler精确定位性能瓶颈对于长时间运行的任务,添加进度显示from tqdmimport tqdm;for iintqdmrangen部署与分享云服务部署Web应用集成对于公开访问的应用,可以部署到云平Jupyter集成对于需要更多定制化的应用,可以将台Heroku适合小型应用,使用静态HTML导出在数据分析和探索阶段,Jupyter笔记本Bokeh集成到Flask或Django等Web框架Procfile指定启动命令;AWS、Azure、最简单的分享方式是将Bokeh可视化保是理想的环境from bokeh.io中这些框架提供用户认证、数据库集Google Cloud提供更强大但配置更复杂存为静态HTML文件from importoutput_notebook;成和URL路由等功能Bokeh组件可以的环境考虑使用Docker容器化应用,bokeh.plotting importsave;output_notebook可以创建包含代嵌入到现有网页中,也可以通过简化跨平台部署对于数据密集型应用,savep,myplot.html这些文件码、可视化和解释的完整文档,使用autoload_server嵌入服务器组件确保合理的资源规划和缓存策略包含完整的JavaScript代码,可以在任何nbconvert导出为HTML或PDF格式分享现代Web浏览器中查看,不需要Python JupyterLab提供更丰富的布局选项,支环境静态导出保留缩放、平移和悬停持并排放置多个可视化等基本交互功能,但不支持需要服务器回调的功能资源与进阶学习为了深化学习并跟上数据分析领域的最新发展,推荐以下资源首推的《》,这是创Wes McKinneyPython forData AnalysisPandas建者编写的权威指南;交互式可视化方面,的《》提供了深入的理论基础在线资源方面,Matthew WardInteractive DataVisualization官方文档是最可靠的参考,包括和的完整文档和教程Pandas BokehAPI社区资源也是宝贵的学习渠道上有丰富的问答内容;上可以学习开源项目代码;数据科学论坛如和Stack OverflowGitHub Kaggle提供实际案例和最佳实践进阶学习可以考虑专业认证课程,如、的数据分析专项课程等Towards DataScience DataCampCoursera参与开源项目贡献是提升高级技能的有效途径,可以从修复文档或简单开始,逐步深入参与bug课程总结与QA核心概念回顾实践能力评估回顾Pandas和Bokeh的基本原理和工作流程,通过实战练习评估数据处理和可视化技能掌握程巩固重要知识点度项目展示与讨论常见问题解答学员展示课程项目,分享解决方案和遇到的挑战解答学习过程中的技术难点和常见疑问在这个课程的最后一节,我们将系统回顾所学内容,从Pandas的数据结构和操作到Bokeh的交互式可视化技术我们强调了数据分析的完整流程从数据获取、清洗、转换到最终的可视化呈现通过实际项目,我们展示了如何将这些工具结合起来解决实际问题课程评估将基于学员完成的项目质量和技术应用能力我们鼓励学员继续探索更高级的主题,如机器学习集成、大规模数据处理和定制可视化应用开发记住,数据分析是一个不断发展的领域,持续学习和实践是提升技能的关键感谢大家的参与,祝愿您在数据分析之旅中取得成功!。
个人认证
优秀文档
获得点赞 0