python编程经典例子:
1、画爱心表白、图形都是由一系列的点(X,Y)构成的曲线,由于X,Y满足一定的关系,所以就可以建立模型,建立表达式expression,当满足时,两个for循环(for X in range;for Y in range)就会每行每列的打印。
(1)上百个python经典案例分享扩展阅读:
Python的设计目标之一是让代码具备高度的可阅读性。它设计时尽量使用其它语言经常使用的标点符号和英文单字,让代码看起来整洁美观。它不像其他的静态语言如C、Pascal那样需要重复书写声明语句,也不像它们的语法那样经常有特殊情况和意外。
Python开发者有意让违反了缩进规则的程序不能通过编译,以此来强制程序员养成良好的编程习惯。并且Python语言利用缩进表示语句块的开始和退出,而非使用花括号或者某种关键字。增加缩进表示语句块的开始,而减少缩进则表示语句块的退出,缩进成为了语法的一部分。
⑵ 114 11 个案例掌握 Python 数据可视化--美国气候研究
自哥本哈根气候会议之后,全球日益关注气候变化和温室效应等问题,并于会后建立了全球碳交易市场,分阶段分批次减碳。本实验获取了美国 1979 - 2011 年间 NASA 等机构对美国各地日均最高气温、降雨量等数据,研究及可视化了气候相关指标的变化规律及相互关系。
输入并执行魔法命令 %matplotlib inline, 并去除图例边框。
数据集介绍:
本数据集特征包括美国 49 个州(State),各州所在的地区(Region),统计年(Year),统计月(Month),平均光照(Avg Daily Sunlight),日均最大空气温度(Avg Daily Max Air Temperature ),日均最大热指数(Avg Daily Max Heat Index ),日均降雨量(Avg Daily Precipitation ),日均地表温度(Avg Day Land Surface Temperature)。
各特征的年度区间为:
导入数据并查看前 5 行。
筛选美国各大区域的主要气候指数,通过 sns.distplot 接口绘制指数的分布图。
从运行结果可知:
光照能量密度(Sunlight),美国全境各地区分布趋势大致相同,均存在较为明显的两个峰(强光照和弱光照)。这是因为非赤道国家受地球公转影响,四季光照强度会呈现出一定的周期变化规律;
从地理区位能看出,东北部光照低谷明显低于其他三个区域;
日均最高空气温度(Max Air Temperature),美国全境各地区表现出较大差异,东北部和中西部趋势大致相同,气温平缓期较长,且包含一个显着的尖峰;西部地区平缓期最长,全年最高温均相对稳定;南部分布则相对更为集中;
日均地表温度(Land Surface Temperature),与最高空气温度类似,不同之处在于其低温区分布更少;
最大热指数(Max Heat Index),西部与中西部分布较为一致,偏温和性温度,东北部热指数偏高,南部偏低;
降雨量(Precipitation),西部明显偏小,南部与东北部大致相同,中西部相对较多。
结合地理知识做一个总结:
东北部及大多数中西部地区,属于温带大陆性气候,四季分明,夏季闷热,降雨较多。
西部属于温带地中海气候,全年气候温和,并且干燥少雨,夏季气候温和,最高温度相对稳定。
南部沿海一带,终年气候温暖,夏季炎热,雨水充沛。
按月计算美国各地区降雨量均值及标准偏差,以均值 ± 一倍标准偏差绘制各地区降雨量误差线图。
从运行结果可知:
在大多数夏季月份,西部地区降雨量远小于其他地区;
西部地区冬季月降雨量高于夏季月;
中西部地区是较为典型的温带大陆性气候,秋冬降雨逐渐减少,春夏降雨逐渐升高;
南部地区偏向海洋性气候,全年降雨量相对平均。
需要安装joypy包。
日均最高气温变化趋势
通过 joypy 包的 joyplot 接口,可以绘制带堆积效应的直方分布曲线,将 1980 年 - 2008 年的日均最高温度按每隔 4 年的方式绘制其分布图,并标注 25%、75% 分位数。
从运行结果可知:
1980 - 2008 年区间,美国全境日均最高温度分布的低温区正逐渐升高,同时高温区正逐渐降低,分布更趋向于集中;
1980 - 2008 年区间,美国全境日均最高温度的 25% 分位数和 75% 分位数有少量偏离但并不明显。
日均降雨量变化趋势
同样的方式对降雨量数据进行处理并查看输出结果。
筛选出加州和纽约州的日均降雨量数据,通过 plt.hist 接口绘制降雨量各月的分布图。
从运行结果可知:
加州地区降雨量多集中在 0 - 1 mm 区间,很少出现大雨,相比而言,纽约州则显得雨量充沛,日均降雨量分布在 2 - 4 mm 区间。
直方图在堆积效应下会被覆盖大多数细节,同时表达聚合、离散效应的箱线图在此类问题上或许是更好的选择。
通过 sns.boxplot 接口绘制加州和纽约州全年各月降雨量分布箱线图.
从箱线图上,我们可以清晰地对比每个月两个州的降雨量分布,既可以看到集中程度,例如七月的加州降雨量集中在 0.1 - 0.5 mm 的窄区间,说明此时很少会有大雨;又可以看到离散情况,例如一月的加州,箱线图箱子(box)部分分布较宽,且上方 10 mm 左右存在一个离散点,说明此时的加州可能偶尔地会出现大到暴雨。
视觉上更为美观且简约的是摆动的误差线图,实验 “美国全境降雨量月度分布” 将所有类别标签的 x 位置均放于同一处,导致误差线高度重合。可通过调节 x 坐标位置将需要对比的序列紧凑排布。
从输出结果可以看出,加州冬季的降雨量不确定更强,每年的的十一月至次年的三月,存在降雨量大,且降雨量存在忽多忽少的现象(误差线长)。
上面的实验均在研究单变量的分布,但经常性地,我们希望知道任意两个变量的联合分布有怎样的特征。
核密度估计 , 是研究此类问题的主要方式之一, sns.kdeplot 接口通过高斯核函数计算两变量的核密度函数并以等高线的形式绘制核密度。
从运行结果可知:
加州在高温区和低降雨期存在一个较为明显的高密度分布区(高温少雨的夏季);
纽约州在高温及低温区均存在一个高密度的分布区,且在不同温区降雨量分布都较为均匀。
将美国全境的降雨量与空气温度通过 plt.hist2d 接口可视化。
从运行结果可知:
美国全境最高密度的日均高温温度区域和降雨量区间分别为,78 F (约等于 25 C)和 2.2 mm 左右,属于相对舒适的生活气候区间。
美国全境降雨量与空气温度的关系-核密度估计
在上面实验基础上,在 x, y 轴上分别通过 sns.rugplot 接口绘制核密度估计的一维分布图,可在一张绘图平面上同时获取联合分布和单变量分布的特征。
美国全境降雨量与空气温度的关系-散点分布和直方分布
sns.jointplot 接口通过栅格的形式,将单变量分布用子图的形式进行分别绘制,同时通过散点图进行双变量关系的展示,也是一种较好的展现数据分布的方式。
上面两个实验研究了双变量分布的可视化,以下研究 3 变量聚合结果的可视化。
通过 sns.heatmap 接口可实现对透视数据的可视化,其原理是对透视结果的值赋予不同的颜色块,以可视化其值的大小,并通过颜色条工具量化其值大小。
上面的两个实验可视化了各州随年份日均最高温度的中位数变化趋势,从图中并未看出有较为显着地变化。
以下通过 t 检验的方式查看统计量是否有显着性差异。stats.ttest_ind 接口可以输出 1980 年 与 2010 年主要气候指数的显着性检验统计量及 p 值。
从运行结果可以看出:
检验结果拒绝了降雨量相等的原假设,即 1980 年 与 2010 年两年间,美国降雨量是不同的,同时没有拒绝日均日照、日均最大气温两个变量相等的原假设,说明气温未发生显着性变化。
⑶ 求一个PYTHON案例
# 以下程序可能要安装OpenCV2.0(并编译好并配置好环境)以及Xvid解码器才能运行
# _*_coding: cp936_*_
import cv
capture = cv.CreateFileCapture("tmp.avi")
#请确保当前目录下有tmp.avi文件
fps = cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FPS)
totalFrameNumber =cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_COUNT)
frameWidth = cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_WIDTH)
frameHeight = cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_HEIGHT)
print fps, totalFrameNumber, frameWidth, frameHeight
frame = cv.QueryFrame(capture)
while frame:
cv.ShowImage('Title', frame)
frame = cv.QueryFrame(capture)
if cv.WaitKey(1000 / fps) == 27:# ESC键退出视频播放
cv.DestroyWindow('Title')
break
一个文件夹整理工具wxPython版本(不清楚软件用法情况下可以打开该软件看看界面但请不要使用里面的功能,后果自负。)
# -*- coding: cp936 -*-
# file:aa.py
import os, shutil, sys
import wx
sourceDir = ''
sourceFiles = ''
preWord = 0
def browse(event):
global sourceDir, textPreWord, textDirName
dialog = wx.DirDialog(None, u'选择待处理文件夹', style = wx.OPEN)
if dialog.ShowModal() == wx.ID_OK:
sourceDir = dialog.GetPath().strip('\"')
textDirName.SetLabel(sourceDir)
dialog.Destroy()
textPreWord.SetFocus()
def okRun(event):
global preWord, sourceDir, sourceFiles, textPreWord
preWord = int(textPreWord.GetValue())
if preWord <= 0:
wx.MessageBox(u'请正确输入前缀字符个数!', u'出错啦', style = wx.ICON_ERROR | wx.OK)
textPreWord.SetFocus()
return
sourceDir = textDirName.GetValue()
sourceFiles = os.listdir(sourceDir)
for currentFile in sourceFiles:
tmp = currentFile
currentFile = sourceDir + '\\' + currentFile
currentFile = currentFile.strip('\"')
if os.path.isdir(currentFile):
continue
targetDir = '%s\\%s'%(sourceDir, tmp[:preWord])
if not os.path.exists(targetDir):
os.mkdir(targetDir)
shutil.move(currentFile, targetDir)
wx.MessageBox(u'任务完成!', u'好消息', style = wx.ICON_ERROR | wx.OK)
def onChange(event):
global dir1, textDirName
p = dir1.GetPath()
textDirName.SetLabel(p)
app = wx.App(0)
win = wx.Frame(None, title = u'文件整理', size = (400, 450))
bg = wx.Panel(win)
btnBrowse = wx.Button(bg, label = u'浏览')
btnBrowse.Bind(wx.EVT_BUTTON, browse)
btnRun = wx.Button(bg, label = u'整理')
btnRun.Bind(wx.EVT_BUTTON, okRun)
dir1 = wx.GenericDirCtrl(bg, -1, dir='', style=wx.DIRCTRL_DIR_ONLY)
tree = dir1.GetTreeCtrl()
dir1.Bind(wx.wx.EVT_TREE_SEL_CHANGED, onChange, id = tree.GetId())
textPreWord = wx.TextCtrl(bg)
textDirName = wx.TextCtrl(bg)
textPreWord.SetFocus()
class MyFileDropTarget(wx.FileDropTarget):#声明释放到的目标
def __init__(self, window):
wx.FileDropTarget.__init__(self)
self.window = window
def OnDropFiles(self, x, y, filenames):#释放文件处理函数数据
for name in filenames:
if not os.path.isdir(name):
wx.MessageBox(u'只能选择文件夹!', '出错啦', style = wx.ICON_ERROR | wx.OK)
return
self.window.SetValue(name)
dt = MyFileDropTarget(textDirName)
textDirName.SetDropTarget(dt)
hbox0 = wx.BoxSizer()
hbox0.Add(dir1, proportion = 1, flag = wx.EXPAND | wx.ALL, border = 5)
hbox1 = wx.BoxSizer()
hbox1.Add(textDirName, proportion = 1, flag = wx.EXPAND, border = 5)
hbox1.Add(btnBrowse, proportion = 0, flag = wx.LEFT, border = 5)
hbox2 = wx.BoxSizer()
hbox2.Add(textPreWord, proportion = 1, flag = wx.EXPAND, border = 5)
hbox2.Add(btnRun, proportion = 0, flag = wx.LEFT, border = 5)
vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add(hbox0, proportion = 1, flag = wx.EXPAND | wx.ALL, border = 5)
vbox.Add(wx.StaticText(bg, -1, u'\n 选择待处理文件夹路径:'))
vbox.Add(hbox1, proportion = 0, flag = wx.EXPAND | wx.ALL, border = 5)
vbox.Add(wx.StaticText(bg, -1, u'\n\n 前缀字符个数:'))
vbox.Add(hbox2, proportion = 0, flag = wx.EXPAND | wx.ALL, border = 5)
vbox.Add(wx.StaticText(bg, -1, u'\n'))
bg.SetSizer(vbox)
win.Center()
win.Show()
app.MainLoop()
#py2exe打包代码如下:
from distutils.core import setup
import py2exe
setup(windows=["aa.py"])
打包好了之后有18Mb。
一个文件内容批量替换摸查器(wxPython版本):
# _*_ coding:cp936 _*_
from string import join, split
import os
import wx
def getAllFiles(adir):
tmp = []
for parent, dirs, files in os.walk(adir):
for afile in files:
tmp.append(os.path.join(parent, afile))
return tmp
def browse(event):
dialog = wx.DirDialog(None, '选择待处理文件夹', style=wx.OPEN)
if dialog.ShowModal() == wx.ID_OK:
aDir = dialog.GetPath()
textDir.SetLabel(aDir)
dialog.Destroy()
def check():
promp.SetForegroundColour('#FF0000')
promp.SetLabel(' 搜索中...')
listFound.ClearAll()
tmp = []
files = getAllFiles(textDir.GetValue())
for filename in files:
try:
afile = open(filename, 'r')
except IOError:
print '打开文件错误。'
continue
try:
content = afile.read().decode('utf-8')
afile.close()
except:
try:
afile = open(filename, 'r')
content = afile.read().decode('cp936')
afile.close()
except:
continue
if textNeedChar.GetValue() in content:
tmp.append(filename)
listFound.InsertStringItem(0, filename)
parentDir.SetForegroundColour('#FF0000')
# parentDir.SetLabel(' 正在搜索:'+filename)
return tmp
def onFind(event):
check()
parentDir.SetLabel(' 搜索结果:')
promp.SetLabel(' 任务完成。')
wx.MessageBox(listFound.GetItemCount() and '任务完成,找到%d个文件。' % listFound.GetItemCount()
or '未找到包含"%s"的文件!' % textNeedChar.GetValue().encode('cp936'), '查找结束',
style=wx.ICON_INFORMATION | wx.OK)
def onReplace(event):
dg = wx.TextEntryDialog(bg, '替换成:', '提示', style=wx.OK | wx.CANCEL)
if dg.ShowModal() != wx.ID_OK:
return
files = check()
userWord = dg.GetValue()
#if not userWord:
#wx.MessageBox('请输入要替换为何字!', style=wx.ICON_ERROR | wx.OK)
#onReplace(event)
#return
for filename in files:
try:
afile = open(filename, 'r')
except IOError:
print '打开文件错误。'
continue
try:
content = afile.read().decode('utf-8')
afile.close()
except:
try:
afile = open(filename, 'r')
content = afile.read().decode('cp936')
afile.close()
except IOError:
print '打开文件错误。'
continue
content = content.replace(textNeedChar.GetValue(), userWord)
try:
content = content.encode('utf-8')
except:
pass
open(filename, 'w').write(content)
parentDir.SetLabel(' 替换的文件:')
promp.SetLabel(' 任务完成。')
wx.MessageBox(listFound.GetItemCount() and '任务完成,替换了%d个文件。' % listFound.GetItemCount()
or '未找到包含"%s"的文件!' % textNeedChar.GetValue().encode('cp936'), '替换结束', style=wx.ICON_INFORMATION | wx.OK)
app = wx.App(0)
win = wx.Frame(None, title='文件整理', size=(400, 450))
bg = wx.Panel(win)
btnBrowse = wx.Button(bg, label='浏览')
btnBrowse.Bind(wx.EVT_BUTTON, browse)
btnFind = wx.Button(bg, label='查找')
btnFind.Bind(wx.EVT_BUTTON, onFind)
btnFind.SetDefault()
btnReplace = wx.Button(bg, label='替换')
btnReplace.Bind(wx.EVT_BUTTON, onReplace)
textNeedChar = wx.TextCtrl(bg, value='你好')
textDir = wx.TextCtrl(bg, value='E:\Workspace\Python\Python\e')
parentDir = wx.StaticText(bg)
promp = wx.StaticText(bg)
listFound = wx.ListCtrl(bg, style=wx.VERTICAL)
class MyFileDropTarget(wx.FileDropTarget):#声明释放到的目标
def __init__(self, window):
wx.FileDropTarget.__init__(self)
self.window = window
def OnDropFiles(self, x, y, filenames):#释放文件处理函数数据
for name in filenames:
'''if not os.path.isdir(name):
wx.MessageBox('只能选择文件夹!', '出错啦', style=wx.ICON_ERROR | wx.OK)
return '''
self.window.SetValue(name)
dt = MyFileDropTarget(textDir)
textDir.SetDropTarget(dt)
hbox1 = wx.BoxSizer()
hbox1.Add(textDir, proportion=1, flag=wx.EXPAND, border=5)
hbox1.Add(btnBrowse, proportion=0, flag=wx.LEFT, border=5)
hbox2 = wx.BoxSizer()
hbox2.Add(textNeedChar, proportion=1, flag=wx.EXPAND, border=5)
hbox2.Add(btnFind, proportion=0, flag=wx.LEFT, border=5)
hbox2.Add(btnReplace, proportion=0, flag=wx.LEFT, border=5)
vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add(wx.StaticText(bg, -1, '\n 选择待处理文件夹(可拖动文件夹到下面区域中):'))
vbox.Add(hbox1, proportion=0, flag=wx.EXPAND | wx.ALL, border=5)
vbox.Add(wx.StaticText(bg, -1, '\n\n 要替换 / 查找的文字:'))
vbox.Add(hbox2, proportion=0, flag=wx.EXPAND | wx.ALL, border=5)
vbox.Add(promp, proportion=0, flag=wx.EXPAND | wx.ALL, border=5)
vbox.Add(parentDir, proportion=0, flag=wx.EXPAND | wx.ALL, border=5)
vbox.Add(listFound, proportion=1,
flag=wx.EXPAND | wx.LEFT | wx.BOTTOM | wx.RIGHT, border=5)
bg.SetSizer(vbox)
win.Center()
win.Show()
app.MainLoop()
⑷ 《利用Python进行数据分析》——案例1从Bitly获取数据
这个案例主要目的是转换json类型的数据,利用python和pandas方法进行计数。
step1:获取数据
将json格式数据转化成python对象
step2纯python时区计数
1.获取时区+计数
2.对以上字典形式进行计数
3.更更简单的方法,直接用python标准库的collections.Counters类
从仅获取时区后开始
step3 使用pandas计数
step4 可视化 seaborn
5.补充一些语句
⑸ python软件开发的案例有哪些,可用于哪些开发
列举一些比较有名的网站或应用。这其中有一些是用python进行开发,有一些在部分业务或功能上使用到了python,还有的是支持python作为扩展脚本语言。数据大部分来自Wikepedia和Quora。
Reddit - 社交分享网站,最早用Lisp开发,在2005年转为python
Dropbox - 文件分享服务
豆瓣网 - 图书、唱片、电影等文化产品的资料数据库网站
Django - 鼓励快速开发的Web应用框架
Fabric - 用于管理成百上千台Linux主机的程序库
EVE - 网络游戏EVE大量使用Python进行开发
Blender - 以C与Python开发的开源3D绘图软件
BitTorrent - bt下载软件客户端
Ubuntu Software Center - Ubuntu 9.10版本后自带的图形化包管理器
YUM - 用于RPM兼容的Linux系统上的包管理器
Civilization IV - 游戏《文明4》
Battlefield 2 - 游戏《战地2》
Google - 谷歌在很多项目中用python作为网络应用的后端,如Google Groups、Gmail、Google Maps等,Google App Engine支持python作为开发语言
NASA - 美国宇航局,从1994年起把python作为主要开发语言
Instrial Light & Magic - 工业光魔,乔治·卢卡斯创立的电影特效公司
Yahoo! Groups - 雅虎推出的群组交流平台
YouTube - 视频分享网站,在某些功能上使用到python
Cinema 4D - 一套整合3D模型、动画与绘图的高级三维绘图软件,以其高速的运算和强大的渲染插件着称
Autodesk Maya - 3D建模软件,支持python作为脚本语言
gedit - Linux平台的文本编辑器
GIMP - Linux平台的图像处理软件
Minecraft: Pi Edition - 游戏《Minecraft》的树莓派版本
MySQL Workbench - 可视化数据库管理工具
Digg - 社交新闻分享网站
Mozilla - 为支持和领导开源的Mozilla项目而设立的一个非营利组织
Quora - 社交问答网站
Path - 私密社交应用
Pinterest - 图片社交分享网站
SlideShare - 幻灯片存储、展示、分享的网站
Yelp - 美国商户点评网站
Slide - 社交游戏/应用开发公司,被谷歌收购
⑹ 标普100案例分析 —— 带着Python玩金融(5)
本文将带着你使用Python对标普100数据进行简单的分析,你会学到:
标准普尔100指数 用来衡量大公司的股票表现,它由多个行业的100家主要公司构成。2017年标普100在各行业的比例如下图所示。
本文将要分析的数据如下表所示,它由四列数据构成,分别是公司名(Name),行业(Sector),股价(Price)和每股盈余(EPS)。
我们将这四列数据分别存储在四个Python列表中。
先来用切片的方法观察下数据。比如查看前四家公司的名称。
或者输出最后一家公司的所有信息。
市盈率 (Price to Earnings ratio),也称股价收益比率,由股价除以每年度每股盈余(EPS)得到,它是用来衡量股价水平是否合理的指标之一。
为了方便计算市盈率,我们首先将数据从Python列表类型转换为NumPy数组。
NumPy数组的优势是它可以直接对数组进行运算,而这一点Python列表是做不到的。比如计算市盈率 pe ,我们可以直接将数组 prices 除以数组 earnings 。
接下来我们就具体行业来进行分析,比如对于IT行业,我们首先需要筛选出哪些公司属于这一行业。
用同样的方法,筛选出必需消费品行业的公司和市盈率。
筛选出IT和必需消费品行业的数据后,我们来计算这两个行业市盈率的均值和标准差。
首先用散点图来观察这两个行业中每一家公司的市盈率。这里使用Python中常用的绘图工具包 matplotlib 。
我们注意到,上图的右上角有一IT公司的市盈率特别高。若某股票的市盈率高于同类股票,往往意味着该股有较高的增长预期。所以让我们进一步来观察IT行业的市盈率分布,在这里直方图可以用来查看数据的分布情况。
现在可以更直观的看到在直方图的右侧有一离群值,它具有很高的市盈率。我们可以使用布尔索引找到这家市盈率很高的公司。
注:本文是 DataCamp 课程 Intro to Python for Finance 的学习笔记。
⑺ 121 11 个案例掌握 Python 数据可视化--星际探索
星空是无数人梦寐以求想了解的一个领域,远古的人们通过肉眼观察星空,并制定了太阴历,指导农业发展。随着现代科技发展,有了更先进的设备进行星空的探索。本实验获取了美国国家航空航天局(NASA)官网发布的地外行星数据,研究及可视化了地外行星各参数、寻找到了一颗类地行星并研究了天体参数的相关关系。
输入并执行魔法命令 %matplotlib inline, 设置全局字号,去除图例边框,去除右侧和顶部坐标轴。
本数据集来自 NASA,行星发现是 NASA 的重要工作之一,本数据集搜集了 NASA 官网发布的 4296 颗行星的数据,本数据集字段包括:
导入数据并查看前 5 行。
截至 2020 年 10 月 22 日 全球共发现 4296 颗行星,按年聚合并绘制年度行星发现数,并在左上角绘制 NASA 的官方 LOGO 。
从运行结果可以看出,2005 年以前全球行星发现数是非常少的,经计算总计 173 颗,2014 和 2016 是行星发现成果最多的年份,2016 年度发现行星 1505 颗。
对不同机构/项目/计划进行聚合并降序排列,绘制发现行星数目的前 20 。
2009 年至 2013 年,开普勒太空望远镜成为有史以来最成功的系外行星发现者。在一片天空中至少找到了 1030 颗系外行星以及超过 4600 颗疑似行星。当机械故障剥夺了该探测器对于恒星的精确定位功能后,地球上的工程师们于 2014 年对其进行了彻底改造,并以 K2 计划命名,后者将在更短的时间内搜寻宇宙的另一片区域。
对发现行星的方式进行聚合并降序排列,绘制各种方法发现行星的比例,由于排名靠后的几种方式发现行星数较少,因此不显示其标签。
行星在宇宙中并不会发光,因此无法直接观察,行星发现的方式多为间接方式。从输出结果可以看出,发现行星主要有以下 3 种方式,其原理如下:
针对不同的行星质量,绘制比其质量大(或者小)的行星比例,由于行星质量量纲分布跨度较大,因此采用对数坐标。
从输出结果可以看出,在已发现的行星中,96.25% 行星的质量大于地球。(图中横坐标小于 e 的红色面积非常小)
通过 sns.distplot 接口绘制全部行星的质量分布图。
从输出结果可以看出,所有行星质量分布呈双峰分布,第一个峰在 1.8 左右(此处用了对数单位,表示大约 6 个地球质量),第二个峰在 6.2 左右(大概 493 个地球质量)。
针对不同发现方式发现的行星,绘制各行星的公转周期和质量的关系。
从输出结果可以看出:径向速度(Radial Velocity)方法发现的行星在公转周期和质量上分布更宽,而凌日(Transit)似乎只能发现公转周期相对较短的行星,这是因为两种方法的原理差异造成的。对于公转周期很长的行星,其运行到恒星和观察者之间的时间也较长,因此凌日发现此类行星会相对较少。而径向速度与其说是在发现行星,不如说是在观察恒星,由于恒星自身发光,因此其观察机会更多,发现各类行星的可能性更大。
针对不同发现方式发现的行星,绘制各行星的距离和质量的关系。
从输出结果可以看出,凌日和径向速度对距离较为敏感,远距离的行星大多是通过凌日发现的,而近距离的行星大多数通过径向速度发现的。原因是:近距离的行星其引力对恒星造成的摆动更为明显,因此更容易观察;当距离较远时,引力作用变弱,摆动效应减弱,因此很难借助此方法观察到行星。同时,可以观察到当行星质量更大时,其距离分布相对较宽,这是因为虽然相对恒星的距离变长了,但是由于行星质量的增加,相对引力也同步增加,恒星摆动效应会变得明显。
将所有行星的质量和半径对数化处理,绘制其分布并拟合其分布。
由于:
因此,从原理上质量对数与半径对数应该是线性关系,且斜率为定值 3 ,截距的大小与密度相关。
从输出结果可以看出:行星质量和行星半径在对数变换下,具有较好的线性关系。输出 fix_xy 数值可知,其关系可以拟合出如下公式:
拟合出曲线对应的行星平均密度为:
同样的方式绘制恒星质量与半径的关系。
从输出结果可以看出,恒星与行星的规律不同,其质量与半径在对数下呈二次曲线关系,其关系符合以下公式:
同样的方式研究恒星表面重力加速度与半径的关系。
从输出结果可以看出,恒星表面对数重力加速度与其对数半径呈现较好的线性关系:
以上我们分别探索了各变量的分布和部分变量的相关关系,当数据较多时,可以通过 pd.plotting.scatter_matrix 接口,直接绘制各变量的分布和任意两个变量的散点图分布,对于数据的初步探索,该接口可以让我们迅速对数据全貌有较为清晰的认识。
通过行星的半径和质量,恒星的半径和质量,以及行星的公转周期等指标与地球的相似性,寻找诸多行星中最类似地球的行星。
从输出结果可以看出,在 0.6 附近的位置出现了一个最大的圆圈,那就是我们找到的类地行星 Kepler - 452 b ,让我们了解一下这颗行星:
数据显示,Kepler - 452 b 行星公转周期为 384.84 天,半径为 1.63 地球半径,质量为 3.29 地球质量;它的恒星为 Kepler - 452 半径为太阳的 1.11 倍,质量为 1.04 倍,恒星方面数据与太阳相似度极高。
以下内容来自网络。 开普勒452b(Kepler 452b) ,是美国国家航空航天局(NASA)发现的外行星, 直径是地球的 1.6 倍,地球相似指数( ESI )为 0.83,距离地球1400光年,位于为天鹅座。
2015 年 7 月 24 日 0:00,美国国家航空航天局 NASA 举办媒体电话会议宣称,他们在天鹅座发现了一颗与地球相似指数达到 0.98 的类地行星开普勒 - 452 b。这个类地行星距离地球 1400 光年,绕着一颗与太阳非常相似的恒星运行。开普勒 452 b 到恒星的距离,跟地球到太阳的距离相同。NASA 称,由于缺乏关键数据,现在不能说 Kepler - 452 b 究竟是不是“另外一个地球”,只能说它是“迄今最接近另外一个地球”的系外行星。
在银河系经纬度坐标下绘制所有行星,并标记地球和 Kepler - 452 b 行星的位置。
类地行星,是人类寄希望移民的第二故乡,但即使最近的 Kepler-452 b ,也与地球相聚 1400 光年。
以下通过行星的公转周期和质量两个特征将所有行星聚为两类,即通过训练获得两个簇心。
定义函数-计算距离
聚类距离采用欧式距离:
定义函数-训练簇心
训练簇心的原理是:根据上一次的簇心计算所有点与所有簇心的距离,任一点的分类以其距离最近的簇心确定。依此原理计算出所有点的分类后,对每个分类计算新的簇心。
定义函数预测分类
根据训练得到的簇心,预测输入新的数据特征的分类。
开始训练
随机生成一个簇心,并训练 15 次。
绘制聚类结果
以最后一次训练得到的簇心为基础,进行行星的分类,并以等高面的形式绘制各类的边界。
从运行结果可以看出,所有行星被分成了两类。并通过上三角和下三角标注了每个类别的簇心位置。
聚类前
以下输出了聚类前原始数据绘制的图像。
⑻ python适合做哪些营销类案例
案例场景:每个销售型公司都有一定的促销费用,促销费用可以带来销售量的显着提升;当给出一定的促销费用时,预计会带来多大的商品销售量?
在“附件-chapter1”中data.txt存储了建模所需的原始数据,get_started_example.py是案例完整代码。以下是原始数据概况:
来源:生成的模拟数据,非真实数据
用途:用来做第一个销售预测案例
维度数量:1
记录数:100
字段变量:第一列是促销费用,第二列是商品销售量
数据类型:全部是浮点数值型
是否有缺失值:否
*回答来源链接:https://zhuanlan.hu.com/p/33618571
以上就是《python适合做哪些营销类案例》的全部内容,感谢阅读,希望对你有帮助!
⑼ #抬抬小手学Python# Python 之作用域下的 global 和 nonlocal 关键字
该部分内容涉及 Python 变量作用域相关知识,变量作用域指的是变量的有效作用范围,直接理解就是 Python 中的变量不是任意位置都可以访问的,有限制条件。
一般情况下变量的作用域变化范围是 块级、函数、类、模块、包等,级别是从小到达。Python 中是没有块级作用域的,所以我们在写代码的时候,下面的代码是正确的。
在 Python 中常见的块级作用域有 if 语句、for 语句、while 语句、with 上下文语句。
上文已经提及了作用域是 Python 程序可以直接访问一个变量的作用范围,Python 的作用域一共有 4 种,分别如下:
一个比较经典的案例如下:
在 Python 中变量寻找的顺序是从内到外,先局部,然后外部,在全局,在内建,这种规则叫做 LEGB 规则 。
增加以下学习的趣味性,你可以研究下述代码中变量是如何变化的。
定义在 函数内部 的变量拥有一个局部作用域,定义在 函数外部 的变量拥有全局作用域。
输出结果,函数内部是 123 ,函数外部依旧是 0 。
如果希望函数内部(内部作用域)可以修改外部作用域的变量,需要使用 global 关键字。
此时输出的就都是 123 了,还有一点需要注意,在函数内容如果希望修改全局变量的值, global 关键字一定要写在变量操作前。
该代码会出现语法错误:
全局变量还存在一个面试真题,经常出现,请问下述代码运行结果。
如果要修改嵌套作用域(Enclosing 作用域)中的变量,需要 nonlocal 关键字,测试代码如下:
输出结果自行测试,注意 nonlocal 关键字必须是 Python3.X+版本,Python 2.X 版本会出现语法错误:
在多重嵌套中, nonlocal 只会上溯一层,如果上一层没有,则会继续上溯,下述代码你可以分别注释查看结果。
局部变量和全局变量具体有哪些,可以通过 locals() 和 globals() 两个内置函数获取。
本篇博客为大家说明了 Python 的作用域,并且对 global 和 nonlocal 关键字进行了学习,希望对你有所帮助。