php怎么去除警告,有没有人用过deepin操作系统?
还是不装的好,本人前几天忙了半天装好了,里面软件少的可怜,普通百姓根本用不了,多数软件英文的看不懂,要找个看电视剧的都没有在浏览器里下的软件都装不上
吃槟榔有没有危害?
大约在二十年前,我就与槟榔有过接触。我有个朋友老家是湘潭的,每次回家过年他都会带些槟榔回来,并且让我们品尝。老实说,我就尝过一次,以后再也没有吃过。虽然现在我已经没有办法具体描述当时吃槟榔的味道,但我清楚地记得,我只是把它放在嘴里嚼了几下,就吐掉了。因为那种感觉实在谈不上好受。
朋友见我们不喜欢,后来他也就不会再发槟榔给我们了。时间一长,我基本上就把这东西给忘了。
不过,从2019年开始,我慢慢发现在我市街头的一些便利店里,居然出现了包装精美的袋装槟榔,它们一般放在小店非常显眼的位置,同时还附有精美的广告。当然由于我之前尝过它的味道,所以我对它并不感兴趣。但是我发现,经常会有年轻人来买。
有一天我到一个小便利店买东西,正好这个店里也有槟榔销售,于是我问老板,这东西有人买吗?我们这里根本没人吃这玩意啊,如果卖不出去怎么办?老板回说:这些槟榔并不需要自己花钱进货,都是一些公司放在这里代销的。销售完了双方分成,如果卖不出去的话公司负责回收。在我们这个地方,目前槟榔的消费群体主要是一些喜欢追求刺激和潮流的年轻人。虽然能卖一些,但量还是不大。
于是我明白,槟榔不再是湖南的专利。某些槟榔生产厂商或是销售商已经不满足于在湖南进行销售,他们正在尝试将这种褒贬不一的食品推向其他地方,从而让这个产业逐步壮大。
关于槟榔槟榔属常绿乔木,茎细且直立,一般可高达10多米,最高的可达30米左右。此树有明显的环状叶痕,雌雄同株,花序多分枝,果实呈长圆形或卵球形,种子卵形,花果期3-4月。
槟榔原产于马来西亚,在中国主要分布于云南、海南及台湾等热带地区。槟榔是重要的中药材,同时一些人也将其果实作为一种咀嚼嗜好品。
但是在我国,却存在着一个非常独特的现象,槟榔的消费主力,居然不是出产槟榔的台湾和海南,而是远离这两地的一棵槟榔树都没有的湖南!至于为什么湖南人爱吃槟榔,湖南因此成为槟榔消费大省的原因,却是众说纷纭。而且,就是在湖南省来说,也不是全湖南每个地方都喜欢吃槟榔,槟榔的消费地主要集中在长株潭等地。其他地方吃的人相对来说要少得多。一些人认为,湖南人尤其是湘潭人喜欢吃槟榔,是因为在清朝的时候,湘潭闹大瘟疫,死了很多人,但瘟疫过后,人们发现那些嚼食槟榔的人却没有受到多大影响。从此以后嚼食槟榔就在这个地方逐渐流传开来,并逐渐向其他地方蔓延。也有人认为主要是因为槟榔有祛湿除瘴的功效,非常适合在湖南这样气候的地方食用。不过这种说法似乎不被大多数人所接受,原因就是湖南其他地方的人也不太喜欢吃这个东西。更多的人则认为,槟榔之所以能在湖南流传开来,主要还是因为湖南人采用了独特的处理方式对槟榔进行了加工,从而让槟榔的口感变得更好,而口感变好后的槟榔更容易让人接受,也更容易使人上瘾。槟榔产业发展到现在,湖南已经成为我国最大的槟榔加工基地,因此,海南种植出产的槟榔果95%都被运往湖南,在这里进行深加工后,槟榔被打上各种品牌标签,做成各种不同口味发往各地,供全国6000万槟榔爱好者享用。吃槟榔的危害如果不是吃槟榔会产生危害,甚至还是非常严重的危害的话,那么它到今天极有可能取代香烟的地位,变成人人离不开的“社交工具”。可以肯定的是,吃槟榔对人是有危害的,而且后果很严重。一般说来,长时间嚼食槟榔,会造成脸部变形。由于嚼食槟榔相对来说需要更大的力气,因此,长期嚼食槟榔的话,会使人腮帮子变得更大。不过这对很多人来说显然并不是什么大事,因为还有人会特地如此锻炼腮帮子的。会引发牙周疾病。嚼食槟榔,会导致牙齿磨耗严重,同时槟榔汁跟石灰混在一起,容易形成牙结石,而且牙齿发黑,不仅影响美观,而且影响牙周健康。槟榔纤维粗硬,还有可能会刺伤牙龈或堵塞牙缝,造成牙龈的压迫而发炎。不过,以上两种危害同下面一种比起来,算不上什么。吃槟榔最大的危害,是发生口腔癌!吃槟榔致癌的原因主要有两个方面。一是因为长期咀嚼槟榔会造成口腔溃疡、牙龈退变、黏膜下纤维化,进而会引发口腔黏膜下纤维性病变。这是一种癌前病变,如果再发展下去,就会导致口腔癌变。二是因为槟榔含有大量的槟榔素,这是一种细胞毒素,会对细胞造成不良影响。因此早在2003年的时候,世界卫生组织下属的国际癌症研究机构,就已经把槟榔明确确立为一级致癌物。一级致癌物是个什么样的概念?就是通过大量的研究和临床总结,可以确认某种物质对人体有很大的危害,它们可以诱发癌症,同时也有充分的证据证明这些物质可以致癌。那么这样的物质就是一类致癌物。目前,被定义为一级致癌物的有一百一十八种,其中就包括槟榔。吃槟榔为何会上瘾可能有些人会觉得奇怪,既然知道吃槟榔会患上口腔癌,为什么还是有那么多人每天都在嚼食,他们为什么不停下来呢?
答案非常简单,吃槟榔就像抽烟一样,明知道抽烟有害健康,但是很多人就是戒不了。因为吃槟榔与抽烟一样,它会让人上瘾!在槟榔消费大省湖南,人们普遍认为咀嚼槟榔可以让人增加能量,使你看上去更加精神抖擞,所以“槟榔加烟,法力无边”、“槟榔加酒,永垂不朽”的说法流传甚广。其实槟榔的这种神奇功效就是由于它所含的天然生物碱造成的,人们在嚼食槟榔时,可以促进肾上腺素的释放,而大部分动物都会从肾上腺素的释放中获得愉悦感和幸福感。久而久之,这种愉悦感就会让人的身体产生依赖,于是就上瘾了。庞大产业背后是沉重的医疗负担据统计,目前全世界有超过6亿的槟榔食用者,而中国至少有6000万人!而这6000万人群的消费需求,支撑起了一个庞大的槟榔产业。
据海南省有关部门提供的数据显示,2020年海南省槟榔种植面积177万亩,涉及种植户70多万户、230多万人,占全省农业人口的41.37%。目前海南已经成为中国槟榔的最大产地。
统计数据显示,2020年时全国槟榔全产业链产业规模已超过700亿。其中,湖南作为槟榔主要的消费地区,拥有槟榔食品生产企业121家,规模企业12家。湖南全省有从事槟榔生产、销售的人员超过20万人,湖南省槟榔行业产值已突破400亿,并且仍然保持着10%左右的年均增速。据测算,到2025年,湖南的槟榔产业产值规模将过千亿。
但与此同时,到了2030年左右,估计湖南与槟榔相关的口腔癌患者将累计超过30万,而全国范围内估计将超过100万。面对如此庞大的口腔癌患者,如果以每人20万元的医疗费用计算,将需要2000亿元的医疗费用,这个数字还是比较保守的测算,具体需要多少,没有人能精确预知。
好在这种情况已经引起重视。2013年,一篇名为《槟榔王国中的割脸人》的报道广泛传播,报道中的主人公刘某某,因为常年嚼槟榔,患了口腔癌,做了割脸手术。一时间,“割脸人”的遭遇为世人所熟知,槟榔作为致人上瘾的“软性du品”开始被重新审视。
在不少国家和地区,槟榔已经被明确列入du品清单,医学界对于嚼槟榔和口腔癌之间的关系已有基本共识。但是在我国槟榔一直游走于灰色地带。《广告法》虽明确禁止在大众传媒或者公共场所发布烟草广告,但对槟榔却无相关规定。之前针对“槟榔广告”的约束仅靠行业自律。
经济发展固然重要,但如果再不采取措施限制槟榔在全国的野蛮扩张,那么其危害的将是越来越多地方人的健康。近几年来在我生活的城市悄然出现槟榔的身影就是个不好的兆头。从客观上来看,关于槟榔经济与人民身体健康的两难取舍可能还会持续很长一段时间,作为普通人,我们虽然决定不了什么,但是至少我们可以决定自己是否嚼食槟榔。为什么我的新品不出单?
本回答来自作者小马(mahuanlovedd),如须转载请联系作者。
不出单,可能是多种原因造成的,可能是选品出了偏差,或者是产品描述不够吸引,又或者是店铺流量不够等等,我分别从这三个方向做一些分享,希望对你有所帮助,或者目前做跨境电商过程中遇到一些运营技巧的问题,也可以尝试一下更粗暴的方式,无货源铺货模式去做做,需要的运营技巧更少,可以把更多的精力放在选品上面。
第一,如何选品1,分析需求选品
需求决定市场,永远不变的道理!大的需求主要分两种,物质需求/精神需求,然后把需求在进行细分,你会发现原来还可以这样。
注意:
注重考虑物质需求即可
一定要细分,不然毫无意义
发现更小的需求
2,采购数据选品
数据来源于实际,既然某些品类采购数据明显大于其他,说明此类产品供需关系大,根据数据显示去大的门类,在细分小的品种做到精确选择
3,热搜选品
很多热搜的关键词,背后的逻辑往往就是所需要产品的属性表达之一,那么咱们可以通过热搜的关键词去反推出所表达的产品属性,发现需求,进而找到选需要的产品。
4,间接选品
产品都是有关联性的,例如买了手链可能就还会买项链搭配,买了衣服还要相应的裤子,通过某某销售好的产品,去关联出其他可能需求的产品,进行进行选择产品,挖掘二次消费产品
5,精准人群选品
如果你的目标客户地域,年龄,性别已经确定,那么就可以限定你的选品区间,固定区域固定人群,一定会有大致统一的产品需求,针对统一产品需求就行区间选品
6,货源渠道选品
国内目前货源渠道有很多种,也许你有自己的固定渠道,没有关系,以下这些平台渠道都可以成为你的货源
1.1688
2.阿里国
3.淘宝
4.环球华品
5.U选U品
6.环球资源
7.中国制造网
8.义乌购
9.速卖通
7,铺货选品
这个是属于比较暴力的方式,从概率学的角度讲,你的产品足够多的情况下,总会有那么一些产品会成为销量好的产品,没有方向的情况下,先进行大量铺货,获取更多的流量,让人群流量去帮你筛选你的产品,进而一步步确定你的产品。
第二,如何优化产品描述
什么是产品描述呢?
产品描述简单来说就是告诉买家,你买的是什么,有哪些功能,他为什么要买你的产品,使用你的产品可以为买家带来什么,以便于买家更加清清楚楚明明白白知道他在买什么。
1,从目标买家角度去描写
首先你的知道,你的产品的目前买家人群是哪些,他们需要你的产品能为他带来什么,知道了这些你就知道你该怎么写了,有了这样的刻意定位比起你从广大用户的角度去描述更加容易引起目标卖家的购买欲。
2,有哪些好处
可能我们对自己的产品有充分的了解的时候,你知道你这个产品能够给买家带来什么,以及他的用户有哪些,但是买家刚接触的时候他是不完全知道的,所以你得告诉他们用了你得产品,能给他带来哪些好处,比如可以给他带来清新的口气,可以给他提高他的工作效率,可以让她的皮肤更加光洁美润等等,你得明确的告诉买家。
3,从细节出发去描述,不要使用过于宽泛的词语
当我们描述产品的时候,要尽量描写产品的细节,比如皮鞋,它的质量是可以穿着几年,而不是只说质量很好,材质不错这样的宽泛的描述,这样去写,其实都是一些废话,给不了买家直观深入的感受。
4,切莫用最高级
实事求是的去描述,不要什么都说你的东西是最好的,无与伦比的等等这种最高级语言,不然会给客户带来产品描述不真实的感受,如果你的产品有权威的专业机构认证,能够出示这种证明,你可以,不能就别写。
5,描述使用场景
举个例子,在一个炎热的夏日,你喝了某某汽水,可以让你瞬间感受清凉,仿佛处于凉爽的春天等等这样的,描述出你的产品的应用场景,以及买家在这种场景之下,使用产品能带来什么感受。
6,来自用户或者社会的认证
比如你的产品某某买家用了之后觉得怎么怎么样,某某具有一定影响力的机构给你认证你的产品怎么怎么样,当然你的有这方面的证据让买家实实在在看得到。
7,条理清晰,逻辑清楚
描述产品时候最基本的一点,条理一定要清晰,逻辑要清楚,不要东边一下西边一下,有头无尾的,让买家看的莫名其妙,不知道你到底在说什么。
第三,如何获取更多流量1,铺货
铺货模式也是我讲的跨境电商无货源模式里面的一个核心思路,那么为什么要这么做呢?
1)现在的贸易市场,各种产品类目太多,不铺货,根本没有你的任何市场
2)有些产品的客单价较低,只有通过走量的形式去获得更多的利润
3)假设一个鞋子类目总共产品目前1W件在售产品,然后你铺货专门卖鞋子,上了5千件产品,那么一共1.5W,你就占据市场的三分之一的市场,可想而知你得流量不会少了
2,到底该如何去铺货,会遇到些什么问题呢,该如何去解决呢?
1)现在支持很多的ERP一键铺货上架,不需要囤货,资金压力较小,也就是前面我说过的无货源代发货!
2)注意侵权和产品上架问题,有特定商标或者有技术专利申请的就不要盲目的去上架啦,这个要注意一下。
3)铺货模式做起来,经过市场检验,某些产品是卖的较好的,这时候其实也可以去联系供应商,一来让产品线更加稳定,而来可以拿到更低的进价。
2,多店铺运营(店群模式)
在国内电商TB里面多店铺运营大家都知道,现在跨境电商多店铺运营也是很常见的事情,但是亚马逊规则是对店铺关联查的比较严的,这个需要注意,我前面的文章,无货源模式衍生篇—怎样防止店铺关联有具体的防止店铺关联的方法,大家可以再回过头起看看。为什么要结合店群模式呢,道理其实很简单,你一个店铺一天如果可以做到1000+,那么多几个店铺不就可以多盈利几个1000+。一样的模式,只需要你去简单的去复制就好了,还是很好实现的。
3,站外引流
说起站外引流可能大家比较陌生,但是说起粉丝经济,社交运营大家会比较好理解,抖音,微博等等舌尖软件大家应该都用过,我们也可以通过这个社交软件去打造自己的营销号,本质其实就是通过一些有内容的产品分享,吸引一些对自己或者产品感兴趣的粉丝,在社交媒体里载入自己的店铺链接,进行实现产品的曝光销售,这个前期做起来会比较慢,是一个慢慢积累的过程,但是做成之后的一个产品忠诚度会比较高。
4,寻找属于自己的独有市场
这个简单来说就是卖独一无二的东西,全站就你家或者很少的卖家有产品,特产,原创手工艺品等等一些属于自己的利基市场。
首先做跨境电商肯定就要考虑一下几个问题,货源从哪里来,如何选品,产品如何上架,语言问题如何解决,流量如何获取,订单如何解决,物流如何管理,利润点在哪里。
1,货源从哪里来?
大家都知道,只要是做消费类产品,货源肯定是至关重要的,有订单无货源,订单无法处理,客户体验不好,店铺很难运营下去,那么无货源的的货源是从哪里来的呢?我刚听说无货源模式的时候,也跟大家有相同的疑问,货源都没有那你玩个鬼,带着一丝嘲讽以及我TM怎么这么机智的查了一些资料之后恍然大悟,无货源并不是按照字面意思去理解没有货的意思,用无囤货解释会更加精确,意思就是不需要提前囤货,没有资金压力,它的货源来自全网各大平台的电商卖家,简而言之就是借鸡生蛋,你不是产品的生产者,你只是别人产品的搬运工,别人现成的国内的产品搬到你的亚马逊店铺,赚一个信息差和汇率差,你去电商平台找一个你想做的商品,通过ERP系统完成技术修改,标题优化上架到自己的店铺中。
2,如何选品
前面我在讲选品小技巧的时候,提到过一个选品方式,铺货选品,意思就是首先从数量上去占据一个优势,无货源模式首先得依靠ERP系统去实现产品采集,语言翻译,产品上架,运用系统之后,上货的效率有了一个量级的变化,人力一天20-30件,系统一天200-300件,这时候铺货选品就很容易去实现了,当然对于市场有一定敏感度的,还是可以运用其他选品技巧去选,只是无货源是实现铺货选品的最佳方式,也是最适合没有任何运营经验的小白。
3,产品如何上架
产品上架对于跨境电商来说,其实就是一个程序化并且较为繁琐的工作,在这份工作里面,效率就显得至关重要了,每天上架20件产品跟每天上架10件产品,通过累继下来的效果那完全不是一个概念。那么如此繁琐的工作,无货源模式该如何上架产品呢?这里真的就是验证了一句话,科学技术是第一生产力,无货源模式就是靠ERP系统的自动化采集产品信息,包括产品图片,标题,描述等等,翻译成你所要进驻站点的当地语言,卖到德国就可以翻译成德语,要卖到法国就翻译成法语等等,语言整理完成,生成符合亚马逊上货标准的表格,最后一键式上传到亚马逊店铺。
4,语言问题如何解决
传统跨境电商运营者,要么就是懂相应国家语言,不懂得就是靠翻译,无货源模式使用的ERP系统自带语言翻译模块,并且是一键式采集产品信息之后,自动翻译成外语,效率大幅提高。
5,流量如何获取
前面讲到的上架产品效率大幅提高,通过铺货选品之后,产品类目占据了一定优势,例如某一个类目上总共有15000件产品,你的店铺要是占据5000件,相当于这个类目下3分之一的市场都是你的,流量水到渠成。当然这里说的只是无货源模式本身的获取流量的核心思路,你也可以通过广告等等其他方式获取额外流量。
6,订单如何处理
有了订单就得发货了,那么无货源模式是如何完成这一整套流程的呢?首先国外买家拍了你家东西,通过ERP系统后台订单管理系统,你去通过此产品链接找到它所来自的店铺,你去拍下来,先发到中转仓,在通过中转仓二次包装,贴上亚马逊标识,国际物流标签,符合亚马逊国家物流标准之后,发往国外买家手中。
7,物流如何管理
这个问题也是我当时听到无货源模式之后,立马想到的问题,该如何解决物流呢?你从其他平台拍货之后,别人也不会把你的货直接发到国外呀。答案来了,中转仓。无货源模式当中解决整个物流链就是增加了一个中转仓的概念,先把产品发到中转仓发到中转仓,由中转仓重新打包成符合国际物流标准的货件,再次发往国外。
8,利润点在哪里
做生意最后关心的肯定是利润从何而来,很多人就要问,跨境电商的利润大嘛?利润点从哪里来。告诉大家两点,信息差以及利润差,数值相同的情况下,由于货币单位不同,通过汇率转换过来利润就非常可观了,20元的小物件卖到欧洲,欧洲人去20欧元买跟我们花20元购买的实际感受是基本相同的,但是换算成咱们那就是100多,这就是利润。
如何快速精通python?
既然是毫无基础,那就简单介绍一下吧,python的入门其实只需要掌握几个关键点就行,新手要先学会安装环境、了解数据结构、函数这些东西,再配合实操进行实践,基本就可以入门了。
提示!!文章内容较长,大约需要半个小时,可以先收藏再慢慢看,目录如下:
一、了解环境
二、了解数据结构
三、了解基本函数
四、了解Nuypm计算包
——————正文警告!!——————
一、环境Python的编写环境,用Anaconda足矣。Anaconda是专业的数据科学计算环境,已经集成绝大部分包和工具,不需要多余的安装和调试。
Python版本建议3.0以上,不要选择2.7的版本,否则你会被无尽的中文编码问题困扰。
Anaconda在官网下载,选择最新版本,约400MB。
完成安装后,Win版本会多出几个程序,Mac版本只有一个Navigator导航。数据分析最常用的程序叫Jupyter,以前被称为IPython Notebook,是一个交互式的笔记本,能快速创建程序,支持实时代码、可视化和Markdown语言。
点击Jupyter进入,它会自动创建一个本地环境localhost。
点击界面右上角的new,创建一个python文件。
开始你的Python
界面上部是工具栏,编辑撤回运行等,下面是快捷操作,大家以后会熟悉的。页面正中便是脚本执行的地方,我们输入自己第一行代码吧:
(我就不用hello world)灰色框是输入程序的地方,回车是换行,shift+回车执行灰色区域的代码,它的结果会直接在下面空白处出现。这就是Jupyter交互式的强大地方,将Python脚本分成片段式运行,尤其适合数据分析的摸索调整工作。
这里的print叫函数,和excel的函数同理,是程序执行的主体,负责将输入转化成输出(函数留在下一篇细讲)。这里将hello qinlu这段文字输出。新手可能会奇怪为什么要加引号,这种用引号括起来的文字在程序中叫字符串。
Python是一门计算机语言,它的逻辑和自然语言不一样,编程语言的目的是执行任务,所以它不能有歧义。为了规避各种歧义,人们创造了语法规则,只有正确的语法,才能被转换成CPU执行的机器码。
先了解Python语法中的数据类型。计算机最开始只被用于数值运算,后来被赋予了各种丰富的数据类型。
上面两个是小学生都会的四则运算,在计算机语言中可没有那么简单。它涉及了两个数值类型,整数int和浮点数float。整数和浮点数在计算机内部存储的方式是不同的,我们不用知道具体原理,明确一点,整数运算是永远精确的,浮点运算则可能有误差。
两种数据类型也可以互换,通过int函数和float函数。
有了数值,必然有文本,程序中叫字符串,用英文引号括起来表示。单引号和双引号没有区别,所以"qinlu"和'qinlu'是等价的,引号是边界,输出的时候不会包含它。当字符串内本身包含引号时,也不影响使用。
需要注意的是,不论单引号还是双引号,一旦混用很容易出现错误。因为程序并不知道它是字符串的边界还是符号。
解决方法有两种,一种是使用三引号,三引号代表整体引用,而且包含换行。第二种是引号前面加\,它是转义字符,表示这个引号就是单纯的字符。
三引号也可以用来注释,通常是大段的文字解释,如果一句话,我们更习惯用#,#后面的内容均不会作为程序执行。
时间是特殊的数值类型,它将结合datetime模块讲解。
还有两个常见的数据类型,布尔值和空值。布尔值是逻辑判断值,只有True和False。
布尔值在IF语句和数据清洗中经常使用,利用其过滤。布尔值能和布尔值运算,不过这里是and、not、or作为运算符,Ttue and True = True,False and True = False,False and False = False,not True = False,True or False = True等。
空值是一个特殊的值,表示为None,None不等于0,0具有数学意义而None没有,None更多表示该值缺失。
整数,浮点数,字符串,布尔值,空值就是Python常见的数据类型。Python3对中文的支持比较友好,所以大家可以用中文作为字符串试一下print。
数据类型构成了变量的基础,变量可以是任意的数据类型。想要用变量,必须先赋予变量一个值,这个过程叫赋值。
我首先给a赋予了一个整数值1,然后改变它为字符串abc,变量在Python中没有固定的数值类型,这是Python最大的优点,所以它在数据分析中很灵活。这也是它被称为动态语言的原因,相对应的叫静态语言。
Python是大小写敏感的语言,所以a和A是有区别的,这点请牢记。另外变量名尽可能使用英文,不要拼音,英文的可读性是优于拼音的。
变量有两种拼写风格,一种叫驼峰,一种叫下划线,以用户ID为例。驼峰命名法为userId,以一串英文词语user和id组成变量,第一个词语的首字母小写,第二个词语开始的首字母均大写。下划线命名法为user_id,全部小写,用_分割单词。
一个变量的值可以被赋予另外一个变量,如果b变量之前有另外一个值,那么会被1覆盖。呈从上而下的执行关系。
初看a = a + 1好像有逻辑问题,其实这涉及到了程序执行的先后顺序,程序是先计算a+1的值得到2,然后将其赋予(覆盖)了a。等号右边的计算先于左边,这是从右到左的逻辑关系。
有变量,自然有常量,常量是固定不变的量,可是在Python中没有真正意义的常量,一切皆可变,它更多是习惯上的叫法,即一旦赋值,就不再改变了。
Python的基础数学运算符号有+,-,*,/,//,%。前面四个就是加减乘除,其中除法的结果一定是浮点数。后面两个符号是除法的特殊形式,//代表除法中取整数,%代表除法中取余数。
到这里,新手部分已经讲解完成。再来讲讲数据结构。
二、数据结构Python一共有三大数据结构,它是Python进行数据分析的基础,分别是tuple元组,list数组以及dict字典。本文通过这三者的学习,打下数据分析的基础。
1、数组
数组是一个有序的集合,他用方括号表示。
num就是一个典型的数组。数组不限定其中的数据类型,可以是整数也可以是字符串,或者是混合型。
数组可以直接用特定的函数,函数名和Excel相近。
sum是求和,len则是统计数组中的元素个数。
上述列举的函数是数组内整体元素的应用,如果我只想针对单一的元素呢?比如查找,这里就要用到数组的特性,索引。索引和SQL中的索引差不多,都是用来指示数据所在位置的逻辑指针。数组的索引便是元素所在的序列位置。
注意,索引位置是从0开始算起,这是编程语言的默认特色了。num[0]指数组的第一个元素,num[1]指数组的第二个元素。
我们用len()计算出了数组元素个数是5,那么它最后一个元素的索引是4。若是数组内的元素特别多呢?此时查找数组最后一位的元素会有点麻烦。Python有一个简易的方法,可以用负数表示,意为从最后一个数字计算索引。
这里的num[4]等价于num[-1],num[-2]则指倒数第二个的元素。
再来一个新问题,如何一次性选择多个元素?例如筛选出数组前三个元素。在Python中,用:表示范围。
num[0:3]筛选了前三个元素,方括号左边是闭区间,右边是开区间,所以这里是num[0],num[1]和num[2],并不包含num[3]。这个方法叫做切片。
上述是索引的特殊用法,[0:]表示从第0个索引开始,直到最后一个元素。[:3]表示从第一个元素开始,直到第3个索引。
负数当然也有特殊用法。[-1:]表示从最后一个元素开始,因为它已经是最后一个元素了,所以只返回它本身。[:-1]表示从第一个元素开始到最后一个元素。num[-2:-1]和num[-3:-1]大同小异。
数组的增删查
我们已经了解数组的基本概念,不过仍旧停留在查找,它不涉及数据的变化。工作中,更多需要操纵数组,对数组的元素进行添加,删除,更改。
数组通过insert函数插入,函数的第一个参数表示插入的索引位置,第二个表示插入的值。
另外一种方式是append,直接在数组末尾添加上元素。它在之后讲到迭代和循环时应用较多。
如果要删除特定位置的元素,用pop函数。如果函数没有选择数值,默认删除最后一个元素,如果有,则删除数值对应索引的元素。
更改元素不需要用到函数,直接选取元素重新赋值即可。
到这里,数组增删改查已经讲完,但这只是一维数组,一维数组之上还有多维数组。如果现在有一份数据是关于学生信息,一共有三个学生,要求包含学生的姓名,年龄,和性别,应该怎么用数组表示呢?
有两种思路,一种是用三个一维数组分别表示学生的姓名,年龄和性别。
学生属性被拆分成多个数组,利用索引来表示其信息,这里的索引有些类似SQL的主键,通过索引查找到信息。但是这种方法并不直观,实际应用会比较麻烦,更好的方法是表示成多维数组。
所谓多维数组,是数组内再嵌套数组,图中表示的是一个宽度为3,高度为3的二维数组。此时student[0]返回的是数组而不是单一值。这种方法将学生信息合并在一起,比第一个案例更容易使用。
如果想选择第一个学生的性别,应该怎么办呢?很简单,后面再加一个索引即可。
现在尝试快速创建一个多维数组。
[0]*3将快速生成3个元素值为0的数组,这是一种快捷操作,而[row]*4则将其扩展成二维数据,因为是4,所以是3*4的结构。
这里有一个注意点,当我们想更改多维数组中的某一个元素而不是数组时,这种方式会错误。
按照正常的想法,martix[1][0]将会改变第二个数组中的第一个值为1,但是结果是所有数组的第一个值都变成1。这是因为在matrix = [row] * 4操作中,只是创建3个指向row的引用,可以简单理解成四个数组是一体的。一旦其中一个改变,所有的都会变。
比较稳妥的方式是直接定义多维数组,或者用循环间接定义。多维数组是一个挺重要的概念,它也能直接表示成矩阵,是后续很多算法和分析的基础(不过在pandas中,它是另外一种形式了)。
2、元组
tuple叫做元组,它和数组非常相似,不过用圆括号表示。但是它最大的特点是不能修改。
当我们想要修改时就会报错。
而选择和数组没有差异。
元组可以作为简化版的数组,因为它不可更改的特性,很多时候可以作为常量使用,防止被篡改。这样会更安全。
3、字典
字典dict全称dictionary,以键值对key-value的形式存储。所谓键值,就是将key作为索引存储。用大括号表示。
图中的'qinlu'是key,18是value值。key是唯一的,value可以对应各种数据类型。key-value的原理不妨想象成查找字典,拼音是key,对应的文字是value(当然字典的拼音不唯一)。
字典和数组的差异在于,因为字典以key的形式存储和查找,所以它的查询速度非常快,毕竟翻字典的时候你只要知道拼音就能快速定位了。对dict数据结构,10个key和10万个key在查找对应的value时速度没有太大差别。
这种查找方式的缺点是占用内存大。数组则相反,查找速度随着元素的增加逐渐下降,这个过程想象成程序在一页页的翻一本没有拼音的字典,直到找到内容。数组的优点是占用的内存空间小。
所以数组和字典的优缺点相反,dict是空间换时间,list是时间换空间,这是编程中一个比较重要的概念。实际中,数据分析师的工作不太涉及工程化,选用数组或者字典没有太严苛的限制。
细心的读者可能已经发现,字典定义时我的输入顺序是qinlu,lulu,qinqin,而打印出来是lulu,qinlu,qinqin,顺序变了。这是因为定义时key的顺序和放在内存的key顺序没有关系,key-value通过hash算法互相确定,甚至不同Python版本的哈希算法也不同。这一点应用中要避免出错。
既然字典通过key-value对匹配查找,那么它自然不能不用数组的数值索引,它只能通过key值。
如果key不存在,会报错。通过in方法,可以返回True或False,避免报错。
dict和list一样,直接通过赋值更改value
能不能更改key的名字?不能,key一旦确定,就无法再修改,好比字典定好后,你能修改字的拼音么?
dict中删除key和list一样,通过pop函数。增加key则是直接赋予一个新的键值对。
dict的keys和values两个函数直接输出所有的key值和value值。如果要转换成数组,则再外面嵌套一个list函数
items函数,将key-value对变成tuple形式,以数组的方式输出。
字典可以通过嵌套应用更复杂的数据格式,和NoSQL与JSON差不多。
基础的数据类型差不多了,更多函数应用大家可以网上自行查阅文档,这块掌握了,在数据清洗过程中将会非常高效,尤其是读取Excel数据时。当然不要求滚瓜烂熟,因为后面将学习更加强大的Numpy和Pandas。
三、基本函数1. 函数是什么
函数(Functions)是指可重复使用的程序片段。它们允许你为某个代码块赋予名字,允许你通过这一特殊的名字在你的程序任何地方来运行代码块,并可重复任何次数。这就是所谓的调用(Calling)函数。
在 Python 中,函数可以通过关键字 def 来定义。这一关键字后跟一个函数的标识符名称,再跟一对圆括号,其中可以包括一些变量的名称,再以冒号结尾,结束这一行。随后而来的语句块是函数的一部分。
在定义函数时给定的名称称作“形参”(Parameters),在调用函数时你所提供给函数的值称作“实参”(Arguments)。
2. 调用函数
要调用一个函数,需要知道函数的名称和参数。函数的参数只是输入到函数之中,以便我们可以传递不同的值给它,并获得相应的结果。
Python 内置的常用函数包括数据类型转换函数,比如int()函数可以把其他数据类型转换为整数。用input()读取用户的输入:
因为input()返回的数据类型是str,str不能直接和整数比较,必须先把str转换成整数。Python 提供了int()函数来完成这件事情:
函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”:
如果函数调用出错,一定要学会看错误信息。
3.定义函数
在 Python 中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。
在 Python 交互环境中定义函数时,注意 Python 会出现...的提示。函数定义结束后需要按两次回车重新回到>>>提示符下:
如果你已经把my_abs()的函数定义保存为abstest.py文件了,那么,可以在该文件的当前目录下启动Python 解释器,用from abstest import my_abs来导入my_abs()函数,注意abstest是文件名(不含.py扩展名)。
定义一个什么事也不做的空函数,可以用pass语句:
pass语句什么都不做,实际上它可以用作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。
pass还可以用在其他语句里,比如:
缺少了pass,代码运行就会有语法错误。
数据类型检查可以用内置函数isinstance()实现。
Python 的函数返回多值其实就是返回一个tuple;Python 函数返回的是单一值时,返回值仍然是一个tuple。但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值。函数可以同时返回多个值,但其实就是一个tuple。
函数执行完毕也没有return语句时,自动return None。
4.函数的参数
Python 的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。
4.1 位置参数:
power(x, n)函数有两个参数:x和n,这两个参数都是位置参数,调用函数时,传入的两个值按照位置顺序依次赋给参数x和n。
4.2 默认参数:
对于一些函数来说,你可能为希望使一些参数可选并使用默认的值,以避免用户不想为他们提供值的情况。默认参数值可以有效帮助解决这一情况。你可以通过在函数定义时附加一个赋值运算符=来为参数指定默认参数值。要注意到,默认参数值应该是常数。更确切地说,默认参数值应该是不可变的。
n = 2 是默认参数
定义默认参数要牢记一点:默认参数必须指向不变对象。且只有那些位于参数列表末尾的参数才能被赋予默认参数值,意即在函数的参数列表中拥有默认参数值的参数不能位于没有默认参数值的参数之前。
4.3 可变参数:
有时你可能想定义的函数里面能够有任意数量的变量,也就是参数数量是可变的,这可以通过使用星号来实现。即传入的参数个数是可变的。
我们声明一个诸如 *param 的星号参数时,从此处开始直到结束的所有位置参数(Positional Arguments)都将被收集并汇集成一个称为param的元组(Tuple)。
类似地,当我们声明一个诸如 **param 的双星号参数时,从此处开始直至结束的所有关键字参数都将被收集并汇集成一个名为 param 的字典(Dictionary)。
4.4 关键字参数:
如果你有一些具有许多参数的函数,而你又希望只对其中的一些进行指定,那么你可以通过命名它们来给这些参数赋值——这就是关键字参数(Keyword Arguments)——我们使用命名(关键字)而非位置来指定函数中的参数。
关键字参数允许你传入 0 个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
举个例子,扩展函数的功能。试想你正在做一个用户注册的功能,除了用户名和年龄是必填项外,其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。
和可变参数类似,也可以先组装出一个dict,然后,把该dict转换为关键字参数传进去:
4.5 命名关键字参数:
如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。这种方式定义函数并调用:
和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。
命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错。
使用命名关键字参数时,要特别注意,如果没有可变参数,就必须加一个*作为特殊分隔符。如果缺少*,Python 解释器将无法识别位置参数和命名关键字参数,即缺少 *,city和job被视为位置参数。
4.6 参数组合:
在 Python 中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这 5 种参数都可以组合使用。
但是参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。虽然可以组合多达 5 种参数,但不要同时使用太多的组合,否则函数接口的可理解性很差。
通过一个tuple和dict,你也可以调用函数:
对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。
5. 递归函数
如果一个函数在内部调用自身本身,这个函数就是递归函数。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。
使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。
通过下面的代码可以查看你的电脑最大算到多少:
解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的。
尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。
要改成尾递归方式,需要多一点代码,主要是要把每一步的乘积传入到递归函数中。Python 标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出的问题
四、了解Mumpy包Python数据分析绝对绕不过的四个包是numpy、scipy、pandas还有matplotlib。
numPy是Python数值计算最重要的基础包,大多数提供科学计算的包都是用numPy的数组作为构建基础。专门用来处理矩阵,它的运算效率比列表更高效。
1、NumPy 的 ndarray:多维数组对象
numpy的数据结构是n维的数组对象,叫做ndarray。可以用这种数组对整块数据执行一些数学运算,其语法跟标量元素之间的运算一样。
创建并操作多维数组:
"/>这里没写 np.float64 只写了 float,但是NumPy会将 Python 类型映射到等价的dtype上。
数组的dtype的另一个用法:
"/>u4(unit32):无符号的 32 位(4个字节)整型。
调用astype无论如何都会创建出一个新的数组(原始数据的一份拷贝)。
浮点数只能表示近似的分数值,在复杂计算中可能会积累一些浮点错误,因此比较操作只在一定小数位以内有效。
4、数组和标量之间的运算
数组:可对数据执行批量运算(不用编写循环即可)。这通常叫做矢量化(vectorization)。
大小相等的数组之间,它们之间任何的算术运算都会应用到元素级(每个元素都做这个运算了),数组与标量的算术运算也是。不同大小的数组之间的运算叫做广播(broadcasting)。5、索引和切片
数据不会被复制,任何修改都直接改了原数组。
如果仅是要一份副本,则用 .copy()。
对二维数组单个元素的索引:
这两种方式等价。
若arr2d[2],则输出的是一维数组[7,8,9]。
2*2*3的数组(2组2行3列):
6、布尔型索引
需要先引入:from numpy.random import randn
或将代码改成:data = np.random.randn(7, 4)
布尔型数组的长度必须跟被索引的轴长度一致。每个名字对应 data 数组一行。
对条件进行否定的两种方式:
组合应用多个布尔条件,可使用&、|等布尔算术运算符
通过布尔型索引选取数组中的数组,将总是创建数据的副本,即使返回一模一样的数组也是一样。
通过布尔型数组设置值:
通过一维布尔数组设置整行或列的值:
7、花式索引
指利用整数数组进行索引。
np.empty((8,4))
Return a new array of given shape and type, without initializing entries.
for i in range(8):
arr[i] = i
Return an object that produces a sequence of integers from start (inclusive)
to stop (exclusive) by step
为了以特定顺序选取行的子集,只需传入一个用于指定顺序的整数列表或 ndarray,使用负数索引会从末尾开始选取行(最后一行是 -1)。
一次传入多个索引组,返回一个一维数组:
取整列的两种方法,相当于给列排了顺序:
花式索引跟切片不一样,总是将数据复制到新数组中。
数组转置和轴对换
转置返回的是源数据的视图,不进行任何复制操作。数组有 transpose 方法,还有一个 T 属性来完成转置:
8、高维数组
Transpose 要一个轴编号:
<img class="capture deal" src="//s3.pstatp.com/wenda/wenda_web/static/style/image/loading_a788ad0.gif" _src="data:image/svg+xml;utf8,<svg xmlns=" http:="" www.w3.org="" 2000="" svg'="" width="640" height="462">"/>arr是 2 组 2 行 4 列的数组,transpose的参数表示shape的形状,对于这个例子来说,即2[0]、2[1]、4[2],transpose(1,0,2)转置后变为2[1]、2[0]、4[2],看起来仍是 2 组 2 行 4 列的形状,但数组内的元素经过转换后索引已经改变,也要遵循(1,0,2)的顺序。如转置前的数组arr[0,1,0]索引值为 4,转置后的数组arr'[1,0,0],索引值才为 4。其它同理。
ndarray 的 swapaxes 方法接受一对轴编号且返回源数据的视图:
"/>np.meshgrid函数接受两个一维数组,并产生两个二维矩阵(对应于两个数组中所有的(x, y)对。
将条件逻辑表述为数组运算
np.wherea函数是三元表达式x if condition else y的矢量化版本。
np.where的第二个和第三个参数不必是数组,传递给where的数组大小可以不相等,甚至可以是标量值。在数据分析工作中,where通常用于根据另一个数组而产生一个新的数组。
用where表述出更复杂的逻辑:(where的嵌套)
"/>10、排序
多维数组可以在任何一个轴向上进行排序,只需将轴编号传给sort:
顶级方法np.sort返回的数组已排序的副本,就地排序则会修改数组。
唯一化以及其他的集合逻辑
np.unique找出数组中的唯一值并返回已排序的结果
np.in1d用于测试一个数组的值在另一个数组的情况。
经历这次疫情?
经过这场疫情,你用有哪些反思?
●经过这一场疫情,本人觉得地球人类显得非常渺小。一味追求贪得无厌人的口会带来人类病毒传播致死犹如洪水猛兽,给人类带来巨大灾难,痛不欲生。即便是你再有钱也逃脱不了它。只有国家全体人民团结一心,同舟共济才能够将没有硝烟的战场打赢它。
同时,疫情面前也充分暴露了极少数人的道德低下的素质问题。再者,对政府的一些人不作为有待提高,能者上庸俗者下。毕竟疫情面前没有捷径走。科技兴国是必须的。不足可以批评但不要设骂,对社会的不公可以不满但不要攻击,对祖国的缺失可以痛心但不可唾弃,爱祖国就是爱自己。国有不平,我们基本衣食无忧。世有不公,我们依然信仰自由。
以往所看到的关于四零、五零、六零后的评论。四零、五零、六零后经历了多少磨难,尝尽了种种辛苦。今天早上,我看到一位朋友发来的另一种说法,觉得他说的有点道理,客观辩证,满满的都是正能量。全当一顿美味佳肴。他是这样说的:我们这一代人,是由贫困向小康,经历科技进最大、生活方式变化最显著的一代人。我们曾面朝黄土、背靠皇天,受过劳苦、换过饥饿,经过彷徨、有过失望,作过美梦、有过理想。儿时有过“楼上楼下、电灯电话、三转一响、西装革履"的期盼,大了也享受过呼机、手机、电视、电脑的社会主义初级阶段。
几十年间,入地(地铁)上天(飞机),超越了历代帝王的待遇;隐身(网络)亮像(视频),集结了干古神仙圣贤的智商!从当年骑自行车出门的美感,到如今驾驶汽车、乘坐飞机出行的平常;从漂洋过海的环球旅行,到旷世缥鈔的虛无网游。我们这一辈,人生经历跨越了几千年、生活品质超过了无数代!而如今,从童音朗朗到了白发苍苍,从推铁环、跳皮筋到坐高铁游遍祖国秀美山川。我们渐渐步入老年,我们将走向永恒!
但是,我们值了,我们该知足了!我们这一辈,没有经历兵荒马乱的战争、流离颠沛的逃亡、国破家亡的痛法、妻离子散的悲伤!国有不平,我们基本生活无忧!世有不公,我们依然道遥自由!虽也辛劳,却是为了儿孙!虽有苦衷,总还对得起人生!虽经磨难却能劫后余生!
我们要放飞梦想,抚平心情,笑看世界,乐对人生!特别是,我们还搭上了科技发展的末班车:我们聊微信,健康快乐每一天;我们搞网购,新奇物品送身边;我们打滴滴,专车接送自动付;我们搞团购,吃住打折很随便;我们常聚会,同学朋友乐翻天!知足吧,知足就能活好每一天!保住好身体,爱护好自己,健康、快乐、幸福永远伴随你!
诸位,我们是活的最值得的一代人, 六七十岁,似乎经历了六七千年。看到过原始社会的痕迹,经历过封建残余的侵装,干的是伟大的社会主义。我们这一代,出生在困难时期,成长在文革时期,学习在拨乱时期,工作在改革时期,工作在改革时期,养老在追梦时期!值!很值!没白活!
当你晨练在林菌小道上,当你闲逛在闹市人群之中,当你夜半聚会归家在无人的街道上,你带着悠闲哼着小曲徜徉在大街小巷,可有过一丝恐惧吗!但你可知道在这种环境下,世界上有多少国家特别包括西方发达国家,如果这时候独行,绝对是最恐怖最危险的时刻!吗!但你可知道在这种环境下,世界上有多少国家特别包括西方发达国家,如果这时候独行,绝对是最恐怖最危险的时刻!朋友们,知足吧!能活在当今,是我们的幸运,再也不要说我们的国家这也不行那也不行!
放眼全球有哪个国家能与我们的祖国比,要时刻记住自己是中国人!祖国万岁!万岁!万万岁!