tabsight 0.1.0a1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tabsight/__init__.py +89 -0
- tabsight/__main__.py +3 -0
- tabsight/_version.py +1 -0
- tabsight/accessor.py +114 -0
- tabsight/aggregate.py +759 -0
- tabsight/analytics.py +275 -0
- tabsight/auto.py +249 -0
- tabsight/charts/__init__.py +737 -0
- tabsight/charts/_build.py +359 -0
- tabsight/charts/_common.py +124 -0
- tabsight/charts/extra.py +236 -0
- tabsight/charts/facets.py +369 -0
- tabsight/charts/grids.py +202 -0
- tabsight/charts/maps.py +669 -0
- tabsight/charts/pane.py +336 -0
- tabsight/charts/parts.py +319 -0
- tabsight/charts/relation.py +530 -0
- tabsight/check.py +318 -0
- tabsight/clean.py +409 -0
- tabsight/cli.py +295 -0
- tabsight/colors.py +155 -0
- tabsight/dashboard.py +1436 -0
- tabsight/figure.py +241 -0
- tabsight/formats.py +487 -0
- tabsight/formulas.py +754 -0
- tabsight/geo/__init__.py +109 -0
- tabsight/geo/data/__init__.py +1 -0
- tabsight/geo/data/admin1/ABW.topo.json.gz +0 -0
- tabsight/geo/data/admin1/AFG.topo.json.gz +0 -0
- tabsight/geo/data/admin1/AGO.topo.json.gz +0 -0
- tabsight/geo/data/admin1/AIA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/ALB.topo.json.gz +0 -0
- tabsight/geo/data/admin1/ALD.topo.json.gz +0 -0
- tabsight/geo/data/admin1/AND.topo.json.gz +0 -0
- tabsight/geo/data/admin1/ARE.topo.json.gz +0 -0
- tabsight/geo/data/admin1/ARG.topo.json.gz +0 -0
- tabsight/geo/data/admin1/ARM.topo.json.gz +0 -0
- tabsight/geo/data/admin1/ASM.topo.json.gz +0 -0
- tabsight/geo/data/admin1/ATA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/ATC.topo.json.gz +0 -0
- tabsight/geo/data/admin1/ATF.topo.json.gz +0 -0
- tabsight/geo/data/admin1/ATG.topo.json.gz +0 -0
- tabsight/geo/data/admin1/AUS.topo.json.gz +0 -0
- tabsight/geo/data/admin1/AUT.topo.json.gz +0 -0
- tabsight/geo/data/admin1/AZE.topo.json.gz +0 -0
- tabsight/geo/data/admin1/BDI.topo.json.gz +0 -0
- tabsight/geo/data/admin1/BEL.topo.json.gz +0 -0
- tabsight/geo/data/admin1/BEN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/BFA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/BGD.topo.json.gz +0 -0
- tabsight/geo/data/admin1/BGR.topo.json.gz +0 -0
- tabsight/geo/data/admin1/BHR.topo.json.gz +0 -0
- tabsight/geo/data/admin1/BHS.topo.json.gz +0 -0
- tabsight/geo/data/admin1/BIH.topo.json.gz +0 -0
- tabsight/geo/data/admin1/BLM.topo.json.gz +0 -0
- tabsight/geo/data/admin1/BLR.topo.json.gz +0 -0
- tabsight/geo/data/admin1/BLZ.topo.json.gz +0 -0
- tabsight/geo/data/admin1/BMU.topo.json.gz +0 -0
- tabsight/geo/data/admin1/BOL.topo.json.gz +0 -0
- tabsight/geo/data/admin1/BRA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/BRB.topo.json.gz +0 -0
- tabsight/geo/data/admin1/BRN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/BTN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/BWA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/CAF.topo.json.gz +0 -0
- tabsight/geo/data/admin1/CAN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/CHE.topo.json.gz +0 -0
- tabsight/geo/data/admin1/CHL.topo.json.gz +0 -0
- tabsight/geo/data/admin1/CHN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/CIV.topo.json.gz +0 -0
- tabsight/geo/data/admin1/CLP.topo.json.gz +0 -0
- tabsight/geo/data/admin1/CMR.topo.json.gz +0 -0
- tabsight/geo/data/admin1/COD.topo.json.gz +0 -0
- tabsight/geo/data/admin1/COG.topo.json.gz +0 -0
- tabsight/geo/data/admin1/COK.topo.json.gz +0 -0
- tabsight/geo/data/admin1/COL.topo.json.gz +0 -0
- tabsight/geo/data/admin1/COM.topo.json.gz +0 -0
- tabsight/geo/data/admin1/CPV.topo.json.gz +0 -0
- tabsight/geo/data/admin1/CRI.topo.json.gz +0 -0
- tabsight/geo/data/admin1/CSI.topo.json.gz +0 -0
- tabsight/geo/data/admin1/CUB.topo.json.gz +0 -0
- tabsight/geo/data/admin1/CUW.topo.json.gz +0 -0
- tabsight/geo/data/admin1/CYM.topo.json.gz +0 -0
- tabsight/geo/data/admin1/CYN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/CYP.topo.json.gz +0 -0
- tabsight/geo/data/admin1/CZE.topo.json.gz +0 -0
- tabsight/geo/data/admin1/DEU.topo.json.gz +0 -0
- tabsight/geo/data/admin1/DJI.topo.json.gz +0 -0
- tabsight/geo/data/admin1/DMA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/DNK.topo.json.gz +0 -0
- tabsight/geo/data/admin1/DOM.topo.json.gz +0 -0
- tabsight/geo/data/admin1/DZA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/ECU.topo.json.gz +0 -0
- tabsight/geo/data/admin1/EGY.topo.json.gz +0 -0
- tabsight/geo/data/admin1/ERI.topo.json.gz +0 -0
- tabsight/geo/data/admin1/ESB.topo.json.gz +0 -0
- tabsight/geo/data/admin1/ESP.topo.json.gz +0 -0
- tabsight/geo/data/admin1/EST.topo.json.gz +0 -0
- tabsight/geo/data/admin1/ETH.topo.json.gz +0 -0
- tabsight/geo/data/admin1/FIN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/FJI.topo.json.gz +0 -0
- tabsight/geo/data/admin1/FLK.topo.json.gz +0 -0
- tabsight/geo/data/admin1/FRA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/FRO.topo.json.gz +0 -0
- tabsight/geo/data/admin1/FSM.topo.json.gz +0 -0
- tabsight/geo/data/admin1/GAB.topo.json.gz +0 -0
- tabsight/geo/data/admin1/GBR.topo.json.gz +0 -0
- tabsight/geo/data/admin1/GEO.topo.json.gz +0 -0
- tabsight/geo/data/admin1/GGY.topo.json.gz +0 -0
- tabsight/geo/data/admin1/GHA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/GIB.topo.json.gz +0 -0
- tabsight/geo/data/admin1/GIN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/GMB.topo.json.gz +0 -0
- tabsight/geo/data/admin1/GNB.topo.json.gz +0 -0
- tabsight/geo/data/admin1/GNQ.topo.json.gz +0 -0
- tabsight/geo/data/admin1/GRC.topo.json.gz +0 -0
- tabsight/geo/data/admin1/GRD.topo.json.gz +0 -0
- tabsight/geo/data/admin1/GRL.topo.json.gz +0 -0
- tabsight/geo/data/admin1/GTM.topo.json.gz +0 -0
- tabsight/geo/data/admin1/GUM.topo.json.gz +0 -0
- tabsight/geo/data/admin1/GUY.topo.json.gz +0 -0
- tabsight/geo/data/admin1/HKG.topo.json.gz +0 -0
- tabsight/geo/data/admin1/HMD.topo.json.gz +0 -0
- tabsight/geo/data/admin1/HND.topo.json.gz +0 -0
- tabsight/geo/data/admin1/HRV.topo.json.gz +0 -0
- tabsight/geo/data/admin1/HTI.topo.json.gz +0 -0
- tabsight/geo/data/admin1/HUN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/IDN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/IMN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/IND.topo.json.gz +0 -0
- tabsight/geo/data/admin1/IOA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/IOT.topo.json.gz +0 -0
- tabsight/geo/data/admin1/IRL.topo.json.gz +0 -0
- tabsight/geo/data/admin1/IRN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/IRQ.topo.json.gz +0 -0
- tabsight/geo/data/admin1/ISL.topo.json.gz +0 -0
- tabsight/geo/data/admin1/ISR.topo.json.gz +0 -0
- tabsight/geo/data/admin1/ITA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/JAM.topo.json.gz +0 -0
- tabsight/geo/data/admin1/JEY.topo.json.gz +0 -0
- tabsight/geo/data/admin1/JOR.topo.json.gz +0 -0
- tabsight/geo/data/admin1/JPN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/KAB.topo.json.gz +0 -0
- tabsight/geo/data/admin1/KAS.topo.json.gz +0 -0
- tabsight/geo/data/admin1/KAZ.topo.json.gz +0 -0
- tabsight/geo/data/admin1/KEN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/KGZ.topo.json.gz +0 -0
- tabsight/geo/data/admin1/KHM.topo.json.gz +0 -0
- tabsight/geo/data/admin1/KIR.topo.json.gz +0 -0
- tabsight/geo/data/admin1/KNA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/KOR.topo.json.gz +0 -0
- tabsight/geo/data/admin1/KOS.topo.json.gz +0 -0
- tabsight/geo/data/admin1/KWT.topo.json.gz +0 -0
- tabsight/geo/data/admin1/LAO.topo.json.gz +0 -0
- tabsight/geo/data/admin1/LBN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/LBR.topo.json.gz +0 -0
- tabsight/geo/data/admin1/LBY.topo.json.gz +0 -0
- tabsight/geo/data/admin1/LCA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/LIE.topo.json.gz +0 -0
- tabsight/geo/data/admin1/LKA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/LSO.topo.json.gz +0 -0
- tabsight/geo/data/admin1/LTU.topo.json.gz +0 -0
- tabsight/geo/data/admin1/LUX.topo.json.gz +0 -0
- tabsight/geo/data/admin1/LVA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/MAC.topo.json.gz +0 -0
- tabsight/geo/data/admin1/MAF.topo.json.gz +0 -0
- tabsight/geo/data/admin1/MAR.topo.json.gz +0 -0
- tabsight/geo/data/admin1/MCO.topo.json.gz +0 -0
- tabsight/geo/data/admin1/MDA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/MDG.topo.json.gz +0 -0
- tabsight/geo/data/admin1/MDV.topo.json.gz +0 -0
- tabsight/geo/data/admin1/MEX.topo.json.gz +0 -0
- tabsight/geo/data/admin1/MHL.topo.json.gz +0 -0
- tabsight/geo/data/admin1/MKD.topo.json.gz +0 -0
- tabsight/geo/data/admin1/MLI.topo.json.gz +0 -0
- tabsight/geo/data/admin1/MLT.topo.json.gz +0 -0
- tabsight/geo/data/admin1/MMR.topo.json.gz +0 -0
- tabsight/geo/data/admin1/MNE.topo.json.gz +0 -0
- tabsight/geo/data/admin1/MNG.topo.json.gz +0 -0
- tabsight/geo/data/admin1/MNP.topo.json.gz +0 -0
- tabsight/geo/data/admin1/MOZ.topo.json.gz +0 -0
- tabsight/geo/data/admin1/MRT.topo.json.gz +0 -0
- tabsight/geo/data/admin1/MSR.topo.json.gz +0 -0
- tabsight/geo/data/admin1/MUS.topo.json.gz +0 -0
- tabsight/geo/data/admin1/MWI.topo.json.gz +0 -0
- tabsight/geo/data/admin1/MYS.topo.json.gz +0 -0
- tabsight/geo/data/admin1/NAM.topo.json.gz +0 -0
- tabsight/geo/data/admin1/NCL.topo.json.gz +0 -0
- tabsight/geo/data/admin1/NER.topo.json.gz +0 -0
- tabsight/geo/data/admin1/NFK.topo.json.gz +0 -0
- tabsight/geo/data/admin1/NGA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/NIC.topo.json.gz +0 -0
- tabsight/geo/data/admin1/NIU.topo.json.gz +0 -0
- tabsight/geo/data/admin1/NLD.topo.json.gz +0 -0
- tabsight/geo/data/admin1/NOR.topo.json.gz +0 -0
- tabsight/geo/data/admin1/NPL.topo.json.gz +0 -0
- tabsight/geo/data/admin1/NRU.topo.json.gz +0 -0
- tabsight/geo/data/admin1/NZL.topo.json.gz +0 -0
- tabsight/geo/data/admin1/OMN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/PAK.topo.json.gz +0 -0
- tabsight/geo/data/admin1/PAN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/PCN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/PER.topo.json.gz +0 -0
- tabsight/geo/data/admin1/PGA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/PHL.topo.json.gz +0 -0
- tabsight/geo/data/admin1/PLW.topo.json.gz +0 -0
- tabsight/geo/data/admin1/PNG.topo.json.gz +0 -0
- tabsight/geo/data/admin1/POL.topo.json.gz +0 -0
- tabsight/geo/data/admin1/PRI.topo.json.gz +0 -0
- tabsight/geo/data/admin1/PRK.topo.json.gz +0 -0
- tabsight/geo/data/admin1/PRT.topo.json.gz +0 -0
- tabsight/geo/data/admin1/PRY.topo.json.gz +0 -0
- tabsight/geo/data/admin1/PSX.topo.json.gz +0 -0
- tabsight/geo/data/admin1/PYF.topo.json.gz +0 -0
- tabsight/geo/data/admin1/QAT.topo.json.gz +0 -0
- tabsight/geo/data/admin1/ROU.topo.json.gz +0 -0
- tabsight/geo/data/admin1/RUS.topo.json.gz +0 -0
- tabsight/geo/data/admin1/RWA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SAH.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SAU.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SDN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SDS.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SEN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SGP.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SGS.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SHN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SLB.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SLE.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SLV.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SMR.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SOL.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SOM.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SPM.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SRB.topo.json.gz +0 -0
- tabsight/geo/data/admin1/STP.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SUR.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SVK.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SVN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SWE.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SWZ.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SXM.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SYC.topo.json.gz +0 -0
- tabsight/geo/data/admin1/SYR.topo.json.gz +0 -0
- tabsight/geo/data/admin1/TCA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/TCD.topo.json.gz +0 -0
- tabsight/geo/data/admin1/TGO.topo.json.gz +0 -0
- tabsight/geo/data/admin1/THA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/TJK.topo.json.gz +0 -0
- tabsight/geo/data/admin1/TKM.topo.json.gz +0 -0
- tabsight/geo/data/admin1/TLS.topo.json.gz +0 -0
- tabsight/geo/data/admin1/TON.topo.json.gz +0 -0
- tabsight/geo/data/admin1/TTO.topo.json.gz +0 -0
- tabsight/geo/data/admin1/TUN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/TUR.topo.json.gz +0 -0
- tabsight/geo/data/admin1/TUV.topo.json.gz +0 -0
- tabsight/geo/data/admin1/TWN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/TZA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/UGA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/UKR.topo.json.gz +0 -0
- tabsight/geo/data/admin1/UMI.topo.json.gz +0 -0
- tabsight/geo/data/admin1/URY.topo.json.gz +0 -0
- tabsight/geo/data/admin1/USA.topo.json.gz +0 -0
- tabsight/geo/data/admin1/USG.topo.json.gz +0 -0
- tabsight/geo/data/admin1/UZB.topo.json.gz +0 -0
- tabsight/geo/data/admin1/VAT.topo.json.gz +0 -0
- tabsight/geo/data/admin1/VCT.topo.json.gz +0 -0
- tabsight/geo/data/admin1/VEN.topo.json.gz +0 -0
- tabsight/geo/data/admin1/VGB.topo.json.gz +0 -0
- tabsight/geo/data/admin1/VIR.topo.json.gz +0 -0
- tabsight/geo/data/admin1/VNM.topo.json.gz +0 -0
- tabsight/geo/data/admin1/VUT.topo.json.gz +0 -0
- tabsight/geo/data/admin1/WLF.topo.json.gz +0 -0
- tabsight/geo/data/admin1/WSB.topo.json.gz +0 -0
- tabsight/geo/data/admin1/WSM.topo.json.gz +0 -0
- tabsight/geo/data/admin1/YEM.topo.json.gz +0 -0
- tabsight/geo/data/admin1/ZAF.topo.json.gz +0 -0
- tabsight/geo/data/admin1/ZMB.topo.json.gz +0 -0
- tabsight/geo/data/admin1/ZWE.topo.json.gz +0 -0
- tabsight/geo/data/cities.json.gz +0 -0
- tabsight/geo/data/names.json.gz +0 -0
- tabsight/geo/data/version.json +6 -0
- tabsight/geo/data/world.topo.json.gz +0 -0
- tabsight/geo/detection.py +505 -0
- tabsight/geo/names.py +198 -0
- tabsight/i18n/__init__.py +55 -0
- tabsight/i18n/de.json +50 -0
- tabsight/i18n/en.json +90 -0
- tabsight/i18n/es.json +50 -0
- tabsight/i18n/fr.json +50 -0
- tabsight/i18n/it.json +50 -0
- tabsight/i18n/nl.json +50 -0
- tabsight/i18n/pt.json +50 -0
- tabsight/insight.py +490 -0
- tabsight/io.py +279 -0
- tabsight/lint.py +243 -0
- tabsight/localserver.py +113 -0
- tabsight/periods.py +237 -0
- tabsight/plotting.py +173 -0
- tabsight/profile.py +743 -0
- tabsight/py.typed +0 -0
- tabsight/read.py +271 -0
- tabsight/recommend.py +595 -0
- tabsight/render/__init__.py +1 -0
- tabsight/render/assets.py +24 -0
- tabsight/render/dashboard_html.py +164 -0
- tabsight/render/html.py +160 -0
- tabsight/render/picture.py +235 -0
- tabsight/render/static/__init__.py +0 -0
- tabsight/render/static/dashboard.js +2914 -0
- tabsight/render/static/echarts.min.js +45 -0
- tabsight/render/static/tabsight.js +588 -0
- tabsight/render/static/topojson-client.min.js +2 -0
- tabsight/server.py +272 -0
- tabsight/settings.py +195 -0
- tabsight/spec.py +350 -0
- tabsight/tablecalc.py +122 -0
- tabsight/theme.py +120 -0
- tabsight/warnings.py +113 -0
- tabsight/web.py +183 -0
- tabsight-0.1.0a1.dist-info/METADATA +358 -0
- tabsight-0.1.0a1.dist-info/RECORD +328 -0
- tabsight-0.1.0a1.dist-info/WHEEL +4 -0
- tabsight-0.1.0a1.dist-info/entry_points.txt +5 -0
- tabsight-0.1.0a1.dist-info/licenses/LICENSE +21 -0
- tabsight-0.1.0a1.dist-info/licenses/NOTICE +28 -0
- tabsight-0.1.0a1.dist-info/licenses/licenses/echarts-LICENSE.txt +222 -0
- tabsight-0.1.0a1.dist-info/licenses/licenses/echarts-NOTICE.txt +5 -0
- tabsight-0.1.0a1.dist-info/licenses/licenses/topojson-client-LICENSE.txt +13 -0
tabsight/__init__.py
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"""tabsight: BI-quality charts, world maps and dashboards from a pandas DataFrame.
|
|
2
|
+
|
|
3
|
+
Rule-based, no LLM, one offline HTML file. Docs: https://yesh069.github.io/tabsight/
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from tabsight import analytics, geo, warnings, web
|
|
7
|
+
from tabsight._version import __version__
|
|
8
|
+
from tabsight.accessor import register as _register_accessors
|
|
9
|
+
from tabsight.aggregate import Aggregation, Measure, aggregate, bucket
|
|
10
|
+
from tabsight.auto import auto
|
|
11
|
+
from tabsight.charts import chart
|
|
12
|
+
from tabsight.check import CheckReport, check
|
|
13
|
+
from tabsight.clean import CleanReport, clean
|
|
14
|
+
from tabsight.colors import ColorRegistry
|
|
15
|
+
from tabsight.dashboard import Dashboard
|
|
16
|
+
from tabsight.figure import Figure
|
|
17
|
+
from tabsight.formats import format_date, format_number
|
|
18
|
+
from tabsight.formulas import CalcField, calc
|
|
19
|
+
from tabsight.insight import Insight, Insights, insights
|
|
20
|
+
from tabsight.io import load
|
|
21
|
+
from tabsight.lint import LintIssue, LintReport
|
|
22
|
+
from tabsight.periods import Comparison, compare
|
|
23
|
+
from tabsight.plotting import plot # also lets pandas find the backend without the entry point
|
|
24
|
+
from tabsight.profile import Field, Profile, profile
|
|
25
|
+
from tabsight.recommend import Recommendation, Recommendations, recommend
|
|
26
|
+
from tabsight.render.assets import ECHARTS_VERSION, TOPOJSON_CLIENT_VERSION, runtime_js
|
|
27
|
+
from tabsight.server import DashboardServer
|
|
28
|
+
from tabsight.settings import Settings, config, current, set_defaults
|
|
29
|
+
from tabsight.spec import CHART_KINDS, ChartSpec
|
|
30
|
+
from tabsight.tablecalc import table_calc
|
|
31
|
+
from tabsight.theme import Theme, custom_theme
|
|
32
|
+
from tabsight.web import serve_payload, streamlit
|
|
33
|
+
|
|
34
|
+
__all__ = [
|
|
35
|
+
"CHART_KINDS",
|
|
36
|
+
"ECHARTS_VERSION",
|
|
37
|
+
"TOPOJSON_CLIENT_VERSION",
|
|
38
|
+
"Aggregation",
|
|
39
|
+
"CalcField",
|
|
40
|
+
"ChartSpec",
|
|
41
|
+
"CheckReport",
|
|
42
|
+
"CleanReport",
|
|
43
|
+
"ColorRegistry",
|
|
44
|
+
"Comparison",
|
|
45
|
+
"Dashboard",
|
|
46
|
+
"DashboardServer",
|
|
47
|
+
"Field",
|
|
48
|
+
"Figure",
|
|
49
|
+
"Insight",
|
|
50
|
+
"Insights",
|
|
51
|
+
"LintIssue",
|
|
52
|
+
"LintReport",
|
|
53
|
+
"Measure",
|
|
54
|
+
"Profile",
|
|
55
|
+
"Recommendation",
|
|
56
|
+
"Recommendations",
|
|
57
|
+
"Settings",
|
|
58
|
+
"Theme",
|
|
59
|
+
"__version__",
|
|
60
|
+
"aggregate",
|
|
61
|
+
"analytics",
|
|
62
|
+
"auto",
|
|
63
|
+
"bucket",
|
|
64
|
+
"calc",
|
|
65
|
+
"chart",
|
|
66
|
+
"check",
|
|
67
|
+
"clean",
|
|
68
|
+
"compare",
|
|
69
|
+
"config",
|
|
70
|
+
"current",
|
|
71
|
+
"custom_theme",
|
|
72
|
+
"format_date",
|
|
73
|
+
"format_number",
|
|
74
|
+
"geo",
|
|
75
|
+
"insights",
|
|
76
|
+
"load",
|
|
77
|
+
"plot",
|
|
78
|
+
"profile",
|
|
79
|
+
"recommend",
|
|
80
|
+
"runtime_js",
|
|
81
|
+
"serve_payload",
|
|
82
|
+
"set_defaults",
|
|
83
|
+
"streamlit",
|
|
84
|
+
"table_calc",
|
|
85
|
+
"warnings",
|
|
86
|
+
"web",
|
|
87
|
+
]
|
|
88
|
+
|
|
89
|
+
_register_accessors() # df.ts and series.ts
|
tabsight/__main__.py
ADDED
tabsight/_version.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.1.0a1"
|
tabsight/accessor.py
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"""``df.ts`` and ``series.ts``: tabsight from any DataFrame, without changing pandas settings.
|
|
2
|
+
|
|
3
|
+
df.ts.bar(x="Region", y="Sales")
|
|
4
|
+
df.ts.chart("auto", x="Order_Date", y="Sales")
|
|
5
|
+
df.ts.recommend(x="Sub_Category", y="Discount")
|
|
6
|
+
df["Sales"].ts.hist()
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import warnings
|
|
12
|
+
from typing import Any
|
|
13
|
+
|
|
14
|
+
import pandas as pd
|
|
15
|
+
|
|
16
|
+
from tabsight.figure import Figure
|
|
17
|
+
|
|
18
|
+
__all__ = ["DataFrameAccessor", "SeriesAccessor"]
|
|
19
|
+
|
|
20
|
+
# one method per chart kind (the alias "map" too)
|
|
21
|
+
_KINDS = (
|
|
22
|
+
"bar", "hbar", "grouped_bar", "stacked_bar", "stacked100_bar", "lollipop", "bullet", "line", "multi_line",
|
|
23
|
+
"area", "stacked_area", "combo", "sparkline", "calendar_heatmap", "donut", "treemap", "sunburst",
|
|
24
|
+
"waterfall", "funnel", "pareto", "kpi", "gauge", "table", "scatter", "bubble", "heatmap", "histogram",
|
|
25
|
+
"boxplot", "sankey", "map", "choropleth", "symbol_map", "density_map", "flow_map",
|
|
26
|
+
) # fmt: skip
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class DataFrameAccessor:
|
|
30
|
+
"""tabsight on a DataFrame: ``df.ts.chart(...)``, ``df.ts.bar(...)``, ``df.ts.profile()``..."""
|
|
31
|
+
|
|
32
|
+
def __init__(self, frame: pd.DataFrame) -> None:
|
|
33
|
+
self._frame = frame
|
|
34
|
+
|
|
35
|
+
def chart(self, kind: str = "auto", **kwargs: Any) -> Figure:
|
|
36
|
+
"""``ts.chart(df, kind, ...)``; the default kind is "auto"."""
|
|
37
|
+
from tabsight.charts import chart
|
|
38
|
+
|
|
39
|
+
return chart(self._frame, kind, **kwargs)
|
|
40
|
+
|
|
41
|
+
def recommend(self, **kwargs: Any) -> Any:
|
|
42
|
+
from tabsight.recommend import recommend
|
|
43
|
+
|
|
44
|
+
return recommend(self._frame, **kwargs)
|
|
45
|
+
|
|
46
|
+
def profile(self, **kwargs: Any) -> Any:
|
|
47
|
+
from tabsight.profile import profile
|
|
48
|
+
|
|
49
|
+
return profile(self._frame, **kwargs)
|
|
50
|
+
|
|
51
|
+
def check(self, **kwargs: Any) -> Any:
|
|
52
|
+
from tabsight.check import check
|
|
53
|
+
|
|
54
|
+
return check(self._frame, **kwargs)
|
|
55
|
+
|
|
56
|
+
def aggregate(self, dims: Any = None, measures: Any = None, **kwargs: Any) -> Any:
|
|
57
|
+
from tabsight.aggregate import aggregate
|
|
58
|
+
|
|
59
|
+
return aggregate(self._frame, dims, measures, **kwargs)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class SeriesAccessor:
|
|
63
|
+
"""tabsight on one column: ``s.ts.hist()``, ``s.ts.line()`` (over the index), ``s.ts.bar()``..."""
|
|
64
|
+
|
|
65
|
+
def __init__(self, series: pd.Series) -> None:
|
|
66
|
+
self._series = series
|
|
67
|
+
|
|
68
|
+
def chart(self, kind: str = "line", **kwargs: Any) -> Figure:
|
|
69
|
+
from tabsight.plotting import KINDS, plot
|
|
70
|
+
|
|
71
|
+
pandas_kind = {v[0]: k for k, v in KINDS.items()}.get(kind, kind)
|
|
72
|
+
if pandas_kind in KINDS:
|
|
73
|
+
return plot(self._series, pandas_kind, **kwargs)
|
|
74
|
+
from tabsight.charts import chart
|
|
75
|
+
|
|
76
|
+
name = str(self._series.name) if self._series.name is not None else "Value"
|
|
77
|
+
frame = self._series.to_frame(name).reset_index()
|
|
78
|
+
return chart(frame, kind, x=str(frame.columns[0]), y=name, **kwargs)
|
|
79
|
+
|
|
80
|
+
def line(self, **kwargs: Any) -> Figure:
|
|
81
|
+
return self.chart("line", **kwargs)
|
|
82
|
+
|
|
83
|
+
def bar(self, **kwargs: Any) -> Figure:
|
|
84
|
+
return self.chart("bar", **kwargs)
|
|
85
|
+
|
|
86
|
+
def hist(self, **kwargs: Any) -> Figure:
|
|
87
|
+
return self.chart("histogram", **kwargs)
|
|
88
|
+
|
|
89
|
+
def box(self, **kwargs: Any) -> Figure:
|
|
90
|
+
return self.chart("boxplot", **kwargs)
|
|
91
|
+
|
|
92
|
+
def area(self, **kwargs: Any) -> Figure:
|
|
93
|
+
return self.chart("area", **kwargs)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def _make(kind: str) -> Any:
|
|
97
|
+
def method(self: DataFrameAccessor, **kwargs: Any) -> Figure:
|
|
98
|
+
return self.chart(kind, **kwargs)
|
|
99
|
+
|
|
100
|
+
method.__name__ = kind
|
|
101
|
+
method.__doc__ = f'``ts.chart(df, "{kind}", ...)``'
|
|
102
|
+
return method
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
for _kind in _KINDS:
|
|
106
|
+
setattr(DataFrameAccessor, _kind, _make(_kind))
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def register() -> None:
|
|
110
|
+
"""Add ``.ts`` to every DataFrame and Series (done when tabsight is imported)."""
|
|
111
|
+
with warnings.catch_warnings():
|
|
112
|
+
warnings.simplefilter("ignore", UserWarning) # re-registering on reload is fine
|
|
113
|
+
pd.api.extensions.register_dataframe_accessor("ts")(DataFrameAccessor)
|
|
114
|
+
pd.api.extensions.register_series_accessor("ts")(SeriesAccessor)
|