sql >> データベース >  >> RDS >> Mysql

IPアドレスに基づいて多数の投稿を地理的に特定します。 (880,000行)

    いくつかのIPアドレスを生成し、テムを地理的に特定してプロットします:

    library(iptools)
    library(rgeolocate)
    library(tidyverse)
    

    百万の(あまりにも均一に分散された)ランダムIPv4アドレスを生成します:

    ips <- ip_random(1000000)
    

    そして、それらをジオロケーションします:

    system.time(
      rgeolocate::maxmind(
        ips, "~/Data/GeoLite2-City.mmdb", c("longitude", "latitude")
      ) -> xdf
    )
    ##    user  system elapsed 
    ##   5.016   0.131   5.217 
    

    1mIPv4の場合は5秒。 👍🏼

    均一性があるため、泡はばかげて小さくなります。この例では、泡を少し切り上げます。

    xdf %>% 
      mutate(
        longitude = (longitude %/% 5) * 5,
        latitude = (latitude %/% 5) * 5
      ) %>%  
      count(longitude, latitude) -> pts
    

    そして、それらをプロットします:

    ggplot(pts) +
      geom_point(
        aes(longitude, latitude, size = n), 
        shape=21, fill = "steelblue", color = "white", stroke=0.25
      ) +
      ggalt::coord_proj("+proj=wintri") +
      ggthemes::theme_map() +
      theme(legend.justification = "center") +
      theme(legend.position = "bottom")
    

    あなたは私が「あまりにも均一」という意味を理解することができます。ただし、「実際の」IPv4があるため、gtgである必要があります。

    scale_size_area()の使用を検討してください 、しかし、正直なところ、ジオマップにIPv4をプロットしないことを検討してください。私は生計を立てるためにインターネット規模の調査を行っていますが、正確さの主張にはまだ多くの要望があります。そのため、国レベルの帰属を下回ることはめったにありません(そして、「実際の」データに対して支払いを行います)。




    1. MySQLで日付の平均を作成するにはどうすればよいですか?

    2. phpMyAdminでのインポートと同等のプログラム

    3. MySQLクエリをCSVに変換するPHPコード

    4. MySQLテーブルに重みを追加し、これらに従ってランダムな値を選択するにはどうすればよいですか?