还剩58页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
数据分析基础Python与Pandas Bokeh欢迎来到数据分析基础课程,本课程将深入探讨和这两Python Pandas Bokeh个强大的库是处理结构化数据的利器,而则让我们能Python Pandas Bokeh够创建富有交互性的可视化图表通过本课程,您将掌握数据操作、分析和可视化的核心技能,这些技能在数据科学、金融分析、商业智能等领域具有广泛应用无论您是数据科学的初学者还是希望扩展技能的专业人士,本课程都将为您提供实用的工具和技术,帮助您从数据中提取有价值的见解让我们一起开启这段数据分析之旅!课程概述课程目标学习内容12通过本课程,学员将掌握使用课程内容涵盖数据结Pandas进行数据处理和分析构、数据导入导出、数据清洗Pandas的核心技能,以及利用转换、聚合分析等核心功能,Bokeh创建交互式可视化的能力课以及的基础图表创建、Bokeh程结束后,您将能够独立完成交互功能添加、复杂布局设计从原始数据到洞察呈现的完整等可视化技术通过实际案例数据分析流程,并应用于实际和练习,将理论与实践紧密结问题解决中合先修知识3学习本课程需要具备基础知识,包括基本语法、数据类型、控制Python流程等了解基础会有所帮助,但不是必需的最重要的是保持NumPy学习热情和实践精神,通过动手操作加深对概念的理解数据分析生态系统PythonBokeh交互式可视化库1Matplotlib2静态可视化基础库Pandas3数据处理与分析NumPy4科学计算基础Python数据分析生态系统由多个协同工作的库组成NumPy作为基础,提供高效的数组操作和数学函数,是其他库的核心依赖Pandas建立在NumPy之上,专注于表格数据的处理和分析,提供强大的数据结构和数据操作工具Matplotlib是Python最受欢迎的可视化库,提供全面的静态图表创建功能而Bokeh则专注于交互式数据可视化,能够创建适合Web的动态图表这些库相互补充,共同构成了Python强大的数据分析能力简介Pandas什么是的主要特点Pandas Pandas是中用于数据操作和提供了高性能、易用的数据Pandas PythonPandas分析的开源库,名称源自结构和数据分析工具它能处理多种Panel面板数据的缩写它由类型的数据,包括表格数据、时间序DataWes于年开发,最初是列数据和异构数据其强大的索引功McKinney2008为了解决金融数据分析的需求,如今能使数据选择和过滤变得简单高效,已成为数据科学领域不可或缺的工具而丰富的数据处理函数让数据清洗和转换更加便捷为什么使用Pandas填补了在数据分析领域的空白,提供了类似语言中数据框的功Pandas PythonR能它与高度集成,同时又比纯更加用户友好能够轻NumPy NumPyPandas松处理缺失数据,执行复杂的分组操作,并与其他数据科学和可视化库无缝对接数据结构PandasSeries DataFrameIndex是中的一维标记数组,可是最重要的数据结构,是数据结构的核心组件,它Series Pandas DataFrame PandasIndex Pandas以存储任何数据类型整数、字符串、浮点是一个二维标记数据结构,有列和行索引为和提供轴标签Series DataFrame数、对象等它类似于中它可以被看作是多个共享同一个索对象是不可变的,这保证了数据的PythonNumPy SeriesIndex的一维数组,但增加了索引功能,每个值引的集合类似于中的一致性除了标准索引外,还提DataFrame ExcelPandas都有一个与之对应的标签可以通电子表格或中的表,能够存储不同类供了特殊类型的索引,如多Series SQLMultiIndex过索引快速查找值,并支持向量化操作,型的列,并提供丰富的方法来处理结构化级索引,允许在一个轴上有多个索引级别,使数据处理更加高效数据适用于处理更复杂的数据结构安装和导入Pandas检查环境Python在安装之前,确保您已安装推荐版本可以通过在命令行Pandas Python
3.6+运行来检查是否已安装以及其版本号建议使用虚python--version Python拟环境来管理不同项目的依赖,可以使用或创建隔离的环境venv Anaconda安装Pandas使用安装在命令行中运行如果使用pip Pandaspip install pandas,则可以运行安装过程会自动处理依Anaconda conda installpandas赖关系,包括等必要的库安装完成后,可以通过NumPy pip show来验证安装版本pandas导入Pandas在脚本或中,使用语句导入Python Jupyter Notebook importPandas按照惯例,通常被导入为简称,import pandasas pdPandas pd这样可以减少代码量并与社区实践保持一致导入后,可以通过检查版本pd.__version__Pandas创建Series从列表创建从字典创建从数组创建NumPy使用列表创建是最直接的方法从字典创建时,字典的键将成为可以使用数组创建,方法与从Python Series SeriesSeries NumPy Series语法为值值,这将创建的索引,值将成为的数据语法为列表创建类似值值pd.Series[1,2,...]Series pd.Seriesnp.array[1,一个带有默认整数索引从开始的还键值键值如这种方法在处理大型数据集时特别0Series pd.Series{1:1,2:2,...2,...]可以通过参数指定自定义索引果提供了参数,将只包含字典中有用,因为数组比列表更高效index indexSeriesNumPyPython值值标签与匹配的键值对,未匹配的索引位置将同样可以通过参数指定自定义索引pd.Series[1,2,...],index=[1,index index标签填充值2,...]NaN创建DataFrame从字典创建使用字典创建DataFrame是最常见的方法字典的键将成为DataFrame的列名,值列表、数组或Series将成为列数据语法为pd.DataFrame{列名1:[值1,值2,...],列名2:[值1,值2,...]}也可以使用嵌套字典,其中外层字典的键成为列,内层字典的键成为索引从列表创建可以从列表的列表嵌套列表创建DataFrame,每个内部列表代表一行数据语法为pd.DataFrame[[值1,值2,...],[值1,值2,...]]可以通过columns参数指定列名pd.DataFramedata,columns=[列名1,列名2,...],通过index参数指定行索引从数组创建NumPy从NumPy二维数组创建DataFrame的方法与从列表创建类似这对于处理大型数据集或执行数值计算特别有用语法为pd.DataFramenp.array[[值1,值2,...],[值1,值2,...]]同样可以使用columns和index参数来指定列名和行索引读取数据read_csv read_excelread_csv是最常用的数据导入函数,read_excel用于读取Excel文件用于读取逗号分隔值CSV文件基本.xls,.xlsx,语法为语法为pd.read_csv文件路pd.read_excel文件路径.xlsx可径.csv函数支持多种参数来自定义以通过sheet_name参数指定要读取的导入行为,如sep指定分隔符,header工作表可以是名称或索引,通过指定列名所在行,skiprows跳过特定行,usecols参数指定要读取的列,通过na_values定义哪些值应被视为缺失值skiprows跳过特定行此函数需要安装等对于大型文件,可以使用nrows参额外的依赖,如openpyxl或xlrd,具体数只读取部分数据取决于Excel文件的格式read_jsonread_json用于读取JSON格式的数据,语法为pd.read_json文件路径.jsonJSON是Web应用程序中常见的数据格式函数支持多种参数,如orient指定JSON数据的结构如split、records、index、columns、values,lines=True用于读取每行为一个JSON对象的格式查看数据在进行数据分析之前,了解数据的基本情况至关重要Pandas提供了多种方法来快速查看数据集的结构和内容head和tail函数分别显示数据的前几行和后几行,默认为5行,但可以通过参数调整,如df.head10显示前10行info函数提供数据集的概述,包括索引范围、列名称、非空值计数、数据类型和内存使用情况这有助于识别缺失值和了解数据的整体结构describe函数则生成描述性统计摘要,包括计数、均值、标准差、最小值、四分位数和最大值,帮助快速了解数据的分布情况选择数据列选择1在Pandas中,可以使用类似字典的方式选择列df[列名]或df.列名仅适用于列名是有效Python标识符的情况要选择多列,可以传递列名列行选择表df[[列名1,列名2]]列选择返回的结果类型取决于选择的列数单2列返回Series,多列返回DataFrame行选择有多种方法,iloc用于基于位置的整数索引df.iloc
[0]选择第一行,df.iloc[0:5]选择前五行loc用于基于标签的索引df.loc[行标签]选择特定行,df.loc[标签1:标签5]选择一个范围也可以直接使用方括号和布尔索引3切片df[0:5],但这种方法只适用于行选择,不支持选择单个行布尔索引是一种强大的数据筛选方法,使用条件表达式创建布尔掩码,然后用该掩码选择数据df[df[列名]值]可以组合多个条件df[df[列名1]值1df[列名2]==值2],其中表示与,|表示或,~表示非布尔索引特别适合于复杂的数据筛选任务数据清洗删除重复数据重复行可能导致分析偏差,使用2duplicated和来处理drop_duplicates处理缺失值识别和处理缺失值是数据清洗的重要步骤1使用表示缺失数值,或Pandas NaNNone表示缺失对象NaN替换值和可以替换特定值或使用函数replace map3转换值,用于数据标准化处理缺失值的常用方法包括使用或来检测缺失值,删除包含缺失值的行或列,用指定值填充缺失值,如isnull notnulldropna fillna或列名列名使用均值填充df.fillna0df[].fillnadf[].mean对于删除重复数据,首先可以使用来检查重复行,然后使用删除重复项,可以指定参数来基于特定列df.duplicated df.drop_duplicates subset判断重复替换值可以使用旧值新值或应用映射函数列名函数逻辑来实现更复杂的替换df.replace{:}df[].maplambda x:数据转换重命名列更改数据类型12重命名列是常见的数据转换操作,可正确的数据类型对分析和性能至关重以使列名更具描述性或符合特定的命要使用astype方法将列转换为特名规范使用rename方法,通过提定类型df[列名].astypeint64供映射字典来指定列名的更改或df[列名].astypecategorydf.renamecolumns={旧列名1:对于日期时间数据,使用新列名1,旧列名2:新列名2}也to_datetime函数可以使用inplace=True参数直接修pd.to_datetimedf[日期列]针改原始DataFrame,而不是创建新的对包含多种类型的列,可以使用副本convert_dtypes方法自动推断最佳类型排序3数据排序有助于组织数据和发现模式使用sort_values方法按一列或多列排序df.sort_values列名或df.sort_values[列名1,列名2],ascending=[True,False],其中ascending参数控制是升序还是降序使用sort_index方法可以按索引排序df.sort_index排序操作默认返回新的DataFrame,使用inplace=True可以原地修改数据聚合pivot_table1创建交叉表和数据透视agg2应用多种聚合函数groupby3分组数据数据聚合是数据分析的核心操作,它允许我们总结和理解大量数据方法是最基础的聚合工具,它按一个或多个键将数据分组groupby类别列分组后,可以应用各种聚合函数,如、、等类别列值列df.groupbysum meancount df.groupby[].mean方法允许同时应用多个聚合函数类别列数值列数值列这种方法特别适合需要计算agg df.groupby.agg{1:mean,2:[min,max]}多种统计量的场景方法则创建更复杂的数据透视表,类似的数据透视表功能值列行pivot_table Excelpd.pivot_tabledf,values=,index=索引列列索引列它能有效地重塑数据,便于多维分析,columns=,aggfunc=mean时间序列数据创建日期范围1Pandas提供了多种工具来处理日期和时间数据使用date_range函数可以创建日期范围pd.date_rangestart=2023-01-01,end=2023-12-31或pd.date_rangestart=2023-01-01,periods=365,freq=D,其中freq参数指定频率,如D表示每日,M表示月末,H表示每小时等重采样2重采样是将时间序列从一个频率转换到另一个频率的过程使用resample方法进行上采样增加频率或下采样减少频率df.resampleM.mean将数据按月聚合并计算均值常见的频率包括D每日、W每周、M每月、Q每季度和A每年移动窗口计算3移动窗口或滚动窗口计算对于识别时间序列中的趋势和模式非常有用使用rolling方法定义窗口大小,然后应用聚合函数df[列名].rollingwindow=
7.mean计算7天移动平均线类似地,expanding方法计算扩展窗口统计量,从序列开始累积计算合并数据concat mergejoin函数用于沿轴连接数据框最基本的函数类似于中的操作,用于是的方法,提供了更简单的concat mergeSQL JOINjoin DataFrame用法是,默认沿着行根据一个或多个键列合并数据框基本语法是语法来执行类似的操作pd.concat[df1,df2]merge df
1.joindf2连接可以通过设置来沿列方共同键列如果键默认使用索引进行连接,但可以通过设置参axis=0axis=1pd.mergedf1,df2,on=on向连接使用可以重置结列在不同数据框中有不同的名称,可以使用数指定列默认执行左连接,ignore_index=True joinhow=left果的索引,参数或控制如和参数参数指定连接类保留调用对象的所有行,但可以通过参数join innerouter left_on right_on howhow何处理列不匹配的情况,而参数可以添加型默认、、或,更改连接类型通常适用于需要基于索引keys innerouter leftright join分层索引来识别数据来源类似于中的内连接、全外连接、左连接和快速合并数据集的场景SQL右连接练习Pandas1导入和设置首先导入必要的库import pandasas pd和import numpyas np如果需要然后设置显示选项以便更好地查看数据pd.set_optiondisplay.max_columns,None,这将显示所有列而不是默认的截断视图这些步骤确保你有一个良好的工作环境开始数据分析数据导入使用read_csv函数导入提供的销售数据集sales_data=pd.read_csvsales_data.csv查看数据的基本信息sales_data.head查看前几行,sales_data.info查看数据类型和缺失值情况,sales_data.describe查看数值列的统计摘要这些命令帮助你快速了解数据集的结构和内容基本操作练习尝试不同的数据选择方法使用方括号选择列sales_data[Product],使用loc选择特定行和列sales_data.loc[0:5,[Product,Price]],使用布尔索引筛选数据sales_data[sales_data[Price]100]这些操作帮助你熟悉Pandas的基本数据操作方法练习Pandas2数据清洗检查数据集中的缺失值sales_data.isnull.sum统计每列的缺失值数量然后处理这些缺失值对数值列使用fillna方法填充均值sales_data[Price].fillnasales_data[Price].mean,inplace=True,对类别列填充最频繁值或特定标记sales_data[Category].fillnaUnknown,inplace=True最后,检查并删除重复行sales_data.drop_duplicatesinplace=True数据转换对数据进行必要的转换将日期字符串转换为日期时间对象sales_data[Date]=pd.to_datetimesales_data[Date],创建新的派生特征sales_data[Month]=sales_data[Date].dt.month,将类别特征转换为类别数据类型以节省内存sales_data[Category]=sales_data[Category].astypecategory,规范化文本列sales_data[Product]=sales_data[Product].str.strip.str.lower练习任务完成指定的练习任务计算每个产品类别的平均价格,找出销售量最高的前五个产品,创建一个新列表示总销售额价格乘以数量,按月份和产品类别分组并计算销售总额,将结果排序并导出到新的CSV文件这些任务帮助你应用学到的数据清洗和转换技术练习Pandas3在这个练习中,我们将使用之前清洗和转换的销售数据集进行更深入的分析首先,进行数据聚合分析按产品类别分组并计算总销售额、平均订单价值和订单数量category_analysis=sales_data.groupbyCategory.agg{Total:sum,Price:mean,Order_ID:nunique}接着,创建时间序列分析按月份重采样数据并计算月度销售趋势monthly_sales=sales_data.set_indexDate.resampleM[Total].sum然后,使用pivot_table创建交叉表,分析不同客户群体在各产品类别上的消费模式customer_category_pivot=pd.pivot_tablesales_data,values=Total,index=Customer_Type,columns=Category,aggfunc=sum最后,计算滚动平均值以识别销售趋势rolling_avg=monthly_sales.rollingwindow=
3.mean简介Bokeh什么是的优势应用场景Bokeh Bokeh是一个专为现代浏览器设计的最大的优势在于其交互性和灵活性适用于多种应用场景数据科学家Bokeh WebBokeh Bokeh交互式可视化库它的名称源自摄影术语它生成的图表可以在浏览器中进行缩放、可以使用它创建交互式探索工具;商业分散景,指镜头外的模糊部分提平移、选择和悬停,提供丰富的用户体验析师可以构建动态仪表板;研究人员可以Bokeh供优雅、简洁的构建交互式图表的方式,支持大型数据集和流式数据可视化,制作复杂的科学可视化;开发者可以Bokeh Web特别适合于创建数据面板、交互式文档和能够无缝集成到、将其整合到数据驱动的应用程序中Jupyter Notebook应用程序与等传统库不和等环境中它使用现代特别擅长时间序列可视化、地理空Web MatplotlibDjango FlaskBokeh同,专注于通过浏览器提供交互体技术如和间数据展示、网络图和多维数据探索Bokeh WebHTML5Canvas WebGL验来实现高性能渲染安装和导入Bokeh安装方法1安装Bokeh最简单的方法是使用pip包管理器在命令行中运行pip installbokeh如果使用Anaconda发行版,可以使用condainstallbokeh安装过程会自动处理依赖关系,包括NumPy、Jinja
2、packaging、pillow、PyYAML、tornado等必要的库安装完成后,可以通过pipshowbokeh来验证安装版本导入语法2在Python脚本或Jupyter Notebook中,使用以下语句导入Bokeh的核心组件frombokeh.plotting import figure,show,output_notebook,output_filefigure函数用于创建图表对象,show函数用于显示图表,output_notebook用于在Jupyter中显示,output_file用于生成HTML文件对于更高级的功能,可能需要导入其他模块,如frombokeh.layouts importcolumn,row,gridplot用于布局验证安装3安装完成后,可以运行一个简单的测试代码来验证Bokeh是否正常工作例如frombokeh.plotting import figure,show;p=figure;p.circle[1,2,3],[4,5,6];showp如果成功显示一个包含三个圆点的图表,则表明Bokeh已正确安装对于版本验证,可以使用import bokeh;printbokeh.__version__来检查当前安装的Bokeh版本基本概念BokehTools交互工具1Glyphs2图形标记Figure3图表容器的核心概念是组织成层次结构的是最基本的容器,它代表一个完整的图表或绘图区域使用函数创建,可以设置标题、轴Bokeh Figurefigure标签、大小、工具和其他属性充当一个画布,所有可视化元素都添加到这个画布上Figure是添加到上的视觉标记,如圆形、线条、矩形、多边形等每种图形都有对应的方法,如、、等用于表Glyphs Figurecircle linerect Glyphs示数据点,并可以自定义其属性,如颜色、大小和透明度则提供了交互功能,包括平移、缩放、选择、悬停等默认情况下,会包Tools Figure含一些基本工具,但可以通过参数自定义这三个概念共同构成了可视化的基础tools Bokeh创建简单图表线图散点图柱状图线图适用于显示连续数据和趋势创建线图的散点图用于显示两个变量之间的关系创建散柱状图用于比较不同类别的数值创建柱状图基本代码是线图示例点图的基本代码是散点的基本代码是柱状图示p=figuretitle=;p=figuretitle=p=figuretitle=可图示例例p.linex_data,y_data,line_width=2;p.circlex_data,y_data,size=10,,x_range=categories;以通过设置、、方法创line_width line_color color=blue,alpha=
0.5circle p.vbarx=categories,top=values,等参数来自定义线条的外观对于建圆形标记,但也可以使用、方法创建垂直柱,line_dash squarewidth=
0.5vbar多条线,只需多次调用方法,并为每条等方法创建其他形状参数控方法创建水平柱参数控制柱宽,line trianglesize hbarwidth线指定不同的数据和样式制标记大小,控制透明度还可以设置、等参数自定alpha fill_color line_color义外观自定义图表外观标题和轴标签颜色和样式12清晰的标题和轴标签对于理解图表内容至Bokeh支持多种颜色格式,包括命名颜色关重要在创建figure时可以设置标题red、十六进制代码#FF
0000、p=figuretitle=我的图表,或后续RGB元组和RGBA元组图形元素的颜色更新p.title.text=新标题可以自通过参数设置,如p.circlex,y,定义标题样式p.title.text_font_size fill_color=blue,line_color=red=16pt;p.title.text_font_style=透明度通过alpha参数控制p.circlex,bold轴标签通过y,alpha=
0.5线型可以使用p.xaxis.axis_label=X轴;line_dash参数设置如solid、p.yaxis.axis_label=Y轴设置,同样dashed、dotted或自定义破折号模式可以自定义字体和样式图例3对于包含多个数据系列的图表,图例是必不可少的添加图例的关键是在创建图形时提供legend_label参数p.circlex1,y1,legend_label=系列1;p.linex2,y2,legend_label=系列2可以自定义图例位置p.legend.location=top_left,以及其他属性如背景色、边框等对于交互式图例,可以设置p.legend.click_policy=hide使点击图例项可以隐藏/显示对应系列添加交互性悬停工具平移和缩放选择工具悬停工具HoverTool在用户平移和缩放工具允许用户探索选择工具允许用户交互式地选将鼠标悬停在数据点上时显示数据的不同部分这些工具默择数据点常见的选择工具包信息要添加悬停工具,首先认包含在大多数图表中,但可括TapTool点击选择、创建一个HoverTool对象以通过设置figure的tools参数BoxSelectTool框选和from bokeh.models import来自定义p=LassoSelectTool套索选择HoverTool;hover=figuretools=pan,wheel_zo要使选择对象可选,需要在数HoverTooltooltips=[名称,om,reset可用的工具包据源上设置selection_color属@name,值,括pan平移、性p.circlex,y,@value],然后将其添加wheel_zoom滚轮缩放、selection_color=red还到图表box_zoom框选缩放、可以通过设置p.add_toolshover@符reset重置视图等也可以nonselection_alpha来调暗未号引用数据源中的列,也可以通过toolbar_location参数控选中的点p.circlex,y,使用$符号引用特殊值,如$x制工具栏位置nonselection_alpha=
0.1和$y表示鼠标位置toolbar_location=above选择事件可以通过JavaScript回调函数来响应布局选项行和列布局网格布局Bokeh提供了简单的行和列布局系统,用于网格布局使用gridplot函数,将图表排列组织多个图表使用row函数将图表水平成网格形式基本语法是from排列from bokeh.layouts importrow;bokeh.layouts importgridplot;grid=layout=rowplot1,plot2,plot3使用gridplot[[plot1,plot2],[plot3,plot4]],column函数将图表垂直排列from其中嵌套列表表示行和列每行的列表长度bokeh.layouts importcolumn;layout=可以不同,使用None可以创建空白位置columnplot1,plot2,plot3行和列布gridplot支持设置工具栏位置、图形大小等局可以嵌套以创建更复杂的布局layout参数,并默认共享轴范围,使多个相关图表=columnrowplot1,plot2,plot3保持一致的视图标签页布局标签页布局使用Tabs组件,允许在有限空间内通过标签切换查看多个图表创建方法是from bokeh.models.widgets importTabs,Panel;tab1=Panelchild=plot1,title=第一个图表;tab2=Panelchild=plot2,title=第二个图表;tabs=Tabstabs=[tab1,tab2]Panel的child参数可以是单个图表或复杂布局Tabs组件适合在同一数据集上展示不同视图或分析链接图表共享范围链接多个图表的一种方式是共享它们的轴范围,这样当一个图表平移或缩放时,其他图表也会同步变化创建具有共享范围的图表的方法是使用相同的Range对象from bokeh.models importRange1d;x_range=Range1d0,10;p1=figurex_range=x_range;p2=figurex_range=x_rangegridplot函数默认在同一列的图表之间共享x_range,在同一行的图表之间共享y_range共享选择让多个图表共享选择状态需要使用相同的ColumnDataSource数据源frombokeh.models importColumnDataSource;source=ColumnDataSourcedata;p
1.circlex,y1,source=source;p
2.circlex,y2,source=source这样,当在一个图表中选择数据点时,相同数据在另一个图表中也会被突出显示这对于探索多维数据特别有用共享工具要实现多个图表之间的工具协调,可以创建共享工具实例from bokeh.modelsimport PanTool;pan=PanTooldimensions=width;p
1.add_toolspan;p
2.add_toolspan使用相同的工具实例会使工具的状态和行为在多个图表之间同步这在创建复杂的交互式仪表板时特别有用,可以确保一致的用户体验动态更新服务器文档1Bokeh服务器允许创建动态更新的可视化应用基本流程包括定义主函数,创建图表,设置回调,然后通过服务器运行应用代码结构通常为def bkappdoc:plot=figure;source=ColumnDataSourcedata;plot.linex,y,source=source;def update:source.data=new_data;doc.add_periodic_callbackupdate,1000;doc.add_rootplot服务器应用可以接收用户输入,实时更新数据源周期性回调2周期性回调用于定时更新图表数据在Bokeh服务器应用中,使用add_periodic_callback方法来注册定时执行的函数doc.add_periodic_callbackupdate_func,1000,其中1000表示以毫秒为单位的更新间隔回调函数通常负责获取新数据并更新数据源defupdate_func:source.data=get_new_data这适用于实时监控和流数据可视化自定义回调3JSJavaScript回调允许在浏览器端响应用户交互,无需服务器往返通过CustomJS模型实现from bokeh.models importCustomJS;callback=CustomJSargs=dictsource=source,code=var data=source.data;//JS代码在这里JS回调可以绑定到各种事件,如滑块值更改slider.js_on_changevalue,callback或选择事件p.js_on_eventtap,callback这提供了丰富的客户端交互可能性数据源从创建数据源变换ColumnDataSource Pandas DataFrame是中可以直接转换为提供了对象,可以在不ColumnDataSourceCDS BokehPandas DataFrameBokeh Transform最基本的数据容器,它存储可视化所需的,这是一种常见的修改原始数据的情况下转换数据的视觉表ColumnDataSource数据列创建的基本方法是数据源创建方式示CDS fromimport pandasas from bokeh.transform importbokeh.models importpd;df=pd.DataFrame{x:[1,2,3],factor_cmap;p.circlex,y,ColumnDataSource;source=y:[4,5,6]};source=source=source,转换过程中,ColumnDataSourcedata={x:[1,2,ColumnDataSourcedf color=factor_cmapcategory,的索引将被保存为列常用的变换包3],y:[4,5,6],color:[red,green,DataFrame indexpalette,categories每列的长度必须相同,列名如果包含类别数据,这些将被括线性颜色映射、blue]}DataFrame linear_cmap将被用于在绘图方法中引用数据和创建工自动转换为适当的格式对于时间序列数对数颜色映射、log_cmap具提示支持流式添加新数据据,日期时间索引将被正确处理,可用于分类颜色映射等这些变CDS factor_cmap和修补时间轴换特别适合于通过颜色、大小或其他视觉source.streamnew_data现有数据属性编码额外维度的数据source.patch{y:[1,10]}高级图表类型支持多种高级图表类型,适用于不同类型的数据和分析需求热力图用于可视化矩阵数据,展示两个类别变量之间的关系使用Bokeh frombokeh.plotting importfigure;from bokeh.transform importlinear_cmap;mapper=linear_cmapvalue,Viridis256,min_val,创建max_val;p.rectx=x,y=y,width=1,height=1,source=source,fill_color=mapper箱线图用于显示数据分布使用from bokeh.plotting importfigure;from bokeh.models importColumnDataSource,BoxAnnotation;创建堆叠图用p.segmentcats,upper,cats,lower,source=source;p.rectcats,middle,
0.5,box_height,source=source于显示组成部分随时间的变化使用创建堆叠面积图这些高级图表p.varea_stack[y1,y2,y3],x=x,source=source,color=colors类型扩展了的可视化能力,使其适用于更广泛的数据分析场景Bokeh地图可视化12基础数据点标记GMapPlotGMapPlot提供了在谷歌地图上创建可视化的能力,使用circle和其他glyphs可以在地图上添加数据点,可以在世界地图上表示地理位置相关的数据通过颜色和大小编码额外信息3样式自定义可以选择不同地图样式,如路线图、卫星图和混合图,适应不同可视化需求Bokeh的地图可视化功能允许我们在地理背景下呈现数据使用GMapPlot首先需要获取谷歌地图API密钥from bokeh.plotting importgmap;p=gmapYOUR_API_KEY,lat,lng,zoomlat和lng参数指定地图中心点,zoom参数控制缩放级别1-20在地图上添加数据点类似于在常规图表上添加glyphs p.circlex=lon,y=lat,size=magnitude,source=source,fill_color=blue,fill_alpha=
0.8可以使用HoverTool添加交互信息hover=HoverTooltooltips=[位置,@city,值,@value];p.add_toolshover地图样式可以通过map_type参数设置p=gmapAPI_KEY,lat,lng,zoom,map_type=roadmap,选项包括roadmap、satellite、hybrid和terrain保存和导出嵌入到Jupyter Notebook保存为PNG在中使用非常直Jupyter NotebookBokeh保存为HTML有时需要静态图像用于报告或演示文稿,可接,使用函数将输出定output_notebook将Bokeh图表保存为独立HTML文件是最常以使用export_png函数将图表保存为向到笔记本from bokeh.plotting见的导出方式,这使得可视化可以在任何现图像PNG from bokeh.io importimportfigure,output_notebook,show;代网络浏览器中查看使用和output_file export_png;export_pngp,output_notebook;p=figure;save函数from bokeh.plotting filename=my_plot.png这需要安装p.line[1,2,3],[4,5,6];showp这importfigure,output_file,save;额外的依赖pip installselenium会在笔记本单元格中嵌入交互式图表也可output_filemy_plot.html;p=figure;phantomjs也可以在Jupyter以使用components函数获取嵌入所需的p.line[1,2,3],[4,5,6];savep或Notebook中使用from bokeh.io JavaScript和HTMLfrom者使用更简短的方式from bokeh.io importexport_png;export_pngp直接bokeh.embed importcomponents;import output_file,show;在单元格中显示PNG图像导出的图像包含script,div=componentsp,然后将这output_filemy_plot.html;showp图表的当前状态,不包含交互功能些组件集成到其他环境中生成的文件包含所有必要的HTML和,可以独立运行JavaScript CSS练习Bokeh1设置环境导入数据首先导入必要的库使用导入提供的数据集import pandasas pd;from Pandasdata=bokeh.plotting importfigure,show,pd.read_csvsales_data.csv;data[Date]=检查数据结构和output_notebook;from bokeh.io importpd.to_datetimedata[Date]这为在内容,确保理解数据output_file;output_notebook data.head;data.info中创建和显示图表做好12的特点和可视化的可能性JupyterNotebookBokeh准备创建基本图表自定义图表创建一个简单的线图显示销售趋势p=月度销售趋势figuretitle=,添加坐标轴标签日期p.xaxis.axis_label=;x_axis_type=datetime,width=800,销售额元,调整图例p.yaxis.axis_label=height=400;p.linedata[Date],data[Sales],43p.legend.location=top_left;p.legend.title=尝试其他基本图表类line_width=2;showp产品类别,设置颜色和样式p.linex,y,型如散点图p.circledata[Date],line_color=#1f77b4,line_dash=dashed和柱状图data[Sales],size=8,color=red这些自定义使图表更加清晰和专业p.vbarx=data[Category],top=data[Sales],width=
0.5练习Bokeh2添加悬停工具1创建一个包含悬停信息的散点图from bokeh.models importHoverTool;hover=HoverTooltooltips=[日期,实现数据筛选@date{%F},销售额,@sales{0,0}元,产品,2@product],formatters={@date:datetime};p=使用SelectFilter小部件创建交互式筛选from bokeh.modelsfiguretools=[hover,pan,wheel_zoom];p.circledate,import Select;from bokeh.layouts importcolumn;select=sales,source=source,size=10;showp悬停工具显示每Selecttitle=产品类别,个数据点的详细信息,增强用户交互体验options=sorteddata[Category].unique.tolist,value=All;def updateattr,old,new:if new==All:添加选择工具3new_data=data else:new_data=data[data[Category]==实现数据点选择功能from bokeh.models importTapTool,new];source.data=ColumnDataSourcenew_data.data;select.on_changevalue,update;layout=columnselect,BoxSelectTool;p.add_toolsTapTool,BoxSelectTool;p;showlayoutp.circlex,y,source=source,selection_color=red,nonselection_alpha=
0.1;def selection_callbackattr,old,new:selected=source.selected.indices;printf选中的数据点:{selected}这允许用户交互式地选择感兴趣的数据点,为进一步分析奠定基础练习Bokeh3创建热力图构建复杂布局创建标签页布局使用提供的销售数据创建一个按月份和产品类别的热力创建一个包含多个相关图表的仪表板from使用Tabs组件创建有标签的图表集合from图from bokeh.transform importlinear_cmap;bokeh.layouts importgridplot,row,column;p1=bokeh.models.widgets importTabs,Panel;tab1from bokeh.models importColorBar;pivot=figuretitle=月度销售趋势;p
1.lineDate,Sales,=Panelchild=p1,title=销售趋势;tab2=pd.pivot_tabledata,values=Sales,source=source;p2=figuretitle=按类别销售分Panelchild=p2,title=类别分析;tab3=index=Month,columns=Category;mapper=布;p
2.vbarx=Category,top=Sales,Panelchild=p3,title=客户分析;tabs=linear_cmapvalue,Viridis256,min_val,source=source2,width=
0.5;p3=figuretitle=Tabstabs=[tab1,tab2,tab3];showtabs这max_val;p=figurex_range=listpivot.columns,客户购买频率;p
3.circleCustomer,种布局在有限空间内提供多个视图,适合复杂的数据分y_range=listpivot.index;p.rectx=Category,Frequency,source=source3,size=10;grid=析展示y=Month,width=1,height=1,source=source,gridplot[[p1,p2],[p3,None]];showgridfill_color=mapper;color_bar=ColorBarcolor_mapper=mapper[transform];p.add_layoutcolor_bar,right与结合Pandas Bokeh数据准备数据转换使用Pandas进行数据清洗、转换和聚合,为可视1将DataFrame转换为ColumnDataSource,化做好准备2Bokeh的首选数据格式交互增强可视化实现4添加筛选器、选择工具和其他交互元素,增强用户基于处理后的数据创建交互式Bokeh图表,呈现洞3体验察Pandas和Bokeh的结合提供了强大的数据分析和可视化工作流典型流程首先使用Pandas进行数据获取和处理从文件或API读取数据,处理缺失值和异常值,进行必要的数据转换和特征工程,可能还包括聚合、重采样或透视表操作这些步骤为后续的可视化奠定基础预处理后,可以直接将PandasDataFrame转换为Bokeh的ColumnDataSource source=ColumnDataSourcedf这种转换保留了DataFrame的列名,使得在Bokeh中引用数据变得简单随后可以创建各种交互式可视化p.linedate,value,source=source,并添加交互工具如悬停提示、选择功能和筛选控件这种结合利用了Pandas在数据操作方面的优势和Bokeh在交互式可视化方面的能力,创造完整的数据分析体验案例研究股票数据分析数据获取1使用pandas_datareader库从网络获取股票历史数据import pandas_datareader.data asweb;import datetime;start=datetime.datetime2020,1,1;end=datetime.datetime2023,1,1;df=web.DataReaderAAPL,yahoo,start,end这将获取指定时间范围内的苹果公司股票数据,包括开盘价、最高价、最低价、收盘价、调整收盘价和交易量数据探索2初步检查数据结构和内容df.head;df.info;df.describe计算每日回报率以分析股票表现df[Returns]=df[Adj Close].pct_change创建移动平均线来平滑价格波动df[MA20]=df[Adj Close].rollingwindow=
20.mean检查缺失值并决定如何处理df.isnull.sum第一行的回报率将为NaN,因为缺少前一天的数据数据清洗3处理数据中的缺失值df.dropnainplace=True对极端值进行检查和处理outliers=df[df[Returns]df[Returns].mean+3*df[Returns].std|df[Returns]df[Returns].mean-3*df[Returns].std]将交易日期设为索引方便时间序列分析df.set_indexDate,inplace=True创建派生特征如月份和星期几df[Month]=df.index.month;df[Weekday]=df.index.dayofweek案例研究股票数据分析(续)苹果股价20日均线使用Pandas进行数据分析计算每月平均收益率monthly_returns=df.groupbyMonth[Returns].mean.reset_index分析不同交易日的表现weekday_returns=df.groupbyWeekday[Returns].mean.reset_index计算波动率df[Volatility]=df[Returns].rollingwindow=
20.std*np.sqrt252识别交叉点作为潜在交易信号df[Signal]=np.wheredf[Adj Close]df[MA20],1,0使用Bokeh创建交互式图表绘制股价和移动平均线source=ColumnDataSourcedf;p=figurex_axis_type=datetime,title=AAPL股价与20日均线,width=800,height=400;p.lineDate,Adj Close,source=source,legend_label=股价,line_width=2;p.lineDate,MA20,source=source,legend_label=20日均线,color=red,line_width=
1.5添加悬停工具hover=HoverTooltooltips=[日期,@Date{%F},价格,@{Adj Close}{0,
0.00},涨跌幅,@Returns{
0.00%}];p.add_toolshover创建交易量图表p2=figurex_axis_type=datetime,title=交易量,x_range=p.x_range;p
2.vbarDate,
0.5,Volume,source=source案例研究天气数据可视化数据导入和预处理温度趋势分析从提供的CSV文件导入北京历史天气数据创建日平均温度的时间序列daily_temp=data=pd.read_csvbeijing_weather.csv,data.resampleD[temperature].meanparse_dates=[date];计算月平均温度趋势monthly_temp=data.set_indexdate,inplace=True检data.resampleM[temperature].mean查数据完整性data.info;对温度数据进行移动平均平滑,减少噪声data.isnull.sum,并填充缺失值data[smooth_temp]=data[temperature].fillnadata[temperat data[temperature].rollingwindow=
30.mure].median,inplace=True由于温度有ean分析年度温度变化annual_cycle=明显的季节性,使用相邻日期的值或同期历史数data.groupbydata.index.dayofyear[temp据填充可能更合适erature].mean气象关系分析分析温度与湿度的关系data.plot.scattertemperature,humidity计算相关系数correlation=data[[temperature,humidity,pressure]].corr检查风向对温度的影响wind_temp=data.groupbywind_direction[temperature].mean.reset_index分析温度变化与天气事件的关系temp_change=data[temperature].diff;events=data[abstemp_change5]案例研究天气数据可视化(续)创建多个关联的交互式图表来全面展示天气数据首先,设置共享数据源source=ColumnDataSourcedata创建主温度图表p1=figurex_axis_type=datetime,title=北京日均温度变化2018-2022;p
1.linedate,temperature,source=source,line_width=2;p
1.linedate,smooth_temp,source=source,color=red,line_width=2添加悬停工具hover=HoverTooltooltips=[日期,@date{%F},温度,@temperature{0,
0.0}°C,湿度,@humidity{0,0}%];p
1.add_toolshover创建湿度和气压图表,并链接x轴范围p2=figurex_axis_type=datetime,title=湿度变化,x_range=p
1.x_range;p
2.linedate,humidity,source=source,color=blue;p3=figurex_axis_type=datetime,title=气压变化,x_range=p
1.x_range;p
3.linedate,pressure,source=source,color=green添加交互功能from bokeh.models importRangeTool;range_tool=RangeToolx_range=p
1.x_range;p4=figurex_axis_type=datetime,height=100;p
4.linedate,temperature,source=source;p
4.add_toolsrange_tool;p
4.toolbar.active_drag=range_tool组合所有图表grid=gridplot[[p1],[p2],[p3],[p4]];showgrid案例研究销售数据仪表板销售额利润使用Pandas对销售数据进行汇总和聚合,为创建仪表板做准备首先导入和检查数据sales=pd.read_csvsales_data.csv,parse_dates=[Date]按产品类别统计销售情况category_sales=sales.groupbyCategory.agg{Sales:sum,Profit:sum,Quantity:sum}.reset_index分析月度趋势monthly_sales=sales.set_indexDate.resampleM[Sales].sum.reset_index计算关键业务指标利润率sales[Profit_Margin]=sales[Profit]/sales[Sales]客户终身价值customer_ltv=sales.groupbyCustomer_ID.agg{Sales:sum,Order_ID:nunique};customer_ltv[LTV]=customer_ltv[Sales]/customer_ltv[Order_ID]区域销售表现region_sales=sales.groupby[Region,Category][Sales].sum.unstack.reset_index产品组合分析product_mix=sales.pivot_tableindex=Category,columns=Segment,values=Sales,aggfunc=sum这些数据聚合为创建全面的销售仪表板奠定了基础案例研究销售数据仪表板(续)布局设计过滤和选择功能深入分析功能使用Bokeh的布局功能创建一个组织良好的多图表仪表板添加交互式控件以允许用户筛选数据和深入分析创建日期实现数据钻取功能,允许用户从高级摘要进入详细数据在顶部放置标题和关键指标title=Divtext=范围选择器date_range_slider=类别图表上添加点击回调DateRangeSlidertitle=日期范围,start=min_date,category_plot.js_on_eventtap,销售绩效仪表板end=max_date,value=min_date,max_date添加CustomJSargs=dictsource=source,code=var类别下拉菜单category_select=Selecttitle=产品类selected_category=在第一行放置总体销售趋势图和产品类别分布row1别,options=[全部]+category_list,value=全部source.data[Category][cb_obj.source.selected.indi=rowsales_trend_plot,category_pie_chart第二行创建区域多选框region_checkbox=ces
[0]];包含区域地图和客户细分row2=rowmap_plot,CheckboxGrouplabels=region_list,fetch_product_dataselected_category;创建显customer_segment_chart底部放置详细数据表active=listrangelenregion_list实现过滤回调函示详细产品信息的弹出窗口product_detail=Div;data_table=DataTablesource=source,数def update_dataattr,old,new:filtered_data=detail_dialog=columns=columns,width=800将所有元素组合在一filter_datadate_range_slider.value,Dialogcontent=columnproduct_detail,起layout=columntitle,row1,row2,data_table;category_select.value,region_checkbox.active;visible=False;def show_detailsselected_category:curdoc.add_rootlayoutsource.data=detail_dialog.visible=True;product_detail.text=ColumnDataSourcefiltered_data.data get_product_detailsselected_category性能优化大数据集处理技巧计算优化策略性能优化123Bokeh处理大型数据集时,可能会遇避免在循环中使用或,而应使对于大型可视化,使用数据下采样减少Pandas.loc.iloc到内存限制采用分块读取策略用向量化操作点数量df[new_column]=sampled_data=reader=df[column1]*2+df[column2]data.samplen=1000if lendata对于复杂操作,考虑使用而不避免在源数据中包pd.read_csvlarge_file.csv,apply1000else data,然后逐块处理是迭代行含不必要的列chunksize=10000df.applylambda row:source=数据for chunkin reader:complex_functionrow[col1],ColumnDataSourcedata[[x,y,使用类别利用使用渲染器处理process_chunkchunk row[col2],axis=1numba color]]WebGL数据类型减少内存使用进行即时编译可以显著加快计算密集型大量点p=函数df[category_column]=from numbaimport jit;figureoutput_backend=webgl对于复杂仪表板,考虑延迟加载组件df[category_column].astypecat@jitnopython=True def对于时间序列数据,可以使egory fast_functionarr:...from bokeh.models import用适当的频率重采样减少数据量CustomJS;df.resampleD.mean load_button.js_on_clickCustomJScode=load_components部署应用Bokeh使用服务器嵌入到应用部署注意事项Bokeh Web服务器允许创建功能齐全的交互式将图表嵌入到现有应用有多种方部署到生产环境时,考虑安全性和性能为Bokeh BokehWeb应用创建应用时,首先定义主函数法最简单的是生成独立服务器配置Web HTMLfrom BokehSSL bokeh serve--创建图表和交互元def make_appdoc:[bokeh.embed importfile_html;html=ssl-certfile/path/to/cert.pem--ssl-素将此代码保存对于更灵活的嵌入,设置访问控制];doc.add_rootlayout file_htmlplot,CDN keyfile/path/to/key.pem在文件中,然后使用命令行启动服使用函数main.py componentsfrom bokeh serve--allow-websocket-务器针对高流量应用,bokeh serve--show main.py bokeh.embed importcomponents;origin=mydomain.com对于更复杂的应用,可以创建一个包含多个,然后将考虑使用负载均衡和多个服务器实例script,div=componentsplot Bokeh文件的目录结构,和插入到模板中在定期监控服务器性能和资源使用情况,特别bokeh servemyapp/script divHTML Django其中目录包含和其他必要文中嵌入示例是内存使用对于myapp main.py defbokeh_viewrequest:ps aux|grep bokeh件服务器应用可以部署到生产环境,如使静态图表,考虑预生成并缓存输出以plot=create_plot;script,div=HTML用管理减少服务器负载supervisord[program:bokeh];componentsplot;returncommand=/path/to/bokehserverenderrequest,template.html,myapp/--port=5006{script:script,div:div}扩展Pandas自定义函数使用和创建自定义扩展apply applymap创建自定义函数是扩展功能的最基本方法是对整行或整列应用函数的强大工对于更复杂的功能,可以创建扩展Pandas applyPandas方法可以定义处理单个值的函数具对列应用,扩展可以是自定义的访问器,如def df[column].applyfunc对行应用对于逐calculate_discountprice,rate:return df.applyfunc,axis=1@pd.api.extensions.register_dataframe,然后使用将其应元素操作,更为高效price*1-rate applyapplymap_accessorcustom class用到将函数应用DataFrame df[Discounted_Price]df.applymaplambda x:x*2CustomAccessor:def__init__self,于中的每个单元格对于需要访问=df.applylambda row:DataFrame pandas_obj:self._obj=pandas_obj;def整个的操作,可以使用方法calculate_discountrow[Price],DataFrame pipecustom_methodself:return对于需要将作为第一个参数传递给函数注册后,可以通过row[Discount_Rate],axis=1DataFrame transformed_data跨多行操作的复杂计算,可以创建自定义聚合调用还可以df.pipecomplex_transform df.custom.custom_method函数创建自定义数据类型,通过扩展def weighted_avggroup:return和类,适用np.averagegroup[Value],ExtensionArray ExtensionDtype于特殊数据类型如地址或地理坐标weights=group[Weight];IPdf.groupbyCategory.applyweighted_avg扩展Bokeh自定义创建新的交互工具扩展模型系统GlyphsBokeh允许创建自定义的图形标记,适用于特殊的可视创建自定义交互工具可以增强Bokeh的用户体验扩展Bokeh的模型系统高度可扩展,允许创建新的组件类型化需求首先,需要扩展XYGlyph类from Tool类from bokeh.models.tools importTool;扩展Model类from bokeh.model importModel;bokeh.models.glyphs importXYGlyph;class classCustomToolTool:__implementation__=from bokeh.core.properties importString;classCustomGlyphXYGlyph:__implementation__=自定义JS实现实现需要定义工具的行为,如鼠CustomModelModel:text=String;自定义JS实现JS实现定义了如何绘制图形注标点击或拖动时的响应例如,可以创建一个绘制自由__implementation__=自定义JS实现这可册自定义glyph后,可以通过custom_glyph=形状区域的选择工具,或实现特定领域的测量工具添以用于创建自定义控件、新的布局组件或特殊的数据处CustomGlyphx=x,y=y,source=source将其添加自定义工具p.add_toolsCustomTool自定理器复杂的扩展可能需要理解Bokeh的TypeScript类加到图表中这对于创建特定领域的可视化(如生物信义工具可以与数据源和自定义JS回调结合,实现复杂的型系统和BokehJS前端库,但能够实现高度定制化的交息学中的蛋白质结构或金融中的特殊图表类型)特别有交互互式可视化组件用数据分析最佳实践代码组织文档和注释版本控制和复现性良好的代码组织对于维护和协作至关重要遵循模良好的文档使代码更易于理解和使用为函数和类使用版本控制系统(如Git)跟踪代码变更,便于块化设计原则,将数据加载、清洗、转换和可视化添加文档字符串def协作和回溯记录环境依赖pip freeze分为不同的函数或模块def load_data:complex_functionparam1,param2:计算requirements.txt,使用虚拟环境确保复现性return pd.read_csvfile.csv;def两个参数的复杂关系参数:param1float:第一对于数据科学项目,保存分析过程中的关键数据快clean_datadf:return cleaned_df;def个参数param2float:第二个参数返回:照analyze_datadf:return results使用类封装float:计算结果对于复杂的数据转换或计processed_data.to_csvprocessed_data_v
1.相关功能class SalesAnalyzer:def算,添加内联注释解释逻辑#使用前30天的平csv,index=False使用随机种子确保可重复__init__self,data:self.data=data;def均值填充缺失数据的结果np.random.seed42;df=monthly_trendself:...维护一致的命名约定,df.fillnadf.rolling
30.mean维护项目级df.samplefrac=
1.0考虑使用像DVC这样的如snake_case用于函数和变量,PascalCase用文档,说明数据来源、分析目标和关键发现工具进行数据版本控制,或Jupyter nbconvert来于类版本化笔记本可视化设计原则选择合适的图表类型色彩使用信息层次选择正确的图表类型是有效可视化的基础对色彩应有目的地使用,而不仅仅是为了装饰建立清晰的信息层次帮助观众理解数据故事于比较类别数据,使用条形图或柱状图;对于对于分类数据,使用有明显区分的颜色使用标题和副标题传达主要信息显示时间趋势,使用线图;对于部分与整体的年销售趋势categorical_palette=[#1f77b4,p.title.text=2020-2022;关系,使用饼图或堆叠图;对于分布,使用直;对于连续数据,使强调关键#ff7f0e,#2ca02c]p.title.text_font_style=bold方图或箱线图;对于相关性,使用散点图考用单色渐变或双色渐变数据点from p.circlex,y,size=20,虑数据的性质和要传达的信息数据比较关键事件使→bokeh.palettes importViridis256;mapper color=red,legend_label=条形图、时间序列线图、分布直用注释指出重要特征→→=linear_cmapvalue,Viridis256,min_val,frombokeh.models方图、关系散点图避免过度复杂的考虑色盲友好的调色板,如→max_val importLabel;label=Labelx=x_pos,图表类型,除非它们能提供明显的洞察价值或突出显示重要数据点显著增长点移除无关元Viridis Cividisy=y_pos,text=素,减少视觉噪音highlighted_color=red ifvaluep.grid.grid_line_alpha保持一致性,相同组织多图表布局,使相关信息保持在threshold elseblue=
0.3类别在不同图表中使用相同颜色一起layout=rowprimary_chart,columndetail_chart1,detail_chart2常见错误和调试技巧常见错误调试方法问题解决策略PandasBokeh在中,一个常见错误是链式操作中的调试的一个基本技巧是使用语句面对复杂问题,采用系统化的调试策略首PandasBokehprint赋值问题不检查数据和状态,先隔离问题创建最小可复现示例,逐步添df.sort_valuescolumn printsource.data会修改原始,除非使用尤其是在回调函数中对于服务器应用,查加复杂性直到问题出现使用断言验证关键DataFrame或重新赋值看服务器日志获取错误信息假设数据集为空inplace=True df=bokehserveassert lendf0,处理字符串和使用检查数据类型和结构df.sort_valuescolumn--show app.py--log-level debugprintdf.dtypes;数值混合的列时,可能会遇到类型错误,使开发者工具检查网络请求和错误,对于性能问题,使用性JavaScript printdf.shape用特别是自定义回调中的问题对于复杂布局能分析工具pd.to_numericdf[column],import cProfile;将非数值转换为深问题,可以给元素添加边框来可视化结构参errors=coerce NaNcProfile.runfunction_to_profile度复制问题也很常见只创建引考文档和社区资源,如和df2=df div.style={border:1px solidred}Stack Overflow用,而创建独立副本对利用提供的参数记录状态最后,记录发现的问题和解df2=df.copy Bokehtools p=GitHub issues齐错误通常出现在合并操作中,使用,检查器工具可决方案,为未来的项目创建知识库figuretools=inspector以显示信息pd.mergedf1,df2,on=key,确保正确的连接类型how=left数据安全和隐私处理敏感数据数据匿名化技术数据共享和报告注意事项123处理敏感数据需要特别注意安全措施始终数据匿名化是保护个人隐私的关键步骤使共享分析结果时需谨慎,避免意外泄露敏感使用安全的数据存储方式,如加密文件系统用假名替换直接标识符如姓名和ID信息检查聚合统计是否可能通过差分攻击或安全数据库from df[name]=df[name].applylambda重新识别个体,特别是小样本组ifcryptography.fernet importFernet;x:f用户{hashx%1000}对间接标group.count5:return None在可key=Fernet.generate_key;cipher=识符如年龄进行泛化df[age_group]视化中避免显示可能导致识别个体的数据点Fernetkey;encrypted_data==pd.cutdf[age],bins=[0,18,35,50,plot.circlex=x,y=y,cipher.encryptdata.encode避免65,100],labels=[儿童,青年,中年,source=source,size=5而不是使用标在代码或笔记本中直接嵌入凭证,使用环境高年,老年]考虑添加随机噪声到定量签考虑使用差分隐私技术from变量或专用的凭证管理工具import os;值,保留统计特性但防止准确识别diffprivlib.tools importmean;api_key=os.environ.getAPI_KEY df[income]=df[income]*1+private_mean=meandata,建立访问控制机制,确保只有授权人员可以np.random.normal0,
0.05,lendf epsilon=
1.0,特别是在公开共享结果时访问敏感数据,考虑实施角色基础访问控制将数据限制在分析所需的最小范围RBAC analysis_data=df[[age_group,income_bracket,purchase_amount]]高级主题机器学习集成数据准备模型训练与评估1使用Pandas清洗和转换数据,为机器学习模型做好准备利用scikit-learn等库训练模型,评估其性能2模型部署与监控结果可视化4将模型集成到生产环境,使用可视化工具监控其表现3使用Bokeh创建交互式图表,展示模型结果和性能将机器学习与数据分析工作流集成可以极大地增强数据洞察能力使用Pandas准备训练数据X=df.droptarget,axis=1;y=df[target];from sklearn.model_selectionimport train_test_split;X_train,X_test,y_train,y_test=train_test_splitX,y,test_size=
0.2,random_state=42处理分类特征from sklearn.preprocessing importOneHotEncoder;encoder=OneHotEncoder;X_cat_encoded=encoder.fit_transformX[categorical_cols]标准化数值特征from sklearn.preprocessing importStandardScaler;scaler=StandardScaler;X_num_scaled=scaler.fit_transformX[numerical_cols]使用Bokeh可视化模型结果from sklearn.metrics importconfusion_matrix;cm=confusion_matrixy_test,y_pred;p=figurex_range=class_names,y_range=class_names;p.rectx=x,y=y,width=1,height=1,source=source,fill_color=mapper,line_color=None展示混淆矩阵可视化特征重要性p.hbary=feature_names,right=importances,height=
0.7使用交互式图表展示预测vs实际值p.circleactual,predicted,source=source;hover=HoverTooltooltips=[样本ID,@index,实际值,@actual,预测值,@predicted];p.add_toolshover这种集成方法使机器学习过程更加透明和可解释高级主题实时数据流创建实时更新的图表Bokeh服务器是创建实时更新图表的理想选择设置基本图表source=数据流设计ColumnDataSourcedata=dictx=[],y=[];p=figure;p.linex,y,设计实时数据流应用需要考虑数据源、处理逻辑和可视化更新策略首先确定数据源,source=source创建更新回调def update_data:new_data=如API、WebSocket或消息队列import websocket;ws=fetch_new_data;source.streamnew_data,并设置定时器websocket.WebSocketAppwss://data.example.com/stream然后规划数doc.add_periodic_callbackupdate_data,1000对于WebSocket数据,创建据处理流程,包括解析、转换和状态管理def on_messagews,message:data自定义回调def ws_on_messagemessage:data==json.loadsmessage;processed_data=process_real_time_datadata;process_messagemessage;source.streamdata;update_visualizationprocessed_data doc.add_next_tick_callbackpartialupdate_plot,data123数据处理技术处理流数据需要高效的技术和数据结构使用滚动窗口计算来处理时间序列数据window_size=100;data_window=collections.dequemaxlen=window_size,新数据到达时更新窗口data_window.appendnew_data对于需要聚合的数据,考虑使用增量计算方法current_mean=update_meancurrent_mean,n,new_value,其中n是已处理的样本数使用Pandas时间分组功能处理时序数据df.set_indextimestamp.groupbypd.Grouperfreq=1min高级主题大规模数据处理使用扩展Dask PandasDask是一个并行计算库,可以扩展Pandas处理大规模数据的能力首先安装和导入Dask importdask.dataframe asdd然后从大文件或多个文件创建Dask DataFrameddf=dd.read_csvlarge_data_*.csvDask提供与Pandas类似的API,但操作是延迟执行的,直到调用计算方法result=ddf.groupbycategory.mean.compute这使得可以处理比内存大的数据集,同时利用多核处理能力ddf.map_partitionsprocess_chunk.computescheduler=processes数据分块处理策略对于超大数据集,采用分块处理策略是关键使用生成器逐块读取数据for chunkin pd.read_csvhuge_file.csv,chunksize=100000:process_chunkchunk对于需要聚合的操作,使用增量更新方法running_sum=0;running_count=0;for chunkin chunks:chunk_sum=chunk[value].sum;chunk_count=lenchunk;running_sum+=chunk_sum;running_count+=chunk_count;running_mean=running_sum/running_count考虑使用分布式系统如Spark进行更复杂的处理from pyspark.sql importSparkSession;spark=SparkSession.builder.getOrCreate;df=spark.read.csvlarge_data.csv大数据可视化技巧可视化大数据集时,数据降维是必要的使用下采样显示趋势sampled_data=full_data.samplefrac=
0.01if lenfull_data10000elsefull_data采用数据聚合代替原始数据点binned_data=df.groupbypd.cutdf[x],bins=
100.agg{y:[mean,std]}使用热力图显示高密度区域frombokeh.transform importlinear_cmap;mapper=linear_cmapcount,Viridis256,0,max_count;p.rectx_bin,y_bin,
0.9,
0.9,source=source,fill_color=mapper考虑使用datashader进行高级降维from datashader.mpl_ext importdsshow;dsshowdf,ds.Pointx,y,ds.count,ds.meanvalue,plt.matplotlib.pyplot未来趋势发展方向可视化技术新趋势人工智能与自动化PandasPandas的未来发展正朝着性能优化和灵活性增强数据可视化领域正经历快速创新WebGL和GPU人工智能正逐渐融入数据分析工作流自动化数据方向迈进Pandas
2.0及后续版本计划改进内部加速渲染正成为大规模数据可视化的标准,提供更清洗和异常检测工具可以显著减少预处理时间自数据结构,提高大数据处理能力和内存效率流畅的交互体验响应式设计使可视化能够适应不动特征工程能够识别和创建有意义的特征自然语Apache Arrow集成将加强,支持更快的数据交换同设备和屏幕尺寸增强现实AR和虚拟现实VR言生成NLG系统可以自动解释可视化和分析结果,和内存共享类型注解支持将增强,改善IDE体验正开始应用于数据可视化,提供沉浸式数据探索体使非技术用户也能理解数据洞察AutoML工具集和错误检查扩展Array接口将使Pandas更好地验自然语言接口使用户可以通过文本或语音命令成到分析流程中,自动选择和优化模型关注即将与其他数据科学库如PyTorch和Dask集成考虑创建和修改可视化显示过去12个月的销售趋势推出的库如pandas-ai和autoviml,它们旨使用实验性功能人工智能辅助可视化系统能够自动推荐最合适在将这些AI功能与传统数据分析工具集成pandas.options.mode.copy_on_write提前的图表类型和视觉编码体验未来改进资源推荐为了进一步提升数据分析技能,我们推荐以下资源书籍方面,《Python forData Analysis》Wes McKinney著是Pandas的权威指南,由库的创建者撰写《Interactive DataVisualization withBokeh》Sarah Bird等著深入探讨Bokeh的高级功能《Data Sciencefrom Scratch》Joel Grus著提供了扎实的数据科学基础《Hands-On DataAnalysis withPandas》Stefanie Molin著包含实用的实例项目在线课程方面,Coursera的Applied DataScience withPython专项课程提供系统的训练DataCamp的Data Manipulationwith pandas课程专注于Pandas技能Udemy上的Interactive DataVisualization withBokeh提供实践指导社区资源方面,Stack Overflow上的pandas和bokeh标签下有丰富的问答GitHub上的pandas-dev和bokeh组织提供了最新的开发信息PyData和PyCon会议的视频记录也是宝贵的学习资源复习核心概念Pandas数据结构数据操作数据清洗数据聚合文件操作时间序列其他功能让我们回顾Pandas的核心概念首先是基础数据结构Series一维标记数组和DataFrame二维表格结构,它们是所有操作的基础第二是数据操作选择loc和iloc、过滤布尔索引、排序sort_values和转换apply,这些操作允许你灵活地处理数据数据清洗也是关键技能,包括处理缺失值fillna、dropna、删除重复项drop_duplicates和数据验证聚合功能允许你对数据进行分组分析,包括groupby操作、聚合函数agg和透视表pivot_table文件操作包括从各种来源读取数据read_csv、read_excel和将结果导出到不同格式时间序列处理是Pandas的强项,包括日期解析to_datetime、重采样resample和移动窗口计算rolling最后,熟悉Pandas与其他库的集成也很重要,特别是与NumPy和可视化库如Matplotlib和Bokeh的协同工作复习核心概念Bokeh基本图表交互工具数据源布局链接图表自定义外观服务器应用回顾Bokeh的核心概念,首先是基本图表创建使用figure创建图表容器,然后添加图形标记glyphs如circle、line、rect等来表示数据点交互工具是Bokeh的主要优势,包括悬停工具HoverTool显示数据点详情,缩放工具ZoomTool探索数据的不同部分,以及选择工具TapTool、BoxSelectTool实现数据点的交互式选择数据源ColumnDataSource是连接数据与可视化的桥梁,支持从PandasDataFrame创建和动态更新布局系统row、column、gridplot允许组织多个图表创建复杂的仪表板链接图表功能使多图表共享范围、选择状态和交互工具,创建协调的数据视图自定义外观通过设置颜色、样式、标题和其他视觉属性增强可视化效果最后,Bokeh服务器允许创建具有后端逻辑的动态应用,支持数据流更新、用户输入处理和复杂的交互功能掌握这些概念将使你能够创建从简单图表到复杂仪表板的各种交互式可视化实战项目ideas个人财务分析社交媒体数据可视化12创建一个个人财务分析工具,使用开发一个社交媒体数据分析工具,使用Pandas处理消费记录并使用Bokeh创建Pandas处理API返回的数据并用Bokeh创可视化仪表板首先,使用Pandas导入建交互式可视化从Twitter、微博或和清洗银行账单或信用卡数据,创建分类Facebook等平台收集数据(使用官方系统将交易分类为食品、交通、娱API或现有数据集)使用Pandas进行情乐等然后分析消费模式,识别最大开感分析、主题提取和用户参与度计算创支类别和随时间的变化趋势最后,使用建Bokeh可视化,展示热门话题随时间的Bokeh创建交互式仪表板,包括月度支出变化、情感分布和用户互动网络图实现趋势图、支出类别饼图和异常开支标记交互式过滤功能,允许按关键词、时间段添加日期范围选择器和类别过滤器以增强或情感筛选数据这个项目可以帮助理解交互性社交媒体趋势和用户行为环境数据监测3构建一个环境数据监测系统,使用Pandas分析传感器数据并用Bokeh创建实时可视化从公开的空气质量、水质或气象API获取数据,或使用IoT传感器收集本地数据使用Pandas清洗数据,检测异常值,计算移动平均值和季节性模式创建Bokeh仪表板显示实时指标、历史趋势和预警标记实现地图视图显示不同位置的数据差异,以及时间控件查看特定时间段的数据这个项目可以帮助监测环境变化并识别需要关注的趋势环节QA常见问题问题解决策略后续支持在课程中,学生经常提出的问题包括如何处解决数据分析问题的通用策略包括首先确定课程结束后的学习支持包括在线讨论区,学理大型数据集导致的内存问题?和问题的具体表现和上下文;查阅官方文档和生可以继续提问和讨论;每周办公时间,提供Pandas有什么区别,什么情况下应该选择哪个?参考;检查数据的结构、类型和异常值;一对一咨询;补充学习资料库,包含常见问题SQL API如何处理复杂的多层次索引?和创建最小可复现示例;尝试分解问题为更小的的解决方案;项目反馈渠道,学生可以提交项Bokeh相比有哪些优势和局限性?步骤;查找是否有替代方法或函数;利用社区目获取专业评审;同行学习小组,促进协作和Matplotlib/Seaborn如何高效地处理时间序列数据,特别是在不同资源如和对知识分享;实际案例分析研讨会,深入探讨特Stack OverflowGitHub issues时区和频率下?这些问题反映了在实际应用中于性能问题,考虑使用性能分析工具识别瓶颈,定行业应用这些资源确保学生能够持续发展的常见挑战并探索优化技术数据分析技能并应用于实际问题总结与展望掌握高级技能1将基础知识应用于复杂项目,掌握高级数据分析技术构建完整项目2从数据收集到可视化呈现,完成端到端数据分析流程应用核心概念3将Pandas和Bokeh的基础知识应用于实际问题在本课程中,我们系统地学习了Pandas和Bokeh这两个强大的数据分析和可视化工具从Pandas的数据结构、数据操作到高级聚合功能,我们掌握了处理结构化数据的关键技能在Bokeh部分,我们学习了从基本图表创建到复杂交互式仪表板的全套技术通过案例研究和实践练习,我们将这些工具应用于实际数据分析场景,加深了对概念的理解展望未来,数据分析领域充满机遇和挑战随着数据量的不断增长和复杂性的提高,掌握高效的数据处理和可视化技术变得越来越重要我们建议继续深入学习高级主题,如大数据处理、机器学习集成和实时数据流分析参与开源项目和数据科学社区活动,与同行交流经验和知识最重要的是,将所学技能应用于解决真实世界的问题,通过实践不断提升自己的数据分析能力记住,数据分析不仅是一种技术,更是一种思维方式,能够从数据中提取有价值的洞察并支持决策。
个人认证
优秀文档
获得点赞 0