首先引入库文件,并进行数据读取

import pandas as pd
import numpy as np
data_Base=pd.read_csv("D:\\Exam_Test\\unicomapp_r0_201904_jinan.csv")
#data_Ite=pd.read_csv("D:\\Exam_Test\\lte_cm_jinan.csv",encoding="gbk")
data_Base.shape

显示行与列:

print("行数{0},列数{1}".format(str(data_Base.shape[0]),str(data_Base.shape[1])))

查看字段空值数量:

data_Base.isnull().sum()

删除空值行:

data_Base.dropna(subset=["L-CELLID"],inplace=True)

每个 value 数值的采样点个数:

Df_SINR=data_Base["L-SINR"].value_counts().sort_index().reset_index()
Df_SINR

柱状图:

#SINR 样本分布柱状图
from example.commons import Faker
from pyecharts import options as opts
from pyecharts.charts import Bar
def bar_base() -> Bar:
c = (
Bar()
.add_xaxis(list(Df_SINR["index"]))
.add_yaxis("SINR样本", list(Df_SINR["L-SINR"]),label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="SINR 样本分布",pos_left="center"),
legend_opts=opts.LegendOpts(is_show=True,pos_left="right"), )
)
return c
bar_base().render("L_SINR 分布.html")

获取不是某些值得列:

data_Base=data_Base[~data_Base["L-SINR"].isin([""])]
data_Base.shape

设置最大显示列:

pd.set_option("display.max_columns",3000)

设置索引列:

data_Base=data_Base.set_index("RECTIME")

重采样:

data_Apr=data_Base.resample("D").mean().reset_index()
data_Apr

根据指定列生成新的DataFrame:

data_Apr_new=pd.DataFrame(data_Apr,columns=["RECTIME","L-RSRP","L-SINR"])

根据时间获取哪天(Day):

data_Apr_new["RECTIME"].dt.day

双Y轴,趋势图:

#使用 pyecharts 或其他可视化工具,将每天平均 RSRP 和平均 SINR 趋势作图
import pyecharts.options as opts
from example.commons import Faker
from pyecharts.charts import Line def line_base() -> Line:
c = (
Line()
.add_xaxis(list(data_Apr_new["RECTIME"].dt.day))
.add_yaxis("SINR", data_Apr_new["L-SINR"].round(2),is_smooth=True,is_symbol_show=False)
.extend_axis(
yaxis=opts.AxisOpts(
name="RSRP",
min_=data_Apr_new["L-RSRP"].min().round(2),
max_=data_Apr_new["L-RSRP"].max().round(2), )
)
.set_global_opts(title_opts=opts.TitleOpts(title="4 月份济南 RSRP 和 SINR 趋势图",pos_left="center"),
legend_opts=opts.LegendOpts(pos_left="right"),
datazoom_opts=opts.DataZoomOpts(is_show=True),
yaxis_opts=opts.AxisOpts(name="SINR",min_=round(data_Apr_new["L-SINR"].values.min(),2),max_=round(data_Apr_new["L-SINR"].values.max(),2)), )
)
d = (
Line()
.add_xaxis(list(data_Apr_new["RECTIME"].dt.day))
.add_yaxis("RSRP", data_Apr_new["L-RSRP"].round(2),yaxis_index=1,is_smooth=True,is_symbol_show=False) )
return c.overlap(d)
line_base().render_notebook()

条件判断:

condition1=df_cm_new["样本量"]>100
condition2=df_cm_new["RSRP>=-110 采样点占比"]>0.8
condition3=df_cm_new["SINR>0 采样点占比"]<0.7
df_cm_new=df_cm_new[condition1&condition2&condition3]
df_cm_new.head()

发送邮件:

#发送邮件
import smtplib
from email.mime.text import MIMEText #MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.application import MIMEApplication
# 第三方 SMTP 服务
mail_host="smtp.qq.com" #设置服务器
mail_user="597945025@qq.com" #用户名
mail_pass="cwtytropotbubgai" #口令
sender = '597945025@qq.com'
receivers = ['625645840@qq.com'] # 接收邮件,设置为接收方的邮箱
#创建一个带附件的实例
message = MIMEMultipart()
message['From'] = Header(sender, 'utf-8')
message['To'] = Header(str(receivers), 'utf-8')
subject = 'mail test'
message['Subject'] = Header(subject, 'utf-8') #邮件正文内容
message.attach(MIMEText('这是邮箱测试,请查收', 'plain', 'utf-8'))
for city in City2:
# f = 'D:\\data.csv'
xlsxpart = MIMEApplication(open(city+".xls", 'rb').read())
xlsxpart.add_header('Content-Disposition', 'attachment', filename=('gbk', '', (city+".xls")))
message.attach(xlsxpart)
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号
smtpObj.login(mail_user,mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
print ("邮件发送成功")
except smtplib.SMTPException:
print ("Error: 无法发送邮件")

地图:

from pyecharts.charts import Map
from pyecharts.charts import Page
from pyecharts import options as opts
city =df_last["City2"]
val_min_rsrp,val_max_rsrp = df_last["RSRP>=-110 采样点占比"].min().round(2),df_last["RSRP>=-110 采样点占比"].max().round(2)
val_min_sinr,val_max_sinr =df_last["SINR>0 采样点占比"].min().round(2),df_last["SINR>0 采样点占比"].max().round(2)
visual_color = ['#df2f48','#dfa59b','#1c39ca','#80d327']
def map_left() -> Map:
c = (
Map()
.add("", [list(z) for z in zip(list(city), list(df_last["RSRP>=-110 采样点占比"]))], "济南")
.set_global_opts(
title_opts=opts.TitleOpts(title="济南各区县4G网络良好覆盖(RSRP>=-110)比例分布图",pos_left="center"),
visualmap_opts=opts.VisualMapOpts(min_=val_min_rsrp,max_=val_max_rsrp,range_color=visual_color),
tooltip_opts=opts.TooltipOpts(formatter="{b}:{c} %")
)
)
return c
def map_right() -> Map:
c = (
Map()
.add("", [list(z) for z in zip(list(city), list(df_last["SINR>0 采样点占比"]))], "济南")
.set_global_opts(
title_opts=opts.TitleOpts(title="济南各区县4G网络良好质量(SINR>0)比例分布图",pos_left="center"),
visualmap_opts=opts.VisualMapOpts(min_=val_min_sinr,max_=val_max_sinr),
tooltip_opts=opts.TooltipOpts(formatter="{b}:{c} %")
)
)
return c page = Page(interval=0)
page.add(map_left(), map_right())
page.render_notebook()

对指定列进行处理(正则)

具体过程:首先将其转化成str,然后进行正则表达式匹配

data_Base['USER-ID'] = data_Base['USER-ID'].astype(np.str)
import re
pattern = re.compile(r'^[-+]?[-0-9]\d*\.\d*|[-+]?\.?[0-9]\d*$')
data_Base["USER-ID"]=data_Base["USER-ID"].apply(lambda x:x if pattern.match(x) else np.nan)

zip转化指定格式:

将三列(名称,经度,纬度)  

# # a=[list (z) for z in zip(grid_no["longitude"],grid_no["latitude"])]
# list( zip(grid_no["longitude"],grid_no["latitude"]) )
# list( grid_no["grid_no"])
#zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
base = { inx: list(item) for inx, item in zip( list( grid_no['grid_no'] ), list( zip(grid_no['longitude'], grid_no['latitude']) ) ) }

调用百度地图BMAP

with open('./data.json', 'w') as outfile:
json.dump(base, outfile)
from pyecharts.charts import BMap
import json
BAIDU_AK = "GbQ806nWqGFMjuiGjTm6jPgcVGWICGA1"
def bmap_base() -> BMap:
c = (
BMap(init_opts = opts.InitOpts(height='615px',width='1350px'))
.add_schema(
baidu_ak=BAIDU_AK,
center=[117.064366, 36.646401],
zoom=15
)
.add_coordinate_json(json_file='./data.json')
.add(
"",
data_pair =[list(z) for z in zip(list(data["grid_no"]),list(data["覆盖好质量差的质差样本占比"]))],
label_opts=opts.LabelOpts(is_show=False),
symbol_size=6,
type_ = 'effectScatter'
)
.add_control_panel(navigation_control_opts=opts.BMapNavigationControlOpts(),
scale_control_opts=opts.BMapScaleControlOpts(),
overview_map_opts=opts.BMapOverviewMapControlOpts(is_open=True,offset_width=0,offset_height=0)) .set_global_opts(title_opts=opts.TitleOpts(title="济南覆盖好质量差SINR质差栅格分布图",pos_left='center'))
.set_series_opts(effect_opts=opts.EffectOpts(symbol='circle',scale=5,brush_type = "stroke")) )
return c
bmap = bmap_base() bmap.render("济南质差栅格分布图.html")
bmap.render_notebook()

堆叠柱状图

bar=Bar(init_opts = opts.InitOpts(height='350px'))
bar.add_xaxis(list(prb_label_city_count["City1"].unique()))
for label in prb_label_city_count["prb_label"].unique():
p = prb_label_city_count[prb_label_city_count["prb_label"]==label]
bar.add_yaxis(label,list((p["prb_label_per"]*100).round(2)),stack="stack1") bar.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
bar.set_global_opts(
title_opts=opts.TitleOpts(title="各地市PRB利用率分区间段分布图",pos_left="center"),
legend_opts=opts.LegendOpts(pos_top="8%"),
yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value} %"),max_=100),
tooltip_opts=opts.TooltipOpts(formatter="{b}:{c} %")
)
bar.render_notebook()

根据省信息标注市区地图:

city = avg_traffic['City1'] + "市"
val_min,val_max = avg_traffic["Downlink traffic at the PDCP Layer"].min(),avg_traffic["Downlink traffic at the PDCP Layer"].max()
def map_shandong() -> Map:
c = (
Map()
.add("", [list(z) for z in zip(list(city), list(avg_traffic["Downlink traffic at the PDCP Layer"].round(2)))], "山东")
.set_global_opts(
title_opts=opts.TitleOpts(title="2月份各地市平均单小区忙时业务量",pos_left="center"),
visualmap_opts=opts.VisualMapOpts(min_=val_min,max_=val_max),
)
)
return c mymap = map_shandong()
mymap.render()
mymap.render_notebook()

根据特定关键字数据进行分段操作:

newtable["prb_label"] = pd.cut(newtable["Average downlink PRB usage"],[0,0.2,0.5,0.8,1],labels=["低负荷","中等负荷","高负荷","超高负荷"],include_lowest=True)

  

python pandas相关知识点(练习)的更多相关文章

  1. python学习相关知识点

    1.ndarray中,添加行或列:https://blog.csdn.net/lishuandao/article/details/52444288 2.numpy中ndarray数组拼接方法介绍:h ...

  2. python多线程相关知识点

    1. 信号量 信号机维护着一个计数器,指定可同时访问资源或者进入临界区的线程数.每次有一个线程获得信号机时,计数器-1.若计数器为0,其他线程就停止访问信号机 Semphore,是一种带计数的线程同步 ...

  3. Python开发一个csv比较功能相关知识点汇总及demo

    Python 2.7 csv.reader(csvfile, dialect='excel', **fmtparams)的一个坑:csvfile被csv.reader生成的iterator,在遍历每二 ...

  4. Caffe学习系列(二)Caffe代码结构梳理,及相关知识点归纳

    前言: 通过检索论文.书籍.博客,继续学习Caffe,千里之行始于足下,继续努力.将自己学到的一些东西记录下来,方便日后的整理. 正文: 1.代码结构梳理 在终端下运行如下命令,可以查看caffe代码 ...

  5. php正则相关知识点

    关于正则,其实简单就是搜索和匹配.php,java,python等都是支持正则的,php正则兼容perl.好多同学觉得正则比较难,比较抽象,其实正则是非常简单的,主要是一个熟悉和反复练习的结果,还有一 ...

  6. python遇到的知识点

    python遇到的知识点,记录一下.方便学习. 文件相关操作 查了资料,关于open()的mode参数: 'r':读 'w':写 'a':追加 'r+' == r+w(可读可写,文件若不存在就报错(I ...

  7. 基于tornado python pandas和bootstrap上传组件的mongodb数据添加工具

    总体思路:基于bootstrap4的前端页面上传组件,把excel文件上传至服务器,并利用python pandas读取里面的数据形成字典列表 通过pymongo 接口把数据插入或追加到mongodb ...

  8. django学习-2.urls.py和view.py的相关知识点

    1.URL函数简单解析 1.1.url() 函数可以接收四个参数,分别是两个必选参数:regex.view,和两个可选参数:kwargs.name. def url(regex, view, kwar ...

  9. UITableView相关知识点

    //*****UITableView相关知识点*****// 1 #import "ViewController.h" // step1 要实现UITableViewDataSou ...

随机推荐

  1. IOS开发学习笔记018- 一般控件的使用

    1.移动 2.动画 3.缩放 3.旋转 4.简化代码 5.总结 UIButton 的两种状态 normal highlighted  1.移动 OC语法规定:不允许直接修改某个对象中结构体属性的成员. ...

  2. phpmyadmin4.8.1后台getshell

    phpmyadmin4.8.1后台getshell 包含文件进行getshell 姿势: ① 建立数据库的,新建表,字段名为一句话木马. 会生成对应的数据库文件,相应文件的路径查看 select @@ ...

  3. Python-S9-Day127-Scrapy爬虫框架2

    01 今日内容概要 02 内容回顾:爬虫 03 内容回顾:并发和网络 04 Scrapy框架:起始请求定制 05 Scrapy框架:深度和优先级 06 Scrapy框架:内置代理 07 Scrapy框 ...

  4. PHP FILTER_VALIDATE_IP 过滤器

    FILTER_VALIDATE_IP 过滤器把值作为 IP 进行验证,用于验证 IP 是否合法,支持 IPV6 验证 例子 <?php $ip = "192.168.0.1" ...

  5. 菜鸟之路——机器学习之SVM分类器学习理解以及Python实现

    SVM分类器里面的东西好多呀,碾压前两个.怪不得称之为深度学习出现之前表现最好的算法. 今天学到的也应该只是冰山一角,懂了SVM的一些原理.还得继续深入学习理解呢. 一些关键词: 超平面(hyper ...

  6. HDU5857 Median 模拟

    Median HDU - 5857 There is a sorted sequence A of length n. Give you m queries, each one contains fo ...

  7. DNS(转载)

    最近帮朋友注册域名配置主机,碰到一些DNS上的一些概念,惭愧于有一些东西已经忘记是啥意思,于是决定重新学习一下DNS方面的基本概念. 常用概念: TTL: TTL为Time to live的缩写,网络 ...

  8. 多IP指定出口IP地址 如何指定云服务器源IP?

    如果一个主机绑定有多个IP地址,那么在被动响应和主动发起连接两种方式中,源IP地址的选择机制肯定是有所差异的.主机在接收外部数据包,并发送响应数据包时,响应源地址显然就是客户端请求的地址,这是非常容易 ...

  9. [BZOJ1280][POJ1149]Emmy卖猪pigs

    [BZOJ1280][POJ1149]Emmy卖猪pigs 试题描述 Emmy在一个养猪场工作.这个养猪场有 \(M\) 个锁着的猪圈,但Emmy并没有钥匙.顾客会到养猪场来买猪,一个接着一个.每一位 ...

  10. Hall 定理

    Hall 定理 是匈牙利算法的基础 大意是说,对于一个二分图 左边的集合记为X,右边的集合记为Y 存在完美匹配,(即匹配数目=min(|X|,|Y|))的充分必要条件是 对于任意一个X的子集,设大小为 ...