ITPub博客

首页 > 数据库 > > 关于pyecharts可视化中国经济、人口等数据

关于pyecharts可视化中国经济、人口等数据

作者:bq_wang 时间:2020-02-19 09:13:06 0 删除 编辑

首先pyecharts是个可视化的好工具,pyecharts已做了变更目前是1.6.2版本,但工具的灵活运用学习过程还是很痛苦的。

其次通过pandas处理数据集问题,在pandas进行数据清洗转换汇总过滤不是不可能,但学习曲线有点长,因此采用read_sql,通过数据库来进行数据转换,某些地方还是用到了pandas的透视表

再次数据需要在pandas、numpy和list之间不断转换,以适配图表的数据格式要求。

最后,最重要的是选择最合适的可视化图表类型。


关于数据是从网上下载的一份中国各省市自治区1950-2010年总体情况表,只保留了14个字段11个指标,通过基于某些计算要求,新加了一张省市自治区名称转换表,以实现map功能和基于行政区划的统计。

------------------------------------------------------

表名称:chinaeconomy 中国各省市自治区1950-2010年总体情况表

REPORTYEAR年度

PROVINCEID省市编号

PROVINCENAME省市名称

GDP地区国内生产总值(亿元)

EVERAGEGDP人均国内生产总值(元)

PRIMARYINDUSTRYVALUE各地区第一产业增加值(亿元)

SECONDINDUSTRYVALUE各地区第二产业增加值(亿元)

THIRDINDUSTRYVALUE各地区第三产业增加值(亿元)

IMPORTEXPORTVALUE进出口总额(万美元)

EXPORTVALUE出口总额(万美元)

POPULATION年底总人口数(万人)

BIRTHRATE人口出生率(‰)

DEADRATE人口死亡率(‰)

GROWTHRATE人口自然增长率(‰)

------------------------------------------------------

表名称:provinceinfo 中国各省市自治区对应echart中的省市自治区简写和行政区域

PROVINCENAME    省市名称

ECHARTPROVINCENAME  echart省市名称

AREANAME    行政区划

------------------------------------------------------

基本SQL语句

select b.areaname,b.echartprovincename,a.reportyear,

       a.gdp,a.everagegdp,

       a.primaryindustryvalue,a.secondindustryvalue,a.thirdindustryvalue,

       a.importexportvalue,a.exportvalue,

       a.population,a.birthrate,a.deadrate,a.growthrate

  from chinaeconomy a,proviceinfo b

 where a.provincename=b.provincename

码示例

  1. import cx_Oracle

  2. import pandas as pd

  3. import numpy as np


  4. import matplotlib.pyplot as plt

  5. from pyecharts.charts importBar

  6. from pyecharts import options as opts

  7. from pyecharts.globals importThemeType

  8. from pyecharts.faker importFaker

  9. from pyecharts.commons.utils importJsCode

  10. from pyecharts.charts importEffectScatter

  11. from pyecharts.charts importHeatMap

  12. from pyecharts.charts importLine

  13. from pyecharts.charts importScatter

  14. from pyecharts.globals importSymbolType


  15. # theme 定制图表样式,共内置15种

  16. # ThemeType.WHITE|ThemeType.LIGHT|ThemeType.DARK|ThemeType.CHALK|ThemeType.ESSOS|

  17. # ThemeType.INFOGRAPHIC|ThemeType.MACARONS|ThemeType.PURPLE_PASSION|ThemeType.ROMA|ThemeType.ROMANTIC|

  18. # ThemeType.SHINE|ThemeType.VINTAGE|ThemeType.WALDEN|ThemeType.WESTEROS|Type.WONDERLAND


  19. # 全局配置项

  20. # InitOpts:初始化配置项

  21. # TitleOpts:标题配置项



  22. # AnimationOpts:Echarts画图动画配置项

  23. # ToolBoxFeatureOpts:工具箱工具配置项

  24. # ToolboxOpts:工具箱配置项

  25. # BrushOpts:区域选择组件配置项

  26. # DataZoomOpts:区域缩放配置项

  27. # LegendOpts:图例配置项

  28. # VisualMapOpts:视觉映射配置项

  29. # TooltipOpts:提示框配置项

  30. # AxisLineOpts: 坐标轴轴线配置项

  31. # AxisTickOpts: 坐标轴刻度配置项

  32. # AxisPointerOpts: 坐标轴指示器配置项

  33. # AxisOpts:坐标轴配置项

  34. # SingleAxisOpts:单轴配置项

  35. # GraphicGroup:原生图形元素组件


  36. # 系列配置项

  37. # ItemStyleOpts:图元样式配置项

  38. # TextStyleOpts:文字样式配置项

  39. # LabelOpts:标签配置项

  40. # LineStyleOpts:线样式配置项

  41. # SplitLineOpts:分割线配置项

  42. # MarkPointItem:标记点数据项

  43. # MarkPointOpts:标记点配置项

  44. # MarkLineItem:标记线数据项

  45. # MarkLineOpts:标记线配置项

  46. # MarkAreaItem: 标记区域数据项

  47. # MarkAreaOpts: 标记区域配置项

  48. # EffectOpts:涟漪特效配置项

  49. # AreaStyleOpts:区域填充样式配置项

  50. # SplitAreaOpts:分隔区域配置项


  51. '''

  52. 数据情况,考虑到pandas对数据处理的不便,还是使用了标准的数据库方式

  53. ------------------------------------------------------

  54. 表名称:chinaeconomy 中国各省市自治区1950-2010年总体情况表

  55. REPORTYEAR 年度

  56. PROVINCEID 省市编号

  57. PROVINCENAME 省市名称

  58. GDP 地区国内生产总值(亿元)

  59. EVERAGEGDP 人均国内生产总值(元)

  60. PRIMARYINDUSTRYVALUE 各地区第一产业增加值(亿元)

  61. SECONDINDUSTRYVALUE 各地区第二产业增加值(亿元)

  62. THIRDINDUSTRYVALUE 各地区第三产业增加值(亿元)

  63. IMPORTEXPORTVALUE 进出口总额(万美元)

  64. EXPORTVALUE 出口总额(万美元)

  65. POPULATION 年底总人口数(万人)

  66. BIRTHRATE 人口出生率(‰)

  67. DEADRATE 人口死亡率(‰)

  68. GROWTHRATE 人口自然增长率(‰)

  69. ------------------------------------------------------

  70. 表名称:provinceinfo 中国各省市自治区对应echart中的省市自治区简写和行政区域

  71. PROVINCENAME 省市名称

  72. ECHARTPROVINCENAME echart省市名称

  73. AREANAME 行政区划

  74. ------------------------------------------------------

  75. 基本SQL语句

  76. select b.areaname,b.echartprovincename,a.reportyear,

  77. a.gdp,a.everagegdp,

  78. a.primaryindustryvalue,a.secondindustryvalue,a.thirdindustryvalue,

  79. a.importexportvalue,a.exportvalue,

  80. a.population,a.birthrate,a.deadrate,a.growthrate

  81. from chinaeconomy a,proviceinfo b

  82. where a.provincename=b.provincename

  83. '''


  84. sql='''

  85. select b.areaname,b.echartprovincename,a.reportyear,

  86. a.gdp,a.everagegdp,

  87. a.primaryindustryvalue,a.secondindustryvalue,a.thirdindustryvalue,

  88. a.importexportvalue,a.exportvalue,a.importexportvalue-a.exportvalue as importvalue,

  89. a.population,a.birthrate,a.deadrate,a.growthrate

  90. from chinaeconomy a,proviceinfo b

  91. where a.provincename=b.provincename

  92. '''

  93. # 初始化

  94. username = 'XXX'

  95. password = 'XXX'

  96. connstr ='127.0.0.1:1521/ORCL'

  97. conn = cx_Oracle.connect(username,password,connstr) #连接数据库


  98. # pandas.read_sql测试

  99. df = pd.read_sql(sql,conn) #read_sql读取数据

  100. print(df.head(5)) #测试前5行


  101. # def bar_base_with_animation() -> Bar:

  102. # c = (

  103. # Bar(

  104. # init_opts=opts.InitOpts( #初始化配置项

  105. # theme=ThemeType.INFOGRAPHIC, #设置主题

  106. # animation_opts=opts.AnimationOpts( #画图动画配置项

  107. # animation_delay=1000, animation_easing="elasticOut"#动画设置

  108. # ),

  109. # bg_color={ #背景色

  110. # "type": "pattern",

  111. # "image": JsCode("img"), #背景图片

  112. # "repeat": "repeat"} #是否重复

  113. # )

  114. # )

  115. # .add_xaxis(Faker.choose()) #设置X轴数据

  116. # .add_yaxis("商家A", Faker.values(), gap="10%") #设置Y周数据 gap不同系列柱间距离

  117. # .add_yaxis("商家B", Faker.values(), gap="0%") #设置Y周数据 gap不同系列柱间距离

  118. # .set_series_opts(itemstyle_opts={ #图元样式设置

  119. # "normal": { #Bar-渐变圆柱

  120. # "color": JsCode("""new echarts.graphic.LinearGradient(, , , 1, [{

  121. # offset: ,

  122. # color: 'rgba(0, 244, 255, 1)'

  123. # }, {

  124. # offset: 1,

  125. # color: 'rgba(0, 77, 167, 1)'

  126. # }], false)"""),

  127. # "barBorderRadius": [30, 30, 30, 30],

  128. # "shadowColor": 'rgb(0, 160, 221)',

  129. # }})

  130. # .set_global_opts( #全局配置项

  131. # title_opts=opts.TitleOpts( #标题配置项

  132. # title="Bar-动画配置基本示例", #报表标题

  133. # subtitle="我是副标题", #报表副标题

  134. # pos_left="center", #标题位置

  135. # title_textstyle_opts=opts.TextStyleOpts(color="green"), #标题字体颜色

  136. # subtitle_textstyle_opts=opts.TextStyleOpts(color="blue") #副标题字体颜色

  137. # ),

  138. # toolbox_opts=opts.ToolboxOpts(), #显示 ToolBox

  139. # legend_opts = opts.LegendOpts(is_show=True,pos_left="right",pos_top="10%"),

  140. # yaxis_opts=opts.AxisOpts(name="我是 Y 轴", #标轴配置项

  141. # axislabel_opts=opts.LabelOpts(formatter="{value} /月") #坐标轴标签配置项,配置标签格式,Y 轴 formatter

  142. # ),

  143. # xaxis_opts=opts.AxisOpts(name="我是 X 轴", #标轴配置项

  144. # axislabel_opts=opts.LabelOpts(rotate=45) #坐标轴标签配置项,配置倾斜度

  145. # )

  146. # )

  147. # )

  148. # c.add_js_funcs(

  149. # """

  150. # var img = newImage(); img.src = 'ditu.jpg';

  151. # """

  152. # )

  153. # return c

  154. # c=bar_base_with_animation()

  155. # c.render()


  156. # 柱状图 六大行政区划 进出口数据对比

  157. sql='''

  158. select b.areaname,

  159. sum(a.exportvalue)/10000 as exportvalue,sum(a.importexportvalue-a.exportvalue)/10000 as importvalue

  160. from chinaeconomy a,proviceinfo b

  161. where a.provincename=b.provincename

  162. and a.reportyear=2010

  163. group by b.areaname

  164. order by 2

  165. '''

  166. df = pd.read_sql(sql,conn) #read_sql读取数据

  167. xdata=df['AREANAME'].tolist()

  168. exportdata=df['EXPORTVALUE'].round(2).tolist() #四舍五入,再转list

  169. importdata=df['IMPORTVALUE'].round(2).tolist() #四舍五入,再转list


  170. def bar_export_import_dif() -> Bar:

  171. c = (

  172. Bar(

  173. # init_opts=opts.InitOpts( #初始化配置项

  174. # theme=ThemeType.INFOGRAPHIC #设置主题

  175. # )

  176. )

  177. .add_xaxis(xdata) #设置X轴数据

  178. .add_yaxis("进口数据(亿)", exportdata, gap="10%") #设置Y周数据 gap不同系列柱间距离

  179. .add_yaxis("出口数据(亿)", importdata, gap="0%") #设置Y周数据 gap不同系列柱间距离

  180. .set_global_opts( #全局配置项

  181. title_opts=opts.TitleOpts( #标题配置项

  182. title="全国2010年进出口数据", #报表标题

  183. subtitle="各行政区域对比", #报表副标题

  184. pos_left="center", #标题位置

  185. title_textstyle_opts=opts.TextStyleOpts(color="green"), #标题字体颜色

  186. subtitle_textstyle_opts=opts.TextStyleOpts(color="blue") #副标题字体颜色

  187. ),

  188. toolbox_opts=opts.ToolboxOpts(), #显示 ToolBox

  189. legend_opts = opts.LegendOpts(is_show=True,pos_left="right",pos_top="7%")

  190. )

  191. )

  192. return c

  193. c=bar_export_import_dif()

  194. c.render('bar_export_import_dif.html')


  195. # 柱状图 六大行政区划 第1、2、3产业总体情况对比

  196. sql='''

  197. select b.areaname,

  198. sum(a.primaryindustryvalue) as primaryindustryvalue,

  199. sum(a.secondindustryvalue) as secondindustryvalue,

  200. sum(a.thirdindustryvalue) as thirdindustryvalue

  201. from chinaeconomy a,proviceinfo b

  202. where a.provincename=b.provincename

  203. and a.reportyear=2010

  204. group by b.areaname

  205. order by 2

  206. '''

  207. df = pd.read_sql(sql,conn) #read_sql读取数据

  208. xdata=df['AREANAME'].tolist()

  209. primaryindustryvalue=df['PRIMARYINDUSTRYVALUE'].round(2).tolist() #四舍五入,再转list

  210. secondindustryvalue=df['SECONDINDUSTRYVALUE'].round(2).tolist() #四舍五入,再转list

  211. thirdindustryvalue=df['THIRDINDUSTRYVALUE'].round(2).tolist() #四舍五入,再转list



  212. def bar_industry_dif() -> Bar:

  213. c = (

  214. Bar(

  215. # init_opts=opts.InitOpts( #初始化配置项

  216. # theme=ThemeType.INFOGRAPHIC #设置主题

  217. # )

  218. )

  219. .add_xaxis(xdata) #设置X轴数据

  220. .add_yaxis("第一产业(亿)", primaryindustryvalue, stack="stack1", gap="0", category_gap="40%") #设置Y周数据 gap不同系列柱间距离

  221. .add_yaxis("第二产业(亿)", secondindustryvalue, stack="stack1", gap="0", category_gap="40%") #设置Y周数据 gap不同系列柱间距离

  222. .add_yaxis("第三产业(亿)", thirdindustryvalue, stack="stack1", gap="0", category_gap="40%")

  223. # .set_series_opts(label_opts=opts.LabelOpts(is_show=False))

  224. .set_global_opts( #全局配置项

  225. title_opts=opts.TitleOpts( #标题配置项

  226. title="全国2010年第一二三产业数据", #报表标题

  227. subtitle="各行政区域对比", #报表副标题

  228. pos_left="center", #标题位置

  229. title_textstyle_opts=opts.TextStyleOpts(color="green"), #标题字体颜色

  230. subtitle_textstyle_opts=opts.TextStyleOpts(color="blue") #副标题字体颜色

  231. ),

  232. legend_opts = opts.LegendOpts(is_show=True,pos_left="right",pos_top="7%",orient='vertical')

  233. )

  234. )

  235. return c

  236. c=bar_industry_dif()

  237. c.render('bar_industry_dif.html')


  238. # 柱状图 六大行政区划出生率死亡率总体情况对比

  239. sql='''

  240. select b.areaname,

  241. avg(a.birthrate) as birthrate,

  242. avg(a.deadrate) as deadrate

  243. from chinaeconomy a,proviceinfo b

  244. where a.provincename=b.provincename

  245. and a.reportyear=2010

  246. group by b.areaname

  247. order by 2

  248. '''

  249. df = pd.read_sql(sql,conn) #read_sql读取数据

  250. xdata=df['AREANAME'].tolist()

  251. birthrate=df['BIRTHRATE'].round(2).tolist() #四舍五入,再转list

  252. deadrate=df['DEADRATE'].round(2).tolist() #四舍五入,再转list


  253. def bar_birth_dead() -> Bar:

  254. c = (

  255. Bar(

  256. # init_opts=opts.InitOpts( #初始化配置项

  257. # theme=ThemeType.INFOGRAPHIC #设置主题

  258. # )

  259. )

  260. .add_xaxis(xdata) #设置X轴数据

  261. .add_yaxis("出生率", birthrate, stack="stack1", gap="0", category_gap="40%") #设置Y周数据 gap不同系列柱间距离

  262. .add_yaxis("死亡率", deadrate, stack="stack1", gap="0", category_gap="40%") #设置Y周数据 gap不同系列柱间距离

  263. .reversal_axis() #旋转XY轴

  264. # .set_series_opts(label_opts=opts.LabelOpts(is_show=False))

  265. .set_global_opts( #全局配置项

  266. title_opts=opts.TitleOpts( #标题配置项

  267. title="全国2010年出生率死亡率数据", #报表标题

  268. subtitle="各行政区域对比", #报表副标题

  269. pos_left="center", #标题位置

  270. title_textstyle_opts=opts.TextStyleOpts(color="green"), #标题字体颜色

  271. subtitle_textstyle_opts=opts.TextStyleOpts(color="blue") #副标题字体颜色

  272. ),

  273. legend_opts = opts.LegendOpts(is_show=True,pos_left="right",pos_top="7%",orient='vertical')

  274. )

  275. )

  276. return c

  277. c=bar_birth_dead()

  278. c.render('bar_birth_dead.html')



  279. # 柱状图 六大行政区划出生率死亡率总体情况对比

  280. sql='''

  281. select b.echartprovincename,

  282. a.birthrate as birthrate,

  283. a.deadrate as deadrate

  284. from chinaeconomy a,proviceinfo b

  285. where a.provincename=b.provincename

  286. and a.reportyear=2010

  287. order by 2

  288. '''

  289. df = pd.read_sql(sql,conn) #read_sql读取数据

  290. xdata=df['ECHARTPROVINCENAME'].tolist()

  291. birthrate=df['BIRTHRATE'].round(2).tolist() #四舍五入,再转list

  292. deadrate=df['DEADRATE'].round(2).tolist() #四舍五入,再转list


  293. def bar_province_birth_dead() -> Bar:

  294. c = (

  295. Bar(

  296. init_opts=opts.InitOpts( #初始化配置项

  297. theme=ThemeType.LIGHT, #设置主题

  298. width="1000px",

  299. height="600px"

  300. )

  301. )

  302. .add_xaxis(xdata) #设置X轴数据

  303. .add_yaxis("出生率", birthrate, stack="stack1", gap="0", category_gap="40%") #设置Y周数据 gap不同系列柱间距离

  304. .add_yaxis("死亡率", deadrate, stack="stack1", gap="0", category_gap="40%") #设置Y周数据 gap不同系列柱间距离

  305. .reversal_axis() #旋转XY轴

  306. .set_global_opts( #全局配置项

  307. title_opts=opts.TitleOpts( #标题配置项

  308. title="全国2010年出生率死亡率数据", #报表标题

  309. subtitle="各省市自治区对比", #报表副标题

  310. pos_left="center", #标题位置

  311. title_textstyle_opts=opts.TextStyleOpts(color="green",font_size=30), #标题字体颜色

  312. subtitle_textstyle_opts=opts.TextStyleOpts(color="blue",font_size=20) #副标题字体颜色

  313. ),

  314. yaxis_opts=opts.AxisOpts(name="各省市自治区", # 标轴配置项

  315. axislabel_opts=opts.LabelOpts(font_size=8, interval=,formatter="{value}") #设置x轴标签全部显示

  316. ),

  317. legend_opts = opts.LegendOpts(is_show=True,pos_left="right",pos_top="7%",orient='vertical')

  318. )

  319. .set_series_opts( #Bar-MarkPoint(指定类型)

  320. label_opts=opts.LabelOpts(is_show=False),

  321. markline_opts=opts.MarkLineOpts(

  322. data=[

  323. opts.MarkLineItem(type_="max", name="最大值"),

  324. opts.MarkLineItem(type_="min", name="最小值"),

  325. opts.MarkLineItem(type_="average", name="平均值"),

  326. ]

  327. )

  328. # markpoint_opts=opts.MarkPointOpts(

  329. # data=[

  330. # opts.MarkPointItem(type_="max", name="最大值"),

  331. # opts.MarkPointItem(type_="min", name="最小值"),

  332. # opts.MarkPointItem(type_="average", name="平均值"),

  333. # ]

  334. # )

  335. )

  336. )

  337. return c


  338. c = bar_province_birth_dead()

  339. c.render('bar_province_birth_dead.html')



  340. # 柱状图 六大行政区划出生率死亡率总体情况对比,横坐标滑动

  341. sql='''

  342. select b.echartprovincename,

  343. a.birthrate as birthrate,

  344. a.deadrate as deadrate

  345. from chinaeconomy a,proviceinfo b

  346. where a.provincename=b.provincename

  347. and a.reportyear=2010

  348. order by 2

  349. '''

  350. df = pd.read_sql(sql,conn) #read_sql读取数据

  351. xdata=df['ECHARTPROVINCENAME'].tolist()

  352. birthrate=df['BIRTHRATE'].round(2).tolist() #四舍五入,再转list

  353. deadrate=df['DEADRATE'].round(2).tolist() #四舍五入,再转list



  354. def bar_province_birth_dead_slide() -> Bar:

  355. c = (

  356. Bar(

  357. init_opts=opts.InitOpts( #初始化配置项

  358. theme=ThemeType.LIGHT, #设置主题

  359. width="1000px",

  360. height="600px"

  361. )

  362. )

  363. .add_xaxis(xdata) #设置X轴数据

  364. .add_yaxis("出生率", birthrate, stack="stack1", gap="0", category_gap="40%") #设置Y周数据 gap不同系列柱间距离

  365. .add_yaxis("死亡率", deadrate, stack="stack1", gap="0", category_gap="40%") #设置Y周数据 gap不同系列柱间距离

  366. .set_global_opts( #全局配置项

  367. title_opts=opts.TitleOpts( #标题配置项

  368. title="全国2010年出生率死亡率数据", #报表标题

  369. subtitle="各省市自治区对比", #报表副标题

  370. pos_left="center", #标题位置

  371. title_textstyle_opts=opts.TextStyleOpts(color="green",font_size=30), #标题字体颜色

  372. subtitle_textstyle_opts=opts.TextStyleOpts(color="blue",font_size=20) #副标题字体颜色

  373. ),

  374. #datazoom_opts=opts.DataZoomOpts(), #滑动窗口

  375. datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")], #slider+inside滑动窗口

  376. xaxis_opts=opts.AxisOpts(name="各省市自治区", # 标轴配置项

  377. axislabel_opts=opts.LabelOpts(font_size=8, interval=,formatter="{value}",rotate=45) #设置x轴标签全部显示

  378. ),

  379. legend_opts = opts.LegendOpts(is_show=True,pos_left="right",pos_top="7%",orient='vertical')

  380. )

  381. .set_series_opts( #Bar-MarkPoint(指定类型)

  382. label_opts=opts.LabelOpts(is_show=False),

  383. markline_opts=opts.MarkLineOpts(

  384. data=[

  385. opts.MarkLineItem(type_="max", name="最大值"),

  386. opts.MarkLineItem(type_="min", name="最小值"),

  387. opts.MarkLineItem(type_="average", name="平均值"),

  388. ]

  389. )

  390. # markpoint_opts=opts.MarkPointOpts(

  391. # data=[

  392. # opts.MarkPointItem(type_="max", name="最大值"),

  393. # opts.MarkPointItem(type_="min", name="最小值"),

  394. # opts.MarkPointItem(type_="average", name="平均值"),

  395. # ]

  396. # )

  397. )

  398. )

  399. return c


  400. c = bar_province_birth_dead_slide()

  401. c.render('bar_province_birth_dead_slide.html')



  402. # 柱状图 六大行政区划出生率死亡率总体情况对比,横坐标滑动

  403. sql='''

  404. select b.echartprovincename,

  405. a.population as population

  406. from chinaeconomy a,proviceinfo b

  407. where a.provincename=b.provincename

  408. and a.reportyear=2010

  409. order by 2

  410. '''

  411. df = pd.read_sql(sql,conn) #read_sql读取数据

  412. xdata=df['ECHARTPROVINCENAME'].tolist()

  413. population=df['POPULATION'].round(2).tolist() #四舍五入,再转list


  414. def bar_population_histogram() -> Bar:

  415. c = (

  416. Bar()

  417. .add_xaxis(xdata)

  418. .add_yaxis("各省市自治区直辖市", population, category_gap=) #直方图就是category_gap=

  419. .set_global_opts(title_opts=opts.TitleOpts(title="各省市自治区直辖市直方图"))

  420. )

  421. return c

  422. c = bar_population_histogram()

  423. c.render('bar_population_histogram.html')



  424. # 涟漪特效散点图 各省市自治区人口

  425. sql='''

  426. select b.echartprovincename,b.areaname,

  427. a.population as population

  428. from chinaeconomy a,proviceinfo b

  429. where a.provincename=b.provincename

  430. and a.reportyear=2010

  431. order by b.areaname

  432. '''

  433. df = pd.read_sql(sql,conn) #read_sql读取数据

  434. xdata=df['ECHARTPROVINCENAME'].tolist()

  435. population=df['POPULATION'].round(2).tolist() #四舍五入,再转list

  436. maxdata=max(population)

  437. #huabei=df[df['AREANAME']=='西北地区']['POPULATION'].round(2).tolist()

  438. def population_effectscatter_base() -> EffectScatter:

  439. c = (

  440. EffectScatter()

  441. .add_xaxis(xdata)

  442. .add_yaxis("人口", population)

  443. .set_global_opts(title_opts=opts.TitleOpts(title="各省市自治区直辖市人口分布图"),

  444. xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True),

  445. axislabel_opts=opts.LabelOpts(font_size=10, interval=,

  446. formatter="{value}", rotate=45)

  447. ),

  448. yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)),

  449. visualmap_opts=opts.VisualMapOpts(max_=maxdata),

  450. )

  451. )

  452. return c

  453. c = population_effectscatter_base()

  454. c.render('population_effectscatter_base.html')



  455. sql='''

  456. select a.reportyear,b.echartprovincename,a.population

  457. from chinaeconomy a,proviceinfo b

  458. where a.provincename=b.provincename

  459. '''

  460. df = pd.read_sql(sql,conn) #read_sql读取数据


  461. res=pd.pivot_table(df,index=["ECHARTPROVINCENAME"],values=["POPULATION"],

  462. columns=["REPORTYEAR"],aggfunc=[np.sum])


  463. xdata= [colname[2] for colname in res.columns.tolist()] #时间

  464. ydata= res.index.tolist() #省市自治区直辖市

  465. newdata=[]

  466. row,col=res.values.shape

  467. maxdata=np.max(res.values)

  468. mindata=np.min(res.values)

  469. for i in range(row):

  470. for j in range(col):

  471. newdata.append([j,i,res.values[i,j]])


  472. def heatmap_base() -> HeatMap:

  473. c = (

  474. HeatMap()

  475. .add_xaxis(xdata)

  476. .add_yaxis("series0", ydata, newdata,) #label_opts=opts.LabelOpts(is_show=True, position="inside"),)

  477. .set_global_opts(

  478. title_opts=opts.TitleOpts(title="HeatMap-基本示例"),

  479. visualmap_opts=opts.VisualMapOpts(range_color=["#E5E8F3", "#6685CA", "#29487E"],max_=maxdata,min_=mindata),

  480. yaxis_opts=opts.AxisOpts(name="", # 标轴配置项

  481. axislabel_opts=opts.LabelOpts(font_size=8, interval=, formatter="{value}")

  482. # 设置x轴标签全部显示

  483. ),

  484. )

  485. )

  486. return c

  487. c = heatmap_base()

  488. c.render('heatmap_base.html')


  489. sql='''

  490. select b.echartprovincename,

  491. a.primaryindustryvalue,

  492. a.secondindustryvalue,

  493. a.thirdindustryvalue

  494. from chinaeconomy a,proviceinfo b

  495. where a.provincename=b.provincename

  496. and a.reportyear=2010

  497. order by b.areaname

  498. '''

  499. df = pd.read_sql(sql,conn) #read_sql读取数据

  500. xdata=df['ECHARTPROVINCENAME'].tolist()

  501. primaryindustryvalue=df['PRIMARYINDUSTRYVALUE'].round(2).tolist() #四舍五入,再转list

  502. secondindustryvalue=df['SECONDINDUSTRYVALUE'].round(2).tolist() #四舍五入,再转list

  503. thirdindustryvalue=df['THIRDINDUSTRYVALUE'].round(2).tolist() #四舍五入,再转list


  504. def line_base() -> Line:

  505. c = (

  506. Line()

  507. .add_xaxis(xdata)

  508. .add_yaxis("第一产业", primaryindustryvalue)

  509. .add_yaxis("第二产业", secondindustryvalue)

  510. .add_yaxis("第三产业", thirdindustryvalue)

  511. .set_global_opts(title_opts=opts.TitleOpts(title="全国各省第一二三产业增加值"))

  512. )

  513. return c

  514. c=line_base()

  515. c.render('line_base.html')


  516. def line_smooth() -> Line:

  517. c = (

  518. Line()

  519. .add_xaxis(xdata)

  520. .add_yaxis("第一产业", primaryindustryvalue, is_smooth=True)

  521. .add_yaxis("第二产业", secondindustryvalue, is_smooth=True)

  522. .add_yaxis("第三产业", thirdindustryvalue, is_smooth=True)

  523. .set_global_opts(title_opts=opts.TitleOpts(title="Line-smooth"))

  524. )

  525. return c

  526. c=line_smooth()

  527. c.render('line_smooth.html')


  528. sql='''

  529. select b.areaname,a.reportyear,

  530. sum(a.primaryindustryvalue) as primaryindustryvalue,

  531. sum(a.secondindustryvalue) as secondindustryvalue,

  532. sum(a.thirdindustryvalue) as thirdindustryvalue,

  533. sum(a.primaryindustryvalue+a.secondindustryvalue+a.thirdindustryvalue) as industryvalue

  534. from chinaeconomy a,proviceinfo b

  535. where a.provincename=b.provincename

  536. group by b.areaname,a.reportyear

  537. order by 2,1

  538. '''


  539. df = pd.read_sql(sql,conn) #read_sql读取数据


  540. res=pd.pivot_table(df,index=["AREANAME"],values=["INDUSTRYVALUE"],

  541. columns=["REPORTYEAR"],aggfunc=[np.sum])

  542. # REPORTYEAR 195019511952... 200820092010

  543. #AREANAME ...

  544. #东北地区 0.00.083.9300... 28409.000031078.250037493.4800

  545. #中南地区 0.00.0130.7400... 86223.216794397.1766112745.3439

  546. #华东地区 0.00.0207.8800... 124093.5300136345.2800162031.3800

  547. xdata= [str(colname[2]) for colname in res.columns.tolist()] #时间

  548. #[1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1

  549. ydata= res.index.tolist() #省市自治区直辖市

  550. #['东北地区', '中南地区', '华东地区', '华北地区', '西北地区', '西南地区']

  551. db=res.loc[['东北地区']].values[].tolist()

  552. zn=res.loc[['中南地区']].values[].tolist()

  553. hd=res.loc[['华东地区']].values[].tolist()

  554. hb=res.loc[['华北地区']].values[].tolist()

  555. xb=res.loc[['西北地区']].values[].tolist()

  556. xn=res.loc[['西南地区']].values[].tolist()

  557. # print(res.loc[['中南地区']])

  558. # print(res.loc[['中南地区']].values)

  559. # print(res.loc[['中南地区']].values[].tolist())

  560. def line_industry_smooth() -> Line:

  561. c = (

  562. Line()

  563. .add_xaxis(xdata)

  564. .add_yaxis("东北地区", db, is_smooth=True)

  565. .add_yaxis("中南地区", zn, is_smooth=True)

  566. .add_yaxis("华东地区", hd, is_smooth=True)

  567. .add_yaxis("华北地区", hb, is_smooth=True)

  568. .add_yaxis("西北地区", xb, is_smooth=True)

  569. .add_yaxis("西南地区", xn, is_smooth=True)

  570. .set_global_opts(title_opts=opts.TitleOpts(title="Line-smooth"))

  571. )

  572. return c

  573. c=line_industry_smooth()

  574. c.render('line_industry_smooth.html')


  575. # 散点图 各省市自治区出生率,死亡率

  576. sql='''

  577. select b.echartprovincename,b.areaname,

  578. a.birthrate as birthrate,

  579. a.deadrate as deadrate

  580. from chinaeconomy a,proviceinfo b

  581. where a.provincename=b.provincename

  582. and a.reportyear=2010

  583. order by b.areaname

  584. '''

  585. df = pd.read_sql(sql,conn) #read_sql读取数据

  586. xdata=df['ECHARTPROVINCENAME'].tolist()

  587. birthrate=df['BIRTHRATE'].round(2).tolist() #四舍五入,再转list

  588. deadrate=df['DEADRATE'].round(2).tolist() #四舍五入,再转list

  589. maxdata=max(birthrate)


  590. def population_scatter() -> Scatter:

  591. c = (

  592. Scatter()

  593. .add_xaxis(xdata)

  594. .add_yaxis("人口出生率", birthrate)

  595. .add_yaxis("人口死亡率", deadrate)

  596. .set_global_opts(title_opts=opts.TitleOpts(title="各省市自治区直辖市人口出生率/死亡率情况"),

  597. xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True),

  598. axislabel_opts=opts.LabelOpts(font_size=10, interval=,

  599. formatter="{value}", rotate=45)

  600. ),

  601. yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)),

  602. visualmap_opts=opts.VisualMapOpts(type_="size",max_=maxdata,min_=10),

  603. )

  604. )

  605. return c

  606. c = population_scatter()

  607. c.render('population_scatter.html')



  608. sql='''

  609. select b.echartprovincename,b.areaname,

  610. a.population as population,

  611. a.birthrate as birthrate,

  612. a.deadrate as deadrate

  613. from chinaeconomy a,proviceinfo b

  614. where a.provincename=b.provincename

  615. and a.reportyear=2010

  616. order by b.areaname

  617. '''

  618. df = pd.read_sql(sql,conn) #read_sql读取数据

  619. xdata=df['ECHARTPROVINCENAME'].tolist()

  620. population=df['POPULATION'].round(2).tolist() #四舍五入,再转list

  621. birthrate=df['BIRTHRATE'].round(2).tolist() #四舍五入,再转list

  622. deadrate=df['DEADRATE'].round(2).tolist() #四舍五入,再转list

  623. maxdata=max(birthrate)


  624. def overlap_bar_line() -> Bar:

  625. bar = (

  626. Bar()

  627. .add_xaxis(xdata)

  628. .add_yaxis("出生率", birthrate, stack="stack1")

  629. .add_yaxis("死亡率", deadrate, stack="stack1")

  630. .extend_axis(

  631. yaxis=opts.AxisOpts(

  632. axislabel_opts=opts.LabelOpts(formatter="{value}")#, interval=5

  633. )

  634. )

  635. .set_series_opts(label_opts=opts.LabelOpts(is_show=False))

  636. .set_global_opts(

  637. title_opts=opts.TitleOpts(title="Overlap-bar+line(双 Y 轴)"),

  638. yaxis_opts=opts.AxisOpts(

  639. axislabel_opts=opts.LabelOpts(formatter="{value}%")

  640. ),

  641. )

  642. )

  643. line = Line().add_xaxis(xdata).add_yaxis("人口总量", population, yaxis_index=1)

  644. bar.overlap(line)

  645. return bar

  646. c = overlap_bar_line()

  647. c.render('overlap_bar_line.html')



长按二维码关注“追梦IT人”


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/6517/viewspace-3135369/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-12-07

  • 博文量
    445
  • 访问量
    1209376