You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
291 lines
10 KiB
291 lines
10 KiB
11 months ago
|
import happybase
|
||
|
from pyecharts.charts import Bar, Pie, Page
|
||
|
from pyecharts.commons.utils import JsCode
|
||
|
from pyecharts.globals import ThemeType
|
||
|
from pyspark.sql import functions as F
|
||
|
from pyspark.sql import SparkSession, Row
|
||
|
import os
|
||
|
|
||
|
from pyspark.sql.functions import when, count
|
||
|
from pyecharts import options as opts
|
||
|
|
||
|
# 指定python环境
|
||
|
os.environ['PYSPARK_PYTHON'] = 'D:\python\python3.11.4\python.exe'
|
||
|
os.environ['JAVA_HOME'] = "D:\jdk\jdk-17.0.8" # 记得把地址改成自己的
|
||
|
|
||
|
def cky_code02():
|
||
|
# 创建Spark会话
|
||
|
spark = SparkSession.builder.appName("HBaseDataLoading").master('local').getOrCreate()
|
||
|
|
||
|
# 连接到HBase
|
||
|
connection = happybase.Connection('192.168.23.128')
|
||
|
|
||
|
# 获取表
|
||
|
table = connection.table('bigdata')
|
||
|
|
||
|
# 定义列名
|
||
|
columns = ['info:企业注册地址', 'info:主要外资来源国别或地区代码', 'info:营业收入', 'info:净利润']
|
||
|
|
||
|
# 查询数据
|
||
|
data = []
|
||
|
for key, row in table.scan(columns=[col.encode('utf-8') for col in columns]):
|
||
|
row_data = {
|
||
|
'序号': key.decode(),
|
||
|
'企业注册地址': row['info:企业注册地址'.encode('utf-8')].decode(),
|
||
|
'主要外资来源国别或地区代码': row['info:主要外资来源国别或地区代码'.encode('utf-8')].decode(),
|
||
|
'营业收入': row['info:营业收入'.encode('utf-8')].decode(),
|
||
|
'净利润': row['info:净利润'.encode('utf-8')].decode()
|
||
|
}
|
||
|
data.append(row_data)
|
||
|
|
||
|
# 关闭连接
|
||
|
connection.close()
|
||
|
|
||
|
# 将数据转换为Spark DataFrame
|
||
|
df = spark.createDataFrame([Row(**{k: str(v) for k, v in i.items()}) for i in data])
|
||
|
|
||
|
|
||
|
# 广西的14个市级名称
|
||
|
cities = ['南宁市', '柳州市', '桂林市', '梧州市', '北海市', '防城港市', '钦州市', '贵港市', '玉林市', '百色市',
|
||
|
'贺州市', '河池市', '来宾市', '崇左市']
|
||
|
# 对每个市进行处理
|
||
|
for city in cities:
|
||
|
df = df.withColumn('企业注册地址',
|
||
|
when(df['企业注册地址'].contains(city[:-1]), city).otherwise(df['企业注册地址']))
|
||
|
|
||
|
# 广西的所有县级行政区划及其对应的市级行政区划
|
||
|
county_to_city = {
|
||
|
# 南宁市
|
||
|
'兴宁区': '南宁市',
|
||
|
'青秀区': '南宁市',
|
||
|
'江南区': '南宁市',
|
||
|
'西乡塘区': '南宁市',
|
||
|
'良庆区': '南宁市',
|
||
|
'邕宁区': '南宁市',
|
||
|
'武鸣区': '南宁市',
|
||
|
'隆安县': '南宁市',
|
||
|
'马山县': '南宁市',
|
||
|
'上林县': '南宁市',
|
||
|
'宾阳县': '南宁市',
|
||
|
'横县': '南宁市',
|
||
|
# 柳州市
|
||
|
'城中区': '柳州市',
|
||
|
'鱼峰区': '柳州市',
|
||
|
'柳南区': '柳州市',
|
||
|
'柳北区': '柳州市',
|
||
|
'柳江区': '柳州市',
|
||
|
'柳城县': '柳州市',
|
||
|
'鹿寨县': '柳州市',
|
||
|
'融安县': '柳州市',
|
||
|
'融水苗族自治县': '柳州市',
|
||
|
'三江侗族自治县': '柳州市',
|
||
|
# 桂林市
|
||
|
'秀峰区': '桂林市',
|
||
|
'叠彩区': '桂林市',
|
||
|
'象山区': '桂林市',
|
||
|
'七星区': '桂林市',
|
||
|
'雁山区': '桂林市',
|
||
|
'临桂区': '桂林市',
|
||
|
'阳朔县': '桂林市',
|
||
|
'灵川县': '桂林市',
|
||
|
'全州县': '桂林市',
|
||
|
'兴安县': '桂林市',
|
||
|
'永福县': '桂林市',
|
||
|
'灌阳县': '桂林市',
|
||
|
'龙胜各族自治县': '桂林市',
|
||
|
'资源县': '桂林市',
|
||
|
'平乐县': '桂林市',
|
||
|
'荔浦市': '桂林市',
|
||
|
'恭城瑶族自治县': '桂林市',
|
||
|
# 梧州市
|
||
|
'万秀区': '梧州市',
|
||
|
'长洲区': '梧州市',
|
||
|
'龙圩区': '梧州市',
|
||
|
'苍梧县': '梧州市',
|
||
|
'藤县': '梧州市',
|
||
|
'蒙山县': '梧州市',
|
||
|
'岑溪市': '梧州市',
|
||
|
# 北海市
|
||
|
'海城区': '北海市',
|
||
|
'银海区': '北海市',
|
||
|
'铁山港区': '北海市',
|
||
|
'合浦县': '北海市',
|
||
|
# 防城港市
|
||
|
'港口区': '防城港市',
|
||
|
'防城区': '防城港市',
|
||
|
'上思县': '防城港市',
|
||
|
'东兴市': '防城港市',
|
||
|
# 钦州市
|
||
|
'钦南区': '钦州市',
|
||
|
'钦北区': '钦州市',
|
||
|
'灵山县': '钦州市',
|
||
|
'浦北县': '钦州市',
|
||
|
# 贵港市
|
||
|
'港北区': '贵港市',
|
||
|
'港南区': '贵港市',
|
||
|
'覃塘区': '贵港市',
|
||
|
'平南县': '贵港市',
|
||
|
'桂平市': '贵港市',
|
||
|
# 玉林市
|
||
|
'玉州区': '玉林市',
|
||
|
'福绵区': '玉林市',
|
||
|
'容县': '玉林市',
|
||
|
'陆川县': '玉林市',
|
||
|
'博白县': '玉林市',
|
||
|
'兴业县': '玉林市',
|
||
|
'北流市': '玉林市',
|
||
|
# 百色市
|
||
|
'右江区': '百色市',
|
||
|
'田阳县': '百色市',
|
||
|
'田东县': '百色市',
|
||
|
'平果县': '百色市',
|
||
|
'德保县': '百色市',
|
||
|
'那坡县': '百色市',
|
||
|
'凌云县': '百色市',
|
||
|
'乐业县': '百色市',
|
||
|
'田林县': '百色市',
|
||
|
'西林县': '百色市',
|
||
|
'隆林各族自治县': '百色市',
|
||
|
'靖西市': '百色市',
|
||
|
# 贺州市
|
||
|
'八步区': '贺州市',
|
||
|
'平桂区': '贺州市',
|
||
|
'昭平县': '贺州市',
|
||
|
'钟山县': '贺州市',
|
||
|
'富川瑶族自治县': '贺州市',
|
||
|
# 河池市
|
||
|
'金城江区': '河池市',
|
||
|
'南丹县': '河池市',
|
||
|
'天峨县': '河池市',
|
||
|
'凤山县': '河池市',
|
||
|
'东兰县': '河池市',
|
||
|
'罗城仫佬族自治县': '河池市',
|
||
|
'环江毛南族自治县': '河池市',
|
||
|
'巴马瑶族自治县': '河池市',
|
||
|
'都安瑶族自治县': '河池市',
|
||
|
'大化瑶族自治县': '河池市',
|
||
|
'宜州市': '河池市',
|
||
|
# 来宾市
|
||
|
'兴宾区': '来宾市',
|
||
|
'忻城县': '来宾市',
|
||
|
'象州县': '来宾市',
|
||
|
'武宣县': '来宾市',
|
||
|
'金秀瑶族自治县': '来宾市',
|
||
|
'合山市': '来宾市',
|
||
|
# 崇左市
|
||
|
'江州区': '崇左市',
|
||
|
'扶绥县': '崇左市',
|
||
|
'宁明县': '崇左市',
|
||
|
'龙州县': '崇左市',
|
||
|
'大新县': '崇左市',
|
||
|
'天等县': '崇左市',
|
||
|
'凭祥市': '崇左市',
|
||
|
# 特殊值
|
||
|
'高新技术产业开发区': '南宁市',
|
||
|
'南宁经济技术开发区': '南宁市',
|
||
|
'东盟经济技术开发区': '南宁市',
|
||
|
'高新区': '南宁市',
|
||
|
'武鸣县': '南宁市',
|
||
|
'隆安': '南宁市',
|
||
|
'融水县': '柳州市',
|
||
|
'融安': '柳州市',
|
||
|
'柳江县': '柳州市',
|
||
|
'柳邕': '柳州市',
|
||
|
'平果': '百色市',
|
||
|
'田阳': '百色市',
|
||
|
'灵川': '桂林市',
|
||
|
'临桂': '桂林市',
|
||
|
'龙胜县': '桂林市',
|
||
|
'荔浦县': '桂林市',
|
||
|
'恭城县': '桂林市',
|
||
|
'巴马县': '河池市',
|
||
|
'罗城': '河池市',
|
||
|
'合浦': '北海市',
|
||
|
# 特殊值2
|
||
|
'科园西十路24号': '南宁市',
|
||
|
'科园东四路5号': '南宁市',
|
||
|
'秀安路13-11号': '南宁市',
|
||
|
'科园大道31号财智时代12楼': '南宁市',
|
||
|
'新兴工业园创业路6号': '柳州市',
|
||
|
'洛维工业集中区': '柳州市',
|
||
|
'中马产业园区': '钦州市',
|
||
|
'长安工业集中区': '桂林市',
|
||
|
'西江四路扶典上冲29号': '梧州市',
|
||
|
'田东石化工业': '百色市',
|
||
|
'柳太路': '柳州市',
|
||
|
'黎塘工业集中区东部产业园': '南宁市',
|
||
|
'广西壮族自治区工商行政管理局': '南宁市',
|
||
|
'三江县职业中学': '柳州市',
|
||
|
'心圩街道办事处高新工业园社区居委会': '南宁市',
|
||
|
'司能石油化工有限公司': '柳州市',
|
||
|
# 数字代号
|
||
|
'530003': '南宁市'
|
||
|
|
||
|
}
|
||
|
# 对每个县级行政区划进行处理
|
||
|
for county, city in county_to_city.items():
|
||
|
df = df.withColumn('企业注册地址',
|
||
|
when(df['企业注册地址'].contains(county), city).otherwise(df['企业注册地址']))
|
||
|
|
||
|
filtered_df = df.filter(df["主要外资来源国别或地区代码"] > 0)
|
||
|
|
||
|
grouped_df = filtered_df.groupBy("企业注册地址")
|
||
|
result_df = grouped_df.agg(
|
||
|
F.sum("营业收入").alias("总营业收入"),
|
||
|
F.sum("净利润").alias("总净利润"),
|
||
|
F.count("*").alias("外企数量")
|
||
|
)
|
||
|
|
||
|
pandas_df = result_df.toPandas()
|
||
|
|
||
|
# 假设您的 Pandas DataFrame 中包含 X 轴和 Y 轴的数据
|
||
|
x_axis_data = list(pandas_df['企业注册地址']) # 替换 'X轴标签' 为实际列名
|
||
|
y_axis_data2 = list(pandas_df['总营业收入'])
|
||
|
y_axis_data3 = list(pandas_df['总净利润'])
|
||
|
|
||
|
# 创建柱状图
|
||
|
cky_code02_bar1 = (
|
||
|
Bar()
|
||
|
.add_xaxis(x_axis_data)
|
||
|
.add_yaxis(
|
||
|
'总营业收入(千元)', y_axis_data2,
|
||
|
label_opts=opts.LabelOpts(is_show=False), # 隐藏柱状图上的数字
|
||
|
tooltip_opts=opts.TooltipOpts(formatter="{b}: {c}")) # 鼠标移动到柱形上显示数值)
|
||
|
.set_global_opts(title_opts=opts.TitleOpts(title='广西外企收入图'))
|
||
|
)
|
||
|
cky_code02_bar2 = (
|
||
|
Bar()
|
||
|
.add_xaxis(x_axis_data)
|
||
|
.add_yaxis(
|
||
|
'总净利润(千元)', y_axis_data3,
|
||
|
label_opts=opts.LabelOpts(is_show=False), # 隐藏柱状图上的数字
|
||
|
tooltip_opts=opts.TooltipOpts(formatter="{b}: {c}")) # 鼠标移动到柱形上显示数值)
|
||
|
.set_global_opts(title_opts=opts.TitleOpts(title='广西外企收入图'))
|
||
|
)
|
||
|
data = list(zip(pandas_df['企业注册地址'], pandas_df['外企数量']))
|
||
|
cky_code02_pie = (
|
||
|
Pie(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
|
||
|
.add(
|
||
|
"",
|
||
|
data,
|
||
|
radius=["15%", "40%"], # 设置扇形图的内外半径
|
||
|
center=["50%", "850px"],
|
||
|
label_opts=opts.LabelOpts(
|
||
|
position="outside", # 标签显示在扇形区域的外部
|
||
|
formatter=JsCode("function(params){return params.name + ': ' + params.value;}"), # 标签格式化
|
||
|
),
|
||
|
)
|
||
|
.set_global_opts(
|
||
|
title_opts=opts.TitleOpts(title="外企数量分布"),
|
||
|
legend_opts=opts.LegendOpts(
|
||
|
orient="vertical", # 图例垂直排列
|
||
|
pos_left="80%", # 图例位置
|
||
|
),
|
||
|
)
|
||
|
)
|
||
|
return cky_code02_bar1, cky_code02_bar2, cky_code02_pie
|
||
|
|
||
|
|
||
|
|
||
|
|