精华内容
下载资源
问答
  • 个性化推荐系统by Mariya Yao 姚iya(Mariya Yao) 如何开发超个性化的推荐系统 (How to develop a hyper-personalized recommendation system) Expedia的Jack Chua访谈 (Interview with Jack Chua of Expedia) As ...

    个性化推荐系统

    by Mariya Yao

    姚iya(Mariya Yao)

    如何开发超个性化的推荐系统 (How to develop a hyper-personalized recommendation system)

    Expedia的Jack Chua访谈 (Interview with Jack Chua of Expedia)

    As part of our AI For Growth executive education series, we interview top executives at leading global companies who have successfully applied AI to grow their enterprises. Today, we sit down with Jack Chua, Director of Data Science at Expedia.

    作为“ AI促进增长”高管教育系列的一部分 ,我们采访了成功应用AI来发展企业的全球领先公司的高层管理人员。 今天,我们与Expedia数据科学总监Jack Chua坐在一起。

    Jack has built automated trading systems for multi-million dollar investment portfolios, terabyte-scale recommender systems for Amazon, and personalized marketing for an iconic American beverage brand. Previously he led industrial applications of machine learning for global clients of Boston Consulting Group (BCG). Now he heads the data science team at Expedia, where he applies his deep expertise in product and pricing optimization.

    Jack为数百万美元的投资组合构建了自动交易系统,为Amazon建立了TB级的推荐系统,并为一个标志性的美国饮料品牌进行了个性化营销。 此前,他为波士顿咨询集团(BCG)的全球客户领导了机器学习的工业应用。 现在,他领导Expedia的数据科学团队,在此领域他将深厚的专业知识应用于产品和价格优化。

    Watch the episode (or read the transcript below) to learn:

    观看剧集(或阅读下面的成绩单)以学习:

    1. A brief history about the evolution of the recommender system

      推荐系统发展的简要历史
    2. How to choose the right KPI metric to come up with the right mixture of recommendations

      如何选择正确的KPI指标以提出正确的建议组合
    3. Pitfalls to avoid when building your own recommender system

      建立自己的推荐系统时要避免的陷阱
    4. Hot topics in applying AI to retail in the next three to five years

      未来三到五年内将AI应用于零售的热门话题

    Marlene Jia: Thank you all for joining our AI for Growth Executive series. In this interview series, we learn from executives at leading global companies who have successfully applied AI to their enterprise and their team.

    Marlene Jia:谢谢大家加入我们的AI for Growth Executive系列。 在本系列访谈中,我们向成功地将AI应用于企业及其团队的全球领先公司的高管们学习。

    My name is Marlene — you can call me MJ — and today we’ll be chatting with Jack Chua, who’s the Director of Data Science at Expedia. He’s also had a background at Amazon, working at BCG, so I think we’ll have a lot of really interesting things to learn from Jack today.

    我叫Marlene,您可以叫我MJ。今天,我们将与Expedia数据科学总监Jack Chua聊天。 他还曾在亚马逊(BCG)任职,曾在BCG工作,所以我认为今天我们将向杰克学习很多非常有趣的东西。

    Jack, thanks for joining us. For our first question, we would love to hear more about you, your story, and how you first became interested in AI.

    杰克,谢谢你加入我们。 对于第一个问题,我们很想听到更多关于您,您的故事以及您最初对AI感兴趣的信息。

    Jack Chua: It’s a field that a lot of us inadvertently land into. Obviously it’s super interesting and very high impact.

    杰克·蔡:这是我们很多人不经意进入的领域。 显然,它非常有趣并且影响很大。

    My path has been a bit unconventional. I started studying theoretical math at the University of Chicago. Maybe two or three years in, I thought to myself, “What the heck am I going to do with this degree?”

    我的道路有点不合常规。 我开始在芝加哥大学学习理论数学。 大概两三年后,我对自己说:“这个学位我要做什么呢?”

    I looked into what was hot at the time. This was back in 2006. A lot of my peers were going into investment banking, hedge funds, that kind of space. I was thinking, “Is there a way to apply the theoretical math that I learned and merge that into the sexy M&A banking type of thing?”, and I stumbled into the field of quantitative finance.

    我看着当时最热的东西。 那是在2006年。我的许多同龄人都在投资银行,对冲基金等领域。 我当时在想:“有没有办法将我学到的理论数学应用到并购银行这种性感的事情中呢?”,我偶然发现了量化金融领域。

    I started voraciously reading books about option pricing, volatility trading, things where you can basically determine the underlying stochastic process of the instrument and trade, given its dynamics.

    我开始大量阅读有关期权定价,波动率交易的书籍,这些书籍使您可以基本确定工具和交易的潜在随机过程(考虑到其动态)。

    I was lucky. I got in before the whole subprime financial crisis hit, but I would say that was how I started bridging the gap between theoretical math and industry.

    我很幸运。 在整个次贷危机爆发之前,我就参与进来,但是我要说的是,我开始弥合理论数学与行业之间的鸿沟。

    Another point in time came when I started doing high-frequency trading. It’s a field where not just the statistical elements of the trade are necessary but also the engineering elements, and I realized the gap between knowing the theory [and] actually being able to implement the theory, whether in C++ or Python or what-have-you.

    另一个时间点是我开始进行高频交易时。 在这个领域中,不仅交易的统计要素是必要的,工程要素也是如此,而且我意识到了了解理论和实际能够实施该理论之间的差距,无论是在C ++,Python还是什么条件下,您。

    At the time, coming from a pretty theoretical academic background and job, I had to sit down and learn how to code from scratch. That’s what led me to go back to graduate school in Georgia Tech in applied mathematics, and that’s where machine learning was really starting to burgeon. I started taking computational data analysis courses, learned from some of the best professors in the world there. A few years later, here we are today.

    当时,由于具有相当理论的学术背景和工作,我不得不坐下来学习如何从头开始编写代码。 这就是让我回到佐治亚理工学院应用数学专业的研究生院的原因,而机器学习才真正开始蓬勃发展。 我开始学习计算数据分析课程,是从那里的一些世界上最好的教授那里学到的。 几年后,今天我们到了。

    MJ: You’ve worked at Amazon, [and] you’ve worked on numerous projects within recommendation engines. How did you get started there and where did that lead you? Obviously you’re at Expedia now.

    MJ:您曾在Amazon工作,[并且]在推荐引擎中从事过多个项目。 您是如何开始的,那又是什么导致的? 显然,您现在在Expedia。

    JC: Recommendation engines are a small part of what I do, but it’s a very important part. The way that I like to describe it is “surfacing the right content to the right customer at the right time and in the right channel.” On top of the content, it’s [a] whole ecosystem of how that content is displayed and what’s the context.

    JC:推荐引擎只是我所做工作的一小部分,但这是非常重要的一部分。 我要描述的方式是“在正确的时间和正确的渠道向正确的客户显示正确的内容。” 在内容之上,是[整个]生态系统,显示内容的显示方式和上下文。

    Maybe this is pre-empting other things you might ask me, but when you think about recommending something to someone, there’s a real business reason why you might want to do that, whether it’s to encourage cross-selling of products, or increasing the frequency of someone coming back to your website because you’ve got great information and so on. I think recommender engines have a great tie-in to the underlying KPI of what you want to drive.

    也许这是先发制人的事情,您可能会问我,但是当您考虑向某人推荐某物时,出于商业目的,无论是鼓励产品交叉销售还是提高频率,您都想这样做的人因为您掌握了很多信息而返回您的网站等等。 我认为推荐引擎与您要驱动的基础KPI有很大的联系。

    I think that’s what drove Amazon to invest in data scientists and engineers to work on the recommender systems, because the underlying context of why someone buys something is so complex. It could be the fact that it’s seasonal, maybe there’s a big discount that’s about to happen, or maybe it’s utilitarian, so they actually just thought of something [like] “Hey, I want this USB stick”, so they just go to our website and buy it.

    我认为,这就是促使亚马逊投资数据科学家和工程师来开发推荐系统的原因,因为某人购买某物的根本背景非常复杂。 可能是事实,这是季节性的,也许会有很大的折扣,或者也许是功利主义,所以他们实际上只是想到了一些东西,例如“嘿,我想要这个USB随身碟”,于是他们去找我们。网站并购买。

    All these contextual clues combine in a way that classical business intelligence or business rules cannot capture. It’s like a pure play AI problem, it’s something that using business rules or human rules would be suboptimal.

    所有这些上下文线索都以传统商业智能或业务规则无法捕获的方式结合在一起。 这就像一个纯粹的AI问题,使用业务规则或人工规则将不是最佳选择。

    MJ: Before we dive into all the details, I would love for you to tell us exactly what a recommendation engine really is, walk us through how you would go about building it, and what the factors of consideration are, which you started talking about.

    MJ:在我们深入探讨所有细节之前,我希望您能确切地告诉我们一个推荐引擎的真正含义,引导我们逐步了解如何构建推荐引擎以及考虑因素是什么,您开始谈论这些内容。

    JC: Just starting from pure axiomatic definition, a recommender system is real estate on a channel of some sort, whether it’s email or a website or mobile app, what-have-you. You’ve probably seen it on Amazon, it’s a ribbon that has multiple products on it. It could be an email that has multiple components that has different products. There’s building blocks that comprise these emails or these marketing materials, and it’s the job of the human to figure out what should go in there.

    JC:仅仅从纯粹的公理定义开始,推荐系统就是某种渠道上的房地产,无论是电子邮件,网站还是移动应用程序,都可以。 您可能已经在亚马逊上看到过它,它是一条丝带,上面有多种产品。 可能是一封电子邮件,其中包含具有不同产品的多个组件。 包含这些电子邮件或这些营销材料的构建基块,弄清楚应该放入其中的内容是人的工作。

    What drives the system is usually a whole engineering work streaming ecosystem that goes into a simple email that falls into your mailbox. It could have UX designers designing what the email looks like, whether it’s summer festive-looking or maybe something that looks more transactional.

    驱动系统的通常是整个工程工作流生态系统,它进入一条简单的电子邮件,并进入您的邮箱。 UX设计师可以设计电子邮件的外观,无论是夏季喜庆的外观,还是看起来更具交易性的外观。

    It could also just be data-driven — what data sciences tend to do — this is called a batch process. They’ll train the models in the backend, and the models could look at historical transaction data, they could look at a customer demographics, they could look at the product metadata itself, [like] the difference between a USB stick or a TV or a toy, take all this information and provide the marketers with a list of customer IDs to all the products that they think are going to be relevant.

    它也可能只是数据驱动的-数据科学倾向于做什么-这称为批处理 。 他们将在后端训练模型,模型可以查看历史交易数据,可以查看客户的人口统计信息,可以查看产品元数据本身,例如,USB记忆棒或电视或玩具,获取所有这些信息,并向营销人员提供他们认为相关的所有产品的客户ID列表。

    There are also real-time processes where literally the minute someone clicks on the email, it sends a signal back to the data scientists, [who] then immediately incorporates it back into the next touch point. Where I’ve seen that done best is probably Amazon, or actually in travel websites like Booking.com and Expedia.

    还有实时过程 ,从字面上看,只要有人单击电子邮件,它就会将信号发送回数据科学家,然后由后者立即将其合并到下一个接触点。 我认为做得最好的地方可能是亚马逊,或者实际上是在Booking.com和Expedia等旅游网站中。

    Retail is a space where the margins [are] so tight that to really innovate in this space, you have to think of different contexts and ways to understand what the customer’s trying to buy that’s out of the ordinary

    零售是一个利润空间非常狭窄的空间,要在这个空间中进行真正的创新,您必须考虑不同的环境和方式,以了解客户试图购买的商品与众不同

    MJ: You talked about Amazon doing it the best. Obviously they’ve been working on this for a long time. What spurred the initial development of this? It makes sense to us today, but Amazon and Google were some of the first companies to do this.

    MJ:您谈到了亚马逊做到最好。 显然,他们已经为此工作了很长时间。 是什么促使了这一最初的发展? 今天对我们来说这很有意义,但亚马逊和谷歌是最早这样做的公司。

    Can you tell us about the thought process and how it’s evolved since the time that you are there?

    您能给我们介绍一下思考过程以及自从您进入那里以来它是如何演变的吗?

    JC: Evolution might be the more natural point to start. All of these things in industry are generally driven by a business purpose. Recommender systems for retail [center around this idea of] “Hey, we have this dynamic real estate that no longer is limited to signposts or billboards, and it can change every second or maybe even every time someone lands on the website.” It’s now dynamic real estate, and in order to capture the dynamic-ness of the real estate, there needs to be some way to incorporate data seamlessly to update it.

    JC:进化可能是更自然的起点。 工业上的所有这些东西通常都是由商业目的驱动的。 用于零售的推荐系统[以以下想法为中心:“嘿,我们拥有的动态房地产不再仅限于路标或广告牌,它可以每秒或什至每次有人登陆网站时发生变化。” 现在它是动态房地产,并且为了捕获房地产的动态性,需要某种方式无缝整合数据以对其进行更新。

    Usually that’s how it started. There’s many things in practice that could be called recommendation systems, but we can just focus on websites for now.

    通常就是这样开始的。 在实践中有很多东西可以被称为推荐系统,但是我们现在只关注网站。

    If you land on Amazon, you have multiple ribbons, and a good example of how different KPIs can be targeted is every ribbon has a different purpose. One of them could be “these are things you’ve searched before” or “these are things we think you like” that are based on what you bought before.” Amazon is usually pretty good about explaining what the ribbon is, so you land on it, and there’s a contextual anchoring, so you see exactly what the recommendation is for.

    如果您登陆亚马逊,则有多个功能区,并且如何针对不同的KPI定位的一个很好的例子是每个功能区都有不同的用途。 其中之一可能是“这些是您之前搜索过的东西”或“这些我们认为您喜欢的东西”,这些都是基于您之前购买的商品。 亚马逊通常会很好地解释功能区是什么,因此您可以落在功能区上,并且具有上下文锚定功能,因此您可以确切地了解建议的用途。

    Historically, those ribbons have been business-ruled, so a very simple business rule might be “show things that you’ve bought before so you’ll buy it again.” Shockingly, that led to a lot of lift when Amazon implemented the Buy-It-Again module, so that’s something that doesn’t require any intelligence, just looking at what someone has bought before inserting the exact same thing. That can work for things that customers have irregularity buying like pet food or various beauty products, but it tends to not work in things like fashion, where if you buy one shirt, you’re probably not going to buy the exact same shirt again.

    从历史上看,这些功能区是业务规则,因此一个非常简单的业务规则可能是“显示您以前购买的东西,以便再次购买。” 令人震惊的是,当亚马逊实施“购买即买即买”模块时,这带来了很大的提升,因此不需要任何情报,只需在插入完全相同的东西之前先查看某人已经购买了什么。 这可以用于顾客不定期购买诸如宠物食品或各种美容产品之类的东西,但是在诸如时装之类的事物中往往不起作用,在这种情况下,如果您购买一件衬衫,您可能不会再购买完全相同的衬衫。

    That’s what drives the evolution of the recommender system, like, what is product [and] what is the KPI for the product, what are you trying to incentivize a purchase of the same thing or something like it? Based on that, you can tailor your algorithm.

    那就是推动推荐系统发展的因素,例如什么是产品[以及]什么是产品的KPI,您打算如何激励购买同一件或类似产品? 基于此,您可以定制算法。

    A simple business-rule algorithm for cross-sell might be association rule mining: looking at things that tend to be bought in the same basket.

    交叉销售的一种简单的业务规则算法可能是关联规则挖掘 :查看倾向于在同一篮子中购买的商品。

    In a grocery store context, there’s staples and things that are often cross-sold because they have a higher margin, maybe milk, bread, and eggs. Someone goes into the grocery store to buy milk, maybe then a natural thing to get next is bread.

    在杂货店的情况下,经常会交叉销售一些主食和东西,因为它们的利润较高,例如牛奶,面包和鸡蛋。 有人去杂货店买牛奶,也许接下来要买的自然是面包。

    That’s something that doesn’t require predictive analytics. It’s really just mining the data to see what patterns emerge.

    不需要预测分析。 它实际上只是挖掘数据以查看出现了哪些模式。

    Another way of doing it is based on something called collaborative filtering. This is [before] predictive models…actually I would say it’s not outdated because it’s newer than some predictive models…but it’s a relatively simple approach.

    另一种方法是基于称为协作过滤的方法 。 这是预测模型之前的…实际上,我要说它还不算过时,因为它比某些预测模型新……但是,这是一个相对简单的方法。

    The idea is to look at people that are similar to you in transactions.

    这样做的目的是要查看在交易中与您相似的人。

    Marlene and I are pretty similar at Amazon, so maybe we’ve both bought the exact same things except for one item. A natural thing to do is say, “Okay, because Marlene and Jack have been almost exactly the same until that one item, let’s just recommend that item to both Marlene and Jack and see what happens.”

    Marlene和我在亚马逊非常相似,所以也许我们都买了完全相同的东西,除了一件。 很自然地会说,“好吧,因为直到一件商品为止,玛琳和杰克几乎是完全一样的,所以我们只向玛琳和杰克推荐那一件,然后看看会发生什么。”

    It’s not as simple as that, because the similarity can go multiple ways. It could be I’m 10% of Marlene and 10% of someone else and 80% of someone else, and that combines into essentially a linear combination of different people. That score that’s extracted for every product for me is a combination of different people’s weights. That was a breakthrough, and Netflix and the movie recommendation problem spurred the development of collaborative filtering

    这不是那么简单,因为相似性可以通过多种途径进行。 可能我是Marlene的10%,其他人的10%,其他人的80%,这实际上是不同人的线性组合。 对我来说,为每种产品提取的得分都是不同人的权重的组合。 那是一个突破,Netflix和电影推荐问题刺激了协同过滤的发展

    Then it moved into, “Can we make collaborative filtering even better?” Are there ways to start incorporating variables into the collaborative filtering so [that] not only do we know that Jack and Marlene are similar, Jack and Marlene are similar because these products are similar? Or, maybe Jack and Marlene are similar because they both live in the same city and they’re both in the same demographic? That removed one of the fallbacks of the traditional collaborative filtering, which had no variables.

    然后它变成了“我们可以使协作过滤变得更好吗?” 是否有办法开始将变量合并到协作过滤中,以便不仅让我们知道杰克和马琳相似,而且杰克和马琳相似,因为这些产品相似? 或者,也许杰克和马琳是相似的,因为他们俩住在同一个城市,并且都在同一人口中? 这消除了传统协作过滤没有任何变量的后备之一。

    Another thing that came up was the idea of neural networks, and obviously that’s been a big thing with deep learning and so on. Because deep learning enables someone to take in the raw transactions, you can incorporate so much more information and just let the algorithm do things a priori.

    出现的另一件事是神经网络的概念,很显然,这对深度学习来说是一件大事。 因为深度学习使某人可以进行原始交易,所以您可以合并更多的信息,只需让该算法先验即可。

    With a neural network, you can take in transactions, you can take in product information, you can take in customer information…. All that can just flow in its raw form. There’s no need to create any new variables, and the algorithm will just figure out the rank order of products that you like to buy.

    使用神经网络,您可以接受交易,可以接受产品信息,可以接受客户信息…。 所有这些都可以原始形式流动。 无需创建任何新变量,该算法仅会确定您要购买的产品的排名。

    MJ: Deep learning is such a popular term and method [that] people are starting to explore. I would love to hear more.

    MJ:深度学习是一个很流行的术语和方法,人们开始探索。 我希望听到更多。

    JC: The traditional way you can think about neural nets are kind of like functional approximators. Actually, a linear regression is a neural net, just with one layer and one set of weights. Think back to middle school or high school arithmetic, when you do the chain rule you have an f(g(h)) equals to something. That’s essentially what a neural net is, but it’s actually discovering the correct f, g, and h that most accurately models your data.

    JC:关于神经网络的传统思考方式类似于函数近似器。 实际上,线性回归是一个神经网络,只有一层和一组权重。 回想初中或高中的算术,当您执行链式规则时,您的f(g(h))等于某物。 从本质上讲,这就是神经网络的本质,但实际上是在发现最正确地建模数据的正确的f,g和h。

    The most generic form of the deep neural net is a multi-layer feed-forward neural network. You can create multiple layers that are called dense layers. It’s dense because each node, which represents a variable, will connect to another node in the next layer.

    深度神经网络的最通用形式是多层前馈神经网络。 您可以创建多个称为密集层的层。 之所以密集,是因为每个代表变量的节点都将连接到下一层中的另一个节点。

    The node could be the types of a product you buy, or a node can be a customer. A neural net could be tens of thousands of nodes. With the advancements of back-propagation and all the new inference techniques, it’s now way easier to train a deep neural network than it has been in the past.

    节点可以是您购买的产品类型,也可以是客户。 一个神经网络可能是数以万计的节点。 随着反向传播技术的发展和所有新的推理技术的发展,现在比以往任何时候都更容易训练深度神经网络。

    I’m not an expert in the underlying technology, but definitely an advanced practitioner.

    我不是基础技术专家,但绝对是高级从业者。

    MJ: You had mentioned earlier that some of these methods are actually not predictive. Which of the methods are predictive, then? What are the current methods that companies like Netflix and Amazon are using?

    MJ:您之前已经提到过,其中某些方法实际上并不是预测性的。 那么,哪种方法可以预测? Netflix和亚马逊等公司目前正在使用什么方法?

    JC: Collaborative filtering, I think it maybe could be predictive, but most of how people use it is not predictive. That’s historically how Netflix has used it, and that’s just a limitation of the collaborative filtering and matrix factorization family of algorithms.

    JC:协作过滤,我认为它可能是可预测的,但是人们使用它的大多数方式都不是可预测的。 从历史上看,这就是Netflix使用它的方式,而这仅仅是协作过滤和矩阵分解算法系列的局限。

    The reason is because the way you think about it is actually a matrix completion problem. If you think of a matrix, each customer would represent one row, and every column would represent the product, and every cell in a matrix is a score that represents how much a customer likes that product. In Netflix’s case, [it would be] how much a customer likes that movie. As you can imagine, that matrix is probably pretty sparse, because not every customer has seen every movie.

    原因是因为您的思考方式实际上是矩阵完成问题。 如果考虑矩阵,则每个客户将代表一行,每一列将代表产品,矩阵中的每个单元格都是一个分数,表示一个顾客对产品的喜欢程度。 就Netflix而言,[将是]客户对这部电影的喜欢程度。 可以想象,该矩阵可能很稀疏,因为不是每个客户都看过每部电影。

    That’s one of the drawbacks of collaborative filtering: it’s not only not predictive, but often you’ve got a really sparse matrix.

    这是协作过滤的缺点之一:它不仅不是预测性的,而且经常会有一个非常稀疏的矩阵。

    The way to initialize this matrix is to use some historical figure. Maybe this is Jack’s rank on the movie, because he watched the movie last week and he gave it a 5. It’s not predictive in the sense that maybe I would give the movie a five next week.

    初始化此矩阵的方法是使用一些历史数据。 也许这是杰克在电影中的排名,因为他上周看了电影并给了它5分。从某种意义上说,我下周可能给电影给5分,这并不是预料之中的。

    I think part of Netflix decided that this was fine because movie preference is generally pretty stable over time. If you watched a movie a year ago, there’s a good chance you probably still like the movie now, so the predictive component is not as important for this problem.

    我认为Netflix的一部分认为这很好,因为随着时间的流逝,电影偏好通常相当稳定。 如果您一年前看过电影,那么很有可能您现在仍然喜欢这部电影,因此预测性组件对于这个问题并不那么重要。

    In transactions or retail, it’s quite possible that your preference changes rapidly, or the minute you buy something, it no longer has the same recommendation power.

    在交易或零售中,您的偏好很有可能会Swift变化,或者在您购买商品的那一刻,它就不再具有相同的推荐力。

    That’s where the predictive elements come in, and you can frame recommender systems in a similar way as you frame other problems like churn detection or anomaly detection. You have an X matrix that contains all your variables, and these X variables are historical. You know if you’re at a time T, these are things that are time T minus one before, and your Y variable is the thing that’s predictive, so it’s actually time t+1, or t plus a month, or whatever forward lead period you have.

    这就是预测元素的来源,您可以采用与其他问题(如流失检测或异常检测)相同的方式来构建推荐系统。 您有一个包含所有变量的X矩阵,并且这些X变量是历史变量。 您知道您是否在时间T上,这些是时间T减去前一个,而Y变量是可预测的,因此实际上是时间t + 1或t加一个月,或任何前导期间。

    That’s how most classification and regression problems are structured. If you train a deep neural network, that’s pretty much exactly the information that goes into training your neural network.

    这就是大多数分类和回归问题的结构方式。 如果您训练一个深层的神经网络,那几乎就是训练您的神经网络所需要的信息。

    I’m not talking about tensors or anything that’s more dimensional than that, but generally speaking, you’ll have a dataset that contains your historical data, you’ll have an objective function or Y variable that contains the future information you want to predict.

    我不是在讨论张量或其他任何维数,但通常来说,您将拥有一个包含历史数据的数据集,您将拥有一个目标函数或Y变量,其中包含您要预测的未来信息。

    What happens is, when you’re trying to predict something given your current point in time, you’re not leaking information. You’re only using the information you know at time t to predict time t+1.

    发生的事情是,当您尝试根据给定的当前时间点预测某件事时,您不会泄漏信息。 您仅使用在时间t知道的信息来预测时间t + 1。

    MJ: To your point about all of these use cases that you mentioned, like retail, movies, so many brands (both small and large) talk about building a recommender engine of some sort. What really makes it powerful?

    MJ:关于您提到的所有这些用例,例如零售,电影,这么多的品牌(无论大小)都在谈论构建某种推荐引擎。 是什么真正使其强大?

    With Amazon obviously you can say that they have a big data set, but what are some of the other variables that allow a recommendation engine to be better than the next?

    显然,借助Amazon,您可以说他们拥有大量数据集,但哪些其他变量可以使推荐引擎比下一个更好呢?

    JC: Data is number one, [like] the data assets that your company has housed. If it’s Amazon, obviously it’s the incredible number of customers and transactions they have, the incredible product diversity they have, so not just in the popular products but even in the long tail.

    JC:数据是第一位的,[就像]您公司存放的数据资产。 如果是亚马逊,很明显,这是他们拥有难以置信的客户和交易数量,拥有令人难以置信的产品多样性,不仅是受欢迎的产品,甚至是长尾巴。

    After data, then the algorithm is what can help differentiate. If you’re a company that’s using simple business rules versus deep neural networks or something like that, that makes a big difference as well.

    在获得数据之后,该算法才可以帮助区分。 如果您是使用简单业务规则而不是深度神经网络之类的公司,那也将有很大的不同。

    Another thing that a lot of people underestimate but is super important is the customer experience. Instead of just throwing a ribbon with a bunch of recommendations, thinking through a whole ecosystem with things like “what are all the touch points that customers are receiving”, “am I fatiguing the customer with too many touch points”, “is it information overload”, “am I representing the intent correctly”?

    许多人低估了但超级重要的另一件事是客户体验。 而不是仅仅提出一些建议,而是通过整个生态系统思考诸如“客户正在接受的所有接触点是什么”,“我是否通过过多的接触点使客户疲劳”,“这是信息吗?超载”,“我是否正确表示了意图”?

    Amazon, for instance, historically has been utilitarian. A good number of customers [go] to Amazon with an explicit agenda in mind, like they wanted to buy specific things, [so] they type it in and bought it. [Amazon] tried really hard to leverage that, because it’s a good thing, it’s good that people come to Amazon for the purpose. Leverage that, lean into that to see how we can cross sell better, selling things in different channels [such as] digital media, sell hardware [like] Kindles.

    例如,亚马逊历史上一直是功利主义者。 许多客户带着明确的议程去亚马逊,就像他们想购买特定的东西一样,所以他们输入并购买了它。 [Amazon]竭尽全力利用这一点,因为这是一件好事,人们来到此地来亚马逊是一件好事。 利用这一点,了解如何才能更好地交叉销售,以不同的渠道(例如,数字媒体)销售产品,销售硬件(例如,Kindle)。

    MJ: I don’t know if you saw the Mary Meeker report. She had said that 49% of people who go to Amazon start and basically end with Amazon. They search through Amazon and then they purchase through Amazon.

    MJ:我不知道您是否看过Mary Meeker的报告 。 她曾说过,去亚马逊的人中有49%开始并基本上以亚马逊为终点。 他们通过亚马逊搜索,然后通过亚马逊购买。

    To your point, I think you’re right, most people do come with the intent of purchasing there. It’s very utilitarian.

    就您的观点而言,我认为您是对的,大多数人的确会在此购买商品。 这是非常功利的。

    JC: Another really great example that I love to give is Starbucks. If you’re part of the Starbucks loyalty program, more often than not you’ve seen games that pop up either through email or your app.

    JC:我喜欢举的另一个非常好的例子是星巴克。 如果您是星巴克会员计划的一部分,那么您经常会看到通过电子邮件或应用弹出的游戏。

    It’s a game so it’s a different medium than your traditional recommender system, but underlying that game is actually a heavy customer data-driven recommender engine, which determines what products you like, what is the type of engagement you need in order to be a more valuable customer, and so on.

    这是一款游戏,因此与传统的推荐系统不同,但该游戏实际上是一个由大量客户数据驱动的推荐引擎,它决定了您喜欢的产品,成为哪种类型的订婚产品。有价值的客户,等等。

    The main point is that data scientists have to work in lockstep with either designers or marketers or business analyst in order to come up with the optimal experience.

    要点是,数据科学家必须与设计师,市场营销人员或业务分析师保持同步,以便获得最佳体验。

    Otherwise, something like a game requires so many different cross functional lines of thought that I don’t think either a data scientist or a marketer could have done it by themselves. Data scientists would have just tried to figure out the recommender problem and not thought about the experience, whereas marketers would not even realize that data science could be used to optimize something. Literally, to as many customers that they can have, you can pull as many levers. If you have 15 million customers, you literally could have 15 million variants using data science.

    否则,诸如游戏之类的东西需要太多不同的跨职能思路,以至于我不认为数据科学家或营销人员都可以自己完成。 数据科学家只是试图找出推荐者的问题,而没有考虑经验,而营销人员甚至不会意识到可以使用数据科学来优化某些东西。 从字面上看,对于可能拥有的尽可能多的客户,您可以拉很多杠杆。 如果您有1500万客户,那么使用数据科学就可以拥有1500万个变体。

    MJ: We’ve already talked about some examples where [companies have] built a really strong recommendation engine. Can you give some other examples of good recommendation engine you’ve seen out there, whether it be brands or specific use cases within companies?

    MJ:我们已经讨论了一些[公司]建立了非常强大的推荐引擎的示例。 您能否列举一些您所见过的良好推荐引擎的例子,无论是品牌还是公司内部的特定用例?

    JC: There’s so many. I love Spotify. I think they do a great job with both the customer-based recommender system, meaning finding out which other people are like you and what they like to listen to…

    JC:有很多。 我喜欢Spotify。 我认为他们在基于客户的推荐系统上都做得很好,这意味着找出哪些人喜欢您以及他们喜欢听什么。

    MJ: They squash SoundCloud at this point, in my opinion. I used SoundCloud before Spotify…

    MJ:在我看来,他们现在压扁了SoundCloud。 我在Spotify之前使用了SoundCloud…

    JC: I did too actually. But yes, Spotify definitely is — in terms of engineering and the sophistication of what they what they recommend — they just do so much more.

    JC:我实际上也这样做。 但是,是的,Spotify绝对是-从工程学和他们所推荐的建议的复杂性方面,他们所做的更多。

    The interesting thing — most likely, I don’t know for sure because I don’t work there — they actually look at the music itself. Whether it’s the tags of the music, like what kind of genre is it, who’s the artist…they also probably look at what’s the tempo, what are the instruments, and they’re actually digging into the DNA of the music, similar to what Pandora was doing and use that to figure out what types of music you’d like. So, going beyond genre as well.

    有趣的是-很可能是我不确定,因为我不在那儿工作-他们实际上是在看音乐本身。 无论是音乐的标签,例如音乐的流派,艺术家是谁……他们还可能查看节奏是什么,乐器是什么,并且它们实际上是在挖掘音乐的DNA,类似于潘多拉(Pandora)正在这样做,并以此来确定您想要哪种音乐。 因此,不仅限于类型。

    I’ve noticed that sometimes Spotify recommends me things that I didn’t think I would ever like listening to, but the more I listen to it, the more I realize it actually is similar to things that I like.

    我注意到有时Spotify向我推荐一些我认为我不想听的东西,但是我听的越多,我就越意识到它实际上与我喜欢的东西相似。

    Another one is YouTube. They have slightly different KPIs in retail — in the sense that most of your KPIs are not transaction-based, they center on engagement — so they’re designed to keep you on the website for longer.

    另一个是YouTube。 它们在零售中的KPI略有不同-从某种意义上说,您的大多数KPI都不基于交易,而是以参与度为中心-因此,它们的设计目的是使您在网站上停留的时间更长。

    I think their process probably starts with the design, so what is the actual UX that we want to enable someone that’s currently on the platform to do, so kind of like the whole customer journey mapping and figuring out at this point in a journey, what is the right experience for the customer.

    我认为他们的过程可能始于设计,那么我们要使平台上当前的某人能够执行的实际UX是什么,就像整个客户旅程映射并确定旅程中的这一点一样,是客户的正确体验。

    An example might be when you’ve just finished watching a video, that’s a great piece of real estate to step in and figure out based on what was just watched, so contextual on Marlene or Jack finishing this video on fuzzy cats, what is the next thing that we think that they would like to watch?

    例如,当您刚看完视频时,这是一个很大的领域,可以根据刚刚观看的内容来弄清楚,因此在Marlene或Jack的上下文环境中使用模糊猫来完成此视频,这是什么呢?我们认为他们想观看的下一件事?

    Often times, these contextual hints pop up [at] opportune moments on a customer journey, and I think YouTube figures out what these journeys are and what these optimal points are, and then builds bottles around that.

    通常,这些上下文提示会在客户旅程中的适当时刻弹出,我认为YouTube会弄清楚这些旅程是什么以及这些最佳点是什么,然后围绕这些线索建立瓶子。

    MJ: Now you’ve spurred a different question, which is how exactly people go about creating these engines? You mentioned that with different use cases, you have to start at different questions and different points. For example, you said with YouTube, you might start with a question of design and engagement, but with Spotify, it might be different.

    MJ:现在您引发了一个不同的问题,那就是人们到底要如何去创造这些引擎? 您提到,对于不同的用例,您必须从不同的问题和不同的地方入手。 例如,您说过在YouTube上,您可能会从设计和参与度问题入手,但对于Spotify,可能有所不同。

    What are the different ways you would even begin to design this engine for a good customer experience?

    您甚至会开始设计这种引擎以获得良好的客户体验的不同方式是什么?

    JC: That’s a good question. I wish there was a one-size-fits-all answer, but I don’t think there is. It’s kind of a gray thing because there’s multiple ways that YouTube or Spotify could have designed their experience but I think it’s generally just working cross-functionally and figuring out what it is, what is the rank order of things that customers care about.

    JC:这是一个很好的问题。 我希望有一个千篇一律的答案,但我认为没有答案。 这是一件灰色的事情,因为YouTube或Spotify可以采用多种方式设计他们的体验,但我认为通常只是跨功能工作并弄清楚它是什么,客户关心的事物的等级顺序是什么。

    For Amazon, it was, “Hey, our customers are really utilitarian, let’s cross-sell to them a bit more. For Expedia or travel companies, it’s “Let’s figure out customer segments.” Can we figure out if someone is a luxury traveler or a business traveler? Are they [at] the end of the customer lifecycle, where they’re off to churn and go to some other website, or are they in the beginning, so it’s more about education?

    对于亚马逊来说,这是“嘿,我们的客户确实是功利主义者,让我们再交叉销售给他们。 对于Expedia或旅游公司,它是“让我们找出客户群”。 我们能否确定某人是豪华旅行者还是商务旅行者? 他们是在客户生命周期的尽头,他们会流失并访问其他网站,还是一开始就是他们,所以更多地是关于教育?

    There’s just so many ways to characterize a customer, but I think it generally starts with understanding the customer better, like what segments they’re in, how they engage. Of the people that are falling off, what are the leading indicators that might tell us you’re falling off? Of the people that are just starting, what are the indicators if someone’s actually growing into a stable trajectory? Those are just your typical customer lifecycle modeling, and from there, designing the right experience to maximize the life cycle.

    表征客户的方法有很多,但我认为通常首先要更好地了解客户,例如他们所处的细分市场,如何参与。 在流失的人中,哪些主要指标可以告诉我们您正在流失? 在刚刚起步的人们中,如果某人真正成长为稳定的轨迹,有哪些指标? 这些只是您典型的客户生命周期建模,然后从那里设计正确的体验以最大化生命周期。

    MJ: I assume KPIs are similar. The KPIs for Spotify, for example, or for Amazon are probably different than YouTube, to your point around [whether] you’re going for the purchase or the next song or engagement.

    MJ:我认为KPI相似。 例如,关于[无论]您要购买商品还是下一首歌曲或参与活动,Spotify或Amazon的KPI可能与YouTube不同。

    What would you say are some baseline KPIs that you track for these engines?

    您要说的是您为这些引擎跟踪的一些基准KPI?

    JC: That’s a really great question. Conversion, whether it’s converting to a transaction or converting into a click, that’s generally the de facto standard for a recommender system. I’ve also seen recommender systems optimized for other things like revenue and profit and maybe even some more esoteric things, like revenue on items that have a higher margin than 30% net of returns, so that objective would be “I want to recommend things that are high margin and people don’t just return it.” So you can be very precise with these KPIs.

    JC:这是一个非常好的问题。 转换,无论是转换为交易还是转换为点击,通常都是推荐系统的事实上的标准。 我还看到推荐系统针对其他方面进行了优化,例如收入和利润,甚至还有一些更深奥的事情,例如利润率高于30%的净收益的商品收入,因此目标是“我想推荐事物那是高利润,人们不仅会退还它。” 因此,使用这些KPI可以非常精确。

    The thing to realize, in choosing between these, is what am I enabling? In choosing this KPI, what is actually happening to the things that I recommend?

    在这两者之间进行选择时,要实现的目标是使我实现了什么? 在选择此KPI时,我建议的事情实际上发生了什么?

    For the margin one, what’s most likely to happen is if we build a data science model that optimizes profit, naturally you’re gonna start recommending things that are high margin. It may not necessarily be what the customer wants. Even if it doesn’t say high profit, like you don’t explicitly call that on your website, it still biases your algorithm to pick things that are not representative of a broader set.

    对于保证金来说,最有可能发生的是,如果我们建立了一个优化利润的数据科学模型,那么您自然会开始推荐高利润率的东西。 不一定是客户想要的。 即使它没有说高利润,就像您没有在您的网站上明确调用那样,它仍然会使您的算法偏向于选择不代表更广泛集合的事物。

    Another interesting KPI in the recommender system is diversity. In most models, the model will have a pretty strong conviction of what type of customer you are. It doesn’t take into account the cross-correlation between the things I recommend. Maybe from going to Amazon, it determines that I really like socks. Most likely in the top ten, you’ll see socks, maybe you’ll see underwear, maybe you’ll see more socks. Although it may be true that I like socks, one slot is enough for that sock. There needs to be a way to take things that scored lower in the algorithm and surface that up for the sake of diversity.

    推荐系统中另一个有趣的KPI是多样性。 在大多数模型中,模型都会对您是哪种类型的客户有很强的信念。 它没有考虑我推荐的事物之间的互相关性。 也许从去亚马逊开始,它决定了我真的很喜欢袜子。 最有可能在前十名中,您会看到袜子,也许您会看到内衣,也许您会看到更多的袜子。 尽管我确实喜欢袜子,但一个袜子足以容纳那只袜子。 为了多样性,需要一种方法来处理在算法中得分较低的事物,并将其表面化。

    There’s these cross-hybridized objective functions where you do want to maximize for conversion, but you have to take into account the customer experience as well. If you give them diversity, then they explore the longer-tailed products, and [maybe] longer term [that] might increase customer value

    您确实希望在这些交叉混合的目标函数中实现最大化的转换,但是您也必须考虑客户体验。 如果您赋予他们多样性,那么他们将探索更长尾的产品,并且[可能]长期[可能]增加客户价值

    MJ: I have so many more questions, but I think we’re running out of time. I want to just ask this final question: what are your final tips for building a good recommendation engine? How do you avoid the pitfalls? What are the things to watch out for?

    MJ:我还有很多其他问题,但是我认为我们已经没时间了。 我只想问最后一个问题:构建良好推荐引擎的最终提示是什么? 您如何避免陷阱? 需要注意什么?

    JC: The number one tip: you know your product better than a vendor does. The vendor can give you advice on the algorithm and what to use, but [don’t] plug-and-play a recommender system into your website without really understanding your business and what drives it. Is it like a milk and eggs and bread type of thing, or is it a fashion thing where you don’t want to recommend too similar things, or if it’s a lifecycle thing where you need to recommend things that fit the lifecycle, only you know that. If a vendor claims to know this better than you, I think it’s a clear sign to stay away.

    JC:第一要诀:您比供应商更了解您的产品。 供应商可以为您提供有关算法及其使用方法的建议,但[不要]在您不真正了解您的业务及其驱动因素的情况下,将推荐系统插入即插即用。 是像牛奶,鸡蛋和面包之类的东西,还是不想推荐过于相似的事物的时尚事物,或者,如果它是生命周期的事物,您需要推荐适合生命周期的事物,只有您自己我知道。 如果供应商声称比您更了解这一点,那么我认为这是一个明确的信号,可以远离。

    Number two, you have to consider the maturity of your business to actually take in something that’s as complicated as deep neural network. Obviously a deep neural net will give you cutting edge performance, [but] your business might not need that depending on where it is.

    第二,您必须考虑业务的成熟度,才能真正接受像深度神经网络一样复杂的事物。 显然,深层的神经网络将为您提供最先进的性能,但您的业务可能不需要,具体取决于它在哪里。

    Something I found is that if you look at all the research papers about random forests versus gradient boosted decision trees versus neural network, the difference in the cutting edge once you get past the gradient boosted tree is really small. You’ll generally only see a five to ten percent improvement in your accuracy by going to something that’s cutting edge. What this means is that you can get to 80% of what you need with something that’s fairly simple. Take that into account.

    我发现,如果您查看有关随机森林梯度增强决策树神经网络的所有研究论文,那么经过梯度增强树之后,最前沿的差异确实很小。 通过采用最先进的方法,您通常只会看到5%到10%的精度提高。 这意味着您可以用相当简单的东西就可以满足80%的需求。 考虑到这一点。

    Another thing to take into account is the resourcing. If you do decide to build something in-house, it’s hard to find a deep learning expert or a machine learning expert that can maintain it over time. What this means is that your business has to be mature enough to support these engineers, because I think a lot of people have a notion that once they build it for me, it’s done, I have the capability.

    要考虑的另一件事是资源。 如果您决定自己构建某些东西,很难找到可以长期维护它的深度学习专家或机器学习专家。 这意味着您的业务必须足够成熟才能支持这些工程师,因为我认为很多人都认为,一旦为我构建它,它就完成了,我就有能力了。

    In reality, it’s something that needs to be maintained over time, improved, bugs can pop up. No machine learning pipeline is perfect. From a strategic perspective or a technical perspective, you have to think about it as a long-term investment versus just a build and throw it over the fence, which again brings it back to why it’s more important to build a capability in-house than having a vendor do it, because the vendor isn’t invested long-term in your business like you are.

    实际上,随着时间的流逝,需要对其进行维护,改进,并且可能会弹出错误。 没有机器学习管道是完美的。 从战略或技术的角度来看,您必须将其视为一项长期投资,而不是将其视为构建并扔掉篱笆,这又使它回到为什么在内部构建能力比在内部构建更重要的原因让供应商来做,因为供应商没有像您一样长期投资于您的业务。

    MJ: Just thinking about this, I think you are probably the best recommender engine. What do you think would be a good topic for us to cover in another one of our AI for Growth series?

    MJ:考虑到这一点,我认为您可能是最好的推荐引擎。 您认为什么对我们来说是一个很好的话题,可以在我们的《人工智能促进增长》系列的另一篇文章中介绍?

    JC: Well, tapping it into the human neural network, I think something around pricing would be interesting [like] dynamic pricing and the ability to price on-the-fly is something that, especially for companies that are moving away from brick-and-mortar channels or on order, companies like Uber where pricing things is done on-the-spot, that’s something that machine learning has really just scratched the surface in industry

    JC:好吧,将其应用到人的神经网络中,我认为围绕定价的某些事情会很有趣,例如动态定价,以及即时定价的能力,尤其是对于那些不再依赖实体定价的公司而言。 -砂浆渠道或按订单订购,像Uber这样的公司都在当场进行定价,这是机器学习的真正开端。

    Another really interesting thing is the intersection between pricing and personalization. Not just servicing the right content but also servicing the right price in conjunction with that content to give personalized promos that are dynamic and tailored to every customer. That looks like the next frontier for retail over the next three to five years. I think it’s going to be happening pretty quickly, because there’s so much value associated with it. I’m happy to come on and discuss more, depending on how many of these you have.

    另一个真正有趣的事情是定价和个性化之间的交集。 不仅为正确的内容提供服务,而且还与该内容一起提供正确的价格,从而为每个客户提供动态且量身定制的个性化促销。 这看起来像是未来三到五年内零售业的下一个前沿领域。 我认为它将很快发生,因为与它相关的价值很大。 我很乐意继续讨论,具体取决于您有多少个。

    MJ: Thank you so much, Jack. This was such a wonderful conversation, and I’m sure we’ll be just having you on another one another time, so thank you. And thank you everyone for tuning into AI for Growth. We’ll see you guys at our next episode!

    MJ:非常感谢你,杰克。 这次谈话真是太好了,我敢肯定,我们会再一次让你见面,所以谢谢。 并感谢大家适应AI增长。 我们下一集会再见!

    学到了什么? 点击 ? 说“谢谢!” 并帮助其他人找到本文。 (Learned something? Click the ? to say “thanks!” and help others find this article.)

    The full transcript from this interview was first published on TopBots.

    采访的全文最初在TopBots发表

    翻译自: https://www.freecodecamp.org/news/how-to-develop-a-hyper-personalized-recommendation-system-ab9faf41b9a/

    个性化推荐系统

    展开全文
  • BI 解决方案基于 DataQuant,可以同时满足大型和小型数据报告需求,并且用户可以对界面和对象进行定制和个性化。 关于 DataQuant 的更信息,请参见 参考资料 小节列出的 DataQuant 网站。 DataQuant 包含...

    XML 的发展

    可扩展标记语言(Extensible Markup Language,XML)是于 1998 年首次提出的 World Wide Web Consortium (W3C) 标准,它是一种用于定义描述文档内容和逻辑结构的数据标记语言。XML 文档由数据值和描述数据的 “标记(markup)” 组成,比如,123-456-7890。使用 XML,企业可以指定使用某种格式的各种类型的数据,运行在任何平台上的应用程序都可以轻松导入和处理这种格式。XML 越来越多地被企业和政府机构作为一种内部数据格式,用于从电子表格捕捉数据(W3C 标准 XForms 就是一个例子)以及对业务建模。

    此外,很多基于 XML 的行业标准也得到开发,从而提供了一种通用格式来简化企业内部和企业之间的数据交换和处理。这些标准针对不同的行业,比如,Association of Cooperative Operations Research (ACORD) 针对保险行业,Financial Information eXchange Markup Language (FIXML) 针对金融行业,Health Level 7 (HL7) 针对健康保健行业,National Information Exchange Model (NIEM) 针对政府机构,Association for Retail Technology Standards (ARTS) 面向零售业,Universal Business Language (UBL) 用于发票等的商业文档,而 Modernized e-File (MeF) 则用于纳税申报。

    最初,许多企业仅仅将 XML 作为一种信息交换格式,构建它是为了发送和解析收到的内容,以从中提取所需的数据。然而,随着时间推移,XML 的使用日益频繁,其规模和复杂度也不断增长,它逐渐成为企业运营中的一个关键组成。因此,现在很多企业都力求原样存储 XML,以供日后进行处理和分析。由于 XML 数据具有重要的价值,这些企业现在都转向使用关系数据库来存储和管理数据、控制访问、管理备份和恢复流程,并支持应用程序在业务处理和报告方面进行交互。下一节将简要回顾 XML 数据管理方式。

    XML 数据管理

    过去,希望处理和存储 XML 的企业的选择很有限。他们只能使用两种方法:序列化完整的 XML 内容并存储到文件系统或数据库大对象列(CLOB 或 BLOB)中,或是解析 XML 并提取特定元素(丢掉其余部分),将提取出的项存储到关系表的列中。虽然第一种方法符合常规需求,但效率非常低,因为每次访问数据都需要传输整个文档让应用程序进行重新解析,从而获得内容。后一种方法会造成原始 XML 文档损失上下文,以及损失被丢掉的内容。这两种方法都会导致运行时低效和庞大的应用程序开销,因为需要不断传输、处理、集合和分解 XML 文档。

    在 DB2 9 中引入 pureXML 后,出现了一种新的 XML 存储选择,从而为大多数应用程序提供了更好的方法。DB2 9 pureXML 支持以 XML 的原生的层次结构格式执行存储,而不要求应用程序对 XML 执行插入或检索操作。XML 文档的子集,甚至单独的元素和属性,都可以执行查询和检索。通过有效地管理 XML,可以避免需要执行大量工作的文档分解和重新构建流程,同时仍然可以保留 XML 内容的价值。要了解有关数据库中各种管理和查询 XML 方法的性能结果,请参见本文 参考资料 小节中的 “A performance comparison of DB2 9 pureXML and CLOB or shredded XML storage”。

    DB2 pureXML 概述

    DB2 pureXML 在可同时理解 XML 和关系数据的混合数据库中引入了使用原生方法存储 XML 层次结构数据的功能。原生 XML 存储指的是存储完整的 XML 数据,即存储每个文档的内部层次结构以及各个元素和属性的所有数据库内容。通过使用 pureXML,企业可以有效地存储、控制、查询和更新 XML 数据以及表中存储的现有数据。

    DB2 pureXML 中的 XML 数据被表示为列形式的 XML,可以与传统关系型数据共存于一个表。DB2 对其涉及传统关系数据和 XML 列数据的常用服务进行了扩展,例如优化、索引、并行控制和实用工具。DB2 不仅支持使用行业标准 SQL 或 XQuery 语言编写的查询,而且支持同时包含 SQL 和 XQuery 表达式(有时称为 SQL/XML)的 “混合” 查询,这些查询都可以访问和操作 XML 数据。图 1 展示了这种混合数据库功能。通过引入 pureXML,DB2 9 可以方便地将 XML 存储在大对象中,后者可以分解为关系列或作为 XML。用户逐渐使用原生的 XML 存储方式 pureXML,以利用其强大的灵活性并节省应用程序开销。本文重点介绍如何为在 DB2 中以 XML 列形式原生存储的 XML 数据生成报告。


    图 1. 原生支持关系数据和 XML 数据的 DB2 架构
    原生支持关系数据和 XML 数据的 DB2 架构

    DB2 pureXML 使只能处理具体字符或数值型数据元素(例如关系数据列)的应用程序能够将 XML 数据动态转换为由传统 SQL 数据类型组成的结果集。实现这个目的的最简单方法就是使用 XMLTABLE 的 SQL 函数,该函数可以准确地描述如何以关系(或表)格式检索 XML 数据。接下来将会看到,类似于 DataQuant 的报告工具就是使用这种方法直接处理 DB2 pureXML data 数据的。有关 DB2 pureXML 以及 XMLTABLE 的更多信息,请参见 参考资料 小节。

    注意:pureXML 可用于 DB2 9 for Linux®, UNIX®, and Windows® 和 DB2 9 for z/OS®,而 DataQuant 同时支持这两种 DB2 数据库。本文的示例使用的是 DB2 for Linux, UNIX, and Windows。

    IBM DataQuant 概述

    DataQuant 是 IBM 的通用商业智能(Business Intelligence,BI)工具,它建立在 Eclipse 开放开发平台的基础上,并可用于包括 IBM System Z™、Linux、Microsoft® Windows、IBM AIX® 和 Solaris 在内的各种系统。DataQuant 提供了创建和部署报告、图表、指示板和交互式数据可视化解决方案等功能。DataQuant 支持为所有 IBM DB2 平台创建查询、报告和指示板解决方案。对于熟悉针对 Windows 的 Query Management Facility (QMF) 或 QMF Distributed Edition 的人员来说,DataQuant 可以作为一款后续产品。在 z/OS 平台上,DataQuant 可以独立进行部署,或是作为 QMF 的扩展进行部署,其中的查询和表单等对象可以一起创建和共享。

    DataQuant 提供了一组完善的 BI 功能。这些功能非常强大,而且易于使用。用户可以从这些 DataQuant 功能中获益,其中包括了大多数经常执行的 BI 任务和灵活的安全基础设施,以及资源管理和使用审计。BI 解决方案基于 DataQuant,可以同时满足大型和小型数据报告需求,并且用户可以对界面和对象进行定制和个性化。

    关于 DataQuant 的更多信息,请参见 参考资料 小节列出的 DataQuant 网站。

    DataQuant 包含以下组件:

    • DataQuant for Workstation:一个基于 Eclipse 的、跨平台的工作站应用程序,运行 Linux、Solaris 和 Windows 系统,被称为 “胖客户机”。
    • DataQuant for WebSphere:一个基于应用服务器的解决方案,使用 “瘦客户机”、基于浏览器的部署模型实现广泛的企业部署。

    图 2 给出了部署这些 DataQuant 组件的基本架构。它展示如何将 DataQuant 部署为由应用服务器托管的 “胖客户机” 和 “瘦客户机”,甚至同时结合两者。本文描述了胖客户机的安装步骤,但是报告可以在任一种客户机配置中执行。


    图 2. DataQuant 架构
    DataQuant 架构

    示例数据库

    要演示为行业中使用的复杂 XML 数据生成 XML 报告,需要使用一个包含样例企业纳税申报信息(基于 U.S. Government Tax1120 eFile XML 格式,目前称为 Modernized eFile 或 MeF)的数据库。IBM 提供了一些免费的可下载包来开始使用 DB2 pureXML 和行业格式数据,包括一个 Tax1120 包。这些包包括一个用于创建测试数据库并插入样例数据的脚本,以及一些针对该脚本运行的示例查询。本文使用 Tax1120 包的数据库结构作为示例数据库,因此下载这个包后可以使用该环境运行报告(要下载这个包,请参见 参考资料 小节)。

    可以使用一个电子表单来捕捉数据并使用特殊的 XML 格式提交(比如 Tax1120 MeF 格式)。图 3 展示在 Lotus Forms 中创建用于税务表格 1120 归档的样例电子表单,并生成了 Tax1120 XML 格式。这种表单生成的 XML 文档提供了您在本文中创建报告所需的数据。


    图 3. 用于 Tax1120 归档的样例电子表单
    用于 Tax1120 归档的样例电子表单

    本文描述如何为同时包含关系数据和 XML 数据的表格中的 XML 数据生成报告。表 1 展示了此表(TAX1120TABLE)的结构。


    表 1. TAX1120TABLE 结构
    ID COMMENT DATA
    INTEGER VARCHAR XML

    如果要使用 Tax1120 包,只需要遵循该包的用户向导创建数据库并插入样例数据。如果您亲自创建表格而不是使用 Tax1120 包,则要使用下面的语句创建 TAX1120TABLE ,然后根据本文 下载 小节附带的样例数据步骤将样例数据导入到数据库中。

    CREATE TABLE TAX1120TABLE (
    ID INTEGER PRIMARY KEY NOT NULL,
    COMMENT VARCHAR(500)
    DATA XML)

    “ID” 是一个类属键(generic key)列,但是未在报告中使用。“DATA” 是存储 TAX1120 XML 数据实例的列。注意,表中的 “DATA” 列被定义为 XML 类型。这使 DB2 可以将输入的 XML 数据存储为原生的层次结构格式。

    XML 数据通常被深度嵌套并且可以非常庞大。本文生成的报告基于 Tax1120 格式,并且特定于样例数据库中存储的文档的 XML 结构和内容。要学习如何生成 XML 报告,您不必具有 XML 或数据库方面的专业知识,但是必须了解希望为其生成报告的 XML 文档的结构(层次),这样就可以选择相应的数据项(元素或属性)来生成报告。

    图 4(源视图)和图 5(树视图)中使用 DB2 Control Center 文档查看器显示了样例 Tax1120 文档的部分 XML 内容,DB2 Control Center 是 DB2 附带的管理工具。有些人觉得树视图更加方便浏览(IBM Data Studio 是一款基于 Eclipse 的数据库开发环境,也支持用户使用源格式或基于树的格式查看 DB2 pureXML 数据)。


    图 4. 在 DB2 Control Center 中的源视图中显示样例 Tax1120 数据
    在 DB2 Control Center 中的源视图中显示样例 Tax1120 数据

    图 5. 在 DB2 Control Center 中的树视图中显示样例 Tax1120 数据
    在 DB2 Control Center 中的树视图中显示样例 Tax1120 数据

    为 XML 数据生成报告

    与关系数据库结合使用的报告和 BI 工具(比如 DataQuant)专门用于处理不同的简单数值列或文本字符串列。尽管有些工具可以访问 XML 列中的数据,但是大部分都不能够将复杂 XML 格式化为对报告有用的结构。为了使这些 XML 数据能够利用这类工具的报告和分析功能,必须将相关数据从整个 XML 文档中分离出来。

    下面介绍 DB2 pureXML 提供的两种不垃圾广告法,它们可以将 XML 数据格式化为适合在 DataQuant 中生成报告的数值或文本字符串。第一种方法发出 SQL/XML 语句,将 XML 动态转换为报告所需的数据,从而提供适合生成报告的数据结果。第二种方法首先使用包含需要生成报告的 XML 文档数据的列创建一个关系视图,然后对该视图发出 SQL 语句来生成报告内容。使用这种方法的话,DataQuant 中所有操作关系表的功能都可以访问此视图中的数据。

    在 DataQuant 中,从 SQL(根据关系视图用 XML 数据发出)生成报告与从 SQL/XML 查询动态返回的结果集生成报告的步骤非常相似。后面的小节将加以描述。

    使用 SQL/XML 查询返回的结果集生成报告

    DataQuant 中用来生成报告的数据可以直接使用 SQL/XML 查询获得,与从传统关系列生成报告数据的 SQL 查询非常相似。这种方法实际上可以动态地生成所需的数据,从 XML 文档中识别特定的元素和属性,以通过 SQL/XML 查询用于报告。通过使用特定的 SQL/XML 查询,可以从 XML 文档中灵活地选择用于生成报告的数据。

    使用 XML 数据的关系视图生成报告

    如前所述,DB2 提供了为 XML 列中存储的结构数据创建关系表示的功能。通过根据 XML 数据的关系表示创建视图,可以对这一功能进行扩展。为此,管理员可以编写一个提供视图定义的 SQL/XML 查询,构成视图定义的列包含提取自 XML 文档用来生成报告的所有数据。查询将一个或多个特定 XML 元素或属性节点值映射到同等数量的关系数据列(参见图 6)。为此,需使用一个 XPath 表达式来识别由 XML 数据组成的部分,通常为一个特定的 XML 文本节点,它会返回所有关系数据值。SQL 标准 XMLTABLE 函数提供了一种简单的方法,可以提供一组将 XML 映射到相应关系值的 XPath 表达式。定义一个视图,使用一个 XMLTABLE 函数从 XML 创建关系列。


    图 6. 将 XML 数据映射到关系数据列
    将 XML 数据映射到关系数据列

    要了解更多有关 SQL/XML、XPath 表达式或 XMLTable 的信息,请参见 参考资料 小节中关于 DB2 pureXML 的内容。

    比较两种报告生成方法

    图 7 演示了两种针对 XML 列的数据生成报告的方法。


    图 7. 两种针对 XML 数据生成报告的方法
    两种针对 XML 数据生成报告的方法

    如前所述,第一种方法直接查询 XML 文档,选择报告生成所需的元素和属性值。这种方法实际上可以动态生成与视图方法相同的结果。SQL/XML 方法避免了视图对象这一系统开销,并且可以更加灵活地从 XML 文档选择生成报告所需的数据,但这要求生成报告的用户能够编写特定的 SQL/XML 查询。

    第二种方法生成一个已经从 XML 文档(2a)提取了关键数据元素和属性的视图,并对视图应用传统的 SQL 语句生成结果(2b),从而简化了生成报告所需的查询。由于视图可以由管理员创建,DataQuant 报告用户不需要理解底层 XML,或是具有使用 SQL/XML 或 XPath 语句的经验。可以使用简单的 SQL 语句选择要包含在报告中的列,或者用户可以像对关系表那样对视图使用形象的构建器工具,直观地为报告内容选择列数据。视图方法的一个缺点是,报告构建器必须提前设计好希望使用哪些 XML 元素和属性,这样数据库管理员才能生成相应的视图。对视图定义进行修改需要进行计划并花费一些时间。此外,还有另一个潜在的缺陷。由于可以编写 SQL/XML 查询以直接利用 XML 数据文档上的索引,因此针对视图编写的查询需要由系统间接地匹配索引。DB2 9 for z/OS 允许针对视图编写 SQL 查询来利用底层 XML 上的 XML 索引。这有助于提高性能。

    创建 DB2 视图

    下面的语句创建了将在报告部分使用的 TAX1120VIEW。这是一个关系视图,包含从 Tax1120 XML 数据中选择的信息。TAX1120VIEW 视图包含表示 Employer Identification Number、Company Name、Total Income 和 Total Tax 的列。这些都是由上面描述的 XMLTABLE 函数生成。您可以使用 DB2 命令行或其他查询工具执行这些语句来创建视图。

    CREATE VIEW TAX1120VIEW AS
    SELECT T.EIN AS "EIN", 
           T.COMPANYNAME AS "Company Name", 
           T.TOTALINCOME AS "Total Income", 
           T.TOTALTAX AS "Total Tax"
    FROM TAX1120TABLE, XMLTABLE(XMLNAMESPACES(DEFAULT 'http://www.irs.gov/efile'),
         '$d/Return' PASSING DATA AS "d" 
         COLUMNS EIN VARCHAR(20) PATH 'ReturnHeader/Filer/EIN',
                 COMPANYNAME VARCHAR(100) PATH 
                             'ReturnHeader/Filer/Name/BusinessNameLine1',
                 TOTALINCOME DOUBLE PATH 'ReturnData/IRS1120/TotalIncome',
                 TOTALTAX DOUBLE PATH 'ReturnData/IRS1120/TotalTax'
         ) AS T

    表 2 解释了由以上语句生成的视图结构。


    表 2. TAX1120VIEW 的结构
    EIN COMPANYNAME TOTALINCOME TOTALTAX
    VARCHAR VARCHAR DOUBLE DOUBLE

    在开始生成报告之前,管理员需要在 DataQuant 中设置报告环境,包括识别库存储和数据库连接信息。下面将描述这些步骤。

    设置 DataQuant 报告环境

    安装好 DataQuant 后,在 DataQuant 用户或管理员为数据库中的数据创建报告之前,必须首先提供对数据源的访问并为生成报告创建工作区环境。数据源设置是一个一次性的流程,包括创建存储对象的库、安全模型以及源代码用户。提供对数据源的访问包括以下这些步骤:

    1. 创建库存储。定义并命名存储来存放 DataQuant 用户库。
    2. 在库存储中创建库。
    3. 创建数据源。定义到每个库的连接。
    4. 创建一个连接。配置库内部的数据源信息。

    下面的小节将介绍这四个数据库设置步骤。注意,这里跳过访问 JDBC 驱动程序的配置步骤,因为我们假设每个数据库用户已经具备了这些配置。如果您还未进行配置的话,请遵循 DataQuant 向导中的步骤进行配置。下面的示例使用 DataQuant 作为 Windows 上的工作站安装,在同一个系统上连接到 DB2 9 数据库。如果您使用不同的配置,那么具体步骤可能稍有不同。启动 DataQuant 并执行步骤 1。

    步骤 1:创建库存储

    1. 从菜单栏中的 Window > Open Perspective > Administrator 打开 Administrator 透视图。
    2. 右键单击 Repositories 视图并选择 New > Repository Storage
    3. 选择 Database-based Repository Storage 并单击 Next
    4. 对 JDBC driver 字段选择 DB2 JDBC Universal Driver。在该字段中填充 JDBC URL,本例中为 “jdbc:db2://localhost:50000/TAX1120”。使用您的 DB2 用户 ID 和密码填充用户名和密码字段。单击 Next
    5. 选择 Create or upgrade repository storage tables。单击 Next。再次单击 Next,然后单击 Finish

    图 8. 创建新的库存储
    创建新的库存储

    步骤 2:创建一个库

    1. 右键单击 Repositories 视图中的库存储,并选择 New > New Repository
    2. 为库指定一个名称。本例中命名为 “Tax1120Repository”。单击 Finish

    步骤 3:创建一个数据源

    1. 右键单击 Repositories 视图中的库,并选择 New > Relational Data Source
    2. 为数据源指定一个名称。在本例中命名为 “Tax1120DataSource”。对 JDBC driver 字段选择 DB2 JDBC Universal Driver。填充 JDBC URL、用户名和密码字???。单击 Next。再次单击 Next,然后单击 Finish

    图 9. 创建新的数据源
    创建新的数据源

    步骤 4:创建一个连接

    1. Window > Show View > Other 中打开 Repository Connections 视图。
    2. 右键单击 Repository Connections 视图,然后选择 New > Repository Connection
    3. 选择 Database-based repository
    4. 为连接指定一个名称。在本例中命名为 “Tax1120Connection”。对 JDBC driver 字段选择 DB2 JDBC Universal Driver。填充 JDBC URL、用户名和密码字段。对 Repository name 字段单击 Refresh 以选择一个库。选择 Unprotected 并单击 Finish

    图 10. 创建一个新的库连接
    创建一个新的库连接

    连接创建完毕之后,可以在 Administrator 视图中查看库和连接。如图 11 所示。


    图 11. DataQuant 的 Administrator 视图
    DataQuant 的 Administrator 视图

    现在管理设置完成后,可以继续访问数据并创建报告。

    创建报告

    DataQuant 中的报告创建步骤可以分为两大步骤:

    1. 创建查询:识别查询以为报告生成备用数据内容。
      • 本节展示了 图 7 所示的两种方法的查询,因此可以更加方便地进行比较。
    2. 创建报告:开发报告布局。

    使用以下步骤在 DataQuant 中创建报告。

    步骤 1:创建查询以生成备用数据

    1. 从菜单 Window > Open Perspective > User 中切换到 User 透视图。右键单击 Workspaces 视图并选择 New > Query
    2. 为查询指定一个名称,本例中命名为 “Query1”,并选择前面创建的数据源(比如 Tax1120DataSource)。单击 Finish
    3. 为报告创建查询(下面解释了前面介绍的两种方法):
      • 要直接针对 XML 文档创建报告,输入下面的 SQL/XML 查询语句(或 创建 DB2 视图 小节中使用 XMLTABLE 的 SELECT 部分)。

        SELECT XMLCAST(XMLQUERY('declare default element
                       namespace "http://www.irs.gov/efile";
                       $d/Return/ReturnHeader/Filer/EIN/text()'
                       PASSING DATA AS "d") AS VARCHAR(20)) AS "EIN",
               XMLCAST(XMLQUERY('declare default element
                       namespace "http://www.irs.gov/efile";
                       $d/Return/ReturnHeader/Filer/Name/BusinessNameLine1/text()'
                       PASSING DATA AS "d") AS VARCHAR(100)) AS "Company Name",
               XMLCAST(XMLQUERY('declare default element
                       namespace "http://www.irs.gov/efile";
                       $d/Return/ReturnData/IRS1120/TotalIncome/text()'
                       PASSING DATA AS "d") AS DOUBLE) AS "Total Income",
               XMLCAST(XMLQUERY('declare default element
                       namespace "http://www.irs.gov/efile";
                       $d/Return/ReturnData/IRS1120/TotalTax/text()'
                       PASSING DATA AS "d") AS DOUBLE) AS "Total Tax"
        FROM TAX1120TABLE

        上面的查询语句返回与 TAX1120VIEW 视图所含内容相同的信息。这里并没有定义视图,而是动态地生成数据。上面的查询可以代替使用 XMLTABLE 定义视图的查询。它生成相同的结果,但构造和解释有一些复杂,因此一般建议使用 XMLTABLE 从 XML 构造关系数据列,不管是动态构造还是根据视图进行构造。在本例中这两种查询都可以使用。注意,XMLCAST 是一个将 XML 数据转换成关系数据类型的 SQL/XML 函数。更多相关信息见 参考资料 小节。

      • 要根据前面创建的 XML 的关系视图创建报告,输入下面的查询语句:

        SELECT * FROM TAX1120VIEW

        可以看到,定义 TAX1120VIEW 精确地包含 XML 文档中需要生成报告的数据之后,接下来仅需使用一个非常简单的报告生成查询。即使是只从视图中选择列的一个子集,也能用一个简单的 SQL 查询实现。此外,报告可以通过 DataQuant 的可视构建器功能从视图源代码中构建,进一步分离最终用户和数据细节。要使用可视的构建器,请遵循下面的步骤:

        1. 单击 Query1 窗口下方的 Prompted 标记。
        2. 单击 Add Table 向查询添加一个源表格。
        3. 单击 Add From List...
        4. 输入 “Table Owner” 名称(这是创建视图的 DB2 用户),然后单击 Refresh List
        5. 选择 TAX1120VIEW 并单击 Add,向查询添加一个视图。单击 Close
        6. 默认情况下,选择所选的表/视图中的所有列。单击 Add Column 向查询添加具体的列,或单击 Change ColumnDelete Column 修改或删除查询中的列。


        图 12. 根据表/视图可视地创建查询语句
        根据表/视图可视地创建查询语句

        如图 12 所示,上面的步骤可视地创建了一个查询语句,生成与 SELECT * FROM TAX1120VIEW 相同的结果。这种方法使不了解 SQL 的用户能够创建报告。

    4. 保存 “Query1”。从菜单栏中选择 Query > Run 或单击工具栏中的 Run 来执行查询。执行完毕后,将显示查询结果,如图 13 所示。

      图 13. 样例查询的结果集
      样例查询的结果集

    步骤 2:从查询结果创建报告

    无论使用何种方法为报告创建查询结果(通过视图或直接创建),都使用下面的步骤创建报告:

    1. 从菜单栏选择 Results > Display Report...
    2. 选择 Create a new report 并单击 Next
    3. 使用预先选择的选项,即 “Create a visual report” 下的 Generated based on current query。单击 Finish。DataQuant 还提供了另外两种报告选项,经典报告和 BIRT 报告,本文未作讨论。
    4. 要对报告进行调整,单击窗口底部的 Design 选项卡以切换到 Design 视图,如图 14 所示。

      图 14. 生成报告的 Design 视图
      生成报告的 Design 视图

    5. 您可以在 Design 视图内调整报告对象的大小和位置、报告数据的格式,以及其他可视的报告属性。例如,要使用精确到小数点右侧两位的数字显示 Total Income 值,选择 “Detail1” 部分的 “Total Income” 列下面的单元格。将 Properties 视图中的 “Text” 字段修改为 =formatNum("0.00",[Total Income])
    6. 使用窗口底部的选项卡切换回到 Preview 视图,查看如图 15 所示的报告。保存为 Report1 并关闭报告。

      图 15. 完成报告后的 Preview 视图
      完成报告后的 Preview 视图

    这就是使用 DataQuant 为 XML 数据生成报告所需的全部步骤。现在看一下另一个表示选项 Visual Dashboard,下一小节将对此进行介绍。

    使用 Visual Designer 生成 Visual Dashboard

    Visual Dashboard 是一种可视化项目,可以为广泛的用户显示交互式或持久性数据。Visual Dashboard 可以从多个异构数据源同步提取数据,并使用各种图形、图表和图形部件表示数据。内容开发人员可以创建一种图形化的指示板,多个用户可以通过 Web 浏览器或面向工作站的 DataQuant 的瘦客户机版本查看这个指示板。

    使用 Tax 1120 XML 数据创建可视指示板:

    1. 通过选择 Window > Open Perspective > Visual Designer 打开 Visual Designer 透视图。
    2. 通过选择 Window > Show View > Other... 打开 Palette 视图,然后选择 General > Palette
    3. 在 Project Explorer 视图中,右键单击 Visual Dashboards 并选择 New Visual Dashboard...
    4. 为报告指定一个名称。本例中名为 “Dashboard1”。单击 Finish
    5. 在 Project Explorer 视图中,右键单击 Visual Dashboards > *Dashboard1 > Connections 并选择 Insert Connection...
    6. 选择 Data Sources > Tax1120DataSource 并命名连接。在本例中命名为 “Connection1”。单击 Finish
    7. 在 Project Explorer 视图中,右键单击 Visual Dashboards > *Dashboard1 > Queries 并选择 Insert Query...
    8. 选中 Attach an existing query 选项,并单击 Select Query From Repository 符号。选择 Open from Repository 并单击 Next。选择 Workspaces > Default > Query1 并单击 Finish。为查询指定一个名称。在本例中命名为 “Query1”。单击 Finish
    9. 在 Palette 视图中,选择 BarChart 并单击 *Report2.MainPage 窗口中的 Detail1 区段以创建一个图表。
    10. 选择 Query1 并单击 Next。将 “Total Income” 和 “Total Tax” 字段添加到 Fields to be displayed 区域,然后单击 Next。单击 Include a label 框并在 Label field 下拉菜单中选择 “Company Name”。取消选中 Display the value of each bar 复选框。单击 Finish
    11. 根据需要调整图表的大小、位置和属性。单击 Runtime 选项卡显示指示板,如图 16 所示。保存为 Dashboard1,然后关闭指示板。

      图 16. 可视指示板的 Runtime 视图
      可视指示板的 Runtime 视图

    结束语

    DB2 pureXML 逐渐发展为用于存储和管理 XML 数据的库。本文介绍了两种使用 DataQuant 从 DB2 pureXML 数据创建报告的方法,并提供了具体步骤。第一种方法直接执行 SQL/XML 查询从 XML 生成数据作为 DataQuant 报告的输入。第二种方法使用了两个步骤,首先创建一个 XML 数据的关系视图,然后构造简单的 SQL 查询(或使用 DataQuant 的向导)从关系视图生成报告。本文还展示了如何在 DataQuant 中创建一个图形化指示板来动态地展示数据。要了解有关 DataQuant 或 DB2 pureXML 的更多信息,请参见 参考资料 小节中引用的资料。

    致谢

    Isayas Sium、Cindy Saracco、Jason Cu、Blanca Borden、Mary Desisto 和 Kate Riley Tennant 为本文提供材料或参与审校,本文作者对他们表示衷心感谢!

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

    转载于:http://blog.itpub.net/15082138/viewspace-591937/

    展开全文
  • ls -lsh seq 数据库第一次使用需要解压 gunzip ${ea}/usearch/rdp_16s_v16_sp.fa.gz gunzip ${ea}/gg/97_otus.fasta.gz 创建临时和结果目录,临时目录分析结束可删除 mkdir -p temp result 2.合并双端序列并按样品...

    为进一步提高《微生物组实验手册》稿件质量,本项目新增大众评审环节。文章在通过同行评审后,采用公众号推送方式分享全文,任何人均可在线提交修改意见。公众号格式显示略有问题,建议电脑端点击文末阅读原文下载PDF审稿。在线文档(https://kdocs.cn/l/cL8RRqHIL)大众评审页面登记姓名、单位和行号索引的修改建议。修改意见的征集截止时间为推文发布后的72小时,文章将会结合有建设性的修改意见进一步修改后获得DOI在线发表,同时根据贡献程度列为审稿人或致谢。感谢广大同行提出宝贵意见。

    易扩增子:易用、可重复和跨平台的扩增子分析流程

    EasyAmplicon: An Easy-to-use, Reproducible and Cross-platform Pipeline for Amplicon Analysis

    刘永鑫1, 2, 3, #, *,陈同4, #,周欣5,白洋1, 2, 3, 6, *

    1中国科学院遗传与发育生物学研究所,植物基因组学国家重点实验室,北京2中国科学院大学,生物互作卓越创新中心,北京3中国科学院遗传与发育生物学研究所,中国科学院–英国约翰英纳斯中心植物和微生物科学联合研究中心,北京4中国中医科学院,中药资源中心,北京5中国科学院微生物研究所,真菌学国家重点实验室,北京6中国科学院大学现代农学院,北京

    *通讯作者邮箱: yxliu@genetics.ac.cn; ybai@genetics.ac.cn

    #共同第一作者

    摘要扩增子测序是目前微生物组研究中最广泛的使用手段,主流的分析流程有QIIME、USEARCH和Mothur,但仍分别存在依赖关系过多导致的安装困难、大数据收费和使用界面不友好等问题。本文搭建了一套完整的扩增子分析流程命名为易扩增子(EasyAmplicon),可以实现简单易用、可重复和跨平台地开展扩增子分析。流程计算核心采用体积小、安装方便、计算速度快且跨平台的软件USEARCH,同时整合VSEARCH以突破USEARCH免费版的限制。分析选用RStudio的图形界面对流程代码文档管理和运行,实现命令行和/或鼠标点击操作方式开展扩增子可重复分析。同时流程还提供了数10个脚本,实现特征表过滤、重采样、分组均值等常计算,以及为常用软件如STAMP、LEfSe、PICRUSt1/2等提供标准的输入文件的功能。易扩增子可以从https://github.com/YongxinLiu/EasyAmplicon下载轻松部署于Windows/Mac/Linux操作系统,在普通个人电脑上2小时内可完成数十个样本的分析。

    关键词扩增子,分析流程,16S,ITS,USEARCH

    仪器设备

    1.个人电脑/服务器 (操作系统:Windows 10/Mac OS 10.12+/Linux Ubuntu 18.04+;CPU:2核+;内存:8G+;硬盘:> 10 GB,且大于10倍原始数据大小),网络访问畅通。

    软件和数据库

    1.R语言环境,下载适合自己系统的4.0.2版:https://www.r-project.org/

    2.R语言开发环境,用于执行流程,下载适合自己系统的RStudio 1.3.1056:https://www.rstudio.com/products/rstudio/download/#download

    3.(可选) 仅Windows系统安装,提供Git Bash命令行环境的GitForWidnows 2.28.0:http://gitforwindows.org/

    4.扩增子分析流程USEARCH v10.0.240 (Edgar, 2010) https://www.drive5.com/usearch/download.html

    5.扩增子分析流程VSEARCH v2.15.0 (Rognes2016) https://github.com/torognes/vsearch/releases

    6.易扩增子流程EasyAmplicon v1.10 (Zhang2018和2019; Chen2019; Huang2019; Liu2020; Qian2020a2020b)https://github.com/YongxinLiu/EasyAmplicon

    7.核糖体数据库RDP v16 (Cole2014)http://rdp.cme.msu.edu/

    8.(可选) 核糖体数据库GreenGene数据库(gg) 13_8(McDonald2011)ftp://greengenes.microbio.me/greengenes_release

    9.(可选) 核糖体数据库SILVA v123 (Quast2013)http://www.arb-silva.de

    10.(可选) 转录间隔区(ITS)数据库UNITE v8.2(Nilsson2019)https://unite.ut.ee/

    11.(可选) Windows版下载工具wget:http://gnuwin32.sourceforge.net/packages/wget.htm

    软件安装和数据库部署

    注:以下的软件安装和使用均在64位Windows 10系统中演示,Linux/Mac中不同的地方会有说明,流程代码提供有Mac版本(pipeline_mac.sh)。

    Windows系统需要安装GitForWindows (http://gitforwindows.org/) 提供Git bash环境支持常用Shell命令。Linux/Mac系统自带Bash命令行工作环境。

    以64位Windows 10系统为例,我们先安装R/RStudio软件,再把本流程 (EasyAmplicon/目录)保存于C盘中,然后根据需要下载数据库至指定目录即完成部署。

    注:代码行添加灰色底纹背景其中需要根据系统环境修改的部分标为蓝色

    1.流程运行环境R和RStudio

    依次安装适合系统的最新版R语言 (https://www.r-project.org) 和RStudio (https://www.rstudio.com/products/rstudio/download/)。注意操作系统用户名不要使用中文,否则会影响R语言使用。

    2.批量安装依赖R包

    流程会调用数百个R包,使用时可自动安装。但由于网络或系统等个性原因经常出现下载或安装失败,可以使用中根据提示手动安装缺失R包。本文推荐直接下载我们预编译好的R包合辑 (http://nmdc.cn/datadownload),替换至R包所在目录即可,详见常见问题1

    3.易扩增子流程EasyAmplicon

    访问https://github.com/YongxinLiu/EasyAmplicon,选择Code—Download ZIP下载并解压,如保存于C盘并确保目录名为EasyAmplicon。如在RStudio的Terminal中可使用git下载流程:

    git clone git@github.com:YongxinLiu/EasyAmplicon.git

    4.(可选) 扩增子流程依赖软件

    EasyAmplicon依赖的Windows/Mac/Linux版本软件已经保存于EasyAmplicon中的win/mac/linux目录中,如果出现问题,可按如下方法手动安装。

    USEARCH下载页https://www.drive5.com/usearch/download.html,选择适合自己系统的10.0.240版本 (不要下载最新版,因为有更多功能使用受限),如Windows版本保存至EasyAmplicon目录中的win目录中,解压后改名为usearch.exe。Linux/Mac系统需下载到环境linux/mac目录,解压后改名为usearch,并添加可执行权限(chmod +x usearch)。VSEARCH下载页面https://github.com/torognes/vsearch/releases,选择适合自己系统的最新版下载,接下来操作与USEARCH类似。Windows系统还需下载wget程序(http://gnuwin32.sourceforge.net/packages/wget.htm) 至win目录。

    5.(可选)16S核糖体基因物种注释数据库

    16S扩增子测序分析,常用RDP/SILVA/GreenGene数据库进行物种注释,可以从上述数据库官网下载并整理为USEARCH使用的格式,此处推荐从USEARCH官网 (http://www.drive5.com/sintax) 下载USEARCH兼容格式的数据库。默认流程使用体积小巧的RDP v16数据库(rdp_16s_v16_sp.fa.gz),并已保存于usearch目录中。可选GreenGenes 13.5(gg_16s_13.5.fa.gz)和SILVA(silva_16s_v123.fa.gz)数据库,可根据需要下载并保存于usearch目录中。此外,如果要开展PICRUSt和Bugbase功能预测分析,还需要使用GreenGenes数据库13.5中按97%聚类的OTU序列(己保存于流程gg目录中97_otus.fasta.gz)。可选手动下载GreenGenes官方数据库(ftp://greengenes.microbio.me/greengenes_release),解压后选择其中的97_otus.fasta保存于gg目录下即可。

    6.(可选)ITS物种注释数据库

    如果研究真菌或真核生物采用转录间隔区(Intergenic Transcribed Spacer)测序,需要使用UNITE数据库,目前最新版已经保存于usearch目录(utax_reference_dataset_all_04.02.2020.fasta.gz)。如流程中数据库没有及时更新,可在UNITE官网(https://unite.ut.ee/)下载最新版适合USEARCH的注释数据库。官方数据库存在格式问题,详细常见问题2

    实验步骤

    开始新项目分析前,我们需要在项目目录(如c:/test)中准备三类起始文件:1. EasyAmplicon流程中复制分析流程文件(pipeline.sh);2. 编写样本元数据(metadata.txt);3. seq目录存放测序数据(*.fq.gz)。然后使用RStudio打开pipeline.sh,设置分析流程(EasyAmplicon, ea)和工作目录(work directory, wd)位置,添加依赖可执行程序至环境变量,并切换至工作目录。

    注:用户请根据操作系统类型、软件和工作目录实际位置自行修改。

    ea=/c/EasyAmplicon

    wd=/c/test

    PATH=$PATH:${ea}/win

    cd ${wd}

    1.准备输入数据 (测试数据是流程正对照)

    建议下载测试元数据和测序数据作为实验的正对照,首先完成全部流程分析,以确定流程部署成功。将来使用自己的数据出现问题,可以与测试数据分析中对应结果比较,以便确定问题产生的原因。

    下载示例元数据用于参考编写格式(表1)。

    wget -c http://210.75.224.110/github/EasyAmplicon/data/metadata.txt

    表1.元数据格式示例

    SampleID

    Group

    Date

    Site

    CRA

    CRR

    KO1

    KO

    2017/6/30

    Chaoyang

    CRA002352

    CRR117575

    KO2

    KO

    2017/6/30

    Chaoyang

    CRA002352

    CRR117576

    KO3

    KO

    2017/7/2

    Changping

    CRA002352

    CRR117577

    可用Excel编写,保存存为制表符分隔的的文本文件。

    注意:有行列标题,行为样品名(字母开头+数字组合),列为分组信息(至少1列,可多列)、地点和时间(提交数据必须)、及其它属性,详见附表1,或下载的metadatat.txt文件。

    通常测序公司会返回原始数据,如Illumina双端测序的文件,每个样本有一对文件。本文使用的数据来自发表于Science杂志关于拟南芥根系微生物组研究的文章(Huang2019),GSA项目号为PRJCA001296。为方便演示流程的使用,我们从中选取三个组(每组包括6个生物学重复共18个样本),并且随机抽取了50000对序列作为软件的测序数据,该数据可以从中国科学院基因组研究所的原始数据归档库 (Genome Sequence Archive,GSA,https://bigd.big.ac.cn/gsa/) (Wang2017)中按批次编号CRA002352搜索并下载。本文使用wget根据样本元数据中批次和样本编号批量下载至seq目录,代码如下。

    mkdir -p seq

    awk '{system("wget -c ftp://download.big.ac.cn/gsa/"$5"/"$6"/"$6"_f1.fq.gz -O seq/"$1"_1.fq.gz")}' <(tail -n+2 metadata.txt)

    awk '{system("wget -c ftp://download.big.ac.cn/gsa/"$5"/"$6"/"$6"_r2.fq.gz -O seq/"$1"_2.fq.gz")}' <(tail -n+2 metadata.txt)

    awk为Linux下的一种字符处理语言,可同时使用文本中的多个字段;使用system命令调用wget,实现根据列表批量下载、改名的功能。

    检查文件大小,确定是否下载完整或正常。

    ls -lsh seq

    数据库第一次使用需要解压

    gunzip ${ea}/usearch/rdp_16s_v16_sp.fa.gz

    gunzip ${ea}/gg/97_otus.fasta.gz

    创建临时和结果目录,临时目录分析结束可删除

    mkdir -p temp result

    2.合并双端序列并按样品重命名

    依照实验设计采用for循环批处理样本合并(图1)。tail -n+2去表头,cut -f 1取第一列,即获得样本列表。vsearch程序的--fastq_mergepairs命令实现双端序列合并,接输入读长文件1(fq/fq.gz均可),--reverse接读长文件2,--fastqout指定输出文件,--relabel将序列按样本名进行重命名 (注:样本名后必须添加点,以分隔样本名和序列ID,同时注意样本名中不允许有点)。本示例数据包括5万对读长的18个样本合并计算耗时约2分钟。Windows下复制命令Ctrl+C为Linux下的终止命令,为防止异常中断,结尾添加&使命令转后台。注:如分析时提示文件质量值问题,详见常见问题3;如输入文件为单端FASTQ文件,则只需序列改名即可,详见常见问题4

    for i in `tail -n+2 result/metadata.txt | cut -f 1`;do

      vsearch --fastq_mergepairs seq/${i}_1.fq.gz --reverse seq/${i}_2.fq.gz \

      --fastqout temp/${i}.merged.fq --relabel ${i}.

    done &

    双端合并且重命名的序列,每条序列具有唯一且可识别样本的ID。可以合并所有样品至同一文件,方便统一操作。

    cat temp/*.merged.fq > temp/all.fq

    图1. 典型扩增子测序双端序列合并结构图

    3.引物切除和质量控制

    采用等长的方式切除引物,引物外侧如果有标签(Barcode),标签的长度需要计算在内(图1)。如本示例的结构为10 bp左端标签 + 19 bp正向引物V5共计29 bp,18 bp反向引物V7,分别使用--fastq_stripleft--fastq_stripright传递给程序。注意:务必清楚实验设计中引物和标签长度,如果引物已经去除,可在下方参数处填0表示无需去除。此外,--fastq_maxee_rate指定质量控制的错误率,0.01代表要求错误率小于1%。质控控制后,--fastaout输出体积更小的无质量值fasta(fa)格式文件。

    vsearch --fastx_filter temp/all.fq \

          --fastq_stripleft 29 --fastq_stripright 18 \

          --fastq_maxee_rate 0.01 \

          --fastaout temp/filtered.fa

    4.序列去冗余并挑选代表序列(OTU/ASV)

    序列去冗余可以使总数据量降低数量级(降维),减少下游计算资源消耗和缩短等待时间,更重要的是提供序列的出现频次对鉴定真实特征序列至关重要。扩增子分析中特征序列有可操作分类单元(OTUs)或扩增序列变体(ASVs)。参数--miniuniqusize设置使用序列的最小出现频次,默认为8,此处设置为10,推荐最小值为总数据量的百万分之一(如1亿条序列至少需要过滤掉频次100以下的序列噪音),可实现去除低丰度或测序噪音并极大地增加计算速度。-sizeout输出频次, --relabel设置输出序列前缀(示例输出序列ID:>Uni1;size=17963)。

    vsearch --derep_fulllength temp/filtered.fa \

          --output temp/uniques.fa \

          --relabel Uni --minuniquesize 10 --sizeout

    按97%聚类生成OTUs和去噪挑选ASVs是目前挑选特征序列的两种主流方法。通常两种分析方法的结果整体上比较类似,细节上会略有不同。下面按方法1或2分别介绍,用户可根据实际需求选择。如聚类或去噪运行中提示超过内存限制错误,表明数据低丰度和/或测序噪音较多,可增加上步--minuniquesize参数(如30,50或更大),使输出非冗余序列数据小于1万条为宜,保证下游分析顺利且高效完成。

    方法1. 使用UPARSE(Edgar2013)算法按97%的序列相似度聚类OTU

    usearch -cluster_otus temp/uniques.fa \

         -otus temp/otus.fa \

         -relabel OTU_

    此方法累计使用次数最多、分析速度快,适合大数据或ASV方法结果规律不明显时尝试。

    方法2. 使用UNOISE算法 (EdgarFlyvbjerg2015) 去噪生成ASV

    此方法是当前的主流,推荐优先使用。类似于按100%的序列相似度聚类,或不聚类的方法详见方法原始文献(EdgarFlyvbjerg2015)宏基因组公众号推文扩增子分析还聚OTU就真OUT了。采用更先进的方法来鉴定测序过程中可能的错误,因此也需要消耗更多的计算时间。UNOISE算法虽然慢于UPARSE算法,但也比同类去噪算法Deblur和DADA2分别快10倍和100倍 (Amir2017)。此处-unoise3去噪结果默认前缀为Zotu,我们修改为主流使用的ASV。

    usearch -unoise3 temp/uniques.fa \

          -zotus temp/zotus.fa

    sed 's/Zotu/ASV_/g' temp/zotus.fa > temp/otus.fa

    (可选) 基于参考去嵌合。

    全头(de novo)去嵌合时要求亲本丰度为嵌合体16倍以上防止造成假阴性,而参考数据库无丰度信息,只需1条序列在参考数据中没有相似序列且与2~3条序列相似即判定为嵌体,因此容易引起假阴性(真实序列被当作假序列丢弃),不推荐使用。如果必须要使用,由于已知序列不会被去除,选择越完整的数据库可降低假阴性率。

    方法1. VSEARCH结合RDP数据库去嵌合(快但容易假阴性),推荐SILVA去嵌合(silva_16s_v123.fa),但计算极耗时 (本例用时3小时,是RDP计算时间的30倍以上)。

    vsearch --uchime_ref temp/otus.fa \

          -db ${ea}/usearch/rdp_16s_v16_sp.fa \

          --nonchimeras result/raw/otus.fa

    Windows系统下vsearch结果会添加了windows换行符^M必需删除,否则会出现换行混乱的问题。Mac/Linux系统无须执行此命令。

    sed -i 's/\r//g' result/raw/otus.fa

    方法2. 不去嵌合。

    cp -f temp/otus.fa result/raw/otus.fa

    5.特征表生成和筛选

    5.1生成特征表

    使用vsearch的--usearch_global命令比对扩增子序列(temp/filtered.fa)至特征序列(result/raw/otus.fa)即可生成特征表,--threads设置整数使用计算机可用的多线程加速计算。

    vsearch --usearch_global temp/filtered.fa --db result/raw/otus.fa \

        --otutabout result/raw/otutab.txt --id 0.97 --threads 4

    sed -i 's/\r//' result/raw/otutab.txt

    5.2按物种注释筛选特征表

    基于物种注释,(可选)可以筛选质体和非细菌和非古菌去除并统计比例。

    使用USEARCH的sintax算法进行物种注释。选择RDP物种注释(rdp_16s_v16_sp)数据库具有体积小、分类速度极快(本例耗时15秒)的特点,但缺少真核数据无法注释真核污染物来源详细。SILVA数据库(silva_16s_v123.fa)可以更好地注释真核质体序列来源,但速度较慢(本例耗时约3小时);还可选Greengenes数据库(gg_16s_13.5.fa),但此数据库自13年起再无更新。--sintax_cutoff设置分类结果的可信度阈值,范围0~1之间,文章中常用0.6/0.8,取值越大注释结果越可靠同时注释比例也越低。注意,结果中第三列方向正常应全为正向(+),如果全为反向(-),请参考常见问题5中方法将第3步结果序列取反向互补。

    vsearch --sintax result/raw/otus.fa --db ${ea}/usearch/rdp_16s_v16_sp.fa \

          --tabbedout result/raw/otus.sintax --sintax_cutoff 0.6

    为去除16S rDNA测序中的非特异性扩增和质体污染,我们编写了R脚本otutab_filter_nonBac.R实现选择细菌和古菌(原核生物)、以及去除叶绿体和线粒体并统计比例,输出筛选后并按丰度排序的特征表。输入文件为原始特征表(result/raw/otutab.txt)和物种注释(result/raw/otus.sintax),输出筛选并排序的特征表(result/otutab.txt)、统计污染比例文件(result/raw/otutab_nonBac.txt)和过滤细节(otus.sintax.discard),特征表的格式详见文件或附表2。注:真菌ITS数据,请改用otutab_filter_nonFungi.R脚本,只筛选注释为真菌的序列。查看脚本帮助,请运行Rscript ${ea}/script/otutab_filter_nonBac.R -h

    Rscript ${ea}/script/otutab_filter_nonBac.R \

          --input result/raw/otutab.txt \

          --taxonomy result/raw/otus.sintax \

          --output result/otutab.txt\

          --stat result/raw/otutab_nonBac.stat \

          --discard result/raw/otus.sintax.discard

    5.3筛选特征表对应序的列和物种注释

    特征表筛选后,对应的代表序列(otus.fa或附表3)、物种注释信息也需要对应进行筛选。

    cut -f 1 result/otutab.txt | tail -n+2 > result/otutab.id

    usearch -fastx_getseqs result/raw/otus.fa \

            -labels result/otutab.id -fastaout result/otus.fa

    awk 'NR==FNR{a[$1]=$0}NR>FNR{print a[$1]}'\

            result/raw/otus.sintax result/otutab.id \

            > result/otus.sintax

    sed -i 's/\t$/\td:Unassigned/' result/otus.sintax

    此外,如果上述筛选方案不适合你的研究,如去除的Chloroplast为你研究的对象,可以跳过此步不进行筛选,运行cp result/raw/otu* result/

    接下来对最终的特征表进行统计,结果有助于优化前面的分析方案,以及选择下游分析合适的参数。

    usearch -otutab_stats result/otutab.txt \

          -output result/otutab.stat

    cat result/otutab.stat

    图2. USEARCH的特征表统计结果示例

    统计结果显示了总读长数量、样本量、特征数量,可以了解特征表的总体数据量和维度信息;接下来是特征表中单元格数量、为0、1和>10的数量和比例,了解特征中频次分布情况;然后是特征在100%、90%和50%样品中发现的数量,展示了特征在样本中的流行频率;最后是样本测序量的分位数,对选择合适的重采样阈值非常有帮助。

    我们根据特征表统计结果,将选择合适的参数对特征标进行等量重抽样方式的标准化,以减小由于样本测序量不一致引起的多样性差异,可实现更准确地多样性分析。重采样使用otutab_rare.R脚本调用vegan包(Oksanen2007)实现,并计算了6种常用alpha多样性(richness、chao1、ACE、shannon、simpson和invsimpson)指数(vegan.txt或表2)。重采样深度(--depth)参考特征表统计结果(图2)选择,一般默认按最小值重采样。提高采样深度可以保留样本中更大的测序量,但也会剔除低于阈值的样本。因此如果样本测序量波动极大,尽量选择合适的阈值重采样以最大化保留测序量。

    mkdir -p result/alpha

    Rscript ${ea}/script/otutab_rare.R --input result/otutab.txt \

          --depth 32086 --seed 1 \

          --normalize result/otutab_rare.txt \

          --output result/alpha/vegan.txt

    usearch -otutab_stats result/otutab_rare.txt \

          -output result/otutab_rare.stat

    cat result/otutab_rare.stat

    结果显示所有样本重采样后读长数量均为32086。这样特征表可以最大化减少测序量的影响,以便更准确评估多样性。

    表2. Alpha多样性指数示例

    SampleID

    richness

    chao1

    ACE

    shannon

    simpson

    invsimpson

    KO1

    2350

    2692.008

    2686.869

    6.132835

    0.990308

    103.1788

    KO2

    2316

    2664.35

    2661.86

    6.17406

    0.991875

    123.0733

    KO3

    1935

    2278.252

    2283.343

    5.828452

    0.989582

    95.98662

    otutab_rare.R调用vegan包计算的6种常用alpha多样性指数,图中仅展示结果前4行作为示例。

    6.Alpha多样性计算

    前面在特征表重采样标准化时,计算了6种常用alpha多样性指数。此外,USEARCH的-alpha_div命令可以快速计算18种alpha多样性指数(alpha.txt),各种指数的计算公式和描述详见:http://www.drive5.com/usearch/manual/alpha_metrics.html。这些结果我们常用于结合样品元数据开展组间比较,或箱线图展示组间异同。

    usearch -alpha_div result/otutab_rare.txt \

          -output result/alpha/alpha.txt

    由于测序数据深度对多样性影响较大,有时我们也关注不同测序样量多样性的变化,即可以判断组间差异是否在不同测序深度下稳定存在,同时确定测序量是否饱和并反映出结果较真实的多样性。USEARCH的-alpha_div_rare命令实现快速无放回百分数重采样计算各样本的丰富度(richness/observed_feature,详见alpha_rare.txt或附表4)。结果可进一步可视化为样本稀释曲线,或分组带误差棒的稀释曲线或箱线图。

    usearch -alpha_div_rare result/otutab_rare.txt \

          -output result/alpha/alpha_rare.txt \

          -method without_replacement

    Alpha多样性丰富度指数相似只代表物种数量相近,然而其中的物种种类可能完全不同。我们需要制作记录每个组指大于定丰度的物种是否存在的数据格式(表3和附表5),用于组间比较物种共有和特有的情况。可以使用ImageGP在线(http://www.ehbio.com/ImageGP/)选择维恩图(Venn diagram)、集合图(Upset view)或桑基图(Sankey diagram)等方式展示。

    表3. 用于比较各组特征共有/特有的数据示例

    特征ID

    分组ID

    ASV_1

    All

    ASV_1

    KO

    ASV_1

    OE

    ASV_1

    WT

    ASV_2

    KO

    我们通常结合元数据计算各组的丰度均值,如以Group列为分组信息计算原始计数的相对丰度并求组均值。

    Rscript ${ea}/script/otu_mean.R --input result/otutab.txt \

          --design metadata.txt \

          --group Group --thre 0 \

          --output result/otutab_mean.txt

    因为特征的数量较大,而且低丰度的特征是否存在偶然性较大,准确性不高且与测序噪音无法区分。因此筛选大于某一丰度阈值结果,可实现数据降维并保留数据的主体,然后用于组间比较共有和特有的情况。如以平均丰度> 0.1%为阈值,可选0.5%或0.05%,得到每个组中符合条件的特征(表3)。

    awk 'BEGIN{OFS=FS="\t"}{if(FNR==1) {for(i=2;i<=NF;i++) a[i]=$i;} \

            else {for(i=2;i<=nf;i++) i="">0.1) print $1, a[i];}}' \

            result/otutab_mean.txt > result/alpha/otu_group_exist.txt

    7.Beta多样性计算

    Beta多样性是群落整体结构的降维分析方法,需要基于特征表计算样本间的各种距离矩阵。常用的Unifrac算法(Lozupone2010)考虑物种间的进化距离,这里我们使用usearch的-cluster_agg命令基于代表序列获得进化树,然后再使用-beta_div基于特征表和进化树计算多种矩阵矩阵,包括bray_curtis, euclidean, jaccard, manhatten, unifrac等,每类矩阵还分为有或无(binary)权重两种(附表6展示Bray-Curtis距离矩阵示例)。

    mkdir -p result/beta/

    usearch -cluster_agg result/otus.fa -treeout result/otus.tree

    usearch -beta_div result/otutab_rare.txt -tree result/otus.tree \

          -filename_prefix result/beta/

    8.物种注释分类汇总

    前在特征表筛选时已经对特征序列完成了物种注释,并根据注释进行筛选。物种注释存在命名混乱、分类级不完整和名称缺失等问题。我们先对格式进行调整方便开展分析。调整物种注释为特征ID和7级分类注释的两列格式(表4附表7)。注意7级分类可能存在不完整的情况,可能是该特征没有相近种的报导,也可能是参考物种注释自身不完善。

    cut -f 1,4 result/otus.sintax \

          |sed 's/\td/\tk/;s/:/__/g;s/,/;/g;s/"//g;s/\/Chloroplast//' \

          > result/taxonomy2.txt

    表4. 物种注释2列格式示例

    特征ID

    分组ID

    ASV_1

    k__Bacteria;p__Actinobacteria;c__Actinobacteria;o__Actinomycetales;f__Thermomonosporaceae

    ASV_2

    k__Bacteria;p__Proteobacteria;c__Betaproteobacteria;o__Burkholderiales;f__Comamonadaceae;g__Pelomonas;s__Pelomonas_puraquae

    ASV_3

    k__Bacteria;p__Proteobacteria;c__Betaproteobacteria;o__Burkholderiales;f__Comamonadaceae;g__Pelomonas;s__Pelomonas_puraquae

    物种注释的7级分类,也提供了特征表多角度降维分析的可能,可以把特征表按物种注释信息合并为门、纲、目、科、属级别的表,以进行更容易与现在科学发现结合的讨论。首先将物种注释转化为7级分类的8列表格(表5附表8),其中缺失的分类级别填充为未分类(Unassigned)。

    awk 'BEGIN{OFS=FS="\t"}{delete a; a["k"]="Unassigned";a["p"]="Unassigned";a["c"]="Unassigned";a["o"]="Unassigned";a["f"]="Unassigned";a["g"]="Unassigned";a["s"]="Unassigned";\

          split($2,x,";");for(i in x){split(x[i],b,"__");a[b[1]]=b[2];} \

          print $1,a["k"],a["p"],a["c"],a["o"],a["f"],a["g"],a["s"];}' \

          result/taxonomy2.txt > temp/otus.tax

    sed 's/;/\t/g;s/.__//g;' temp/otus.tax|cut -f 1-8 | \

          sed '1 s/^/OTUID\tKingdom\tPhylum\tClass\tOrder\tFamily\tGenus\tSpecies\n/' \

          > result/taxonomy.txt

    表5. 物种注释8列格式示例

    OTUID

    Kingdom

    Phylum

    Class

    Order

    Family

    Genus

    Species

    ASV_1

    Bacteria

    Actinobacteria

    Actinobacteria

    Actinomycetales

    Thermomonosporaceae

    Unassigned

    Unassigned

    ASV_2

    Bacteria

    Proteobacteria

    Betaproteobacteria

    Burkholderiales

    Comamonadaceae

    Pelomonas

    Pelomonas_puraquae

    ASV_3

    Bacteria

    Proteobacteria

    Gammaproteobacteria

    Pseudomonadales

    Pseudomonadaceae

    Rhizobacter

    Rhizobacter_bergeniae

    接下来对特征表按各级别进行分类汇总,获得门、纲、目、科和属水平上的特征表(附表9门水平分类汇总表),即可以直接用来绘制物种组成图,也可以进一步从更多角度分析组间差异或挖掘生物标志物。

    for i in p c o f g;do

          usearch -sintax_summary result/otus.sintax \

          -otutabin result/otutab_rare.txt -rank ${i} \

          -output result/tax/sum_${i}.txt

    done

    sed -i 's/(//g;s/)//g;s/\"//g;s/\#//g;s/\/Chloroplast//g' result/tax/sum_*.txt

    9.有参分析和功能预测

    一些功能注释数据库,如PICRUSt (Langille2013)、BugBase (Ward2017)等的输入文件必须是基于GreenGenes数据库生成的特征表。此处采用vsearch的--usearch_global命令比对扩增子数据至GreenGenes数据库即可获得有参分析的特征表(gg/otutab.txt),该结果可作为主流功能预测软件的输入文件开展分析。

    vsearch --usearch_global temp/filtered.fa --db ${ea}/gg/97_otus.fasta \

           --otutabout result/gg/otutab.txt --id 0.97 --threads 12

    注意:如果使用PICRUSt2可直接使用第4步中的序列(otus.fa)和第5步中的特征表(result/otutab.txt)作为输入文件开展分析。

    10.空间清理及数据提交

    整个分析过程会占用原始数据大小数10倍的空间。项目结果分析结束可以删除整个temp文件夹。分析取得阶段性成果,也要及时清楚不常用的中间文件节省空间,如fastq文件。这个习惯对于团队共享存储时尤其重要,否则硬盘空间耗尽,所有任务都会立即停止。

    rm -rf temp/*.fq

    短期不用数据库压缩节省空间。

    gzip ${ea}/usearch/rdp_16s_v16_sp.fa

    gzip ${ea}/gg/97_otus.fasta

    原始序列统计md5值,用于数据提交(附表10)。

    cd seq

    md5sum *_1.fq.gz > md5sum1.txt

    md5sum *_2.fq.gz > md5sum2.txt

    paste md5sum1.txt md5sum2.txt | awk '{print $2"\t"$1"\t"$4"\t"$3}' | \

      sed 's/*//g' > ../result/md5sum.txt

    rm md5sum*

    cd ..

    cat result/md5sum.txt

    11.STAMP和LEfSe软件输入文件准备

    STAMP是常用的图型界面特征差异比较软件(Parks等,2014),操作简单,同时支持主流操作系统(Windows/Linux/Mac,在Windows中安装最方便),软件可从其主页https://beikolab.cs.dal.ca/software/STAMP 获取。我们提供了format2stamp.R脚本,可以基于特征表、物种注释信息快速获得界、门、纲、目、科、属、种、OTU/ASV的STAPM输入格式兼容的特征表,同时提供按丰度过滤的参数。如按万分之一相对丰度过滤生成STAMP输入文件的代码如下:

    Rscript ${ea}/script/format2stamp.R -h

    mkdir -p result/stamp

    Rscript ${ea}/script/format2stamp.R --input result/otutab.txt \

      --taxonomy result/taxonomy.txt --threshold 0.01 \

      --output result/stamp/tax

    LEfSe是常用的生物标记鉴定软件(Segata 等,2011),支持多组比较。其输入文件格式是整合了样本分组信息、界、门、纲、目、科、属层面相对丰度的结果。同时为了展示可读性的进化分枝树图形,还需要对特征表进行筛选。我们提供了format2lefse.R脚本,可以一步生成LEfSe要求的输入文件,同时提供按丰度过滤的参数。如按千分之一(threshold)丰度筛选以控制作图中的进化分枝数量有较好的可读性,代码如下:

    mkdir -p result/lefse

    Rscript ${ea}/script/format2lefse.R --input result/otutab.txt \

      --taxonomy result/taxonomy.txt --design result/metadata.txt \

      --group Group --threshold 0.1 \

      --output result/lefse/LEfSe

    结果文件可以在软件官网(http://huttenhower.sph.harvard.edu/galaxy)或我们建立的国内备份站ImageGP(http://www.ehbio.com/ImageGP)开展在线分析。结果的进化分枝图中分枝过密和/或文字重叠严重,可进一步提高丰度阈值以减少分枝数量,反之同理。

    常见问题

    1.软件、数据库下载慢或无法下载

    由于国际带宽和站点的速度限制等原因,很多国外数据库下载缓慢甚至无法下载。宏基因组公众号团队建立了微生物组领域的扩增子和宏基因组常用软件和数据库的国内备份站点,方便同行下载和使用。站点1. 国家微生物科学数据中心的数据下载页面—工具资源下载栏目(http://nmdc.cn/datadownload)即为宏基因组团队与中科院微生物所共同维护的站点之一,提供宏基因组常用软件、数据库的FTP下载链接。站点2. 由刘永鑫的GitHub中《微生物组数据分析与可视化实战》专著的大数据下载页面(https://github.com/YongxinLiu/MicrobiomeStatPlot/blob/master/Data/BigDataDownlaodList.md) 提供有常用资源下载百度云链接和HTTP下载链接。

    R包的批量安装,需要在RStudio中查看R包所在位置,然后替换下载的R包合辑,详细操作见—个人电脑搭建微生物组分析平台(Win/Mac)

    2.ITS物种注释数据库UNITE使用时报错

    UNITE数据库官方提供的数据格式有时存在错误。主要是分类级空缺的问题,我们使用sed命令对utax8.2数据库进行调整,示例如下。

    sed -i 's/,;/,Unnamed;/;s/:,/:Unnamed,/g' utax_reference_dataset_all_04.02.2020.fasta

    3.文件Phred质量错误—Fastq质量值64转33

    Illumina测序的Fastq格式文件中序列的质量值通常为Phred33格式,典型特点为以大写字母为主。有时测序服务提供商也会提供旧版Phred64格式的Fastq文件,直接使用会提示Phred编码错误,我们需要使用vsearch的--fastq_convert转换Phred64为常用的Phred33格式。此外可选fastp(Chen等, 2018)实现格式转换。

    vsearch --fastq_convert test_64.fq \

            --fastqout test.fq \

            --fastq_ascii 64 --fastq_asciiout 33

    4.单端序列改名

    如果是单端测序数据或已经合并后的单端FASTQ序列样本文件,需要按样本名重命名每条序列,才能进行下游分析,否则将无法区分序列的样本来源。我们使用vsearch --fastq_convert命令中的--relabel参数对序列按样本重命名,以WT1样本为例。

    vsearch --fastq_convert test.fq --fastqout WT1.fq --relabel WT1.

    5.Fasta序列取反向互补

    物种注释时发现序列全为反向(-),表明序列的方向有错误,可用vsearch的--fastx_revcomp命令调整。

    vsearch --fastx_revcomp filtered_test.fa --fastaout filtered.fa

    致谢

    本项目由中国科学院前沿科学重点研究项目(编号:QYZDB-SSW-SMC021)、国家自然科学基金面上项目(编号:31772400) [Supported by the Key Research Program of Frontier Sciences of the Chinese Academy of Science (No. QYZDB-SSW-SMC021), the National Natural Science Foundation of China (No. 31772400)]支持。此分析流程在我之前的综述中被提及(刘永鑫2019; Liu2020),本文是发表的详细使用方法和常见问题解决的经验。

    参考文献

    1.刘永鑫, 秦媛, 郭晓璇, 白洋 (2019). 微生物组数据分析方法与应用. 遗传 41(9): 845-826.

    2.Amir, A., McDonald, D., Navas-Molina, J. A., Kopylova, E., Morton, J. T., Zech Xu, Z., Kightley, E. P., Thompson, L. R., Hyde, E. R., Gonzalez, A. and Knight, R. (2017). Deblur Rapidly Resolves Single-Nucleotide Community Sequence Patterns. mSystems 2(2): e00191-00116.

    3.Chen, Q., Jiang, T., Liu, Y. X., Liu, H., Zhao, T., Liu, Z., Gan, X., Hallab, A., Wang, X., He, J., Ma, Y., Zhang, F., Jin, T., Schranz, M. E., Wang, Y., Bai, Y. and Wang, G. (2019). Recently duplicated sesterterpene (C25) gene clusters in Arabidopsis thaliana modulate root microbiota. Sci China Life Sci 62(7): 947-958.

    4.Chen, S., Zhou, Y., Chen, Y. and Gu, J. (2018). fastp: an ultra-fast all-in-one FASTQ preprocessor. Bioinformatics 34(17): i884-i890.

    5.Cole, J. R., Wang, Q., Fish, J. A., Chai, B., McGarrell, D. M., Sun, Y., Brown, C. T., Porras-Alfaro, A., Kuske, C. R. and Tiedje, J. M. (2014). Ribosomal Database Project: data and tools for high throughput rRNA analysis. Nucleic Acids Res 42(Database issue): D633-642.

    6.Edgar, R. C. (2010). Search and clustering orders of magnitude faster than BLAST. Bioinformatics 26(19): 2460-2461.

    7.Edgar, R. C. (2013). UPARSE: highly accurate OTU sequences from microbial amplicon reads. Nat Methods 10(10): 996-998.

    8.Edgar, R. C. and Flyvbjerg, H. (2015). Error filtering, pair assembly and error correction for next-generation sequencing reads. Bioinformatics 31(21): 3476-3482.

    9.Huang, A. C., Jiang, T., Liu, Y. X., Bai, Y. C., Reed, J., Qu, B., Goossens, A., Nutzmann, H. W., Bai, Y. and Osbourn, A. (2019). A specialized metabolic network selectively modulates Arabidopsis root microbiota. Science 364(6440): eaau6389.

    10.Langille, M. G., Zaneveld, J., Caporaso, J. G., McDonald, D., Knights, D., Reyes, J. A., Clemente, J. C., Burkepile, D. E., Vega Thurber, R. L., Knight, R., Beiko, R. G. and Huttenhower, C. (2013). Predictive functional profiling of microbial communities using 16S rRNA marker gene sequences. Nat Biotechnol 31(9): 814-821.

    11.Liu, Y. X., Qin, Y., Chen, T., Lu, M., Qian, X., Guo, X. and Bai, Y. (2020). A practical guide to amplicon and metagenomic analysis of microbiome data. Protein Cell 11.

    12.Lozupone, C., Lladser, M. E., Knights, D., Stombaugh, J. and Knight, R. (2011). UniFrac: an effective distance metric for microbial community comparison. ISME J 5(2): 169-172.

    13.McDonald, D., Price, M. N., Goodrich, J., Nawrocki, E. P., DeSantis, T. Z., Probst, A., Andersen, G. L., Knight, R. and Hugenholtz, P. (2012). An improved Greengenes taxonomy with explicit ranks for ecological and evolutionary analyses of bacteria and archaea. ISME J 6(3): 610-618.

    14.Nilsson, R. H., Larsson, K. H., Taylor, A. F. S., Bengtsson-Palme, J., Jeppesen, T. S., Schigel, D., Kennedy, P., Picard, K., Glockner, F. O., Tedersoo, L., Saar, I., Koljalg, U. and Abarenkov, K. (2019). The UNITE database for molecular identification of fungi: handling dark taxa and parallel taxonomic classifications. Nucleic Acids Res 47(D1): D259-D264.

    15.Oksanen, J., Kindt, R., Legendre, P., O’Hara, B., Stevens, M. H. H., Oksanen, M. J. and Suggests, M. (2007). The vegan package. Commun Ecol Pack 10: 631-637.

    16.Qian, X. B., Chen, T., Xu, Y. P., Chen, L., Sun, F. X., Lu, M. P. and Liu, Y. X. (2020a). A guide to human microbiome research: study design, sample collection, and bioinformatics analysis. Chin Med J (Engl) 133(15): 1844-1855.

    17.Qian, X., Liu, Y. X., Ye, X., Zheng, W., Lv, S., Mo, M., Lin, J., Wang, W., Wang, W., Zhang, X. and Lu, M. (2020b). Gut microbiota in children with juvenile idiopathic arthritis: characteristics, biomarker identification, and usefulness in clinical prediction. BMC Genomics 21(1): 286.

    18.Quast, C., Pruesse, E., Yilmaz, P., Gerken, J., Schweer, T., Yarza, P., Peplies, J. and Glockner, F. O. (2013). The SILVA ribosomal RNA gene database project: improved data processing and web-based tools. Nucleic Acids Res 41(Database issue): D590-596.

    19.Rognes, T., Flouri, T., Nichols, B., Quince, C. and Mahé, F. (2016). VSEARCH: a versatile open source tool for metagenomics. PeerJ 4: e2584.

    20.Wang, Y., Song, F., Zhu, J., Zhang, S., Yang, Y., Chen, T., Tang, B., Dong, L., Ding, N., Zhang, Q., Bai, Z., Dong, X., Chen, H., Sun, M., Zhai, S., Sun, Y., Yu, L., Lan, L., Xiao, J., Fang, X., Lei, H., Zhang, Z. and Zhao, W. (2017). GSA: Genome Sequence Archive*. Genomics Proteomics Bioinformatics 15(1): 14-18.

    21.Ward, T., Larson, J., Meulemans, J., Hillmann, B., Lynch, J., Sidiropoulos, D., Spear, J. R., Caporaso, G., Blekhman, R., Knight, R., Fink, R. and Knights, D. (2017). BugBase predicts organism-level microbiome phenotypes. bioRxiv: 133462.

    22.Zhang, J., Liu, Y.-X., Zhang, N., Hu, B., Jin, T., Xu, H., Qin, Y., Yan, P., Zhang, X., Guo, X., Hui, J., Cao, S., Wang, X., Wang, C., Wang, H., Qu, B., Fan, G., Yuan, L., Garrido-Oter, R., Chu, C. and Bai, Y. (2019). NRT1.1B is associated with root microbiota composition and nitrogen use in field-grown rice. Nat Biotechnol 37(6): 676-684.

    23.Zhang, J., Zhang, N., Liu, Y. X., Zhang, X., Hu, B., Qin, Y., Xu, H., Wang, H., Guo, X., Qian, J., Wang, W., Zhang, P., Jin, T., Chu, C. and Bai, Y. (2018). Root microbiota shift in rice correlates with resident time in the field and developmental stage. Sci China Life Sci 61(6): 613-621.

    24.Parks, D. H., Tyson, G. W., Hugenholtz, P. & Beiko, R. G. (2014). STAMP: statistical analysis of taxonomic and functional profiles. Bioinformatics 30(21): 3123-3124.

    25.Segata, N., Izard, J., Waldron, L., Gevers, D., Miropolsky, L., Garrett, W. S. & Huttenhower, C. (2011). Metagenomic biomarker discovery and explanation. Genome Biology 12(6): R60.

    猜你喜欢

    10000+:菌群分析 宝宝与猫狗 梅毒狂想曲 提DNA发Nature Cell专刊 肠道指挥大脑

    系列教程:微生物组入门 Biostar 微生物组  宏基因组

    专业技能:学术图表 高分文章 生信宝典 不可或缺的人

    一文读懂:宏基因组 寄生虫益处 进化树

    必备技能:提问 搜索  Endnote

    文献阅读 热心肠 SemanticScholar Geenmedical

    扩增子分析:图表解读 分析流程 统计绘图

    16S功能预测   PICRUSt  FAPROTAX  Bugbase Tax4Fun

    在线工具:16S预测培养基 生信绘图

    科研经验:云笔记  云协作 公众号

    编程模板: Shell  R Perl

    生物科普:  肠道细菌 人体上的生命 生命大跃进  细胞暗战 人体奥秘  

    写在后面

    为鼓励读者交流、快速解决科研困难,我们建立了“宏基因组”专业讨论群,目前己有国内外5000+ 一线科研人员加入。参与讨论,获得专业解答,欢迎分享此文至朋友圈,并扫码加主编好友带你入群,务必备注“姓名-单位-研究方向-职称/年级”。PI请明示身份,另有海内外微生物相关PI群供大佬合作交流。技术问题寻求帮助,首先阅读《如何优雅的提问》学习解决问题思路,仍未解决群内讨论,问题不私聊,帮助同行。

    学习16S扩增子、宏基因组科研思路和分析实战,关注“宏基因组”

    点击阅读原文下载PDF审稿,或浏览器直接访问下载链接:http://210.75.224.110/github/MicrobiomeProtocol/04Review/210226/2003641YongxinLiu939017/Protocol2003641.pdf

    展开全文
  • 44. 制作个性单元格 27 一、 数据输入和编辑技巧 28 45. 在一个单元格内输入个值 28 46. 增加工作簿的页数 28 47. 奇特的F4键 29 48. 将格式化文本导入EXCEL 29 49. 快速换行 30 50. 巧变文本为数字 30 51. 在...
  • 44. 制作个性单元格 27 一、 数据输入和编辑技巧 28 45. 在一个单元格内输入个值 28 46. 增加工作簿的页数 28 47. 奇特的F4键 29 48. 将格式化文本导入EXCEL 29 49. 快速换行 30 50. 巧变文本为数字 30 51. 在...
  • Excel技巧大全

    2015-05-06 07:21:37
    44. 制作个性单元格 16 二、 数据输入和编辑技巧 16 1. 在一个单元格内输入个值 16 2. 增加工作簿的页数 16 3. 奇特的F4键 16 4. 将格式化文本导入Excel 16 5. 快速换行 17 6. 巧变文本为数字 17 7. 在单元格中...
  • Excel新手完全教程

    2014-10-08 23:13:58
    44. 制作个性单元格 22 一、 数据输入和编辑技巧 23 45. 在一个单元格内输入个值 23 46. 增加工作簿的页数 23 47. 奇特的F4键 23 48. 将格式化文本导入EXCEL 23 49. 快速换行 24 50. 巧变文本为数字 24 51. 在...
  • Excel使用技巧大全

    2011-09-13 23:38:39
    44. 制作个性单元格 19 二、 数据输入和编辑技巧 20 1. 在一个单元格内输入个值 20 2. 增加工作簿的页数 20 3. 奇特的F4键 20 4. 将格式化文本导入EXCEL 20 5. 快速换行 21 6. 巧变文本为数字 21 7. 在单元格中...
  • 44. 制作个性单元格 16 二、 数据输入和编辑技巧 16 1. 在一个单元格内输入个值 16 2. 增加工作簿的页数 16 3. 奇特的F4键 16 4. 将格式化文本导入EXCEL 16 5. 快速换行 17 6. 巧变文本为数字 17 7. 在单元格中...
  • 【Android 应用开发】GitHub 优秀的 Android 开源项目

    万次阅读 多人点赞 2014-01-09 17:35:15
    文章转载自 : ... : Elysee2014 主要介绍那些不错个性化的View,包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar及其他如Dialog、Toast、Ed

    原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea


    主要介绍那些不错个性化的View,包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar及其他如Dialog、Toast、EditText、TableView、Activity Animation等等。

      

    一、ListView

     

    1. android-pulltorefresh 一个强大的拉动刷新开源项目,支持各种控件下拉刷新
      ListView、ViewPager、WevView、ExpandableListView、GridView、(Horizontal
      )ScrollView、Fragment上下左右拉动刷新,比下面johannilsson那个只支持ListView的强大的多。并且他实现的下拉刷新ListView在item不足一屏情况下也不会显示刷新提示,体验更好。
      项目地址:https://github.com/chrisbanes/Android-PullToRefresh
      Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/pull-to-refreshview-demo.apk?raw=true
      APP示例:新浪微博各个页面

    2. android-pulltorefresh-listview 下拉刷新ListView
      项目地址:https://github.com/johannilsson/android-pulltorefresh
      Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/pull-to-refresh-listview-demo.apk?raw=true
      PS:这个被很多人使用的项目实际有不少bug,推荐使用上面的android-pulltorefresh

    3. DropDownListView 下拉刷新及滑动到底部加载更多ListView
      项目地址:https://github.com/Trinea/AndroidCommon
      Demo地址:https://play.google.com/store/apps/details?id=cn.trinea.android.demo
      文档介绍:http://www.trinea.cn/?p=523

    4. DragSortListView 拖动排序的ListView
      同时支持ListView滑动item删除,各个Item高度不一、单选、复选、CursorAdapter做为适配器、拖动背景变化等
      项目地址:https://github.com/bauerca/drag-sort-listview
      Demo地址:https://play.google.com/store/apps/details?id=com.mobeta.android.demodslv
      APP示例:Wordpress Android

    5. SwipeListView 支持定义ListView左右滑动事件,支持左右滑动位移,支持定义动画时间
      项目地址:https://github.com/47deg/android-swipelistview
      Demo地址:https://play.google.com/store/apps/details?id=com.fortysevendeg.android.swipelistview
      APP示例:微信

    6. Android-SwipeToDismiss 滑动Item消失ListView
      项目地址:https://github.com/romannurik/Android-SwipeToDismiss
      支持3.0以下版本见:https://github.com/JakeWharton/SwipeToDismissNOA
      Demo地址:https://github.com/JakeWharton/SwipeToDismissNOA/SwipeToDismissNOA.apk/qr_code

    7. StickyListHeaders GroupName滑动到顶端时会固定不动直到另外一个GroupName到达顶端的ExpandListView,支持快速滑动,支持Android2.3及以上
      项目地址:https://github.com/emilsjolander/StickyListHeaders
      APP示例:Android 4.0联系人
      效果图:Renderings

    8. pinned-section-listview GroupName滑动到顶端时会固定不动直到另外一个GroupName到达顶端的ExpandListView
      项目地址:https://github.com/beworker/pinned-section-listview
      效果图:Renderings

    9. PinnedHeaderListView GroupName滑动到顶端时会固定不动直到另外一个GroupName到达顶端的ExpandListView
      项目地址:https://github.com/JimiSmith/PinnedHeaderListView

    10. QuickReturnHeader ListView/ScrollView的header或footer,当向下滚动时消失,向上滚动时出现
      项目地址:https://github.com/ManuelPeinado/QuickReturnHeader
      Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/quick-return-header-demo.apk?raw=true
      APP示例:google plus

    11. IndexableListView ListView右侧会显示item首字母快捷索引,点击可快速滑动到某个item
      项目地址:https://github.com/woozzu/IndexableListView
      Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/indexable-listview.apk?raw=true
      APP示例:微信通讯录、小米联系人

    12. CustomFastScrollView ListView快速滑动,同时屏幕中间PopupWindows显示滑动到的item内容或首字母
      项目地址:https://github.com/nolanlawson/CustomFastScrollViewDemo
      效果图:Renderings

    13. Android-ScrollBarPanel ListView滑动时固定的Panel指示显示在scrollbar旁边
      项目地址:https://github.com/rno/Android-ScrollBarPanel
      效果展示:https://github.com/rno/Android-ScrollBarPanel/raw/master/demo_capture.png

    14. SlideExpandableListView 用户点击listView item滑出固定区域,其他item的区域收缩
      项目地址:https://github.com/tjerkw/Android-SlideExpandableListView
      Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/slide-expandable-listView-demo.apk?raw=true

    15. JazzyListView ListView及GridView item以特殊动画效果进入屏幕,效果包括grow、cards、curl、wave、flip、fly等等
      项目地址:https://github.com/twotoasters/JazzyListView
      Demo地址:https://play.google.com/store/apps/details?id=com.twotoasters.jazzylistview.sample
      效果展示:http://lab.hakim.se/scroll-effects/

    16. ListViewAnimations 带Item显示动画的ListView,动画包括底部飞入、其他方向斜飞入、下层飞入、渐变消失、滑动删除等
      项目地址:https://github.com/nhaarman/ListViewAnimations
      Demo地址:https://play.google.com/store/apps/details?id=com.haarman.listviewanimations
      APP示例:Google plus、Google Now卡片式进入、小米系统中应用商店、联系人、游戏中心、音乐、文件管理器的ListView、Ultimate、Light Flow Lite、TreinVerkeer、Running Coach、Pearl Jam Lyrics、Calorie Chart、Car Hire、Super BART、DK FlashCards、Counter Plus、Voorlees Verhaaltjes 2.0

    17. DevsmartLib-Android 横向ListView
      项目地址:https://github.com/dinocore1/DevsmartLib-Android
      Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/horizontal-listview-demo.apk?raw=true

     

    二、ActionBar

     

    1. ActionBarSherlock 为Android所有版本提供统一的ActionBar,解决4.0以下ActionBar的适配问题
      项目地址:https://github.com/JakeWharton/ActionBarSherlock
      Demo地址:https://play.google.com/store/apps/details?id=com.actionbarsherlock.sample.demos
      APP示例:太多了。。现在连google都在用

    2. ActionBar-PullToRefresh 下拉刷新,ActionBar出现加载中提示
      项目地址:https://github.com/chrisbanes/ActionBar-PullToRefresh
      Demo地址:https://play.google.com/store/apps/details?id=uk.co.senab.actionbarpulltorefresh.samples.stock
      APP示例:Gmail,Google plus,知乎等

    3. FadingActionBar ListView向下滚动逐渐显现的ActionBar
      项目地址:https://github.com/ManuelPeinado/FadingActionBar
      Demo地址:https://play.google.com/store/apps/details?id=com.manuelpeinado.fadingactionbar.demo
      APP示例:google music,知乎

    4. NotBoringActionBar google music下拉收缩的ActionBar
      项目地址:https://github.com/flavienlaurent/NotBoringActionBar
      Demo地址:http://flavienlaurent.com/blog/2013/11/20/making-your-action-bar-not-boring/
      APP示例:Google音乐

    5. RefreshActionItem 带进度显示和刷新按钮的ActionBar
      项目地址:https://github.com/ManuelPeinado/RefreshActionItem
      Demo地址:https://play.google.com/store/apps/details?id=com.manuelpeinado.refreshactionitem.demo
      APP示例:The New York Times,DevAppsDirect.

    6. GlassActionBar 类似玻璃的有一定透明度的ActionBar
      项目地址:https://github.com/ManuelPeinado/GlassActionBar
      Demo地址:https://play.google.com/store/apps/details?id=com.manuelpeinado.glassactionbardemo
      APP示例:google music

     

    三、Menu

     

    1. MenuDrawer 滑出式菜单,通过拖动屏幕边缘滑出菜单,支持屏幕上下左右划出,支持当前View处于上下层,支持Windows边缘、ListView边缘、ViewPager变化划出菜单等。
      项目地址:https://github.com/SimonVT/android-menudrawer
      Demo地址:http://simonvt.github.io/android-menudrawer/
      APP示例:Gmail、Google Music等大部分google app

    2. SlidingMenu 滑出式菜单,通过拖动屏幕边缘滑出菜单,支持屏幕左右划出,支持菜单zoom、scale、slide up三种动画样式出现。
      项目地址:https://github.com/jfeinstein10/SlidingMenu
      Demo地址:https://play.google.com/store/apps/details?id=com.slidingmenu.example
      APP示例:Foursquare, LinkedIn, Zappos, Rdio, Evernote Food, Plume, VLC for Android, ESPN ScoreCenter, MLS MatchDay, 9GAG, Wunderlist 2, The Verge, MTG Familiar, Mantano Reader, Falcon Pro (BETA), MW3 Barracks
      MenuDrawer和SlidingMenu比较:SlidingMenu支持菜单动画样式出现,MenuDrawer支持菜单view处于内容的上下层

    3. ArcMenu 支持类似Path的左下角动画旋转菜单及横向划出菜单、圆心弹出菜单
      项目地址:https://github.com/daCapricorn/ArcMenu
      APP示例:Path
      效果图:Renderings
      https://dl.dropboxusercontent.com/u/11369687/preview1.png
      https://dl.dropboxusercontent.com/u/11369687/raymenu.png

    4. android-satellite-menu 类似Path的左下角动画旋转菜单
      项目地址:https://github.com/siyamed/android-satellite-menu
      Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/satellite-menu-demo.apk?raw=true
      APP示例:Path

    5. radial-menu-widget 圆形菜单,支持二级菜单
      项目地址:https://code.google.com/p/radial-menu-widget/
      效果图:http://farm8.staticflickr.com/7377/11621125154_d1773c2dcc_o.jpg

    6. Android Wheel Menu 圆形旋转选取菜单
      项目地址:https://github.com/anupcowkur/Android-Wheel-Menu
      效果图:Renderings

    7. FoldingNavigationDrawer滑动并以折叠方式打开菜单
      项目地址:https://github.com/tibi1712/FoldingNavigationDrawer-Android
      使用介绍:https://play.google.com/store/apps/details?id=com.ptr.folding.sample
      效果图:Renderings

     

    四、ViewPager 、Gallery

     

    1. Android-ViewPagerIndicator 配合ViewPager使用的Indicator,支持各种位置和样式
      项目地址:https://github.com/JakeWharton/Android-ViewPagerIndicator
      Demo地址:https://play.google.com/store/apps/details?id=com.viewpagerindicator.sample
      APP示例:太多了。。

    2. JazzyViewPager 支持Fragment切换动画的ViewPager,动画包括转盘、淡入淡出、翻页、层叠、旋转、方块、翻转、放大缩小等
      项目地址:https://github.com/jfeinstein10/JazzyViewPager
      Demo地址:https://github.com/jfeinstein10/JazzyViewPager/blob/master/JazzyViewPager.apk?raw=true
      效果类似桌面左右切换的各种效果,不过桌面并非用ViewPager实现而已

    3. Android-DirectionalViewPager 支持横向和纵向(垂直)的ViewPager
      项目地址:https://github.com/JakeWharton/Android-DirectionalViewPager
      Demo地址:https://market.android.com/details?id=com.directionalviewpager.sample

    4. android-pulltorefresh 支持下拉刷新的ViewPager
      项目地址:https://github.com/chrisbanes/Android-PullToRefresh
      Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/pull-to-refreshview-demo.apk?raw=true
      APP示例:新浪微博各个页面

    5. FancyCoverFlow支持Item切换动画效果的类似Gallery View
      项目地址:https://github.com/davidschreiber/FancyCoverFlow
      Demo地址:https://play.google.com/store/apps/details?id=at.technikum.mti.fancycoverflow.samples
      效果图:Renderings

    6. AndroidTouchGallery 支持双击或双指缩放的Gallery(用ViewPager实现)
      相比下面的PhotoView,在被放大后依然能滑到下一个item,并且支持直接从url和文件中获取图片,
      项目地址:https://github.com/Dreddik/AndroidTouchGallery
      Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/touch-gallery-demo.apk?raw=true
      APP示例:类似微信中查看聊天记录图片时可双击放大,并且放大情况下能正常左右滑动到前后图片

    7. Salvage view 带View缓存的Viewpager PagerAdapter,很方便使用
      项目地址:https://github.com/JakeWharton/salvage

     

    五、GridView

     

    1. StaggeredGridView 允许非对齐行的GridView
      类似Pinterest的瀑布流,并且跟ListView一样自带View缓存,继承自ViewGroup
      项目地址:https://github.com/maurycyw/StaggeredGridView
      Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/staggered-gridview-demo.apk?raw=true
      APP示例:Pinterest等

    2. AndroidStaggeredGrid 允许非对齐行的GridView
      类似Pinterest的瀑布流,继承自AbsListView
      项目地址:https://github.com/etsy/AndroidStaggeredGrid
      APP示例:Pinterest等

    3. PinterestLikeAdapterView 允许非对齐行的GridView
      类似Pinterest的瀑布流,允许下拉刷新
      项目地址:https://github.com/GDG-Korea/PinterestLikeAdapterView
      APP示例:Pinterest等

    4. DraggableGridView Item可拖动交换位置的GridView,类似桌面的单屏效果
      项目地址:https://github.com/thquinn/DraggableGridView
      Demo地址:https://github.com/thquinn/DraggableGridView/blob/master/bin/DraggableGridViewSample.apk?raw=true

     

    六、ImageView

     

    1. PhotoView 支持双击或双指缩放的ImageView
      在ViewPager等Scrolling view中正常使用,相比上面的AndroidTouchGallery,不仅支持ViewPager,同时支持单个ImageView
      项目地址:https://github.com/chrisbanes/PhotoView
      Demo地址:https://play.google.com/store/apps/details?id=uk.co.senab.photoview.sample
      APP示例:photup

    2. android-gif-drawable 支持gif显示的view
      项目地址:https://github.com/koral--/android-gif-drawable
      用jni实现的,编译生成so库后直接xml定义view即可,而且本身不依赖于其他开源项目所以相对下面的ImageViewEx简单的多

    3. ImageViewEx 支持Gif显示的ImageView
      项目地址:https://github.com/frapontillo/ImageViewEx
      Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/imageviewex-demo.apk?raw=true
      依赖很多,编译过程很繁琐!|_|!

    4. RoundedImageView 带圆角的ImageView
      项目地址:https://github.com/vinc3m1/RoundedImageView
      效果图:Renderings

     

    七、ProgressBar

     

    1. SmoothProgressBar 水平进度条
      项目地址:https://github.com/castorflex/SmoothProgressBar
      Demo地址:https://play.google.com/store/apps/details?id=fr.castorflex.android.smoothprogressbar.sample

    2. ProgressWheel 支持进度显示的圆形ProgressBar
      项目地址:https://github.com/Todd-Davies/ProgressWheel
      Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/progress-wheel-demo.apk?raw=true

    3. android-square-progressbar 在图片周围显示进度
      项目地址:https://github.com/mrwonderman/android-square-progressbar
      Demo地址:https://play.google.com/store/apps/details?id=net.yscs.android.square_progressbar_example
      APP示例:square
      效果图:Renderings

    4. HoloCircularProgressBar Android4.1 时钟App样式
      项目地址:https://github.com/passsy/android-HoloCircularProgressBar
      APP示例:Android4.1时钟App
      效果图:https://raw.github.com/passsy/android-HoloCircularProgressBar/master/raw/screenshot1.png

     

    八、其他

     

      1. achartengine 强大的图标绘制工具
        支持折线图、面积图、散点图、时间图、柱状图、条图、饼图、气泡图、圆环图、范围(高至低)条形图、拨号图/表、立方线图及各种图的结合
        项目地址:https://code.google.com/p/achartengine/
        官方网站:http://www.achartengine.org/
        效果图:Renderings
        http://www.achartengine.org/dimages/sales_line_and_area_chart.png
        http://www.achartengine.org/dimages/temperature_range_chart.png
        http://www.achartengine.org/dimages/combined_chart.png
        http://www.achartengine.org/dimages/budget_chart.png
        APP示例:Wordpress Android,Google Analytics

      2. GraphView 绘制图表和曲线图的View
        可用于Android上的曲形图、柱状图、波浪图展示
        项目地址:https://github.com/jjoe64/GraphView
        Demo工程:https://github.com/jjoe64/GraphView-Demos
        Demo地址:https://play.google.com/store/apps/details?id=com.sothree.umano
        APP示例:Wordpress Android,Google Analytics

      3. android-flip 类似Flipboard翻转动画的实现
        项目地址:https://github.com/openaphid/android-flip
        Demo地址:https://github.com/openaphid/android-flip/blob/master/FlipView/Demo/APK/Aphid-FlipView-Demo.apk?raw=true
        APP示例:flipboard

      4. FlipImageView 支持x、y、z及动画选择的翻转动画的实现
        项目地址:https://github.com/castorflex/FlipImageView
        Demo地址:https://play.google.com/store/apps/details?id=fr.castorflex.android.flipimageview

      5. SwipeBackLayout 左右或向上滑动返回的Activity
        项目地址:https://github.com/Issacw0ng/SwipeBackLayout
        Demo地址:https://play.google.com/store/apps/details?id=me.imid.swipebacklayout.demo
        APP示例:知乎

      6. Cards-UI 卡片式View,支持单个卡片,item为卡片的ListView
        项目地址:https://github.com/afollestad/Cards-UI
        Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/cards-ui-demo.apk?raw=true

      7. cardslib 卡片式View,支持单个卡片,item为卡片的ListView和GridView
        项目地址:https://github.com/gabrielemariotti/cardslib
        Demo地址:https://play.google.com/store/apps/details?id=it.gmariotti.cardslib.demo

      8. android-styled-dialogs 可自定义样式的dialog
        默认与Holo主题样式一致,在Android2.2以上同一样式
        项目地址:https://github.com/inmite/android-styled-dialogs
        Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/styled-dialogs-demo.apk?raw=true

      9. Crouton 丰富样式的Toast
        允许alert、comfirm、info样式及点击消失样式,允许设置Toast显示时间,允许自定义View。
        项目地址:https://github.com/keyboardsurfer/Crouton
        Demo地址:http://play.google.com/store/apps/details?id=de.keyboardsurfer.app.demo.crouton

      10. supertooltips 带动画效果的Tips显示
        项目地址:https://github.com/nhaarman/supertooltips
        Demo地址:https://play.google.com/store/apps/details?id=com.haarman.supertooltips

      11. Android ViewBadger为其他View添加角标等
        项目地址:https://github.com/jgilfelt/android-viewbadger
        Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/android-viewbadger.apk?raw=true
        效果图:https://github-camo.global.ssl.fastly.net/a705a3e88c75ae2394943bd7c56f725697616ea8/687474703a2f2f7777772e6a65666667696c66656c742e636f6d2f766965776261646765722f76622d31612e706e67

      12. Android Sliding Up Panel 可拖动的View,能在当前Activity上扶起一个可拖动的Panel
        项目地址:https://github.com/umano/AndroidSlidingUpPanel
        Demo地址:https://play.google.com/store/apps/details?id=com.sothree.umano
        APP示例:Google Music精简播放栏

      13. android-times-square Android日历部件
        支持选取单个日期,多个日期,及日期区间段和对话框形式显示
        项目地址:https://github.com/square/android-times-square
        Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/times-square-demo.apk?raw=true

      14. android-calendar-card 日历
        项目地址:https://github.com/kenumir/android-calendar-card
        Demo地址:https://play.google.com/store/apps/details?id=com.wt.calendarcardsample
        效果图:Renderings

      15. ColorPickerView 颜色选择器,支持PopupWindows或新的Activity中打开
        项目地址:https://code.google.com/p/color-picker-view/
        效果图:Renderings

      16. HoloColorPicker 颜色选择器
        项目地址:https://github.com/LarsWerkman/HoloColorPicker
        Demo地址:https://docs.google.com/file/d/0BwclyDTlLrdXRzVnTGJvTlRfU2s/edit

      17. AndroidWheel Android Wheel支持城市、多种日期时间、密码、图片
        项目地址:https://github.com/sephiroth74/AndroidWheel
        效果图:Renderings

      18. android-flowtextview文字自动环绕其他View的Layout
        项目地址:https://code.google.com/p/android-flowtextview/
        效果图:http://i949.photobucket.com/albums/ad332/vostroman1500/1.png

      19. Segmented Radio Buttons for Android iOS’s segmented controls的实现
        项目地址:https://github.com/vinc3m1/android-segmentedradiobutton
        Demo地址:https://github.com/thquinn/DraggableGridView/blob/master/bin/DraggableGridViewSample.apk?raw=true
        效果图:Renderings

      20. TableFixHeaders 第一列固定的Table
        项目地址:https://github.com/InQBarna/TableFixHeaders
        Demo地址:http://bit.ly/13buAIq

      21. Android Form EditText 验证输入合法性的编辑框
        支持输入、英文、ip、url等多种正则验证
        项目地址:https://github.com/vekexasia/android-edittext-validator
        Demo地址:https://play.google.com/store/apps/details?id=com.andreabaccega.edittextformexample

      22. UITableView ios风格控件
        包括Button、ListView、TableView
        项目地址:https://github.com/thiagolocatelli/android-uitableview
        Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/ui-tableview-demo.apk?raw=true

      23. ATableView ios风格控件
        项目地址:https://github.com/dmacosta/ATableView
        Demo地址:https://play.google.com/store/apps/details?id=com.nakardo.atableview.demo

      24. UndoBar屏幕底部显示取消或是确认的PopupWindows
        项目地址:https://github.com/soarcn/UndoBar
        效果图:Renderings

      25. Inscription可用于展示应用change和new feature信息
        项目地址:https://github.com/MartinvanZ/Inscription

      26. ActivityTransition Activity切换动画,包括渐变、flip、某个位置进入等等
        项目地址:https://github.com/ophilbert/ActivityTransition
        使用介绍:https://github.com/jfeinstein10/JazzyViewPager/blob/master/JazzyViewPager.apk?raw=true
        效果图:类似桌面左右切换的各种效果,不过桌面并非用ViewPager实现而已

      27. Cropper 图片局部剪切工具,可触摸控制选择区域或旋转
        项目地址:https://github.com/edmodo/cropper
        使用介绍:https://github.com/edmodo/cropper/wiki
        效果图:Renderings

      28. GlowPadBackport将Android4.2的锁屏界面解锁扩展到Android1.6及1.6+
        项目地址:https://github.com/rock3r/GlowPadBackport
        Demo地址:https://play.google.com/store/apps/details?id=net.sebastianopoggi.samples.ui.GlowPadSample
        效果图:Renderings

      29. GlowPadView Android4锁屏界面解锁
        项目地址:https://github.com/nadavfima/GlowPadView
        效果图:https://raw.github.com/nadavfima/GlowPadView/master/example.png

      30. android-lockpattern Android的图案密码解锁
        项目地址:https://code.google.com/p/android-lockpattern/
        Demo地址:https://play.google.com/store/apps/details?id=group.pals.android.lib.ui.lockpattern.demo
        使用介绍:https://code.google.com/p/android-lockpattern/wiki/QuickUse
        示例APP:Android开机的图案密码解锁,支付宝的密码解锁

        原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea





    GitHub上优秀Android开源项目

    原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea

    GitHub在中国的火爆程度无需多言,越来越多的开源项目迁移到GitHub平台上。更何况,基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要。利用这些项目,有时能够让你达到事半功倍的效果。为此,CSDN特整理了在GitHub平台上最受欢迎的Android及iOS开源项目,以飨开发者。

    下面,就让我们一起来看看,在GitHub平台上,究竟有哪些Android开源项目最火,也最受开发者欢迎。

    1. ActionBarSherlock

    ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便地使用所有版本的Android动作栏的设计模式。

    对于Android 4.0及更高版本,ActionBarSherlock可以自动使用本地ActionBar实现,而对于之前没有ActionBar功能的版本,基于Ice Cream Sandwich的自定义动作栏实现将自动围绕布局。能够让开发者轻松开发一款带动作栏(Action bar)的应用,并且适用于Android 2.x及其以上所有版本。

    详情请参考:ActionBarSherlock

    2. facebook-android-sdk

    Facebook SDK for Android是一个开源库,允许开发者将Facebook集成到所开发的Android应用中。

    如果想要获取更多关于示例、文档、将SDK集成到App中、源代码等信息,可直接登陆Facebook Developers查看。

    3. SlidingMenuSlidingMenu Demos

    SlidingMenu是一个开源的Android库,能够让开发者轻松开发一款应用,实现类似于Google+、Youtube和Facebook应用中非常流行的滑动式菜单。

      

    使用SlidingMenu的Android应用:

     

     

    4. cocos2d-x

    在移动开发领域,将Cocos2D-X用于主流iOS/Android游戏开发的公司、开发团队多不胜数。cocos2d-x是一个开源的支持多平台的2D游戏框架,使用C++开发,基于cocos2d-iphone,在MIT许可证下发布。主分支在GitHub上使用OpenGL ES 2.0渲染,而旧版gles11分支则使用OpenGL ES 1.1渲染。

    支持iOS、Android、Windows Phone 8、Bada、BlackBerry、Marmalade、Windows、Linux等多个平台。支持C++、Lua、JavaScript编程语言。

    5. android

    GitHub Android App是GitHub开源的Android客户端,支持Issues、Gists,并集成了新闻Feed,能够让你及时跟进组织及关注的开发者、库等。同时,该应用还提供了一个用户快速访问你所创建、监控及发布issue的面板,可查看并将问题加入到收藏夹,可对标签、里程碑和任务进行过滤配置。

    android资源库包含了GitHub Android App的所有源代码。

    6. Android-ViewPagerIndicator

    ViewPager指针项目,在使用ViewPager的时候能够指示ViewPager所在的位置,就像Google Play中切换的效果一样,还能使用在应用初始化的介绍页面。

    兼容Android支持库的ViewPager及ActionBarSherlock,最初是基于Patrik Åkerfeldt的ViewFlow,开发者可以直接登陆Google Play下载该项目的演示应用。

    7. MonoGame

    MonoGame是一个Microsoft XNA 4.x Framework的开源跨平台实现。用于让XNA开发者将他们在Xbox 360、Windows & Windows Phone上开发的游戏移植到iOS、Android、Mac OS X、Linux及Windows 8 Metro上,目前,PlayStation Mobile & Raspberry PI的开发正在进行中。

    详情请参考:MonoGame

    8. Android-PullToRefresh

    该项目用于为Android提供一个可重用的下拉刷新部件。它最初来源于Johan Nilsson的库(主要是图形、字符串和动画),但这些后来都已被取代。

    9. android-async-http

    android-async-http是Android上的一个异步、基于回调的HTTP客户端开发包,建立在Apache的HttpClient库上。

    10. Android-Universal-Image-Loader

    Android上最让人头疼的莫过于从网络获取图片、显示、回收,任何一个环节有问题都可能直接OOM,这个项目或许能帮到你。

    Universal Image Loader for Android的目的是为了实现异步的网络图片加载、缓存及显示,支持多线程异步加载。它最初来源于Fedor Vlasov的项目,且自此之后,经过大规模的重构和改进。

    11. GreenDroid

    GreenDroid最初是由Cyril Mottier发起,是一个Android的UI开发类库,能够让UI开发更加简便,并且在应用中始终保持一致。

    详情请参考:Cyril Mottier's Blog

    12. Anki-Android

    AnkiDroid是一个免费、开源的Android的闪存应用,可直接从Google Play进行下载。

    详情请参考:ankidroid

    13. android-actionbar

    Action bar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式。在大多数的情况下,当开发者需要突出展现用户行为或在全局导航的activity中使用action bar,因为action bar能够使应用程序给用户提供一致的界面,且系统能够很好地根据不同的屏幕配置来适应操作栏的外观。

    Action bar的主要目的:

     

    • 提供一个用于识别应用程序的标示和用户的位置的专用空间。
    • 在不同的应用程序之间提供一致的导航和视觉体验。
    • 突出Activity的关键操作,并且在可预见的方法内给用户提供快捷的访问。

     

    14. android-viewflow

    android-viewflow是Android平台上的一个视图切换的效果库,ViewFlow相当于Android UI部件提供水平滚动的ViewGroup,使用Adapter进行条目绑定。

     

    15. android-mapviewballoons

    当使用Android地图外部库(com.google.android.maps)时,android-mapviewballoons会提供一个简单的方式来对地图覆盖进行标注,就是一个简单的信息气泡。

    它由BalloonOverlayView组成,是一个代表显示你的MapView及BalloonItemizedOverlay的气泡的视图,BalloonItemizedOverlay是ItemizedOverlay的一个抽象扩展。

    16. PushSharp

    一个向iOS(iPhone/iPad APNS)、Android(C2DM和GCM)、Windows Phone和Windows 8设备发送推送通知的服务器端库。

    17. androidannotations

    Android Annotations是一个开源的框架,用于加速 Android应用的开发,可以让你把重点放在功能的实现上,简化了代码,提升了可维护性。

    18. HockeyKit

    Hockey是一个iOS Ad-Hoc自动更新框架。苹果App Store中的所有App都可以使用它,它能够显著地提高Beta测试的整个过程,分为两部分:服务器和客户端框架。服务器组件需要所有脚本,但在没有客户端库的情况下,也可以单独工作。它提供一个Web接口,Beta测试者可以使用它来安装最新的AdHoc配置文件,也可以直接在设备上通过Safari安装最新的Beta版本。

     

    • 只需在服务器上安装一次服务端,就可以处理包标识符不同的多个应用程序(有开发者强烈建议对Debug、AdHoc Beta和AppStore发布版使用不同的包标识符)。
    • 默认当App启动或唤醒时,客户端会从服务器检测更新,用户可以在设置对话框中进行修改:一天一次或手动检查更新。
    • 除了支持iOS,HokeyKit也支持Android平台,不过Android版还处在Alpha阶段,支持OTA及应用内更新。
    • 为HockeyKit用户提供服务器托管服务。

     

    19. android-menudrawer

    Android上的菜单展示风格各异,其中用得最多且体验最好的莫过于左右滑动来显示隐藏的菜单,android-menudrawer是一个滑动式菜单实现,允许用户在应用当中实现无缝导航。该项目具有多种菜单展示效果,其中最常见的就是通过屏幕边缘拖动或点击动作栏的“向上”按钮显示。

     

    实现功能:

     

    • 菜单可以沿着四个边放置。
    • 支持附加一个始终可见、不可拖动的菜单。
    • 菜单的内容和整个窗口都可以隐藏。
    • 可用于XML布局。
    • 显示当前可见屏幕的指示器。

     

    20. android-flip

    Aphid FlipView是一个能够实现Flipboard翻页效果的UI组件。

    以上为GitHub上最受欢迎的Android开源项目TOP20,敬请期待“GitHub上最受欢迎的Android开源项目(二)”。

     

    Android经典的开源项目其实非常多,但是国内的博客总是拿着N年前的一篇复制来复制去,实在是不利于新手学习。今天爬爬把自己熟悉的一些开源项目整理起来,希望能对Android开发同学们有所帮助。另外,如果你有比较好的项目推荐,也烦请在评论里分享出来,我会定期更新博客内容。

     

    项目篇:


    组件篇:

    • Android-Flip:可以实现类似FlipBoard那种华丽丽的翻页
    • Drag-Sort-Listview:可以拖动item重新排序的listview,效果非常赞
    • HoloEveryWhere:咳咳,有些同学非常喜欢Android的holo风格,这个项目绝对让你happy
    • Universal-ImageLoader:这个经典的异步图片加载,不多说了
    • JazzyViewPager:这玩意可以让ViewPager翻起来更酷,谁用谁知道~~
    • SlidingMenu:这个是抽屉界面(就是facebook那种)的各种实现版本中,最好的,木有之一!
    • StickyListHeaders:iPhone上经常有这个,就是listview的……不知道怎么解释,自己下载看看吧
    • Android-PullToRefresh:下拉刷新,挺常用的一个组件
    • StaggeredGridView:这是一个瀑布流布局的实现,还不是很完善,但作为学习的案例还是不错的
    • android-async-http:android的异步请求组件,我个人习惯使用asynctask,不过这个实现水平还是不错,也推荐给大家参考
    • ActionBarSherlock:大家熟知的ActionBar在2.x上的兼容性方案;类似的兼容性组件还有许多,有时间为大家一一列出;
    • facebook-android-sdk:不止是一个SDK那么简单哦,比某浪和某人的SDK强几个数量级;
    • NineOldAndroids:想在2.xSDK上使用Android 3.0新增的动画API,那就是它了;没用过的同学一定要试试哦,非常方便~
    • android-swipelistview:让listview的item可以向右滑动,新版Gmail和Pocket里面有用到哦~
    • DataDroid:Android的RESTful封装,没听过RESTful还说你有代码洁癖,追求完美
    • EventBus:和上面的DataDroid同样属于美化底层代码的,这个lib简化了不同组件之间的事件传递



    21. drag-sort-listview

    DragSortListView(DSLV)是Android ListView的一个扩展,支持拖拽排序和左右滑动删除功能。重写了TouchInterceptor(TI)类来提供更加优美的拖拽动画效果。

     

    DSLV主要特性:

     

    • 完美的拖拽支持;
    • 在拖动时提供更平滑的滚动列表滚动;
    • 支持每个ListItem高度的多样性
    • 公开startDrag()和stopDrag()方法;
    • 有公开的接口可以自定义拖动的View。

     

    DragSortListView适用于带有任何优先级的列表:收藏夹、播放列表及清单等,算得上是目前Android开源实现拖动排序操作最完美的方案。

    22. c-geo-opensource

    c:geo是Android设备上一个简单而又强大的非官方地理寻宝客户端。与其他类似应用不同的是,c:geo不需要Web浏览器,也不需要文件输出。你可以在毫无准备的情况下,毫无后顾之忧地带上你的智能手机去进行地理寻宝。当然,你也不需要付钱,因为它是免费的。

    c-geo-opensource包含了c:geo所有开源代码。

    详情请参考:c:geo

    23. NineOldAndroids

    自Android 3.0以上的版本,SDK新增了一个android.animation包,里面的类都是跟动画效果实现相关的,通过Honeycomb API,能够实现非常复杂的动画效果。但如果开发者想在3.0以下的版本中也能使用到这套API,那么Nine Old Androids就会是你最好的选择,该API和Honeycomb API完全一样,只是改变了你使用com.nineoldandroids.XXX的入口。

    该项目包含两个工程,一个是Library,即为动画效果的实现库,另一个则是Sample,是对如何使用该API的演示。开发者可以直接登陆Google Play下载安装Nine Old Androids Sample,查看演示。

    详情请参考:Nine Old Androids

    24. ppsspp

    PPSSPP是由GC/Wii模拟器Dolphin联合创始人之一Henrik Rydgård开发的一款免费的跨平台开源模拟器,支持Windows、Linux、Mac、Android、iOS、BlackBerry 10等主流计算机与移动操作系统,可直接工作在x86、x64、ARM等CPU平台上,以GNU GPLv2许可协议发布,主要使用C++编写以提高效率和可移植性。

    只要支持OpenGL ES 2.0,PPSSPP就可以在相当低规格的硬件设备上运行,包括基于ARM的手机及平板电脑。

    详情请参考:PPSSPP

    25. androidquery

    Android-Query(AQuery)是一个轻量级的开发包,用于实现Android上的异步任务和操作UI元素,可让Android应用开发更简单、更容易,也更有趣。

    26. droid-fu

    Droid-Fu是一个开源的通用Android应用库,其主要目的是为了让Android开发更容易,包含有许多工具类,还有非常易用的Android组件。

    Droid-Fu提供支持的领域包括:

     

    • Android应用的生命周期帮助
    • 支持处理Intents和diagnostics类
    • 后台任务支持
    • HTTP消息处理
    • 对象、HTTP响应及远程图像高速缓存
    • 定制各种Adapter及View

     

    Droid-Fu最大的优势在于它的应用生命周期帮助类,如果你正在开发一款Android应用,而它的主要任务是运行后台任务,比如从Web上抓取数据,那么,你一定会使用到Droid-Fu,不过,目前该项目在GitHub上已经停止更新维护。

    详情请参考:droid-fu

    27. TextSecure

    TextSecure是Whisper Systems团队开发的一个Android上的加密信息客户端,旨在增强用户和企业通信的安全性,其源代码于2011年被Twitter发布在GitHub开源数据库中。

    该软件允许用户将在Android设备上所有发送和接收的短信内容进行加密,还可以将加密信息发送给另一个TextSecure用户。

    28. XobotOS

    XobotOS是Xamarin的一个研究项目,用于将Android 4.0从Java/Dalvik移植到C#,并对移植后的性能及内存占用情况进行检测。

    29. ignition

    在编写Android应用时,通过提供即用组件和包含许多样板文件的实用类,ignition可以让你的Android应用快速起步。ignition涵盖的区域包括:

     

    • Widget、Adapter、Dialog等UI组件;
    • 允许编写简单却强大的网络代码的HTTP Wrapper库;
    • 加载远程Web图像并进行缓存的类;
    • 简单但有效的缓存框架(将对所有对象树做出响应的HTTP缓存到内存或硬盘中);
    • Intents、diagnostics等几个能让API级别更容易向后兼容的帮助类;
    • 更友好、更强大的AsyncTask实现。

     

    ignition包括三个子项目:

     

    • ignition-core——是一个可以直接编译到App中的Android库项目。
    • ignition-support——一个标准的Java库项目,被部署为一个普通的JAR,包含了大部分实用工具类。开发者可以独立使用该工程的核心模块。
    • ignition-location——一个可以直接编译到应用程序中的Android AspectJ库项目。能够让定位应用在不需要Activity位置更新处理的情况下获取到最新的位置信息。

     

    详情请参考:ignition Sample applications

    30. android_page_curl

    android_page_curl是一个在Android上使用OpenGL ES实现类似书本翻页效果的示例程序。(点击链接查看视频演示

    31. asmack

    说到aSmack,自然要先提提Smack。Smack API是一个完整的实现了XMPP协议的开源API库,而aSmack则是Smack在Android上的构建版本,于2013年2月初迁移到GitHub上,该资源库并不包含太多的代码,只是一个构建环境。开发者可以利用该API进行基于XMPP协议的即时消息应用程序开发。

    详情请参考:asmack

    32. AndroidBillingLibrary

    In-app Billing是一项Google Play服务,能够让你在应用内进行数字内容销售,可销售的数字内容范围非常广,包括媒体文件、照片等下载内容,还包括游戏级别、药剂、增值服务和功能等虚拟内容。Android Billing Library可以实现In-app Billing的所有规范,并提供更高级的类来进行使用。

    Google于2012年底正式发布了v3版Android In-app Billing,但截至目前,GitHub上的Android Billing Library还只能支持到v2版,据悉Google将于2013年初对它进行更新。

    详情请参考:Google Play In-app Billing

    33. Crouton

    Crouton是Android上的一个可以让开发者对环境中的Toast进行替换的类,以一个应用程序窗口的方式显示,而其显示位置则由开发者自己决定。

    开发者可以直接登陆Google Play下载安装Crouton Demo,查看应用演示。

    34. cwac-endless

    CommonsWare Android Components(CWAC)是一个开源的Android组件库,用来解决Android开发中各个方面的常见问题,每个 CWAC组件打包成一个独立的jar文件,其中就包含cwac-endless。

    cwac-endless提供一个EndlessAdapter,这是一个自动分页的List,当用户浏览到List最后一行时自动请求新的数据。

    详情请参考:Commons Ware

    35. DiskLruCache

    在Android应用开发中,为了提高UI的流畅性、响应速度,提供更高的用户体验,开发者常常会绞尽脑汁地思考如何实现高效加载图片,而DiskLruCache实现正是开发者常用的图片缓存技术之一。Disk LRU Cache,顾名思义,硬件缓存,就是一个在文件系统中使用有限空间进行高速缓存。每个缓存项都有一个字符串键和一个固定大小的值。

    点击链接下载该库项目。

    36. Android-SlideExpandableListView

    如果你对Android提供的Android ExpandableListView并不满意,一心想要实现诸如Spotify应用那般的效果,那么SlideExpandableListView绝对是你最好的选择。该库允许你自定义每个列表项目中的ListView,一旦用户点击某个按钮,即可实现该列表项目区域滑动。

    37. gauges-android

    Gaug.es for Android是由gaug.es推出的一款在Android设备上对网站流量数据进行实时统计的应用。gauges-android包含了该应用的源代码,开发者可以直接登陆Google Play下载安装该应用。

    38. acra

    ACRA是一个能够让Android应用自动将崩溃报告以谷歌文档电子表的形式进行发送的库,旨在当应用发生崩溃或出现错误行为时,开发者可以获取到相关数据。

    39. roboguice

    RoboGuice是Android平台上基于Google Guice开发的一个库,可以大大简化Android应用开发的代码及一些繁琐重复的代码。给Android带来了简单、易用的依赖注入,如果你使用过Spring或Guice的话,你就会知道这种编程方式是多么的便捷。

    40. otto

    Otto是由Square发布的一个着重于Android支持的基于Guava的强大的事件总线,在对应用程序不同部分进行解耦之后,仍然允许它们进行有效的沟通。

    详情请参考:Otto

    原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea

    41.android-swipelistview

    SwipeListView是一个Android List View实现,实现了自定义ListView单元格,可通过滑动来显示扩展面板。开发者可直接登陆Google Play下载安装其Demo应用。 

    42. greenDAO

    greenDAO是一个可以帮助Android开发者快速将Java对象映射到SQLite数据库的表单中的ORM解决方案,通过使用一个简单的面向对象API,开发者可以对Java对象进行存储、更新、删除和查询。

    greenDAO的主要设计目标:

    • 最大性能(最快的Android ORM)
    • 易于使用API
    • 高度优化
    • 最小内存消耗

    详情请参考:greendao-orm

    43. FFMpeg

    FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了目前领先的音/视频编码库libavcodec。FFmpeg是在Linux下开发出来的,但它可以在包括Windows在内的大多数操作系统中编译。可以轻易地实现多种视频格式之间的相互转换。

    而FFmpeg for Android则是可通过Android NDK直接在Android源码环境下编译的FFmpeg库。该库项目即是FFmpeg for Android的入口,开发者只需直接选择需要转换的视频文件,并设置参数,即可进行转换,发起人havlenapetr表示在未来将为其开发Android库,能够实现自动转换视频文件。

    44. TweetLanes

    Tweet Lanes是一个在Android4.0及更高版本的Android设备上运行的功能全面的Twitter客户端(开发者可以直接登陆Google Play下载该应用)。

    该开源项目包含以下所有源代码:

    • Tweet Lanes客户端应用;
    • 连接Twitter和App.net APIs的SocialNetLib项目;
    • 所有源,尤其是LOGO和Play Store列表;
    • 用于tweetlanes.com的The App Engine项目。

    45.gesture-imageview

    这是一个简单的支持多指缩放图片的Android View类。在Android2.1及其更高版本的设备上,当你想要实现同时进行缩放操作时,可以将其作为一个标准的ImageView来使用。

    46.android-satellite-menu

    使用过Path的人都应该知道,在Path主界面的左下方有一个非常有意思的菜单。菜单由一个主按钮组成,当用户点击该按钮时,就会有一连串的按钮弹出,而Satellite Menu正是该菜单的一个开源版本。

    对于Satellite Menu,其项目发起人siyamed表示,这种菜单结构就像是一个星球四周围绕着许多卫星,而这也就是他为何会以Satellite Menu命名该项目的原因。

    47. VitamioBundle

    Vitamio是一款Android平台上的全能多媒体开发框架,凭借着其简洁易用的API接口,Vitamio赢得了全球众多开发者的青睐。目前,有许多公司的开源Vitamio项目都托管在GitHub上,而Vitamio的核心插件VitamioBundle正是其中之一。

    VitamioBundle是一个独立的Android库,用于促进多媒体的使用,开发者可以很方便地将其集成到自己的项目当中。

    48.android-ffmpeg-x264

    android-ffmpeg-x264是能够让提取和构建运行在Android上、使用Android NDK最新的FFmpeg和libx264变得非常简单的一个存储库。不同于大多数其他的NDK FFmpeg构建包,它通过配置构建库,只需一个非常小的Android.mk文件即可将其包装进入一个共享库。目前,该库项目已不再更新,但在GitHub上还有着非常多的FFmpeg库,除了前面的FFmpeg,接下来我们还会继续介绍到其他FFmpeg库。

    49. ArcMenu

    ArcMenu是一个类似于iOS版Path 2.0菜单的Android自定义视图项目,和我们前面介绍的Satellite Menu项目类似。

    对于这个项目,其发起人daCapricorn表示,iOS版Path 2.0上的用户体验非常奇妙,但其Android版本却差太多。因此,他就尝试着在Android上做出像iOS版本那样的效果,而事实也的确如此。

    50. DataDroid

    DataDroid是Android平台上的一个开发库,用于简化Android应用当中的数据管理,基于Android的RESTful封装发展而来。

    详情请参考:datadroidlib

    51.android-adt-templates

    android-adt-templates是集成了Android开发过程中使用到的许多常用的模板,用来帮助开发者快速构建一些普通的Activity和UI模型。

    当然,要想使用这些模板,还必须是Eclipse和ADT 21及其以上版本,此外还需注意的一点就是,ADT模板不管理官方支持库以外的外部依赖关系。

    52.android-ffmpeg

    FFmpeg有许多不同的库,也总是会让人容易混淆,因此该项目发起人n8fr8对android-ffmpeg项目进行了全新的改变,该项目中包含着一个清晰、容易改变、静态的Android FFmpeg Creator。

    53.
    StaggeredGridView

    该项目是基于Google Android StaggeredGridView进行修改的一个库项目,允许开发者创建一个类似于Pinterest的交错排列的GridView。开发者只需在自己的项目中将其作为一个库项目添加到workspace中即可直接使用。

    54. robospice

    RoboSpice是Repo的开源Android库,能够让编写异步网络请求变得非常简单。它专门用于网络请求,通过使用Spring Android或者Google Http
    Client
    等扩展模块可支持REST请求。

    如果想要了解更多,不妨点击链接查看RoboSpice大图,让你30秒即可完全了解RoboSpice。如果想要立即使用,则可以直接进入WiKiRoboSpice-samples页面。

    55. EventBus

    当一个Android应用功能越来越多的时候,保证应用的各个部分之间高效的通信将变得越来越困难。如何优雅地解决这个问题?这时候,就需要使用到EventBus。

    EventBus是GreenRobot出品的Android系统的一个Event Bus类库,使用起来和之前我们所介绍的Square的Otto差不多,都是用来简化应用组件之间的通信。

    延伸阅读:EventBus和Otto使用介绍

    56. commandergenius

    commandergenius是SDL库的端口,在project/jni/application目录下还包含有几个个人游戏的源代码或补丁。

    57. android-rss

    Android RSS是Android平台上RSS 2.0阅读软件的一个轻量级Android库。

    详情请参考:Code.Google

    58. OpenCV-Android

    OpenCV-Android是一个将OpenCV移到Android手机平台的开源项目,该项目使用OpenCV最新的一个分支并利用一个改良过的Android
    NDK进行构建。

    如果想要使用OpenCV-Android,必须先下载并安装Android SDK
    1.6(或其更高版本)和NDK r5,除此之外,还必须具备:

    • Android手机(可能需要与其他手机相连);
    • QuickTime Java库(如果想要使用QTWebcamBroadcaster就必须具备)。

    59. RESTProvider

    RESTProvider旨在让访问REST服务(或任何主要的HTTP调用的网络数据格式)更容易,并将其缓存到本地的一个SQLite数据库中,允许脱机使用。可自动解析RESTful API,并将其响应到Android的一个Provider中。

    60.
    ImageFilterForAndroid

    在开源ImageFilterForAndroid中拥有许多丰富的图片效果,是由来自国内的代震军发起的一个开源项目。除了Android平台,还有Windows Phone和iOS移动平台,三个平台源码同步。

    ImageFilter库图片效果对比:

    详情请参考:代震军BLOG

    61.
    Android-Image-Cache

    Android-Image-Cache是一个能够自动判断从内存还是网络获取图片、缓存可以自动回收、自动判断如何有效地生成并检索各种尺寸缩略图的图像download-and-cacher。

    主要特点如下:

    • 只需提供一个适配器即可从光标读取本地、网络URL;
    • 基于一个已下载的图像自动生成并缓存多种尺寸图像;
    • 同时提供磁盘缓存和内存缓存;
    • 自动磁盘缓存管理;不需进行设置,但如果需要的话,参数可进行调整;
    • 根据现有设置进行运作;
    • 光标适配器支持一个ImageView中多个图像字段;当是null或为空时自动跳过;
    • 当加载光标时,光标适配器会有一个自动进度提示条。

    62. FFmpeg-Android

    为Android neon、armv7、vfp、armv6及用于Android的VPlayer构建FFmpeg。

    63.
    roman10-android-tutorial

    roman10-android-tutorial包含了android tutorial的所有源代码。

    64. tape

    Tape是Square推出的Android和Java的一组队列关系类。

    详情请参考:**Square.GitHub**

    65.
    AndroidSideMenu

    AndroidSideMenu能够让你轻而易举地创建侧滑菜单。需要注意的是,该项目自身并不提供任何创建菜单的工具,因此,开发者可以自由创建内部菜单。

    66. Android-AppMsg

    Android-AppMsg是基于Toast消息提示和Cyril
    Mottier的“The making of Prixing #4: in-layout
    notifications
    ”而来的一个布局内通知实现。

    开发者可以直接登陆Google Play下载其示例应用

    67. proxydroid

    ProxyDroid是Android上的一个全局代理应用,遵循GPLv3协议,可以帮助你设置Android设备上的代理。proxydroid项目包含了ProxyDroid所有开放源代码。

    68. bypass

    Bypass可以跳过HTML,直接在Android和iOS上使用Markdown并进行渲染。Markdown是一种轻量级的标记语言,可以实现文本到HTML的转换。

    69. OnionKit

    OnionKit是一个可以通过提供多种路径来提高移动应用网络安全的Android库项目。

    该库具体提供:

    • StrongTrustManager:TLS/SSL证书校验的一个强大实现,任何认证中心都可以进行定制;
    • Proxied Connection Support:通过Apache HTTPClient库的特定配置来支持HTTP和HTTPS流量的HTTP和SOCKS代理连接;
    • OrbotHelper:一个支持Orbot:Tor for Android应用集成的工具类。

    70. android-ffmpeg

    如果想要实现Android FFmpeg编译,必须下载安装Android NDK,在开始编译之前,还必须更新FFmpeg库。

    71.
    AndroidUsbCamera

    Android Usb Camera是一款可以在Linux电脑上将Android手机直接当摄像头使用的客户端软件。先在手机上安装USB驱动,再安装该客户端软件,然后再在手机上安装usbwebcam.apk程序,打开USB调试模式并运行usbwebcam,通过USB线将电脑和手机相连接即可在PC上直接使用Android手机充当摄像头。

    72. Droidex

    Droidex可以将开发者附加的Android设备的屏幕内容复制到你的开发设备屏幕上。通常,如果你使用DroidEx来进行演示可谓是事半功倍,因为你可以直接将一台Android设备与笔记本或投影仪相连,而客户也可以通过这些设备来查看Android设备上的内容。

     

    此外,Droidex还可以用来演示那些不方便通过模拟器演示的内容,比如GPS或力口速器。

    73. andmake

    andmake是Android的CMake工具链文件。CMake是一个开源的跨平台自动化构建系统,可以编译源代码、制作程序库、产生适配器,还可以用任意的顺序构建可执行文件。

    74. ScreenCap

    ScreenCap是Android原生自带的截屏工具,通过调用底层,采取后台截屏的方式实现截屏。

    GitHub上受开发者欢迎的Android开源项目并不仅仅止于此,还有很多,并且还有许多同类开源项目,如果你感兴趣的话,可以直接登陆GitHub进行更加深入的学习了解。至此,GitHub上最受欢迎的Android开源项目盘点就全部结束了。

    原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea


    .

    3. Android开发神器

    网上有很多开源的安卓代码库很好用,对于刚学习安卓的童鞋亦或者老鸟都是很好的学习对象。
    我平时有关注开源代码的习惯,这么多年也搜集了不少精彩的源码。
    到后来发现自己手机里装的都是几百个demo app,删又不舍得删,不删又占资源,
     于是就准备搞了个23code应用,里面汇集了我精心整理的应用,
    此后每周应该都会更新。敬请期待。。。

    百度下载链接
    谷歌市场下载

    当前版本集成了68个开源示例。

     

    更新日志

     v1.0 添加如下
    HoloColorPicker
    Square-progressbar
    ParallaxScrollView
    JazzyViewPager
    CircularProgressBar
    LeftLockedGallery
    GPUImage
    Bootstrap
    SwipToDismiss
    GifView
    LockPatternGenerator
    NewQuickAction3D
    SlidingDrawer
    SwitchButton
    TabCarouselDemo
    ActionsContentView
    ArcMenu
    【11月30号】v1.1 添加如下:
    ProgressWheel,
    Movies-demo,
    SlideExpanableListView,
    XlistView,
    Android-Universal-Image-LoaderCardslib, 
    Cardsui

    【12月2号】v1.2 添加如下
    ProgressWheel,
    Movies-demo,
    SlideExpandableListView,
    XlistView,
    Universal-Image-Loader,
    Cardsui,
    CardsLib,
    PinnedSectionList,
    HoloGraphLibrary,
    AChartEngine,
    QuickScroll,
    ListViewAnimations,
    MenuDrawer,
    ViewPagerIndicator,
    PhotoView,
    Android-ViewBradger,
    RangeBar,
    ProgressButton,
    PagerSlidingTabStrip.
    ActionBar-PullToRefresh,
    Cropper,
    ExpandingCells,
    InsertingCells,
    NewPopupMenu,
    RangeSeekBar,
    HanselAndGretel,
    PagedDragDropGrid,
    QuickReturnListView,
    WizardPager

    【12月9号】添加记录如下:

    NoboringActionBar,

    StickGridHeaders,

    MessageBar,
    AndroidOpenGLESLessons,
    SuperToasts,
    SmoothProgressBar,
    ColorArt,
    FadingActionBar,
    FlipImageView,
    DatetimePicker,
    Satelitemenu
    【12月18号】添加如下:
    Android-pulltorefresh
    NineOldAndroid
    GlowPadView
    CustomShapeImageView
    ShareEveryWhere
    RoundImageView
    AutoScaleTextView
    IconicDroid
    Radial-menu-widget
    android-wheel
    androidwheel
    ChipsTextFields
    妈妈再也不用担心我当程序员啦



    way

    http://blog.csdn.net/way_ping_li

    老罗

    http://blog.csdn.net/column/details/androidluo.html

    李宁

    http://blog.csdn.net/nokiaguy


    robin
    http://blog.csdn.net/hudashi

    guolin
    http://blog.csdn.net/sinyu890807?viewmode=list


    wangli

    http://blog.csdn.net/lee576


    UI设计
    http://www.cnblogs.com/playing/category/286537.html

    UI进阶
    http://blog.csdn.net/column/details/uidev.html

    时之沙

    http://blog.csdn.net/t12x3456

    张国威
    http://blog.csdn.net/hellogv

    张兴业

    http://blog.csdn.net/xyz_lmn

    夏安明

    http://blog.csdn.net/xiaanming

    黄俊东

    http://blog.csdn.net/hjd_love_zzt

    四方城
    http://blog.csdn.net/kesenhoo

    柳志超

    http://liuzhichao.com/archives

    stonecao

    http://blog.csdn.net/stonecao

    短裤党
    http://gundumw100.iteye.com/

    左潇龙

    http://www.cnblogs.com/zuoxiaolong/p/pattern26.html

    引路蜂

    http://blog.csdn.net/mapdigit

    云在千峰

    http://blog.chengyunfeng.com/

    农民伯伯
    http://www.cnblogs.com/over140/

    玄机逸士
    http://blog.csdn.net/pathuang68/article/category/784453

    谷歌的代码
    http://code.google.com/intl/zh-CN/

    EOE归类
    http://www.eoeandroid.com/topic-tag.html

    qinjuning

    http://blog.csdn.net/qinjuning

    jj120522
    http://blog.csdn.net/jj120522

    IT-Homer
    http://blog.csdn.net/sunboy_2050

    傲慢的上校
    http://blog.csdn.net/aomandeshangxiao

    FireOfStar

    http://blog.csdn.net/think_soft

    浪人的星空
    http://blog.csdn.net/hitlion2008

    nkmnkm的专栏

    http://blog.csdn.net/nkmnkm

    深入Android
    http://www.cnblogs.com/duguguiyu/category/112850.html

    google的bug

    http://code.google.com/p/android/issues/detail?id=30767

    stackoverflow
    http://stackoverflow.com/questions/tagged/android

    ACE(照片开源)
    http://blog.csdn.net/ACE1985/article/category/944280/1

    Android_Tutor
    http://blog.csdn.net/Android_Tutor?viewmode=contents

    Android开源项目
    http://luckerme.com/archives/41.html






    前言:
          无论你是android的初学者,还有是android开发多年的高手,可能都会有很多想法和经验希望与人分享交流,渴望能够接触到更多的实战项目,正所谓所谓与高手论道才能互补所长,与英雄共鼎方能百尺竿头,一味的织履贩席闭门造车只能固步自封成为井底之蛙,笔者特意将研究过的开源软件花费大量时间和精力逐一悉心修改整理调试发布,确保完美质量,以飨读者
          以下部分资源设置积分限制,如果有着急需的同学可以给我邮件或者加入我们的技术交流群(173711587),海量资源一键下载,共同探讨和分享技术资源。

    相信自己,只要努力学习勤奋工作用不了多久你就会升职加薪出任CTO迎娶白富美走上人生巅峰。。。
          
    想想是不是还有些小激动呢,赶快去下载吧
     

    开源分享(点击标题下载源码):

    2.oschina客户端

      

    3.手机安全管家

      

    4.星座连萌

      

    5.玲闹铃

      

    6.魔乐盒

      

    7.PWP日历

      

    8.Apollo音乐播放器

      

    9.夏普名片识别

      

    10.高仿人人网

      

    11.简洁天气

      

    12.高仿开心网

      

    13.百度推聊

      

    14.餐厅订餐

      

    15.eoe客户端

      

    16.饭否网客户端

      

    17.imiPhoneWall

      

    18.k9mail

      

    19.MSD音乐

      

    20.高仿爱奇艺

      

    21.企信通

      

     22.高仿生日管家

      


    24.高仿陌陌

      
      

    26.CB资讯阅读

      
     

    27.幽秘

      


    如没有CSDN积分的同学可以加入我们的技术交流群(173711587),海量资源等你来拿
    欢迎大家补充和讨论,文章持续更新,请关注我的博客,更多精彩还在后面。。。。








    1.Java基础视频 

    《张孝祥JAVA视频教程》完整版[RMVB](东西网)

    历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播客)

    张孝祥2010年贺岁视频:Java高新技术(传智播客)

    Java多线程与并发库高级应用(传智播客)

    尚学堂JAVA视频下载大全(持续更新中...请关注!)(尚学堂)

    《动力节点,王勇JAVA系列视频教程》(东西网)

    张孝祥Java高新技术(学习资料网)

    Java视频教程(最适合Java初学者的经典入门视频)(传智播客)

    《马士兵 JAVA JSP视频教程》尚学堂科技(尚学堂)

    尚学堂科技_马士兵_JAVA视频教程》(百度空间)

    《尚学堂马士兵 手把手java视频教程》第二版(东西网)

    java视频教程、java教学视频、java视频下载大全(尚学堂)

    Java语言资源列表(东西网)

    Java私塾Java初级教程(学习资料网)

    Java精品学习视频教程下载汇总(大家论坛)

    上海交大最新版JAVA程序设计(学习资料网)

    JAVA私塾基础视频教程(PlaySoft网)

    JAVA教程/视频教程类专题资料(学习资料库网)

     

    2.SSH相关视频 

    hibernate视频教程(华为网盘)

    王胜Hibernate(资源共享)

    王胜Hibernate(零度软件园)

    北京圣思园Hibernate视频教程(学习资料库)

    struts2实用简洁版视频(传智播客)

    传智播客Hibernate视频教程(传智播客)

    传智播客Spring5视频教程(传智播客)

    咿呀网提供-SpringMVC0视频教程(iteye)

    JAVA系列教材-Spring6_尚学堂科技(西西软件园)

    《Spring MVC0 WEB开发系列视频教程(全套共6讲--约400分钟)》(iVeryCD)

    《hibernate视频教程,spring视频教程--老卢JAVA》(北风网)

    Struts+Spring+Hibernate开发入行真功夫(19一九下载)

    《浪曦原创Struts.Hibernate.Spring.JS.分页视频教程(全)》(零度软件园)

    《疯狂Java_疯狂软件_李刚老师_Struts2全套视频教程》(北风网)

    struts2实用简洁版视频(传智播客)

    《浪曦视频教程 Struts 2应用开发详解系列》(东西网)

    张卫_Struts1视频教程2012年第一版源码(华为网盘)

    张卫_Struts1_Hibernate...教程2012年第一版源码(华为网盘)

    《北京圣思园struts2教学视频》(SimpleCD)

    SpringMvc+Spring+Mybatis+Maven整合视频教程(百度云网盘)

    JNI视频教程(传智播客)

    传智播客_FTP视频教程(传智播客)

    oracle视频教程(内部经典)(传智播客)

    OA+工作流(JBPM)(传智播客)

    Ajax和Jquery基础入门视频(传智播客)

    8天快速掌握Android视频(完整版--适合有JavaWeb基础学习)(传智播客)

    张孝祥Java就业面试宝典(传智播客)

    《传智播客:spring3/jdbc/EJB0/ajax/hibernate/Struts/java视频教程》(传智播客)

    30天轻松掌握JavaWeb视频(黑马)

    Java/.Net/PHP/网页平面设计(传智播客)

    传智播客_张孝祥_java基础教程(华为网盘)

    传智播客_方立勋JavaWeb视频教程_web开发入门(第四天)(华为网盘)

    《传智播客_张孝祥java视频教程_11_javaweb/javascript/java》(java\javascript\javaweb\courses)(资源共享)

    《传智播客张孝祥java视频教程_13_struts/javascript/java》(VeryCD)

    《传智播客张孝祥java视频教程_13_struts/javascript/java》(iVeryCD)

    Hibernate视频教程(适合掌握了javaweb的学员)(黑马)

    《传智播客:spring3\jdbc\EJB0\ajax\hibernate\Struts\java视频教程》(SPRING5\AJAX\JAVA\JNI\FTP\AJAX\ibatis\OA\JDBC)(VeryCD)

    《spring5视频教程》AVI 传智播客(东西网)

    传智播客_spring5视频教程(华为网盘)

    传智播客_2010_struts2.1.8视频教程(华为网盘)

    Hibernate视频教程(尚学堂)

     

    3.JavaEE相关视频

    《尚学堂科技.马士兵.JAVA视频教程(java培训内部视频)10年2月9日更新(更新Spring0)》(资源共享)

    老卢JAVA(老卢JAVA网)

    JavaSE视频教程(最适合Java初学者的经典入门视频)(尚学堂)

    传智播客JDBC视频教程(传智播客)

    JavaWEB开发(JSP+Servlet)视频(传智播客)

    30天轻松掌握JavaWeb视频(传智播客)

    北京圣思Java培训教学视频(资源共享网)

    《张卫 JavaWeb视频教程》2011版(求索网)

    Lucene/WebService/SVN/Ant/SpringMVC视频(学习资料库网)

    JUnit和Ant视频教程(VeryCD社区)

    广州Java培训WebService视频教程(疯狂软件)

    北京圣思员Java.Web培训视频(迅雷快传)

    传智播客EJB0视频教程(传智播客)

    传智播客JPA详解视频教程(传智播客)

    ibatis视频教程(传智播客)

    传智播客JAVA邮件开发视频教程(传智播客)

    传智播客FCKeditor视频教程(传智播客)

    传智播客_ibatis视频教程(华为网盘)

    《幻想—iBATIS框架技术视频教程》(资源共享)

    《Java教学视频_孔浩老师》开始更新JavaWeb方面的视频(更新了MyBatis部分的视频)(北风网)

     

    3.前端技术视频

    传智播客AJax视频教程(传智播客)

    JavaScript详解高清视频教程打包下载(iteye)

    精通JavaScript+jQuery 视频教程及源码(西西软件园)

    lamp兄弟连高洛峰JavaScript视频教程(华为网盘)

    《JavaScript基础视频教程》不断更新...[压缩包](资源共享)

    《21天学通JavaScript》视频教程+源码(东西网)

    JavaScript基础视频教程(学习资料库)

    《北风网资深讲师李炎恢JavaScript视频教程》(19一九下载)

    《JavaScript视频教程》(Top JavaScript Tech Videos)(iVeryCD)

    JavaScript视频教程》(Top JavaScript Tech Videos)(北风网)

    《LAMP兄弟连JavaScript视频教程》11月14日更新(敏学网)

    《后盾网盾友 JQuery 视频教程 》(资源共享)

    jquery视频教程下载(网易博客)

    JQuery实战(学习资料库)

    Jquery精品视频教程(iteye)

    JavaScript网页开发(传智播客)

    毕向东Html、css、JavaScript视频教程(黑马)

    传智播客.Net培训—JQuery(华为网盘)

    网页平面设计视频(传智播客)

     

    3.Linux相关视频

    《尚学堂 linux 3 天绝版》linux操作系统视频教程(东西网)

    《Linux从入门到精通》随书视频教程(东西网)

    RHCE视频教程下载(Linux公社)

    周立发linux视频教程(ChinaUnix)

    linux视频教程(百度云网盘)

    韩顺平Linux(iteye)

    韩顺平 linux视频教程(华为网盘)

    Linux视频教程(传智播客)

     

    4.Android视频

    Java/安卓/C++/.Net(ITjob网)

    Android项目视频教程(学习资料库)

    《Sundy‘s《Android高级应用开发课程共享版》《Android开发视频教程》[压缩包](资源共享)

    Android视频全套教程免费批量下载(华为网盘)

    《Android开发教程【更新项目实战】》发布项目实战第20课[MP4](VeryCD)

    Android开发视频教学(CSND)

    8天快速掌握Android视频

    Android黑马培训视频

    Mars老师Android视频

     

    5.数据库相关视频

    数据库SQL Server/Oracle/MySQL/DB2教程类专题资料(学习资料网络)

    《2011版李兴华主讲-ORACLE实战 最强大的数据库课程[增加网盘下载]》(ORACLE)V2011(VeryCD)

    Oracle/Linux系列免费视频教程(cuug)

    《oracle 视频教程》chinaitlab(敏学网)

    《CBT Nuggets出品甲骨文11g数据库1Z0-051SQL基础考试视频教程》(资源共享)

    尚观国际oracle入门到精通OCP认证教学视频(迅雷快传)

    oracle视频教程(内部经典)(黑马)

     

    6.项目实战视频

    巴巴运动网视频教程(传智播客)

    银行业务调度系统(传智播客)

    交通灯管理系统(传智播客)

    java网上在线支付实战视频(传智播客)

    俄罗斯、贪吃蛇游戏-项目视频(传智播客)

     

     

     Java程序员进化为架构师掌握的知识

    一:Java知识
    1、进制转换
    2、Java基本数据类型
    面向对象相关知识
    3、类、接口、抽象类
    this关键字、static关键字、final关键字
    方法的参数传递机制
    Java垃圾回收机制
    四种内部类的实现方式
    方法重写(override)与重载(overload)的联系与区别通过多态实现程序代码的松耦合
    Java 异常体系详解(checked exception 与 unchecked exception)
    JDK 5.0 新特性(泛型、枚举、可变参数、增强的 for 循环、静态导入等)
    Java Annotation(使用系统内置 Annotation、自定义Annotation、Annotation的继承等)
    Java多线程机制详解(锁、synchronized关键字、sleep()方法、wait()方法、notify() 、notifyAll()方法的意义与联系)
    Java线程池的内部实现
    Java定时任务内部实现
    Java I/O编程(装饰模式详解)
    Java网络编程基础知识(Socket、URL、URLConnection、ServerSocket等)
    TCP与 UDP的联系与区别
    Java Collection API(Collection、List、Set、Map、ArrayList、LinkedList、 Vector、 HashSet、 TreeSet、 HashMap与TreeMap等)区别,适用场景
    常用设计模式(工厂方法模式、观察者模式、策略模式、装饰模式、模板方法模式、命令模式等的原理与应用)
    Java NIO详解
    java.util.concurrent 并发包的应用(ConcurrentHashMap核心源代码分析、ThreadPoolExecutor、FutureTask、Semaphore、Condition、ReentrantReadWriteLock等接口与类的深度分析)
    基于 JDK 1.4 锁的并发机制与基于 JDK 5.0并发包的同步与并发机制的比较与分析
    序列化与反序列化
    正则表达式的应用
    Java动态代理与反射机制
    Java代码的执行机制
    源代码编译机制
    类加载与执行机制
    JVM内存管理(内存空间、内存分配、内存回收)
    使用 JConsole、JVisualVM及 JMap等查看内存的使用状况
    分析程序执行的过程
    JVM线程资源同步及交互机制
    线程交互机制与状态分析
    Java文件操作相关,递归删除,递归读取
    JDBC相关知识,步骤,连接操作,数据库连接池(详解 Apache DBCP数据库连接池)
    移位操作 (左移n位==乘以2的n次幂) (右移n位==除以2的n次幂)

    二、算法
    各种排序算法:快速排序、归并排序、插入排序等等
    斐波切纳函数
    二分查找
    全排列
    二叉树的遍历
    定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)
    字符串反转
    前缀树
    最大堆,最小堆
    Hash算法及HashMap算法
    ConcurrentLinkedHashMap(LRU)
    BloomFilter
    LIRS算法 LIRS的基本思想是对访问的数据块进行分类,一部分为hot数据块,一部分为cold数据块。对于hot数据块我们可以分配90%以上的cache给它们。而对于cold数据块给它们分配10%。
    从LIRS算法的描述来看,可以理解为两个LRU队列的组合,利用cold缓冲区来保护Hot缓冲区,提高了进入hot缓冲区的门槛,阻止hot缓冲区频繁地变化。

    三、数据库
    mysql存储引擎
    mysql优化
    mysql HA解决方案
    sql语句优化
    NoSQL相关

    四、文件系统
    Linux主流文件系统
    EXT3与EXT4文件系统
    主流分布式文件系统分析与对比
    分布式文件系统

    五、系统相关
    共享内存实现机制
    mmap的实现原理与机制
    copy on write技术
    zero copy技术

    六、网络相关
    OSI七层网络模型
    TCP/IP交互流程
    HTTP访问流程

    七、大型网站架构
    负载均衡技术及其原理
    智能DNS解析,原理,实现方案
    squid web加速及缓存技术
    网页静态化

     

     

     

     Android精品开源项目整理(持续更新中..)

     

    如有更多更好的资源欢迎大家跟帖分享。。。




     

    淘宝技术牛p博客整理

    分类: 【Programmer's life】 570人阅读 评论(1) 收藏 举报

    淘宝技术委员会是由淘宝技术部高级技术人员组成的一个组织,共分为Java分会C/C++分会算法分会数据分会UED分会测试分会系统分会七个分会。
    淘宝技术委员会的愿景是淘宝成为技术人才向往的乐土,高级技术人员的发源地;技术委员会的使命是帮助淘宝建立业界一流的技术团队。同时,技术委员会也是技术人员间交流技术和想法的一个平台。

    淘宝技术博客:

    数据分会 淘宝DBA http://www.taobaodba.com/

    UED分会 http://ued.taobao.com/

    测试分会 套测试:http://www.taobaotest.com/


    ==========Java牛人=========================================

    Java牛人:

    华黎(曾宪杰):淘宝技术委员会JAVA分会会长。  

    blog: http://blogjava.net/vanadies10

    先后在中科院下属企业、先锋电子(中国)等企业就职,是一个桌面管理系统的软件公司的联合创始人并负责总体技术工作。参与过邮政省级地市集中化生产作业系统的设计开发以及大型企业内部桌面管理安全系统的设计和开发。07年6月加入淘宝,从负责消息中间件、数据层到整个Java中间件以及现在的通用产品,主要的工作都在中间件和一些通用产品部分,在高可用和容灾方面,也有一些经验。比较熟悉C++和Java,在多线程、并发、网络通信方面有一定的经验,对于JVM、分布式系统有一些了解。对新技术有浓厚的兴趣。目前负责淘宝网通用产品团队,致力于更好的支持业务开发团队。

    一粟(朱鴻)、

    blog: http://hugozhu.myalert.info/

    weibo: http://weibo.com/hugozhu

    2009年2月加入淘宝,目前负责淘宝广告三大产品线的业务前端系统架构。参加过淘宝直通车重构,搜索前端,广告日志,报表平台,消息通知引擎,无线广告平台等系统设计和实现。对互联网应用各方面的技术都感兴趣,比较关注的方向有:应用开发框架,分布式存储和搜索系统,大流量网站架构,并行计算,移动平台和前端技术等;
    在加入淘宝前:
    1. 1999年~2002年浙大读研期间在阿里巴巴兼职开发网站应用;
    2. 2003年~2005年在美国洛杉矶从事网络应用开发; 
    3. 2005年~2008年在美国Yahoo负责搜索前端及其相关应用的开发。

    玄难(墙辉)

    有12年的电信移动CRM和BOSS系统的领域建模和技术架构经验,并带领团队完成以年为单位上百人的大型项目实施工作。 建立过一套J2EE基础开发平台。涉及前台UI的组件化和自动化,服务的定义和注册管理,数据的O-R Mapping、规则引擎、包括Process、Workflow、BPM、PageFlow的流程平台。系统的自动化部署,系统的个层面的运行期监控。在各种类型的项目和开发人员中得到了很好的应用。
    对问题域的抽象建模和偏业务的技术架构有浓厚的兴趣和一定的实践经验。崇尚系统的模型简单、架构简单、代码简单为美。
    2009年8月加入淘宝,负责汇金系统【汇金系统:是淘宝自有服务和第三方服务的售卖方式和价格定义、销售、服务开通、分成结算和最后的财务核算系统】的技术架构和团队管理工作。


    孤城(李杰)、

    个人基本上在淘宝成长,大部分时间在负责后台相关的业务和技术工作。先后接触参与过CRM(原淘宝后台)、HECLA、拍卖、营销、会员、UIC、评价、汇金、物流宝等业务系统;
    并努力推动TBOSS的业务平台和技术平台体系建设,有幸能够参与构建一个相对完整的业务和技术体系。
    追求架构中人、业务、技术的平衡之道。
    比较熟悉领域建模、架构;对服务化的技术框架、工具,大规模业务处理的技术平台构建有些想法和实践。

    范禹(吴泽明)、

    在淘宝一直在做业务系统的开发:开始是论坛、会员相关的功能,中间参与B2C平台开发,然后是B2C、C2C平台的整合 。当前在做系统稳定性、性能优化等相关的工作。

    毕玄(林昊)、

    blog: http://www.blogjava.net/BlueDavy

    07年加入淘宝,07—10年主要负责服务框架的实现,目前此服务框架大范围的在淘宝使用,每天经过服务框架的请求量为120亿+,目前主要负责online海量数据存储和分析的实现。在加入淘宝前,主要从事政府软件的开发,对OSGi有很强烈的兴趣。
    关键字: JVM SOA 高并发 高可用 网络通信 NoSQL

    放翁(岑文初)、

    blog: http://blog.csdn.net/cenwenchu79

    weibo: http://weibo.com/fangweng

    06年3月加入阿里巴巴CRM团队,07年初参加阿里软件创业团队,主要负责阿里软件基础平台(SAAS平台),08年初与淘宝合作开发阿里巴巴最早的开放平台。09年离开阿里云基础团队转入淘宝,主要负责开放平台整体架构的设计和核心框架的实现,为开放平台在安全,性能,可用性上实现了一系列的框架和工具:分布式数据统计分析集群框架,异步化Web请求处理PipeComet框架等等。对开放平台的授权,服务接入,访问控制都有一些技术创新。在阿里巴巴的5年工作中已经被受理了10多项专利,主要分布在开放平台架构,开放服务安全算法,系统并发处理优化设计。
    关键字:开放平台,分布式计算,Web请求异步化

    空望(魏虎)、

    weibo:http://weibo.com/skyhope 

    06年底加入淘宝,先后负责过 机票系统、CTU、UIC、Forest、TTM、淘江湖、终搜等产品和系统,涉及淘宝业务系统范围较广。 目前在商品线带领推荐系统和收藏夹团队。 熟悉java web编程、多线程编程、搜索引擎、数据挖掘及nosql相关技术,对系统性能调优也有丰富的经验。
    关键字:网站性能优化、分布式系统、系统架构设计等

    褚霸(余锋)
    淘宝网任资深技术专家,专注高性能容错分布式服务器的研究和实现

    ==============C++牛人======================================

    C++牛人:

    立忠(张立中)、

    2005加入B2B,从事Isearch的开发
    2006借调雅虎,P4P平台开发
    2007加入阿里妈妈,广告平台及数据平台开发
    2008并入淘宝,广告算法架构师 
    擅长领域:搜索引擎,广告引擎,大型分布式系统,实时系统。

    五福(沈加翔)、

    目前担任淘宝搜索的技术负责人,研究员。
    99年中科院计算所硕士毕业后加入朗讯中国贝尔实验室从事通信软件研发;
    02年加入 雅虎中进入垂直搜索技术领域,离开时是搜索团队的技术负责人;
    05年加入雅虎美国搜索技术团队,带领中美两地的技术团队负责雅虎中国全网搜索全系 统技术的研发。
    08年加入阿里巴巴,历经B2B、阿里云和淘宝,完成了商品搜索引擎在包括淘宝搜索和B2B搜索广告等核心业务领域的平台化,解决 了扩展性问题,也获得了巨大的整体收益;启动建设了新一代商品搜索和全文检索一体化的搜索引擎平台和全网内容抓取平台,为阿里集团的搜索技术拓展 至全网奠定了坚实的基础。

    本空(徐绿兵)、

    前,在电子部就职1年,第一次接触到互联网;在新浪就职9年,转变为互联网建设的参与者,先后负责过新浪的即时通讯软件、财经频道股票数 据平台、企业广场后台、爱问引擎等项目的设计和开发。
    熟悉C/C++、Java、Perl,在网络通信、分布式计算、搜索技术有一定经验,喜欢脚 本语言和混合语言编程,对面向对象技术了解深刻,追求代码的可读性、扩展性和可维护性。
    在淘宝的经历:
    07年6月加入阿里妈妈,负责广告数据引擎的建设和维护,期间负责对引擎的代码做了一次大的重构,引擎、数据更新、数据转存的框架一直沿用至淘宝 直通车引擎;
    08年9月转入大淘宝,进入新成立的广告架构技术部,作为和广告引擎技术相关的架构师,参与了直通车2.0引擎架构设计、夸父通讯中间件的架构设 计;
    09年10月开始成为代码质量组成员,编写了C/C++代码规范,为推进C++单元测试而努力。


    多隆(蔡景现)

    2003加入淘宝,做过php,java开发, 参与过 isearch开发, 设计并开发过tfs, tair 
    在淘宝的经历:
    2003: php开发
    2004 ~ 2005: 参与denali开发
    2006: 参与isearch 开发, tbstore的开发(类似tair)
    2007 ~ 2009: tfs的开发, tair的开发, tbnet的开发
    2010: squid的改进
    2011: 高性能服务器框架开发

    ========算法牛人================================== 

    算法牛人:

    鬼脚七(文德)、

    毕业于天津大学自动化学院,之后在海量科技从事自然语言处理的研发工作, 
    2004年6月加入雅虎, 2008年加入阿里妈妈, 08年9月加入淘宝. 先后负责广告技术部, 搜索与算法技术部.
    关键字(熟悉的领域):网页搜索、广告技术、自然语言处理、机器学习

    精忍(吴凯)、

    2010年3月加入淘宝。在搜索算法团队工作,现负责北京主搜索算法团队,工作包括个性化搜索、Query改写(省略、纠错)、检索粒度控制(分词索引、多粒度检索)、用户引导(相关搜索、下拉提示)等
    加入淘宝前,在百度做网页搜索相关性方面的工作,包括Query分析、Ranking架构优化、用户行为分析等,对搜索相关性有较多经验 
    再之前,在微软亚洲工程院\研究院做商品搜索的研发,主要做商品聚合的算法研发。

    铁相(吴雪军)、

    主要从事网页搜索、广告系统、自然语言处理等方面的技术研发。2004年初,加盟百度,带领技术人员研发了百度的新一代的网盟广告系统,从无到期组建了百度自然语言处理部,担任百度网盟广告系统、自然语言处理部、大搜索部网页分析的技术负责人。
    曾任百度软件工程师、高级工程师、科学家
    天涯社区 技术副总裁 
    2010年9月,正式加盟淘宝网,主要负责淘宝广告算法系统的研发、建立和完善淘宝广告算法技术体系、推进淘宝广告系统的技术发展。

    青峰(王志榮)、

    学习经历:
    南京大学计算机本科,复旦大学和Carnegie Mellon University硕士,研究方向语音识别; 
    工作经历:
    1)美国Siebel Systems公司:研发CRM领域的客户关系数据挖掘问题;
    2)美国Yahoo Inc:研发搜索网页反作弊,网页文本分类以及排序等相关课题。 
    淘宝经历:
    08年7月加入Alimama,08年10月加入淘宝搜索中心,负责淘宝搜索算法领域,致力于淘宝数据的分析,挖掘,建模工作,从query分析,导航,搜索排序,搜索反作弊等方向提升淘宝搜索用户体验。

     

    ========数据(库)牛人=============================

    数据(库)牛人:

    正祥(阳振坤)

    1984年进入北京大学,先后获得数学学士、硕士以及计算机博士学位后留校,1997年破格晋升为教授,1999年成为北京大学首批“长江学者奖励计划”特聘教授之一,先后获得北京市科学技术进步奖一等奖、国家科学技术进步奖一等奖(排名第四)、第六届中国青年科技奖、北京市五四青年奖等。
    曾先后担任方正研究院副院长、北大计算机研究所副所长、联想研究院首席研究员、微软亚洲研究院主任研究员、百度高级科学家等 。近年来的主要研究领域是云计算和海量数据库等。


    泽远(王磊)、

    毕业于华中科技大学。
    曾就职于腾讯,从事互联网平台产品与中间件开发和维护工作。先后参与和主导过Tencent Web Server,消息中间件,高性能业务框架、SOA基础设置、规则引擎、分布式KV数据库的开发。爱好开发各种工具提高工作效率并且自娱自乐。其中XTools运维工具箱发布到内网后,一天内达到800+的下载量,并获得了ponyma的热心点评。
    2010年加入淘宝,从事淘宝海量数据仓库的平台化建设工作。主导和参与过的项目有,Dbloader优化,DataX开发,数据同步稳定性与性能提升、提升刀锋项目,指标系统,天网调度,告警平台,Witon数据服务平台。目前为数据平台架构组组负责人,专注的领域是分布式计算、存储和海量数据仓库架构。爱技术,也爱产品,关注技术背后的商业价值,理想是为淘宝数据开发之路贡献力量。


    云铮(张清)、

    2002年毕业于浙江大学计算机系,2003年初加入阿里巴巴,成功创建阿里巴巴dw,经历了阿里dw从创建到成熟运用。2005年,淘宝数据开始启动,调任淘宝,打造淘宝数据平台体系,推动商业智能体系建设,引入高端SAS,SPSS CLEMENTINE标准数据挖掘体系,并对第一批数据挖掘人员进行数据挖掘技术和实施流程培训。负责淘宝数据平台体系架构的每一次大的升级换代,历经oracle单机,到oracle RAC 4节点高端存储,到oracle RAC 12节点,到全球最大的oracle RAC 20节点,在到目前的2000台规模的hadoop 云梯分布式计算集群,数据体系在这些平台发展过程中平稳升级,对应用全透明,集群的规模在增加,任务job在 迅速扩展,得力于良好的应用架构,运维人员能轻松应对,实现高效,自动化运维。对国内外最新数据技术狂热,在和国内外业界行家交流和阿里,淘宝的实战中,糅合所学所见,无门无派,注重实效,自成一套淘宝数据体系建设和运用的实战方法。八年数据生涯的梦想是能够推动集团数据统一体系架构,为数据化运营,推动实现十年数据战略尽自己一份力。

    图海(王勇)、

    6年多的数据行业相关经验,2009年加入淘宝,参与了淘宝数据部门从RAC平台向分布式平台转变的全过程,成功的搭建和维护了符合淘宝数据业务的分布式平台(2000台的hadoop集群)。
    主要关注于分布式系统的应用优化,对于分布式存储和计算有比较深入的了解,通过技术和业务的结合,成功实现了降低2/3的存储优化效果和提升一倍运行效率的计算优化。
    在数据库、海量数据存储、分布式系统等方面具备深厚的理论知识与实践经验,此外,对于Linux系统,脚本编程,架构设计方面也有比较浓厚的兴趣和经验。

    DBA:
    冯春培、

    七公汪海)、

    西毒(冯大辉)、
    支付宝资深DBA

    陈吉平(拖雷)
    weibo: http://weibo.com/chenpiner

    ============UED牛人============================================

    UED牛人:

    小马(赵泽欣)、

    加入淘宝之前基本在创业公司中度过,创业项目繁杂,角色兼顾产品开发/售前咨询/售后支持/客户培训。 
    加入淘宝后我的角色:第一位前端工程师 2006年10月加入淘宝网,幸运的成为淘宝第一位前端工程师。参与过旺铺、收藏夹、物流、Web旺旺和P4P等重要产品的前端开发,对淘宝整个交易流程做了系统的前端重构。 TBra开发者 2007年,结合项目逐步整理制定出淘宝UED的前端规范和开发流程,积累形成最初的前端JavaScript类库TBra。前端性能布道士 2009年开始关注前端性能优化,组织虚拟团队优化淘宝各关键页面的前端性能,2010年负责技术委员会速度小组的工作。前端架构师 2010年开始带领前端架构团队,负责前端通用框架研发与推广,UDC核心业务支持和前端质量保障体系的建设。关键字(熟悉的领域): HTML5 JavaScript 前端架构 性能优化 可用性。

    清羽(周骞)、

    2005-2008 加入淘宝成为前端开发工程师前,做了3年Java工程师,ERP领域。投身于企业级应用的表现层框架及其工具的研究。
    2008 加入淘宝,专注于前端开发领域。加入淘宝后的角色:淘宝众多后台系统开发 2008-2010 从模板系统到TMS到运营支撑线,参与负责了淘宝众多后台系统的前端开发及其架构工作。在开发团队中传播前端技术的主要推广实践者。 UED STS团队前端Leader 2010年开始带领STS前端团队,负责新人培养、开发培训、基础框架的研发推广。带领团队在多个业务线前端技术上取得进步。目前: STS团队 店铺前端技术目前,专注店铺业务线。旨在通过前端技术提升店铺用户体验。并有意在第三方前端接入及相关技术上深入探索。

    李牧(李穆)、

    2004年毕业于哈尔滨工业大学数学系。 
    2004-2006年就职于亚信科技,主要从事中石化,国航等大型企业人力资源管理系统前后台开发。2007年1月入职雅虎中国P4P部门,历经雅虎,阿里妈妈,淘宝网,进入阿里后逐步专注前端开发。
    目前工作方向: 
    1.广告投放引擎前端开发,专注第三方广告代码安全性,稳定性隐患和性能问题解决方案 
    2.广告创意平台开发,通过淘宝BannerMaker和CreativeCenter产品,提供高速精美的创意在线DIY工具 
    3.广告业务系统OPOA化,推进广告业务系统OnePageOneApplication化,打造体验优秀,面向前后端开发者和IE6友好的OPOA整体解决方案

    玉伯 (王保平)、

    weibo: http://weibo.com/lifesinger

    2003-2006 年,中科院物理所研究生,Fortran 与 C 程序员,喜爱实验模拟和数值计算。 
    2006-2008 年,在中科院软件所互联网实验室从事项目管理软件的研发,C# 与 Java 爱好者。 2008 年 4 月份加入淘宝,就职于 UED 部门。主要工作:交易线开发:历经交易二期到四期,以及五彩石项目。对出价页面、退款流程和详情页面等前端代码做过,系统梳理和重构。 KISSY 类库: 是淘宝新一代前端类库 KISSY 的发起人和主要开发者。开发过 KISSY 核心、全网搜索提示、富文本编辑器、Switchache 等组件。目前已大规模应用在淘宝线上环境。前端架构团队: 2009 年起,组建前端架构团队,在首页维护、全网性能优化、类库研发、知识沉淀、工具应用等方面取得了丰硕成果。是前端架构的探索与实践者。 2011 年转岗到产品技术-业务平台组。目前工作方向前端富应用开发的探索与实践、前端模块化框架 SeaJS 的开发与应用、网站性能优化与监控等一系列富含挑战和趣味的工作。

     

    ===========测试牛人==============================================

    测试牛人:

    公直(黄利)、

    2004年毕业于北航,先后在大唐软件和上海微创软件任职,经历电信BOSS项目、MSN MX、MAA等项目的数据中心部署测试、功能测试、性能测试等项目。
    2008年8月加入淘宝,主要经历,负责广告技术基础平台产品测试;负责淘宝-阿里云合作项目飞天夸父项目的测试;负责淘宝广告技术测试工具研发;关键字(熟悉的领域):测试工具、自动化测试、敏捷测试。

    丘虚(郑昌丘)、

    2008年加入淘宝,2009年负责研发了淘宝的测试平台获2009淘宝年度创新大奖二等奖;
    2010年负责建立了淘宝性能测试体系,团队合作完成淘宝《淘宝性能测试白皮书》.合作研发的CSP平台获得2010年研发部创新大奖;
    熟悉软件研发过程, 精通软件测试技术和软件测试自动化, 善于结合产品特性创新测试技术和测试策略,提升测试效率和测试深度.

    元逍(李中杰)、

    2004年毕业于清华大学,后一直在IBM中国研究院工作,参与的项目包括Web Services/业务流程/SOA测试、测试计划和优化、软件应用生命周期管理等。

    2011年7月加入淘宝,现任测试架构师。关键字(熟悉的领域):测试平台、测试生成、回归测试、测试计划、软件工程。


    鹤云(马治国)、

    经历 产品 隶属于 微软 Emerging Market Group. 完整经历了产品从开始到消亡的4个版本。 
    亲自做过的,包括功能测试,性能测试(Web Service, NT Service, javascript, DB), 压力测试(Web Service, NT Service, DB),自动化测试, 在淘宝的经历: 09年,加入淘宝,目前负责 测试平台与发展的工作测试平台与发展介绍:http://twork.taobao.net/redmine/projects/testplatform/wiki

    ===============系统牛人==========================================

    系统牛人(硬件、网络、OS等):

    周明(周明)、

    04年初加入yahoo 中国 从事系统管理工作,后因工作需要,转战一拍,yahoo 、alibaba case 后回到yahoo 中国,08年初只身一人筹建阿里妈妈运维团队,半年的时间完成了IDC建设、运维体系建设、阿里妈妈广告平台从北京迁移到杭州、顶住近40亿广告PV的压力。08年9月并入淘宝,负责广告事业部的系统、PE、过程改进工作,2010年10月起负责淘宝系统运维工作,着力打造以人为本的运维体系,推进绿色、高效、低成本的基础平台建设。

    伯松(李勇)、

    blog: http://blog.coly.li/?from=yufeng

    一位活跃的内核社区开发者。在加入淘宝之前,一直从事Linux内核维护和开发工作,曾经是SuSE Linux内核组成员,目前在淘宝内核开发维护团队从事内核开发维护工作。2001年毕业于北京邮电大学,获得了管理工程专业的学士学位。在1999年时编写了第一个在Linux上的"hello world"程序,是Ext4,OCFS2, openSuSE等开源项目的活跃参与者,现在仍然靠为GNU/Linux编写开源软件生活。

    正明(章文嵩)、

    weibo: http://weibo.com/wensong8

    2000年在国防科技大学获得博士学位。2000年共同创办集群网络,2003年共同创办Purplecomm,2009年9月加入淘宝。是Linux内核的开发者,著名的Linux集群项目--LVS (Linux Virtual Server)的创始人和主要开发人员,LVS集群代码已在Linux 2.4和2.6的官方内核中,并得到广泛的应用。在架构大型系统、系统软件开发、Linux操作系统、网络和软件开发管理上有着丰富的经验。他一直在自由软件的开发上花费时间,并积极推动开源活动在中国的发展。 在淘宝的经历:主要负责基础核心软件研发、推进网络软硬件方面的性能优化、搭建下一代高可扩展、低碳、低成本的淘宝电子商务基础设施。


    康伯(高山渊)

    2000年毕业于北京化工大学生物工程专业,之后北漂8年,做过销售、IT支持、互联网接入等工作,2004年开始进入互联网运维行业,2007年加入中国雅虎,2008年转入淘宝,现在负责淘宝CDN运维、云计算运维、虚拟化、系统优化等方面工作

    在公司主要经历的项目:alimama机房建设及异地迁移;云梯项目;CDN建设优化;虚拟化管理平台等项目。

    淘宝校园招聘官网:http://campus.taobao.com/
    淘宝招聘官方微博:http://weibo.com/staffing
    淘宝大街网BBS专区:http://taobao.dajie.com/


    .
    作者 : finddreams

     

    开发中最常用的GitHub上 优秀的 Android 开源项目整理(精品)

    分类: Android开发 19人阅读 评论(0) 收藏 举报

    目录(?)[+]

        对于GitHub上开源项目的整理,很多博客都有写过。但是我觉得有些博客整理的开源项目过多,让我们看的眼花缭乱,以至于我们不知道该用哪一个好。所以为了更好的有利于初学者的学习,我从实战和易用性的角度重新整理这些优秀的开源项目,贪多无厌,一两个精品足以。

        这些开源项目可以分为UI类和框架类。UI类主要介绍那些自定义特性的View,包括ListView、ActionBar、ViewPager、Gallery、GridView、ImageView、ProgressBar等等。框架类的话有包含由快速开发框架Afinal,xUtils,以及Google开源的网络框架Volley.


          UI类:


       一、ListView

        1、android-pulltorefresh 

       一个强大的拉动刷新开源项目,支持各种控件下拉刷新
    ListView、ViewPager、WevView、ExpandableListView、GridView、(Horizontal
    )ScrollView、Fragment上下左右拉动刷新,比下面johannilsson那个只支持ListView的强大的多。并且他实现的下拉刷新ListView在item不足一屏情况下也不会显示刷新提示,体验更好。
    项目地址:https://github.com/chrisbanes/Android-PullToRefresh
    Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/pull-to-refreshview-demo.apk?raw=true
    APP示例:新浪微博各个页面


          2、DragSortListView 

          拖动排序的ListView
    同时支持ListView滑动item删除,各个Item高度不一、单选、复选、CursorAdapter做为适配器、拖动背景变化等
    项目地址:https://github.com/bauerca/drag-sort-listview
    Demo地址:https://play.google.com/store/apps/details?id=com.mobeta.android.demodslv
    APP示例:Wordpress Android
           

         3、SwipelistView

           支持定义ListView左右滑动事件,支持左右滑动位移,支持定义动画时间项目
    APP示例:微信 
      

         4、pinned-section-listview GroupName

         滑动到顶端时会固定不动直到另外一个GroupName到达顶端的ExpandListView项目地址:https://github.com/beworker/pinned-section-listview

    效果图:Renderings

        

         二、ActionBar

           1. ActionBarSherlock 

            为Android所有版本提供统一的ActionBar,解决4.0以下ActionBar的适配问题
    项目地址:https://github.com/JakeWharton/ActionBarSherlock
    Demo地址:https://play.google.com/store/apps/details?id=com.actionbarsherlock.sample.demos
    APP示例:太多了。。现在连google都在用


           2.ActionBar-PullToRefresh 

          下拉刷新,ActionBar出现加载中提示
    项目地址:https://github.com/chrisbanes/ActionBar-PullToRefresh
    Demo地址:https://play.google.com/store/apps/details?id=uk.co.senab.actionbarpulltorefresh.samples.stock
    APP示例:Gmail,Google plus,知乎等

        

         三、 Menu

             1.SlidingMenu 


           滑出式菜单,通过拖动屏幕边缘滑出菜单,支持屏幕左右划出,支持菜单zoom、scale、slide up三种动画样式出现。项目地址:https://github.com/jfeinstein10/SlidingMenu
    Demo地址:https://play.google.com/store/apps/details?id=com.slidingmenu.example
    APP示例:Foursquare, LinkedIn, Zappos, Rdio, Evernote Food, Plume, VLC for Android, ESPN ScoreCenter, MLS MatchDay, 9GAG, Wunderlist 2, The Verge, MTG Familiar, Mantano Reader, Falcon Pro (BETA), MW3 BarracksMenuDrawer和SlidingMenu比较:SlidingMenu支持菜单动画样式出现,MenuDrawer支持菜单view处于内容的上下层


        四、ViewPager 


             1.Android-ViewPagerIndicator 

          配合ViewPager使用的Indicator,支持各种位置和样式
    项目地址:https://github.com/JakeWharton/Android-ViewPagerIndicator
    Demo地址:https://play.google.com/store/apps/details?id=com.viewpagerindicator.sample
    APP示例:太多了。

        五、GridView

                 1、StaggeredGridView 

                 允许非对齐行的GridView

    类似Pinterest的瀑布流,并且跟ListView一样自带View缓存,继承自ViewGroup

    项目地址:https://github.com/maurycyw/StaggeredGridView

    Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/staggered-gridview-demo.apk?raw=true
    APP示例:Pinterest等


         2.DraggableGridView Item

           可拖动交换位置的GridView,类似桌面的单屏效果

    项目地址:https://github.com/thquinn/DraggableGridView

    Demo地址:https://github.com/thquinn/DraggableGridView/blob/master/bin/DraggableGridViewSample.apk?raw=true

        

                六、ImageView

        1.PhotoView 

          支持双击或双指缩放的ImageView

     
    1.  在ViewPager等Scrolling view中正常使用,相比上面的AndroidTouchGallery,不仅支持ViewPager,同时支持单个ImageView

    1. 项目地址:https://github.com/chrisbanes/PhotoView

    1. Demo地址:https://play.google.com/store/apps/details?id=uk.co.senab.photoview.sample

    2.           
    3.           2.android-gif-drawable 

    4.           支持gif显示的view
      项目地址:https://github.com/koral--/android-gif-drawable
      用jni实现的,编译生成so库后直接xml定义view即可,而且本身不依赖于其他开源项目。

    5.         3.CircleImageView

      1. 圆形的ImageView
        项目地址:https://github.com/hdodenhof/CircleImageView
        效果图:Renderings


    6.                七、其他

    7.      1.android-square-progressbar

    8.       在图片周围显示进度
      项目地址:https://github.com/mrwonderman/android-square-progressbar
      Demo地址:https://play.google.com/store/apps/details?id=net.yscs.android.square_progressbar_example
      APP示例:square
    9.      2.SwipeBackLayout 

    10.        左右或向上滑动返回的Activity
      项目地址:https://github.com/Issacw0ng/SwipeBackLayout
      Demo地址:https://play.google.com/store/apps/details?id=me.imid.swipebacklayout.demo
      APP示例:知乎

    11.      3.achartengine 

              支持折线图、面积图、散点图、时间图、柱状图、条图、饼图、气泡图、圆环图、范围(高至低)条形图、拨号图/表、立方线图及各种图的结合
      项目地址:https://code.google.com/p/achartengine/
      官方网站:http://www.achartengine.org/
      效果图:Renderings
        1. http://www.achartengine.org/dimages/combined_chart.png

        2. http://www.achartengine.org/dimages/budget_chart.png

        3. APP示例:Wordpress Android,Google Analytics

        4.        

        5.     4.AndroidWheel 

        6.      支持城市、多种日期时间、密码、图片

          1. 项目地址:https://github.com/sephiroth74/AndroidWheel
            效果图:Renderings

               5.android-lockpattern 

        7.        Android的图案密码解锁
          项目地址:https://code.google.com/p/android-lockpattern/
          Demo地址:https://play.google.com/store/apps/details?id=group.pals.android.lib.ui.lockpattern.demo
          使用介绍:https://code.google.com/p/android-lockpattern/wiki/QuickUse
          示例APP:Android开机的图案密码解锁,支付宝的密码解锁



        8.       工具类:

                  一、快速开发框架

                  1.Afinal

        9.  Afinal是一个android的ioc,orm框架,内置了四大模块功能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp。
          通过finalActivity,我们可以通过注解的方式进行绑定ui和事件。
          通过finalBitmap,我们可以方便的加载bitmap图片,而无需考虑oom等问题。
          通过finalDB模块,我们一行代码就可以对android的sqlite数据库进行增删改查。
          通过FinalHttp模块,我们可以以ajax形式请求http数据。
        10. GitHub 地址:https://github.com/yangfuhai/afinal
           

        11.        2.xUtils

          xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...
          xUtils 包含了很多实用的android工具。

        12. xUitls最低兼容android 2.2 (api level 8)。

        13. GitHub 地址: https://github.com/wyouflf/xUtils/


        14.     3. Android-Universal-Image-Loader

          Android上最让人头疼的莫过于从网络获取图片、显示、回收,任何一个环节有问题都可能直接OOM,这个项目或许能帮到你。

          Universal Image Loader for Android的目的是为了实现异步的网络图片加载、缓存及显示,支持多线程异步加载。它最初来源于Fedor Vlasov的项目,且自此之后,经过大规模的重构和改进。

          4.Android Volley

        15. 在Google I/O 2013上,Volley发布了。Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。
        16. Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。

        17.  Volley主页: https://android.googlesource.com/platform/frameworks/volley


        18. 先整理这些,后续如果有更好的开源框架再补充,或者各位读者推荐的补充上来,希望对你有所帮助!


        19. 作者 : finddreams





        20. 第三方
          展开全文
        21. GitHub 优秀的 Android 开源项目

          千次阅读 2015-05-26 16:30:28
          原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea主要介绍那些不错个性化的View,包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar及...
        22. 数据分析侠A的成长故事

          万次阅读 多人点赞 2016-03-09 10:46:40
          同学A:22岁,男,大四准备实习,计算机专业,迷茫期作为一个很普通的即将迈入职场的他来说,看到周边的同学都找了技术开发的岗位,顿觉自己很迷茫,因为自己不是那么喜欢钻研写代码,而自己又没太的经验。...
        23. 提起华为2012实验室,你...打破传统代码编写方式,将开发回归简捷高效,快速实现用户需求,解决企业个性化需求与标准化生产的矛盾,让企业更专注于发展和创新,势必将成为未来企业数字化进程中的重要开发工具之一。
        24. 主要介绍那些不错个性化的View,包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar及其他如Dialog、Toast、EditText、TableView、Activity Animation等等。   一、ListView  ...
        25. iOS最全学习资源汇总

          千次阅读 2016-04-07 17:28:35
          该文档会持续更新, 同时也欢迎更具有丰富经验的 iOS 开发者将自己的常用的一些工具, 学习资料, 学习心得等分享上来, 我将定期筛选合并, 文档尚有一些不完善之处, 也请不吝指出, 感谢您对 iOS 所做的贡献, 让我们...
        26.  - 国内开源作者,带很手势的表单元格。 MCSwipeTableViewCell  - 带很手势的表单元格。 TMQuiltView  - 瀑布流。 WaterfallFlowDemo  - 一个简单的UICollectionView瀑布流布局演示demo。 XLForm  - 很...
        27. 我们有必要了解一下GridBagConstraints中各个属性的具体含义以便我们更好的进行个性化的布局   @gridx,gridy:  组件左上角所在的位置,如上图中左侧的面板在1行0列,则gridy=0,gridx=1。读者请注意...
        28. GitHub 优秀的 Android 开源项目 转自:...主要介绍那些不错个性化的View,包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar及其他如Dialog、
        29. 游戏编程精粹目录

          千次阅读 2013-02-19 10:37:01
          3.1.4 为FSM创建状态 212 3.1.5 使用FSM 213 3.1.6 参考文献 219 3.2 博弈树(Jan Svarovsky) 220 3.2.1 极小极大算法的负极大改进算法 221 3.2.2 剪枝 222 3.2.3 走步排序方法 223 ...
        30. 原文地址为... 主要介绍那些不错个性化的View,包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar及其他如Dialog、Toast、EditT
        31. CognosBI技术建议书

          千次阅读 2012-09-24 19:49:12
          l XXXXX据库系Cognos解决方案为数据集中的结构,将XXXXX集团公司的各应用系统的数据,集中到集中数据库中,分别创建数据集市,使用共享维技术,实现维度共享。在以后逐步加入其他部门集市的时候,可以共享这些维度...
        32. 1.基本标签的使用和HTML相关介绍,盒子模型等(太了,不说明了) 2.基本CSS的使用 #id , 表示并关系 空格 表示包含关系 .表示自定义样式,html中用 class调用样式 其他组合标签 3.基础JAVASCRIPT的使用...
        33. 生成EXCEL文件

          2010-09-07 11:04:40
          生成EXCEL文件 1.JSP页面中利用JS将TABLE内容生成... 单元格A 单元格A 单元格A 单元格A 单元格合并行A 单元格B 单元格B 单元格B 单元格B 单元格合并行B /...
        34. 在代码中纯手工创建约束灰常痛苦,但幸运的是我们有了SnapKit,在board中用上它,你可以简单直观地编写约束了。 PureLayout - PureLayout 是 iOS & OS X Auto Layout 的终极 API——非常简单,又非常强大。...
        35. 收集的家大公司Java面试题

          万次阅读 2013-08-03 17:22:54
          态性包括参数化态性和包含态性。态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。  2 、 String 是最基本的数据类型吗 ?  基本数据类型包括 byte 、 int 、 ...

        空空如也

        空空如也

        1 2 3 4 5 ... 20
        收藏数 982
        精华内容 392
        关键字:

        创建跨多个行的单元格