This invention relates to systems and methods for assigning location information to users on social networks that do not provide any location information on their account.
A users' location is a very important contextual piece of information to pair with what a person is saying. Marketers and advertisers wish to know where to spend money and target ads. Brands want to know which regions are showing adoption. News outlets wish to find people sharing interesting local content about their market.
Previously, a user's location could be determined from information related to the user's physical address, determined, for example, through mailing lists and telephone directories, among other sources. Thus, advertising could be directed to a particular territory to reach a particular set of consumers.
With the advent of the modern World Wide Web, it became possible for users to communicate well beyond the traditional territories; indeed, it is now possible to advertise to a set of consumers that are located throughout the world. Along with the World Wide Web has come social media, which allows users to communicate with each other in a fast and viral manner. Word of mouth anecdotes concerning products and services used to be limited. Now, with social media, such anecdotes can be virally spread much faster and to a wider number of consumers.
Social media sites receive and process vast amounts of communications between its users; these communications may contain information about the location of the users, but often does not. Since the communications may be mined for data that could be useful to an advertiser, the social media companies have typically analyzed and sold information gleaned from the communications to entities wishing to reach various subsets of consumers. For this outreach to be successful, however, it is necessary to be able to assign a location to the originator of each communication.
Various techniques have been proposed to estimate the location of a user. For example, in one method, the words of the communication are analyzed to determine words used in a particular region or dialect. Another method considers the relationship between users, such as whether one user follows another user on the assumption that the relationship may reflect the regions in which the user and the follower are located. For the most part, these techniques have been successful only to the extent that the originator of the communication can be located within a wide region, such as a country or state. While even this location ability can be useful, advertisers often wish to transmit their message to much smaller regions, such as consumers located in an individual city.
What has been needed, and heretofore unavailable, is an automated system that can identify where users of social networks are located rapidly and with sufficient particularity so as to allow for narrowly targeted communications from advertisers or others who wish to reach a particular subset of consumers. The present invention satisfies this and other needs.
In it most general aspect, the present invention includes a system and method for assigning location information to a user of a social network that does not already have a location associated with their account.
In another aspect, the present invention includes a computer implemented method for assigning location data to users, comprising: locating all users with location information on their account and assigning a location to those users; constructing a graph representation of the social network; and propagating known locations through that network to users with no known location.
In another aspect, assigning a location to a user who has provided location information may involve taking all messages with GPS tags and determining the user's most likely location from those tags.
In yet another aspect, assigning a location to the user may be taken from a self-reported location field.
In still another aspect the social graph may be constructed by looking at a user's friends on a social network.
In yet another aspect the social graph may be constructed by looking at communication patterns between users on the network.
In still another aspect, location information may be assigned to users in the network that do not already have a location via a diffusion process on the social graph.
In a further aspect, the present invention includes a computer implemented method for predicting the geolocation of users in a social network, comprising: receiving data on posts from a social network by a processor in operable communication with the social network; identifying users on the social network using information data included in the posts; identifying users with location information included in the posts and storing the location information for those users in a memory in operable communication with the processor; identifying interactions between different users on the social network using the information data included in the posts; determining an estimated location of a user whose posts do not include location information based on the user's interactions with other users on the social network; and storing the estimated location of the user in the memory.
In one alternative aspect, identifying users with location information includes identifying posts of users that contain latitude-longitude information. In another alternative aspect, identifying users with location information includes identifying users who have self-reported their location.
In still another aspect, determining an estimated location for a user from a multitude of posts from that user containing latitude-longitude coordinates includes predicting a location from the multitude of posts. In another aspect, predicting a location includes determining a median of the coordinates.
In yet another aspect, the invention further comprises determining a dispersion of the distances from the median for the coordinates. In still another aspect, the invention further comprises generating a histogram of the distances from the median for the coordinates and identifying distinct peaks in the histogram.
In still another aspect, the invention further comprises generating a sorted array of the differences of the distances between the coordinates. In another aspect, the invention further comprises analyzing the sorted array and identifying clusters of locations. In another further aspect, the invention includes determining values for a median and dispersion of each cluster.
In another aspect, interactions between users are all treated equally. In an alternative aspect, interactions between users are weighted differently depending on the type of interaction. In yet another alternative aspect, interactions between users are weighted differently depending on the frequency of interaction between the users.
In still another aspect, a subset of interactions between users are selected for use in determining an estimated location of a user whose posts do not include location information.
Other features and advantages of the present invention will become apparent from the following detailed description, taken in conjunction with the accompanying drawings, which illustrate, by way of example, the principles of the invention.
As will be described hereinafter in greater detail, the various embodiments of the present invention relate to a system and method for processing the connections between users of a social network and determining the geolocation of users in the network from those connections. For purposes of explanation, specific nomenclature is set forth to provide a thorough understanding of the present invention. Description of specific applications and methods are provided only as examples. Various modifications to the embodiments will be readily apparent to those skilled in the art and the general principles defined herein may be applied to other embodiments and applications without departing from the spirit and scope of the invention. Thus the present invention is not intended to be limited to the embodiments shown, but is to be accorded the widest scope consistent with the principles and steps disclosed herein.
In the following description, numerous specific details are set forth in order to provide a thorough understanding of the present invention. It will be apparent, however, to one of ordinary skill in the art, that the present invention may be practiced without these specific details. In other instances, well known components or methods have not been described in detail but rather in a block diagram, or a schematic, in order to avoid unnecessarily obscuring the present invention. Further specific numeric references such as “first driver,” may be made. However, the specific numeric reference should not be interpreted as a literal sequential order but rather interpreted that the “first driver” is different than a “second driver.” Thus, the specific details set forth are merely exemplary. The specific details may be varied from and still be contemplated to be within the spirit and scope of the present invention. The term “coupled” is defined as meaning connected either directly to the component or indirectly to the component through another component.
Throughout the description reference will be made to various software programs and hardware components that provide and carryout the features and functions of the various embodiments of the present invention. Software programs may be embedded onto a machine-readable medium. A machine-readable medium includes any mechanism that provides, stores or transmits information in a form readable by a machine, such as, for example, a computer, server or other such device. For example, a machine-readable medium includes read only memory (ROM); random access memory (RAM); magnetic disk storage media; optical storage media; flash memory devices; digital video disc (DVD); EPROMs; EEPROMs; flash memory; magnetic or optical cards; or any type of media suitable for storing electronic instructions.
Some portions of the detailed descriptions are presented in terms of algorithms and symbolic representations of operations on data bits within a computer memory. These algorithmic descriptions and representations are the means used by those skilled in the data processing arts to most effectively convey the substance of their work to others skilled in the art. An algorithm is here, and generally, conceived to be a self-consistent sequence of steps leading to a desired result. The steps are those requiring physical manipulations of physical quantities. Usually, though not necessarily, these quantities take the form of electrical or magnetic signals capable of being stored, transferred, combined, compared, and otherwise manipulated. It has proven convenient at times, principally for reasons of common usage, to refer to these signals as bits, values, elements, symbols, characters, terms, numbers, or the like. These algorithms may be written in a number of different software programming languages. Also, an algorithm may be implemented with lines of code in software, configured logic gates in hardware, or a combination of both.
It should be borne in mind, however, that all of these and similar terms are to be associated with the appropriate physical quantities and are merely convenient labels applied to these quantities. Unless specifically stated otherwise as apparent from the above discussions, it is appreciated that throughout the description, discussions utilizing terms such as “processing” or “computing” or “calculating” or “determining” or “displaying” or the like, refer to the action and processes of a computer system, or similar electronic computing device, that manipulates and transforms data represented as physical (electronic) quantities within the computer system's registers and memories into other data similarly represented as physical quantities within the computer system memories or registers, or other such information storage, transmission or display devices.
In an embodiment, the logic consists of electronic circuits that follow the rules of Boolean Logic, software that contain patterns of instructions, or any combination of both.
The term “server” is used throughout the following description. Those skilled in the art understand that a server is a computer program that provides services to other computer programs running on the same computer or processor as the server application is running, and/or other computers or processors different from the computer or processor on which the server is running. Often, the computer or processor on which the server program is running is referred to as the server, although other programs and applications may also be running on the same computer or processor. It will be understood that a server forms part of the server/client model. As such, the processor running the server program may also be a client, requesting services from other programs, and also operate as a server to provide services to other programs upon request. It is understood that the computer or processor upon which a server program is running may access other resources, such as memory, storage media, input/output devices, communication modules and the like.
Similarly, a cloud server is a server that provides shared services to various clients that access the cloud server through a network, such as a local area network and the Internet. In a cloud based system, the server is remote from the clients, and various clients share the resources of the cloud server. Information is passed to the server by the client, and returned back to the client through the network, usually the Internet.
At box 120, the system may check to see if the post has any location information associated with it. Location data may come in many forms, but is not limited to: a GPS tag attached to the data, a latitude and longitude coordinate, a descriptive location field such as a city name, state name or country name, a zipcode, an IP address or similar. At this time a system may normalize the location information being stored along with the textual data. For example, if the user's location information is a string “California” their data may be normalized to a latitude-longitude pair in the geographic center of the state. The system may also include a measure of confidence of the location's accuracy, such as a standard deviation. A standard deviation of 250 miles might be used to indicate the user is likely in a circle of radius 250 miles centered at the latitude-longitude pair.
At box 130, if the post has location information, the user who created the post is added to a seed set along with the location information included in the post. The seed set is stored for later use in the process to predict locations for users with no location information. These data may be stored for later retrieval in any non-transitory computer-readable medium.
At box 140, each post, whether it contained location information or not, is further processed to identify all users being communicated with in the post. Some exemplary methods of communication between users on a social network include, but are not limited to, @mentioning, liking or +1′ing the content, resharing or reposting, replying, commenting, or the lists of friends with whom an original post was shared.
At box 150 the system may build a graph (for example,
At box 160, the system may predict the locations of users in the network based on the graph built at box 150. In one embodiment, predicted locations may be made via a nearest neighbor type approach. One method to accomplish this would take each user from the seed set with a known location and assign their location to each neighbor in the graph that does not have a location. This process may continue out for any number of levels, where at each step you continue to assign location information from a current node to any neighboring node without location information. One may continue this for a fixed number of steps, N, or until the entire graph is covered, or some other suitable criteria are met. There are many possible criteria that will be readily apparent to one of ordinary skill in the art.
In the nearest neighbor approach just described, a solution for assigning a location value to a node that has more than one neighbor with location information is needed. In one embodiment, the value assigned may just be the first one reached in the iterative process and subsequent locations would be ignored. In another embodiment, the node may be assigned the average location value of all neighboring nodes with location data. In yet another embodiment, there may be preference for the level at which the neighbor was assigned a location. For example, if one neighbor has location information from the seed set (level 0) and a second has location data propagated out one level from the seed set, the level 0 location may be taken. In yet another embodiment, a weighted average of location values from different levels could be used, for example level 0 gets a weight of 0.5, level 1's weight is 0.25, level 2 receives a weight of 0.125, and so on.
In another embodiment, locations may be made by some form of diffusion process on the graph using location information from multiple nodes to predict a location. There are many possible models that may be used to predict a single location based on the social graph. In one embodiment, the process may assume that each user has a single unique location that they may be assigned. In another embodiment, the process might assume that the user has two possible locations such as their home or their work. In yet another embodiment, no restriction may be placed on the number of locations that may be assigned to a user. In this case, location assigning may be handled through an unsupervised learning process such as a clustering method. Detailed approaches to these embodiments will be described with reference to
At box 170 the system may store the predicted values. Values may be stored in any non-transitory computer-readable medium.
At box 220, location information may be attached to each individual message. In one embodiment, this information may be provided as a latitude-longitude coordinate in the metadata describing the post. This latitude-longitude may correspond to where the message was created. In another embodiment, information on where a message was created may be provided in the form of a descriptive string, such as a named place. A named place may be, for example, a city name, region and/or country name or a specific address. In yet another embodiment, location information may also be provided as some other code that can be looked up to determine the origin of the message. One specific example of this type of identifier would be a Yahoo WOEID identifier.
At box 230, a location for a user may be assigned from messages with location information attached to them. There are many ways this could be done which will be clear to someone skilled in the art, including using the most recent message, finding the average location, finding a median location, performing a clustering on the locations to identify multiple possible locations, building a probabilistic model of location, and others.
Alternatively, at box 240, a user may have provided account level information about their location. This may be provided as a text level description of where they are located such as “San Francisco” or “Fresno, Calif.”. Text descriptions of a location may map exactly to a known place or may be vague and an inference may need to be made to turn the information into a known location. In a different embodiment, the account level location may be very specific, providing a text description of an exact address or a latitude and longitude coordinate.
At box 250 a user's location may need to be looked up and converted into a latitude-longitude coordinate pair. For example, a location of “San Francisco, Calif. USA” might return “37.774929, −122.419416”. In one embodiment, the lookup process may provide a unique place name. In another embodiment, the place name may not be unique or be incomplete. For example, if the place name provided were “San Francisco, Calif.”, the lookup system would need to determine that this is in the United States. In yet another embodiment only a city name may be provided such as “Santa Monica”. There are multiple cities in the world with this name, so the lookup system would need to determine the most probable location associated with this name. The most probable location may be obtained by popularity, for example, returning the city ranked the highest by an internal popularity ranking. In a different embodiment, the city with the highest population may be chosen. There are many ways to resolve conflicts that will be readily apparent to one skilled in the art.
At box 260 the user locations may be stored for later retrieval in any non-transitory computer-readable medium.
At box 405 an array of latitude-longitude coordinates is created. In one embodiment, the location of a user may be predicted from their post history by building an array of all social media posts from that user over a fixed time period that contain latitude-longitude coordinates. In a different embodiment, the location of a user may be predicted by populating the array with the latitude-longitude coordinates of users with a direct connection to the user in the connectivity graph. In yet another embodiment, the array may be populated with latitude-longitude coordinates from users with a depth of N from the current user in the connectivity graph.
At box 410 a median location M is computed from all location elements in the array. The median may be found by sorting the latitude and longitude coordinate arrays separately and then taking the middle point in the arrays. If the number of elements in the array is even, the two middle points may be averaged.
At box 415 distances between the median computed at 410 are computed for each element in 405. Distances may be computed using standard Euclidean distance or more accurate methods that take into account the shape of the Earth's surface such as a great-circle distance measuring the distance between two points on the surface of a sphere, or the Vicenty distance (a more accurate ellipsoidal distance measurement). Using the great circle distance, distances from the median are calculated as follows:
Let (φM, λM) be the latitude and longitude of the median point and (φ1, λ1) be the latitude and longitude of a location. The distance is then calculated as:
with d being the final computed distance between the two points. From these distances a dispersion measure is computed to measure how widely spread out the data is. In an exemplary embodiment the dispersion may be calculated as the standard deviation of distances from each coordinate to the mean of all the coordinates:
where μ is the mean,
and the xi are the distances from the median computed above. The dispersion measurement provides some confidence as to the accuracy of the resulting prediction. If the dispersion is less than a threshold, D<τ, the median location is stored as the predicted location for the user at box 425.
If the dispersion computed at box 420 is larger than the set threshold, Rmin1, a value that is chosen empirically from the type of data being analyzed, then a histogram of distances (box 415) is constructed at box 430. At box 435 the histogram may be checked for a distinct peak. A distinct peak may be determined by finding the maximum value of the histogram. The height of this bucket in the histogram may then be compared against its immediate neighbors and a relative difference may be calculated. If that relative difference is greater than a threshold, then the histogram bucket may be labeled as a peak. It will be clear to one skilled in the art that there are many ways to identify a peak in a histogram.
If no peak is found at box 435, the prediction process exits at box 440 and no predicted location is assigned to the user. In this case, the data available to predict a location for a social network user is too spread out to be able to make an accurate prediction.
If a distinct peak was identified at box 435, the system may find a median and standard deviation value for points around the current peak. In one embodiment, points around the peak may be found by taking a fixed bucket size around the peak in the histogram and subsequently taking the points in those buckets and using them for further calculation. In another embodiment the width of the peak may be determined by looking at the relative heights of the nearby buckets to the identified peak. All buckets below a fixed threshold may then be chosen for use at box 445. In yet another embodiment, the process may search for an inflection point in a curve fitted to the maximum values of the histogram. All histogram buckets between the points of inflection may then be used at box 445. In yet another embodiment, the histogram may not be used at all and the system may go back to the actual map data and use points within a certain radius of the identified peak. It will be readily apparent to one skilled in the art that there are many approaches that may be used to identify points around the peak.
At box 450 the computed values from box 445 are stored as the predicted location for the user. These data may be stored in any reasonable manner for later retrieval on any non-transitory computer-readable medium. After storing the location, the process repeats the steps from boxes 435 and 445 any number of times. For each user in the social network graph, the system will then store zero (if the dispersion is too high or there are no distinct peaks) up to any specified number of predicted locations per user in the network.
At box 510 the method may label all bins with a count of zero. Then at box 515 the method counts the number of bins with these zero labels. If this number is greater than 5 then a location for the user is not predicted. Recall that at box 420 the data has already been checked for a high dispersion. A high dispersion with many zeros in the histogram indicates that the users' locations are too spread out to get an accurate estimate of location. If the number of zero bins is less than or equal to five, the method may continue to find a predicted location.
At box 525 the method may identify the bin with the largest count. At box 530 the method then looks for nearest bins with count 0 on both sides of the bin with the largest peak. If no zero bins are found, then all bins up to the end of the histogram are used. At box 535, the method takes all bins between the two identified zero bins on either side of the peak (or all the way to the end of the histogram if no zero bin was found on either side). From all the points in these bins, the mean and standard deviation are computed.
At box 540, the method may mark all bins used in the calculation at box 535 as having been used. At box 545 the method may then check to see if there are any non-zero bins left that have not been previously used in a calculation. If there are, then steps from box 525 to 545 may be repeated up to either N times at box 550 or when there are no remaining non-zero bins that have not been previously used to compute a mean and standard deviation around a peak.
At box 555, when there are no further unprocessed non-zero bins, the method may take the set of all means and standard deviations computed at 535 and store them as the N predicted locations for the user in any non-transitory computer-readable medium.
The exemplary method 400 for predicting a social media user's location illustrated in
[53.341786, 53.34179, 53.341775, 53.341779, 53.341794, 53.341783, 53.341787, 53.344091, 53.341779, 53.341778, 53.341788, 53.341787, 53.341782, 53.341774, 53.341783, 53.341778, 53.341775, 53.341533, 53.341776, 53.458302, 53.458248, 53.458277, 53.458288, 53.45829, 53.328739, 53.458307, 53.458295, 53.341777, 53.341777, 53.341795, 53.34178, 53.346791, 53.443511, 53.341762, 53.34167, 53.341671, 53.458286, 53.458236, 53.34179, 53.341788, 53.458234, 53.341783, 53.341787, 53.454153, 53.341805, 53.3418, 53.349326, 53.33497, 53.334776, −42.902384, −42.902392, −37.821301, −37.773873, −37.871089, −37.815733, −37.814108, −37.805435, −37.817765, −37.720199, −37.821982, −37.668413, −37.821953]
[−6.246119, −6.246179, −6.246116, −6.246148, −6.246155, −6.246153, −6.246189, −6.239531, −6.2461400000000005, −6.246126, −6.24617, −6.246136, −6.246116, −6.24615, −6.246149, −6.2461269999999995, −6.2461269999999995, −6.245879, −6.246138, −6.222826, −6.222721, −6.222806, −6.222809, −6.222817, −6.228785, −6.222832, −6.222824, −6.246136, −6.246131, −6.24616, −6.246145, −6.255272, −6.211302, −6.246129, −6.245249, −6.24525, −6.222798, −6.222735, −6.246115, −6.246145, −6.222723, −6.246147, −6.246168, −6.219317, −6.246175, −6.246117, −6.255029, −6.229036, −6.227155, 147.337633, 147.337351, 144.964147, 144.971285, 144.976182, 144.979634, 144.97527, 144.948881, 144.969723, 144.799552, 144.969024, 144.845987, 144.969504]
At box 410 the median of these arrays is computed, which is calculated as: Median longitude −6.245565; Median latitude 53.34178.
At box 415 the distances from the median are computed from each point using the Greater-circle distance function. Distances are given in kilometers.
[3.685750e−02, 4.085332e−02, 3.666000e−02, 3.878135e−02, 3.927261e−02, 3.911365e−02, 4.151103e−02, 4.763583e−01, 3.824966e−02, 3.732003e−02, 4.025042e−02, 3.798903e−02, 3.665409e−02, 3.892144e−02, 3.884781e−02, 3.738649e−02, 3.739097e−02, 3.462760e−02, 3.812015e−02, 1.305856e+01, 1.305340e+01, 1.305595e+01, 1.305714e+01, 1.305730e+01, 1.830810e+00, 1.305907e+01, 1.305780e+01, 3.798577e−02, 3.765348e−02, 3.960892e−02, 3.858148e−02, 8.527908e−01, 1.155068e+01, 3.757751e−02, 2.433876e−02,
2.422506e−02, 1.305701e+01, 1.305196e+01, 3.660117e−02, 3.858919e−02, 1.305183e+01, 3.871489e−02, 4.011551e−02, 1.262993e+01, 4.066304e−02, 3.678123e−02, 1.049310e+00, 1.334842e+00, 1.450987e+00, 1.777573e+04, 1.777572e+04, 1.723841e+04, 1.723495e+04, 1.724321e+04, 1.723887e+04, 1.723848e+04, 1.723620e+04, 1.723845e+04, 1.722033e+04, 1.723875e+04, 1.721884e+04, 1.723878e+04]
The dispersion is computed at box 420 as the standard deviation of these distances from the mean value, R=3633.865.
At box 430, the histogram of the distances is calculated to be: 49 0 0 0 0 0 0 0 13.
Finally, two peaks are identified in the histogram at the first and last bins during the loop at boxes 435 and 445. The median value and standard deviations found by the calculations in method 500 are:
1) The median longitude for points in the 1 peak (first bin) is −6.246126.
2) The median latitude for points in the 1 peak is 53.34179.
3) The standard deviation for points in the 1 peak (km) is 3.307224.
4) The median longitude for points in the 2 peak (last bin) is 144.969700.
5) The median latitude for points in the 2 peak is −37.81777.
6) The standard deviation for points in the 2 peak (km) is 96.589484.
At box 1120 a median location is found for the points in the array 1110. The distances between the median and all points in 1110 are computed at box 1130. The dispersion is computed at box 1130 as the standard deviation from the mean value of the differences in distances.
At box 1140 the dispersion is compared against a threshold. If the dispersion is less than the threshold the location is stored at box 1150 in any non-transitory computer-readable medium as the predicted location for the user. If the dispersion is greater than the threshold, then the array of distances 1130 is sorted at box 1160 in ascending order using any appropriate sorting algorithm such as bubble sort, merge sort, or quicksort. At box 1160 the system may also build an array of differences between the distances.
At box 1170 the system may set a minimum distance Rmin allowed inside the array. A first cluster may be created and the first point in the array may be added to that cluster. For each point in the array, the system may check to see if the distance between the point and the current cluster is less than Rmin. If it is, the point may be added to the current cluster. If it is not, a new cluster may be created and the point may be added to that cluster. The new cluster is then set to being the current cluster.
At box 1180 the median and dispersion may be computed for each cluster. At box 1190 the medians and dispersions of each cluster may be stored in any non-transitory computer-readable medium.
The steps for exemplary method 1100 may be further illustrated with an example. At box 1110, consider the following example arrays of location data:
[53.341786, 53.34179, 53.341775, 53.341779, 53.341794, 53.341783, 53.341787, 53.344091, 53.341779, 53.341778, 53.341788, 53.341787, 53.341782, 53.341774, 53.341783, 53.341778, 53.341775, 53.341533, 53.341776, 53.458302, 53.458248, 53.458277, 53.458288, 53.45829, 53.328739, 53.458307, 53.458295, 53.341777, 53.341777, 53.341795, 53.34178, 53.346791, 53.443511, 53.341762, 53.34167, 53.341671, 53.458286, 53.458236, 53.34179, 53.341788, 53.458234, 53.341783, 53.341787, 53.454153, 53.341805, 53.3418, 53.349326, 53.33497, 53.334776, −42.902384, −42.902392, −37.821301, −37.773873, −37.871089, −37.815733, −37.814108, −37.805435, −37.817765, −37.720199, −37.821982, −37.668413, −37.821953]
[−6.246119, −6.246179, −6.246116, −6.246148, −6.246155, −6.246153, −6.246189, −6.239531, −6.2461400000000005, −6.246126, −6.24617, −6.246136, −6.246116, −6.24615, −6.246149, −6.2461269999999995, −6.2461269999999995, −6.245879, −6.246138, −6.222826, −6.222721, −6.222806, −6.222809, −6.222817, −6.228785, −6.222832, −6.222824, −6.246136, −6.246131, −6.24616, −6.246145, −6.255272, −6.211302, −6.246129, −6.245249, −6.24525, −6.222798, −6.222735, −6.246115, −6.246145, −6.222723, −6.246147, −6.246168, −6.219317, −6.246175, −6.246117, −6.255029, −6.229036, −6.227155, 147.337633, 147.337351, 144.964147, 144.971285, 144.976182, 144.979634, 144.97527, 144.948881, 144.969723, 144.799552, 144.969024, 144.845987, 144.969504]
At box 1120 the median of these arrays is computed yielding: Median longitude −6.245565; Median latitude 53.34178.
The next step in method 1100 is to compute the distances from the median to all points in the array using the great-circle distance measurement as well as the standard deviation from the mean value for the dispersion.
Distances from Median to all Points (Km)
[3.685750e−02, 4.085332e−02, 3.666000e−02, 3.878135e−02, 3.927261e−02, 3.911365e−02, 4.151103e−02, 4.763583e−01, 3.824966e−02, 3.732003e−02, 4.025042e−02, 3.798903e−02, 3.665409e−02, 3.892144e−02, 3.884781e−02, 3.738649e−02, 3.739097e−02, 3.462760e−02, 3.812015e−02, 1.305856e+01, 1.305340e+01, 1.305595e+01, 1.305714e+01, 1.305730e+01, 1.830810e+00, 1.305907e+01, 1.305780e+01, 3.798577e−02, 3.765348e−02, 3.960892e−02, 3.858148e−02, 8.527908e−01, 1.155068e+01, 3.757751e−02, 2.433876e−02,
2.422506e−02, 1.305701e+01, 1.305196e+01, 3.660117e−02, 3.858919e−02, 1.305183e+01, 3.871489e−02, 4.011551e−02, 1.262993e+01, 4.066304e−02, 3.678123e−02, 1.049310e+00, 1.334842e+00, 1.450987e+00, 1.777573e+04, 1.777572e+04, 1.723841e+04, 1.723495e+04, 1.724321e+04, 1.723887e+04, 1.723848e+04, 1.723620e+04, 1.723845e+04, 1.722033e+04, 1.723875e+04, 1.721884e+04, 1.723878e+04]
Next, the differences of distances are sorted at box 1160
Next clusters of the locations are determined, where the values in the lists below are the indices into the longitude and latitude arrays; note that three clusters were found.
{0: {u′indices′: [35, 34, 17, 38, 12, 2, 45, 0, 9, 15, 16, 33, 28, 27, 11, 18, 8, 30, 39, 41, 3, 14, 13, 5, 4, 29, 42, 10, 44, 1, 6, 7, 31, 46, 47, 48, 24, 32, 43, 40, 37, 20, 21, 36, 22, 23, 26, 19, 25]}, 1: {u′indices′: [60, 58, 52, 56, 51, 57, 55, 59, 61, 54, 53]}, 2: {u′indices′: [50, 49]}}
Finally, the mean and standard deviation for each cluster are computed at box 1180.
1) The mean latitude for points in the 1 cluster is 3.341786999999997.
2) The mean longitude for points in the 1 cluster is −6.24612600000000035.
3) The standard deviation for points in the 1 cluster (km) is 3.3044544063996639.
4) The mean latitude for points in the 2 cluster is −37.815733000000002.
5) The mean longitude for points in the 2 cluster is 144.969504.
6) The standard deviation for points in the 2 cluster (km) is 4.9821871851313979.
7) The mean latitude for points in the 3 cluster is −42.902388000000002.
8) The mean longitude for points in the 3 cluster is 147.337492.
9) The standard deviation for points in the 3 cluster (km) is 0.011496565440302454.
At box 1230 the system may record the methods of the interactions between users identified at box 1220. For example, the method of communication between user A and B may be a ‘like’ or ‘share’ on Facebook. On Twitter it may be an @-mention′, a ‘retweet’, or an ‘in-reply’. On other social networks it may be something similar or there may be other unique ways of sharing. Communications on a social network may also be identified as single directional or bi-directional. For example, if user A in-replies to a message from user B, the system may identify this as a bi-directional connection between A and B, or as a 1-way communication from A to B. In one embodiment all connections may be bi-directional. In another embodiment, connections at box 1230 may be 1-way. In yet another embodiment, connections may only be created when 1-way communications are created in both directions. That is, user A sends a message to user B and user B also sends a message to user A. There are many different methods for defining connections based on communication patterns on the network that will be readily apparent to one skilled in the art.
At box 1240, the social connectivity graph is constructed from the users identified at box 1220 and from the communications identified at box 1230. The users may be labeled as nodes in the graph and the communications identified may be added as edges between the nodes. The graph may be stored at box 1250 in any non-transitory computer-readable medium.
In an embodiment, computer system 1400 may include one or more processors 1401, memory 1402, storage 1403, an input/output (I/O) interface 1404, a communication interface 1405, and a bus 1406. Although this disclosure describes and illustrates a particular computer system having a particular number of particular components in one particular arrangement, this disclosure contemplates other forms of computer systems having any suitable number of components in any suitable arrangement.
In one embodiment, processor 1401 includes hardware for executing instructions, such as those produced by software programs. Herein, reference to software may encompass one or more applications, byte code, one or more computer programs, one or more executables, one or more instructions, logic, machine code, one or more scripts, or source code, and vice versa, where appropriate. As an example and not by way of limitation, to execute instructions, processor 1401 may retrieve the instructions from an internal register, an internal cache, memory 1402 or storage 1403; decode and execute them; and then write one or more results to an internal register, an internal cache, memory 1402, or storage 1403. In one embodiment, processor 1401 may include one or more internal caches for data, instructions, or addresses. Memory 1402 may be random access memory (RAM), static RAM, dynamic RAM or any other suitable memory. Storage 1403 may be a hard drive, a floppy disk drive, flash memory, an optical disk, magnetic tape, or any other form of storage device that can store data (including instructions for execution by a processor).
In a typical embodiment, storage 1403 may be mass storage for data or instructions which may include, but is not limited to, a HDD, solid state drive, disk drive, flash memory, optical disc (such as a DVD, CD, Blue ray, and the like), magneto optical disc, magnetic tape, or any other hardware device which stores may store computer readable media, data and/or combinations thereof. Storage 1403 maybe be internal or external to computer system 1400 and may be located remotely from computer system 1400, but in communication with computer system 1400, or accessible by computer system 1400.
In another embodiment, input/output (I/O) interface 1404 includes hardware, software, or both, for providing one or more interfaces for communication between computer system 1400 and one or more I/O devices. Computer system 1400 may have one or more of these I/O devices, where appropriate. As an example but not by way of limitation, an I/O device may include one or more mouses, keyboards, keypads, cameras, microphones, monitors, displays, printers, scanners, speakers, cameras, touch screens, trackball, and the like.
In still another embodiment, a communication interface 1405 includes hardware, software, or both which provides one or more interfaces for communication between one or more computer systems or one or more networks. Communication interface 1405 may include a network interface controller (NIC) or a network adapter for communicating with an Ethernet or other wired-based network or a wireless NIC or wireless adapter for communication with a wireless network, such as a WI-FI network. In one embodiment, bus 1406 includes hardware, software, or both coupling components of a computer system 1400 to each other.
While particular embodiments of the present invention have been described, it is understood that various different modifications within the scope and spirit of the invention are possible. The invention is limited only by the scope of the appended claims.